点击“开发者技术前线”,选择“星标????”

在看|星标|留言,  真爱

来自:“技术领导力”

作者介绍:许家滔,微信技术架构部后台总监,专家工程师,多年来伴随QQ邮箱和微信后台成长,历经系统从0到10亿级用户的过程。目前负责微信后台工作,包括消息,资料与关系链,后台基础设施等内容。

本文整理自,许家滔老师在“第十届中国系统架构师大会SACC2018)”的演讲内容整理而成,以下是正文:

01

微信发展主要的技术里程碑

微信在2011年1月21日发布了1.0版本,以即时消息为主;2011年5月上线了语音对讲、查看附近的人;2012年4年发布了里程碑式的朋友圈功能;2013年游戏中心、表情商店、微信支付等。直到现在有了小程序生态。

02

微信后台的系统架构

逻辑上讲,最前面会有一个终端,后面会有一个长链接接入层,在线有几亿的管理连接部分。

底层上,因为数据比较敏感而且数据量比较大,所以我们的存储并没有基于开源来搭建,而是自己开发了一整套存储,这也是迭代比较多的部分。

2011年,用的是第一代存储。早期的微信与QQ不同,它更像是一个邮箱。

后来逐渐完善,包括内部安全、管理等。

目前,最关注的有两个方面:

第一是,高可用。微信作为国民级应用,对高可用有着极高的要求,是不可以有服务暂停的。早期的微信迭代速度很快,几乎每两周一个版本,还包括大量的变更。

第二是,敏捷开发的一些问题。例如Coredump、内存泄露等等。

03

微信后台系统主要面临的挑战

微信的用户规模已达10亿,每天的微信消息达1000+亿,朋友圈每日发表和点赞数达10+亿,每日浏览数达100+亿,开放平台,微信支付等业务活跃度持续增长。

系统方面主要面临4大挑战:

1.海量存储。需要一个能容错、容灾的高可用存储与计算的框架。

2.数据强一致性。保障10亿用户数据不会出现问题。

3.突发洪峰流量。春节、元旦、以及突发热点事件。

4.数据存取压力大。后台数据服务节点,每分钟超过百亿次数据存取服务。

04

微信后台对高可用的定义

在高可用方面,我们先了解相关定义如下图所示:

最下面的2个9,是指一年故障时间不超过3.65天;最上面5个9 ,是指金融应用,一年故障时间不超过5分钟。

微信是一个什么样的应用场景?微信其实有金融应用,也就是大家常用的微信支付。

那么我们希望达到怎样的目标呢?有2大点:

1、机器故障是常态,微信希望提供连续无间断的服务能力

业界数据可用性,通常通过Paxos租约、RAFT等来实现数据复制。机器故障时,系统会进入等待租约过期并重新选主的状态,即会产生30秒级别的服务中断,这对于我们来讲也是不能接收的。

2、相对于传统的基于故障转移的系统设计,我们需要构建一个多主同时服务的系统,系统始终在多个数据中心中运行,数据中心之间自适应地移动负载,透明地处理不同规模的中断。

05

微信系统高可用的关键设计

最初,微信是异步复制,接着是选主同步复制,然后是多主可用。

基于故障切换的系统。包括两个主要的协议,Raft协议和基于租约Paxos Log。来保证数据的一致性,但对服务的可用性有一定影响。

基于多主的系统。是在可用性方面做的最彻底的系统,它是基于非租约Paxos Log,Google MegaStore以及微信PaxosStore。

多主系统有很多的难点,第一, 海量Paxos Log管理,对存储引擎的要求很高。第二,代码假设在一个cas环境中运行。要做到服务随时可用,对cache和热点处理的要求很高。同时它对于追流水/恢复流程有时效性的要求。

目前微信的核心数据存储服务可用性达6个9。整个系统有一个创新的技术点,具体细节我们发表在:

http://www.vldb.org/pvldb/vol10/p1730-lin.pdf

论文相关示例代码开源:github.com/tencent/paxosstore。

早期大家对Paxos算法都是认为很难实现的,近两年逐渐有一些公司开始对这方面有一些分享。上面提到的这个论文是微信PaxosStore的一点创新,贡献出了一些简洁的算法实现流程,大家可以很轻松的去理解和实现。

06

PaxosStore整体架构

PaxosStore整体架构,如下图。中间我们会把PaxosStore共识层和计算层、存储层分离起来,PaxosStore其实是一整套框架,它可以容纳不同的共识算法和存储。

下面是一个存储引擎。微信的存储引擎包括很多种,最早是Bitcask模型,现在广泛使用的是LSM,它可以支持比较多的业务。

最下面是迁移系统、备份系统、路由中心。PaxosStore支持类SQL的filter,format,limit,groupby等能力,单表可以支持亿行记录。下一步,我们可能会根据业务的需求去开展。

07

微信Chubby建设实践

Chubby是Google一个论文提到的系统,微信技术团队延伸了这样一个逻辑,基本上跟它的接口是一样的。

不管是Google Chubby论文提到的代码量,还是zookeeper的实际代码量都很大,但有了PaxosStore之后,根本不需要那么多的代码,所以接下来我们的处理也可能会考虑开源。

后来,我们基于PaxosStore也实现了分布式文件存储。

08

微信分布式文件系统

微信分布式文件系统Namenode 基于PaxosStore,DataNode基于Raft协议。Raft是基于租约机制的完美实现。基于Raft我们可以做到DataNode的强一致写。另外,它支持文件AppendWrite和随机读以及文件回收等功能。

09

微信微服务架构框架

微服务包含了服务定义、服务发现、错误重试、监控容灾、灰度发布等一系列面向服务的高级特性的统一框架。中间有一个配置管理和下发的过程,这一块也是PaxosStore实现的,它可以完全控制代码的安全性。

下面是一个发布的过程,因为微信有很多服务器集群,也有一个资源化系统,有可能一个服务会横跨几千台机器,内部是一套BT协议。

然后,我们有一些监控处理,最后我们会有过载保护保护,在系统里面过载保护是很关键的一块。因为在后台,当一个请求过来的时候,某些节点产生了一个慢延迟和性能差,就会影响整条链路,所以我们会有一个整套的过载保护的实现。

10

协程在微信系统中的应用

大家还记得微信2013年的那一次故障, 我们开始整体优化微信后台的过载保护能力,也促使我们去提升整个微信后台的高并发能力。

协程到底是什么?可以说它是微线程,也可以说它是用户态线程。协程切换流程其实不复杂,它主要任务是把上下文保存起来。上下文只有两个部分,第一部分是内存和寄存器,第二部分是栈的状态。

协程服务,同步编程、异步执行,由于不需要自己设计各种状态保存数据结构,临时状态/变量在一片连续的栈中分配,性能比手写异步通常要高,重要的一点是编写并发任务很方便。

以上介绍了微信后台高可用、数据一致性、微服务、数据存储等实践,如果觉得本文对您有帮助,请点在看、分享朋友圈,感谢您的支持!

在公众号,在后台回复关键字:666,可以获取一份程序员大礼包!

END后台回复“面试” “资料” 领取一份干货,数百整理的大厂技术面试手册等你开发者技术前线 ,汇集技术前线快讯和关注行业趋势,大厂干货,是开发者经历和成长的优秀指南。历史推荐微信支付的跨平台架构到底有多牛?
支付宝 App 架构的原理与实战
网易云音乐的消息队列改造,到底做了啥?京东大规模消息推送平台搭建实践
2020年必学的 10 大算法
爱奇艺的实时数据架构到底有多牛?
好文点个在看吧!

微信10亿日活场景下,微服务架构实践!15页PPT全解相关推荐

  1. 微信架构总监:微信10亿日活场景下,后台系统微服务架构实践 15页ppt全解

    01 微信发展主要的技术里程碑 微信在2011年1月21日发布了1.0版本,以即时消息为主:2011年5月上线了语音对讲.查看附近的人:2012年4年发布了里程碑式的朋友圈功能:2013年游戏中心.表 ...

  2. 快手架构师:3亿日活的快手微服务架构实践!8页ppt分享

    点击"技术领导力"关注∆  每天早上8:30推送 作者| Mr.K   编辑| Emma 来源| 技术领导力(ID:jishulingdaoli) 本文整理了,快手基础平台架构师曹 ...

  3. 微信10亿日活场景下,后台系统微服务架构实践

    01 微信发展主要的技术里程碑 微信在2011年1月21日发布了1.0版本,以即时消息为主:2011年5月上线了语音对讲.查看附近的人:2012年4年发布了里程碑式的朋友圈功能:2013年游戏中心.表 ...

  4. 快手架构师:3亿日活的快手微服务架构实践

    本文整理了,快手基础平台架构师曹福祥.大数据架构团队负责人赵健博,在技术大会上的分享,内容包括:快手微服务架构.大数据存储架构.Kafka技术演进等.从完整的技术架构视角,为你拆解3亿日活的快手App ...

  5. 沙龙报名 | 数据存储与微服务架构实践,6月15日上海

    架构是科学也是艺术,优秀的架构案例往往可以拓宽我们的思路,让问题迎刃而解.本期携程技术沙龙邀请了携程.百度和阿里的优秀工程师带来各自领域最新的架构实践成果,特别集中在数据存储.微服务体系演进和应用监控 ...

  6. 爱奇艺在 Dubbo 生态下的微服务架构实践

    作者 | 周晓军  爱奇艺中间件团队负责人 导读:本文整理自作者于 2020 年云原生微服务大会上的分享<爱奇艺在 Dubbo 生态下的微服务架构实践>,重点介绍了爱奇艺在 Dubbo.S ...

  7. dubbo 自定义路由_爱奇艺在 Dubbo 生态下的微服务架构实践

    作者 | 周晓军 爱奇艺中间件团队负责人 导读:本文整理自作者于 2020 年云原生微服务大会上的分享<爱奇艺在 Dubbo 生态下的微服务架构实践>,重点介绍了爱奇艺在 Dubbo.Se ...

  8. 微服务架构实践心得小结

    微服务架构实践心得小结 来源:彗星计划 简介 微服务架构 微服务架构则是由一组微服务组成的架构模式.每个微服务都是一个可独立部署的完整系统.一组微服务组成微服务层(注意这里的服务层不同于monolit ...

  9. 微服务架构技术调研<3>--微服务架构实践

    引言: 由于公司商业上有实打实的需求和场景,倒逼产品开始思考架构升级,以适应这种商业环境的快速变化.架构师在进行技术选型或者架构升级前,需要做大量技术调研.竞品分析,<微服务架构综述>则是 ...

最新文章

  1. BZOJ2741 【FOTILE模拟赛】L
  2. python hashlib模块
  3. zend studio 9.0汉化
  4. 由浅入深理解Java线程池及线程池的如何使用
  5. AndroidStudio中提示:Couldn‘t find meta-data for provider with authority
  6. [原]全桥移相(PSFB)原边电流突跌分析
  7. OpenFOAM安装+ParaView安装+环境配置(deb直接安装详细记录-Ubuntu14.04+OpenFOAM4.1)
  8. php slaveokay 设置,PHP: MongoCursor::slaveOkay - Manual
  9. c语言网络定向拉取数据,用C模拟了一个http请求,但是recv函数接收的数据不完整且欠安顺序获取信息...
  10. 小马儿随笔(七)——综合布线的安装时代
  11. Nginx集群之基于Redis的WebApi身份验证
  12. 百度人脸识别:功能开通
  13. 三维点云数据处理软件供技术原理说明_三维点云处理软件需求说明
  14. cdr添加节点快捷键_常用CDR快捷键
  15. 云知声 Atlas 超算平台:基于 Fluid + Alluxio 的计算加速实践
  16. 编程狂人|后台服务架构高性能设计之道
  17. js-简易幻灯片制作
  18. 那些酷炫的网页你也可以做到——第六篇(表单标签)
  19. 利用RNAi研究马铃薯基因功能——StRIK与外表皮应激反应
  20. 一个女孩跳楼看到的(漫画)

热门文章

  1. 如果客户端不发送数据,什么时候才会断开处于 ESTABLISHED 状态的连接?(TCP保活机制和心跳包)
  2. 两/2键2通道触摸触控芯片VKD232C,适用电池供电类,高灵敏度,稳定性好,小体积封装
  3. 学习ChatGPT必看 | CSDN精选教程助你轻松掌握神秘黑科技
  4. Levenberg-Marquardt方法
  5. 互联网竞争,本质是渠道之争(从360、小米手机到淘宝...)
  6. 有趣的 linux命令行
  7. 10款手机网页模板_手机wap网站模板_html5手机网站模板源码下载(一)
  8. ERROR: Could not install packages due to an OSError: [Errno 28] No space left on device
  9. inline内联函数(声明前加inline还是定义前加inline)
  10. 【数据库SQL】分区的新建与删除