01 April 2013

微博开源计划(WOSP)

微博工程师法则(Laws of Engineer in Weibo):
    1. 工程师必须牛逼
    2. 除非抵触法则1,否则不能吹牛逼
    3. 除非抵触法则1和2,否则开源才牛逼

由于内部群众对开源社区的狂热,微博开源计划即将闪亮登场。整个计划其实来自于更早的内部开源运动。因为微博在短时间内的快速成长,技术挑战的难度和数量也成几何级数增加。随之而来的却是在新成员培养、团队协作等系列问题,整个团队在相当长的一段时间内压力巨大。

整个团队并没有因此妥协,痛定思痛之时,大家一致决定要彻底改造整个技术架构,全面拥抱开源社区。通过从下至上开始将整体架构进行组件化,把所有能够抽象化的组件均剥离出来,在增加整体服务的灵活性基础上,将所有业务无关的技术贡献给开源社区。然后通过整合社区的力量,提高整体服务的质量。

这个积极推动整个微博的开源的行动,被称为微博开源行动(WOSM),2012也因此被称为开源元年。从2013年开始,整个团队在此方面的辛勤努力将会有集中的展现。下面陆续介绍的近期可能开源的几个方向:

算法Algorithm

  1. 阻尼哈希DH(Damped Hash)

    也称历史哈希H2(Historical Hash)是改进版的一致性哈希算法。在传统一致性哈希的基础上,增加了一个阻尼系数,使得整个Hash在分布动态伸缩时速度放慢。一个典型的场景是集群扩展。当整个集群增加节点后,原来节点的数量由N变为N+1,在切换瞬间会有1/(N+1)的请求受到影响。这在极热访问的情况下会因为缓存命中率的突然下降给服务带来稳定性风险。阻尼哈希可以将这个切换速度放慢。在阻尼系数为1000的时候,意味着每秒钟将只会有千分之一的请求由原有服务迁移到新服务。

协议Protocol

  1. 队列同步QSync

    微博已经在移动互联网方面进行了很多研究和尝试,WeSync协议是其中一个重要的体现。虽然WeSync定义了很多交互细节,但其在本质上是一个数据同步协议,可以保证数据在不稳定的移动网络进行高效快速的同步。由于不稳定的慢速宽带网络与IDC间链路在很多方面有着相似的性质(都有长肥管道效应Long Fat Pipe),因此整个协议也有多IDC数据同步方面设计。详见说明。

组件Component

  1. 同步库 QSync

    详见QSync协议,此为协议的指导实现
    内部代号Quantum,取量子纠缠之意,通过协议连接的两端就像纠缠在量子态的两个量子一样,一端可以快速准确地反映另一端的变化。
    此工程包含不同级别的客户端服务器实现。

  2. 持久化队列 QueueFamily

    内部代号Ejector,持久化队列主要用来分离前端请求,并保证请求可靠地传说给后端服务。 JVM内部的持久化队列,包括基于MySQL的MQueue,基于Redis的RQueue,基于本地文件存储的PQueue,以及支持同Key更新的FreshQueue等。

  3. 数据流算法库 StreamBed

    内部代号Confucius,子在川上曰,逝者如斯夫。像孔夫子一样视数据为流水,抓住本质,找寻真理。 实时分析微博数据,统计峰值,发现热点。包括TopN、Cardinality等算法。

  4. 移动终端SDK WeSDK

    内部代号Castalia,与网关一起为用户提供神泉一样妙不可言的开发体验。 代理微博的所有接口调用,转换成本地调用,为平台战略中服务初创开发者的重要举措。 支持多语言,当前有Java和Objective-C版本。

  5. 试金石 TouchStone

    分布式服务性能调试工具 内部代号Schrodinger。认为所有的性能问题都像薛定谔的猫一样难以判断,你不知道它们在不在,但你可以用一些办法,如果它们还在的话会自己跑出来。 使用黑盒方法对整体分布式系统进行测试,通过压测不同的接口,统计不同节点的数据交互特征(包大小、频率以及时间关系),达到对整体服务质量进行监控的目的。

  6. 统一推送 AnyPush

    为所有用户提供在任何场景下的数据推送服务 内部代号Postman 作为Castalia服务的通道实现组件,业务无关的纯数据通道,基于Erlang开发,轻松支撑百万连接。

存储服务Storage

  1. 用户历史存储 Past

    为了实现时间旅行模式,存储进行了积极的优化,使用了上千台机器的HBase集群,用来存储用户的所有操作记录。

  2. 视而不见存储 Fog

    通过数据混淆以及转换工具,生成专供挖掘的特殊快照,保护用户隐私。(完善中)

整个开源计划还在整理之中,详情关注 @开源梦想 @微博平台架构

  1. Damped Hash
  2. QSync Specification
  3. QSync Lib
  4. QueueFamily
  5. StreamBed
  6. WeSDK
  7. TouchStone
  8. AnyPush
  9. WeiboFutureFeature


blog comments powered by Disqus