• Hadoop的RPC设计分析

    本文出自:【InTheWorld的博客】 (欢迎留言、交流)

    之前鼓捣Hbase的时候,觉得单机和伪分布式模式太low了,就在笔记本上用三个虚拟机搭建了一个“完全分布式”的Hbase环境(心疼破本子一秒钟)。刚好趁这个元旦假期,我就研究了一下Hadoop。

    Hadoop也算是个巨无霸了,涉及了很多方面的功能。个人工作中有多个RPC client管理以及交互的场景,一直觉得设计的不太好。所以心里一直想研究一下优秀项目的多路RPC是如何实现的,然后计划一直搁置到现在。难得小假期,就拿手上的Hadoop开刀吧!

    1. 宏观背景

    hadoop-hdfs-architecture

    Hadoop的RPC确实挺复杂的,就单单以HDFS为例,client与NameNode, client与DataNode, NameNode与DataNode以及DataNode与其他DataNode。如果要提到Hadoop map/reduce,那么事情就更不简单了。虽然Hadoop的RPC如此复杂,但是这些RPC都是基于同一个RPC框架,这个RPC框【查看更多】

  • Raft算法实现之状态存储——基于etcd

    本文出自:【InTheWorld的博客】 (欢迎留言、交流)

    Paxos算法也许是最著名的分布式一致性算法,而Raft则大概是最流行的分布式一致性算法。由于经验和水平所限,单纯看论文感觉并不能达到更进一步的理解。前面听闻Kubernetes, Docker Swarm,  CockroachDB等等牛逼的项目都在用Raft。毕竟是经过大规模生产环境考验的技术,我觉得很有必要学习一下。而且etcd的Raft实现是开源的,毕竟“源码之前,了无秘密”。

    image

    无论是Paxos还是Raft,它们都是致力于维护一个RSM(Replicated State Machine),如上图所示。对于RSM来说,状态存储是非常关键的。在这篇博客里,我准备基于etcd的实现分析一下Raft的状态存储。Raft状态的存储主要靠Snapshot和WAL(write ahead log)实现。

    • 和很多数据库一样,为了保证数据的安全性(crash或者宕机下的恢复)
    【查看更多】
  • word2vec学习笔记——CS224n

    CS224n是斯坦福大学的一门关于自然语言处理的公开课。课程的第二讲的主要内容就是word2vec。word2vec是Google在2013年发布的一门自然语言处理技术。

    词向量一般有两种形式,一种叫做One-hot表示,另外一种叫做Distributed Representation。word2vec就属于第二类。word2vec这种词向量表示方法,可以通过计算欧式距离等来判断它们之间的相似度。word2vec本质上属于一种神经网络语言模型范畴的技术,这一点和n-gram、决策树等等这些统计语言模型还是有不少区别的。

    1. Log-Linear模型

    Log-linear模型算是word2vec的一大基础了。虽然我现在也没深刻理解Log-linear的科学性论证,但是如果接受它这个模型,去理解word2vec,还是相对比较直观的。模型的具体内容如下:

    1. 一个输入集合X;
    2. 一个
    【查看更多】
  • 图片加载库Glide的“经验型”用法

    本文出自:【InTheWorld的博客】 (欢迎留言、交流)

    Glide算是Android开发中比较常见的一个开源库了,它使用起来非常简单。说实话,图片加载我基本只用了Glide,因为我的许多看似复杂的需求,在Glide的框架下都能比较轻松的实现。因此,我根本没有心思去趟其他的坑,而且在实现的过程中也发现,Glide的设计是非常棒的,简单的API、很强的扩展性都让我非常满意。

    写这篇blog的出发点不是Glide的基本教学,而是总结本人的经验性用法。因此,本文的逻辑和结构都会比较松散,还望看官海涵。

    1. 自定义ModelLoader

    在有些情况下,我们需要自定义ModelLoader,即模型加载器。这个ModelLoader的输入是图片资源的标识,输出则是一个InputStream。Glide则可【查看更多】