如今微信已经成为很多人生活中不可缺少的一部分,无论是在社交、商业推广还是支付领域,微信都有着杰出的表现。自2011年诞生以来,截止到2015年第一季度,微信已经覆盖中国90%以上的智能手机,月活跃用户达到5.49亿,用户覆盖200多个国家、超过20种语言,使用微信支付的用户已经达到4亿左右。微信提供公众平台、朋友圈、消息推送等功能,用户可以通过“摇一摇”、“搜索号码”、“附近的人”、扫二维码方式添加好友和关注公众平台,同时微信将内容分享给好友以及将用户看到的精彩内容分享到微信朋友圈。无论是在火车上、公交车上,还是在餐厅、社区,使用微信的人随处可见,而且微信支付已经越来越成为一种新的消费时尚,微信公众号也越来越多的成为很多商家推广企业文化和各种促销活动的重要途径。
本文将从微信的系统架构、通信泛型、存储一致性、容灾机制等四个方面来分析微信这种分布式系统的特征。
1微信的系统架构
1.1系统架构
微信有着数亿的客户群体,是亚洲地区最大用户群体的移动即时通讯软件,服务业务丰富,每天有海量的数据通信和存储,单是漂流瓶一项服务的文本存储量就有几百G,面对如此强大的功能需求,系统架构的设计也需要满足一些要求。
高性能。对成本的控制是支持移动互联网公司能否存活的问题之一。移动互联网的客户源虽然很高,但是微信不像淘宝,每天有上亿的人在使用微信通讯,跟每天有上亿的人在淘宝购物时不一样的,微信的商业转换率比淘宝要低,所以成本控制更为重要。另一方面,在没有积累到一定的客户数量和客户粘度之前,客户对于服务公司的选择成本很低,用户可以在很短的时间内完成软件的切换和服务公司的选择,可能只需要注册一个账户即可。如果服务质量出现问题,有可能在非常短的时间内造成客户流失。所以服务质量和成本控制是非常重要的。
高稳定性。不难看出,微信是一个海量系统,千万级用户同时在线,一个单独的功能上每天有百亿级的访问,同时还要保证将近百分之百可靠性和稳定性。在海量系统上应对项目开发会有很严谨的规范,都说要尽可能少的变化,因为90%-95%的错误都是在变更中产生的,如果系统一直不变更会获得非常高的稳定度,但是面对很多应用需求的升级和扩展,系统不可能一直不变。
微信的系统架构如图1所示。应用层提供各种服务业务,由接入集群接入服务器集群,中间有一个状态同步集群用于同步不同的服务集群和接入集群,使它们能够达到一致性的存储要求。另外还有诸如存储集群用来存储用户信息和应用信息,业务监控和业务统计等辅助功能模块。这种设计可以在保证服务质量的同时控制成本。
图1 系统架构
1.2腾讯分布式数据仓库
TWD(Tencent Distributed Data Warehouse,腾讯分布式数据仓库)是腾讯专用的分布式数据平台,其特点相对于其他企业级数据存储服务器的特点是成本低、性能高。企业级存储服务器对硬件要求很高,数据的存储和备份都在硬件基础上完成,并且需要昂贵的软件授权。而TWD则可以降低存储成本,构造廉价的分布式数据仓库。TWD是基于开源软件Hadoop和Hive进行构建,打破了传统数据仓库不能线性扩展、可控性差的局限,并且根据腾讯数据量大、计算复杂等特定情况进行了大量优化和改造。
TWD在公司中的作用主要有:
提供海量的离线计算和存储服务。TDW服务覆盖了腾讯绝大部分业务产品,单集群规模达到4400台,CPU总核数达到10万左右,存储容量达到100PB;每日作业数100多万,每日计算量4PB,作业并发数2000左右;实际存储数据量80PB,文件数和块数达到6亿多;存储利用率83%左右,CPU利用率85%左右。TDW是腾讯内部规模最大的离线数据处理平台,公司内大多数业务的产品报表、运营分析、数据挖掘等的存储和计算都是在TDW中进行。这是TDW提供的最基础的服务。
数据集中于共享功能。腾讯产品线较长,数据丰富,为了挖掘数据价值,经常需要访问多个产品的数据。TDW是腾讯公司级的数据仓库,这里集中了大多数业务的数据,业务在这里可以方便的进行数据共享和管理。
TDW为其他大数据服提供基础和平台。这有两个含义,首先是TDW对腾讯内部开放各种API接口,很多业务的数应用、数据处理平台可以基于TDW之上,由TDW提供最基础的存储于计算,业务在TDW之上定制个性化的数据产品。其次,TDW内存放了腾讯大量有价值的数据,对于这些数据,各个业务有可能有一些不同的需求,这些需求可以抽象出一些固定的数据服务,如海量数据点查询、快速多维分析、流式计算等,这些服务是TDW衍生出来的精细化的服务
TDW的功能模块主要包括:HDFS、MapReduce、Hive、TDBank、Lhotse等。TDWCore主要包括存储引擎HDFS、计算引擎MapReduce、查询引擎Hive,分别提供底层的存储、计算、查询服务,并且根据公司业务产品的应用情况进行了很多深度订制。TDBank负责数据采集,旨在统一数据接入入口,提供多样的数据接入方式。Lhotse任务调度系统是整个数据仓库的总管,提供一站式任务调度与管理。
随着业务的快速增长,TDW的节点数也在增加,对单个大规模Hadoop集群的需求也越来越强烈。TDW需