数据架构高可用-腾讯微信学习笔记

1.大系统小做
仅仅把模块变得更为清晰,这在海量系统设计开发中是不够的,还需要再物理环境上进行分离部署,出现问题的时候可以快速发现,并且在最快的情况下解决掉。(在盛华这边,我们的后台进程根据功能分为几个,wsafe,wyw,wcx等)。每个进程负责不同的功能,这样在出现问题的时候根据出现的错误就能定位到我们的进程中,从而解决问题。但由于在这边业务不是很大,所以所有的进程都运行在同一台机器上,但是当我们的业务很大的时候可以把各个进程分离出来运行在独立的机器上,有更好的容错性。
将不同的应用逻辑物理分割独立出来,把关键的逻辑混搭在一起,用户注册登录、LBS逻辑、摇一摇逻辑、漂
流瓶逻辑、消息逻辑独立开来。当所有的逻辑部署在同一个服务器上,确实也会带来很大敏捷上的好处,因为不需要额外的考虑部署和监控的问题。在整个微信的逻辑中,可能现在已经有上百种不同的逻辑,因为会在逻辑的分割上拆分成8-10种做分离部署。

2.一切可扩展--网络协议可扩展,数据存储可扩展
扩展的关键点有两块。一个是网络协议需要扩展,当要升级一个新功能的时候,会有一些比较大的困难,所以所有协议设计都比较向前兼容,但是向前兼容还 是不够的,因为网络协议设计本身有非常多的功能也会有比较大的字段,相关的代码可能会有数千行,这一块不能通过手写方式完成。可以通过XML描述,再通过 工具自动生成所有的代码,这是微信获得快速开发的一个重要的点。
另外一块就是在数据存储方面是必须可扩展的。在2005年绝大多数海量系统的设计都是采用固定字段的存储,但是在现代系统中会意识到这个问题,会采用KV或者TLV的方式,微信也做了不同的设计。

3.把复杂逻辑都固化下来,成为基础软件。
在微信后台会有几种不同的基础组件。
大致包括:
• Svrkit——Client/Server自动代码生成框架:10分钟搭建内部服务器
• LogicServer——逻辑容器:随时添加新逻辑
• OssAgent——监控/统计框架:所见即所得的监控报表
• 存储组件——屏蔽容灾/扩容等复杂问题
在盛华这边基本的功能都固化下来,只要再需要的时候调用接口库就可以了。

4.灰度、灰度、再灰度
在变更后的部署方式上,微信在一些规则会限定不能一次把所有的逻辑变更上去,每一次变更一小点观察到每一个环节没有问题的时候,才能布局到全网上去。微信后台每一天可以支撑超过20个后台变更,在业界来说,通常做到5个已经是比较快了,但是微信可以做到快4倍。
而所谓灰度发布,是指在黑与白之间,能够平滑过渡的一种发布方式。AB test就是一种灰度发布方式,让一部用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面 来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。(在腾讯,灰度发布是最常采用的发布方式之一)

posted on 2013-12-10 15:28  钢少  阅读(878)  评论(0编辑  收藏  举报