转:  http://www.infoq.com/cn/articles/weibo-multi-idc-architecture

在国内网络环境下,单机房的可靠性无法满足大型互联网服务的要求,如机房掉电,光缆被挖的情况也发生过。微信就曾发生大面积故障,包括微信信息无法发出、无法刷新朋友圈、无法连接微信网页版,或接收到的图片无法打开等。同时,微信公众平台也出现了503报错,范围影响北京、上海、广东、浙江等近20个省市。故障的原因,微信团队指出是由于“市政道路施工导致通信光缆被挖断,影响了微信服务器的正常连接”。单机房除了单点风险之外,另外一个问题是不适应复杂的网络环境,下图是调研国外各地区用户访问微博的延迟情况,可以看到南方海外用户的访问延迟比较大。

为了解决上述问题,微博在2010年启动了多机房部署的架构升级。微博不同于静态内容,静态内容CDN基本上大的互联网公司都会做,已经非常成熟。动态内容CDN是业内的难点,国内很少有公司能够做到非常成熟的多机房动态内容发布的成熟方案。同时根据微博业务特点,又要求多机房方案能够支持海量规模、可扩展、高性能、低延迟、高可用,所以面临很多技术挑战。 微博的多机房架构V1版本,解决了海量动态数据的CDN同步问题。一般业界的数据同步架构可以归纳为三种:Master-Slave,Multi-Master,Paxos。考虑到微博的特点是海量数据,低延迟,弱一致性,所以Paxos并不适合微博,而Multi-Master在当时并没有成熟的产品,所以微博开始采用的是Master-Slave方案,如下图:

由于Memcached服务端是无状态的,分布式是在客户端实现,所以需要解决两个机房Memcached数据同步的问题。微博研发了MytriggerQ,通过解析Mysql的binlog,还原更新操作实现Memcached数据同步。

数据库方面Mysql自身的Master-Slave同步实现是比较成熟的。但是在微博的海量数据情况下,广州两从的结构就导致同步的数据量翻倍,导致带宽被大量占用。针对这个问题微博是通过Relay的方式来解决,即北京到广州仅需要同步一份数据,到广州后再由Relay服务器同步两份数据给从库。由于Relay服务器可以代理多个从库,所以在基本没有增加资源的情况下,我们把同步带宽降低了一倍。 而Redis的同步实现就不太成熟了,由于不支持断点续传,一旦网络抖动导致主从不一致后,导致大量的带宽被占用,甚至出现过专线100%被占用的情况,严重影响正常的机房间通信,同步恢复时间需要几个小时甚至几天。所以微博对Redis的同步机制进行了改造,利用AOF特性支持断点续传。改造后即使在专线中断的情况下,同步也可以在几秒钟内恢复正常。 V1版本实现了微博多机房从无到有,V2版本重点解决了多机房的可靠性和可扩展性。V2版本实现了Master-Master架构,通过消息总线同步用户操作行为,而不再依赖底层存储系统的同步,每个机房都独立完成读写操作。

相关厂商内容

想要快速学习Amazon EMR最佳实践,赶快报名InfoQ在线课堂

ArchSummit 晚场活动对外招募,邀您和架构师畅聊技术

如何快速搭建一个完整的移动端直播系统

你离成为一位合格的技术领导者还有多远?

证券行业的Docker应用实践

相关赞助商

GMTC全球移动技术大会2016年6月24日-25日,北京,点击了解详情!

面对微博海量实时数据,业界通用的消息总线产品无法满足性能要求,所以我们自己基于MemcacheQ实现了一套消息总线WMB,它与普通消息总线产品最大的差别是采用一写一读的方式实现消息同步。这种方式最大的好处是消除了并发锁消耗,单机性能可以发挥到极致,而吞吐量可以通过增加机器线性扩容。目前这套消息总线同步性能单机极限达到每秒10万消息同步性能。

可靠性方面,由于各机房仅通过消息总线进行同步,不依赖任何底层资源,所以各个机房都可以独立对外提供服务,任何一个机房出现问题都可以实现流量快速切换。可扩展性方面,增加一个机房仅需线性扩展消息总线即可完成,机房的部署结构与数据同步对业务完全透明。微博多机房已经实现从北京、广州两个机房的结构升级到广州亚太、北京电信、北京联通三个核心机房的部署结构。

Master-Master架构非常依赖消息总线的一致性,而在网络延迟比较验证的多机房环境下,MemcacheQ存在消息丢失的隐患,即而服务端完成消息读取,但在传输过程中超时,客户端无法再次获取这条消息。为了解决这个问题,我们在WMB的升级版WeiBus消息总线中实现了消息同步序号的功能,支持客户端在超时情况下,可重复获取消息。

但是随着微博业务的蓬勃发展,业务依赖关系越来越复杂,多机房部署成本压力越来越大,而且运维成本也不断攀升,下图是一个产品的服务依赖关系图。微博多机房V3版本实现了业务灵活多机房部署架构,支持业务自定义机房部署个数,及部署区域。

业务定制部署需要解决业务路由问题。在当前全国的网络环境下,南北网络专线延迟一般在30到40毫秒之间,而机房内延迟一般小于1ms。业务路由需要支持尽可能路由到调用本地机房调用,对需要跨机房调用的请求进行打包以便减少网络延迟的影响。微博根据自身业务特点,实现了业务路由服务,支持将多个业务请求进行打包,将多个请求打包成一个请求,自动识别本地业务部署,把需要跨机房调用的请求一次性请求到对应机房,并将返回的结果打包后一并返回。并且支持自动识别业务部署结构变更,并对非核心业务异常自动隔离。

随着移动互联网的迅猛发展,3个机房的部署结构不能完全解决用户访问速度问题,一种解决方案是让机房更加靠近用户。但是社交网络由于数据的网状访问,较难选择合适的切分维度,目前微博核心业务仍需要各机房同步全量数据,部署更多机房的成本压力比较大。QZone的SET化和Tumblr的Cell化在解决社交网络拆分维度方面都值得参考,微博也在进行Cell化方面的尝试,相关信息也会在 @微博平台架构 微博帐号上与社区进行交流,希望感兴趣的同学积极与我们互动。 微博只是多机房之路上迈出了一小步,仍有很多难题有待攻克。希望对多机房系统,对微博的架构感兴趣的同学加入到我们微博的团队,共同打造一流的分布式系统。

感谢刘宇对本文的审校。

转载于:https://www.cnblogs.com/jhj117/p/5610701.html

转: 微博的多机房部署的实践(from infoq)相关推荐

  1. 微博“异地多活”部署经验谈

    http://www.infoq.com/cn/articles/weibo-multi-datacenter-deployments 正文 异地多活的好处阿里巴巴的同学已经充分阐述,微博的初始出发点 ...

  2. 微博机器学习平台云上最佳实践

    简介: 本文讲述了微博机器学习平台和深度学习平台的业务功能和云上实践,剖析了阿里云大数据在微博这两大学习平台的架构建设上所起到的作用. 作者:新浪微博数据计算平台系统架构师 曹富强 本文讲述了微博机器 ...

  3. SAP(HANA+S/4)上云基础环境部署最佳实践

    简介:为提高客户服务水平及集团管理效率,客户选择了SAP解决方案.但是同时也对客户的IT基础设施提出了更多的要求.对此我们针对SAP上云基础设施选型.云原生产品.灾备方案设计,云上安全环境设计总结出了 ...

  4. 机房部署环境和划分多vlan的好处

    机房部署 1.防静电地板安装 2.电源箱安装 3.机柜固定安装以及网线进机柜 4.UPS安装 5.空调安装 6.防盗门安装 划分多VLAN的好处  第一:防止arp病毒 第二:由于某些特殊部门不能互访 ...

  5. 微博多尺度序列推荐算法实践

    今天给大家分享新浪微博机器学习算法专家谌贻荣博士在2021年全球机器学习ji s户大会上所做的分享<微博多尺度序列推荐算法实践.pdf>,关注推荐算法及其实践的伙伴们别错过啦!(到省时查报 ...

  6. 【实践】微博多尺度序列推荐算法实践.pdf(附下载链接)

    今天给大家分享新浪微博机器学习算法专家谌贻荣博士在2021年全球机器学习ji s户大会上所做的分享<微博多尺度序列推荐算法实践.pdf>,关注推荐算法及其实践的伙伴们别错过啦!(到#小程序 ...

  7. 【推荐实践】微博多尺度序列推荐算法实践.pdf(附下载链接)

    今天给大家分享新浪微博机器学习算法专家谌贻荣博士在2021年全球机器学习ji s户大会上所做的分享<微博多尺度序列推荐算法实践.pdf>,关注推荐算法及其实践的伙伴们别错过啦!(到#小程序 ...

  8. 运用京东云代码托管、云编译、云部署等产品进行蓝绿部署简单实践

    干货 | 运用京东云代码托管.云编译.云部署等产品进行蓝绿部署简单实践 前几天我们以一种较为传统的方式在京东云上简单实践了基于Jenkins+Docker+Git 的CI流程,主要利用一些开源技术来实 ...

  9. Mendix基于腾讯云部署最佳实践

    本实践由腾讯云与西门子数字化工业软件授权发布,未经允许不得转载. 1.  概述 本文档介绍了西门子企业级应用开发平台Mendix应用快速托管到腾讯云容器服务(简称TKE)的最佳实践.该方案仅用于非生产 ...

最新文章

  1. 心得丨在开始第一个机器学习项目之前就了解的那些事儿
  2. python小括号报错_Python学习记录:括号配对检测问题
  3. 网站优化之尽量避免重定向(301/302)
  4. 视频 + PPT | 用户中台建设实践解析
  5. 各种好用的代码生成器
  6. python2默认编码_解决Python2.x编码之殇
  7. 用VB.NET(Visual Basic 2010)封装EXCEL VBA为DLL_COM组件(二)
  8. 设置网页文字禁止复制
  9. Leetcode——两数之和
  10. YYYY-mm-dd HH:MM:SS 备忘录
  11. [译] 在浏览器里使用 TenserFlow.js 实时估计人体姿态
  12. windows上jupyter notebook主题背景、字体及扩展插件配置(集成vim环境)
  13. android 上位机下位机串口通讯,上位机下位机串口通信.doc
  14. 【20220627】【信号处理】自相关函数的定义、计算方法及应用
  15. Spring Boot Configuration Annotation Processor not configured
  16. 计算机专业如何改革创新的生力军,年轻干部如何真正成为改革创新的生力军?...
  17. 很短,很文艺,很唯美的英语美句
  18. IP地址及其分类(A、B、C类)
  19. 室内定位方案部署WIFI定位还是IBeacon定位-新导智能
  20. HDU 3713 Double Maze

热门文章

  1. python合并csv文件_Python学习——pandas 合并csv文件
  2. 计算机网络的拓扑模型,基于复杂网络模型的计算机网络拓扑结构研究
  3. nginx配置vue项目500_一个Nginx部署多个vue前端项目总结
  4. C语言函数返回1和返回0究竟哪个好?
  5. centos 虚拟机glibc升级_分享Centos6.5升级glibc过程
  6. adb 切换默认桌面_公告 | 武林外传手游官方服务器全面开放桌面版体验
  7. java.lang 源码剖析_java.lang.Void类源码解析
  8. 多节锂电串联保护板ic_如何有效保护锂电池板,一款优质的MOS管就能解决
  9. 工业以太网交换机的软件故障
  10. 【渝粤教育】国家开放大学2018年春季 0176-22T电机学(一) 参考试题