知名青少年白癜风研究专家 https://m-mip.39.net/news/mipso_5941620.html沈阳白癜风医院 http://pf.39.net/bdfyy/bdfzd/170126/5212240.html微博其实和淘宝是很类似的。一般来说,第一代架构,基本上能支撑到用户到百万级别,到第二代架构基本能支撑到千万级别都没什么问题,当业务规模到亿级别时,需要第三代的架构。
序言
新浪微博在年3月公布的月活跃用户(MAU)已经达到1.43亿,年新年第一分钟发送的微博达条,如此巨大的用户规模和业务量,需要高可用(HA)、高并发访问、低延时的强大后台系统支撑。
微博平台第一代架构为LAMP架构,数据库使用的MyIsam,后台用的PHP,缓存为Mmcach。
随着应用规模的增长,衍生出的第二代架构对业务功能模块化、服务化、组件化,后台系统从php替换为Java,逐渐形成面向服务的SOA架构,在很长一段时间支撑微博平台业务发展。
在此基础上又经过长时间的重构、线上运行、思索与沉淀,平台形成了第三代架构体系。
我们先看一张微博的核心业务图(如下),是不是非常复杂,但这已经是一个简化的不能再简化的业务图啦,第三代技术体系就是为了保障在微博核心业务上快速、高效、可靠的发布新产品新功能。
第三代技术体系
微博平台的第三代技术体系,使用正交分解法建立模型,在水平方向,采用典型的三级分层模型,即接口层、服务层与资源层,在垂直方向,进一步细分为业务架构、技术架构、监控平台与服务治理平台,接着看一下平台的整体架构图。
如上图所示,正交分解法将整个图分解为3*4=12个区域,每一个区域代表一个水平维度与一个垂直维度的交点,相应的定义这个区域的核心功能点,比如区域5主要完成服务层的技术架构,下面详细介绍水平方向与垂直方向的设计原则,尤其重点介绍4、5、6中的技术组件及其在整个架构体系中的作用。
水平分层
水平维度的划分,在大中型互联网后台业务系统的设计中非常基础,在平台的每一代技术体系中都有体现,这里还是简单介绍一下,为后续垂直维度的延伸讲解做铺垫:
接口层主要实现与Wb页面、移动客户端的接口交互,定义统一的接口规范,平台最核心的三个接口服务分别是内容(Fd)服务、用户关系服务以及通讯服务(单发私信、群发、群聊)。
服务层主要把核心业务模块化、服务化,这里又分为两类服务,一类为原子服务,定义是不依赖任何其他服务的服务模块,比如常用的短链服务、发号器服务都属于这一类,图中使用泳道隔离,表示它们的独立性,另外一类为组合服务,通过各种原子服务和业务逻辑的组合,完成的Composit服务,比如Fd服务、通讯服务除了本身的业务逻辑,还依赖于短链、用户、以及发号器服务。
资源层主要数据模型的存,包含通用的缓存资源Rdis和MC,以及持久化数据库存储MySQL、HBas,或者分布式文件系统TFS以及SinaS3服务。
水平分层有一个特点,依赖关系都是从上往下,上层的服务依赖下层,下层的服务不会依赖上层,构建了一种简单直接的依赖关系。
与分层模型对应的,微博系统中的服务器主要包括三种类型:前端机(提供API接口服务),队列机(处理上行业务逻辑,主要是数据写入),存储(mc、mysql、mcq、rdis、HBas等)。
垂直延伸技术架构
随着业务架构的发展和优化,平台研发实现了许多卓越的中间件产品,用来支撑核心业务,这些中间件由业务驱动产生,随着技术组件越来越丰富,形成完备的平台技术框架,大大提升了平台的产品研发效率和业务运行稳定性。
区别于水平方向上层依赖下层的关系,垂直方向以技术框架为地基支撑点,向两侧驱动影响业务架构、监控平台、服务治理平台,下面介绍一下其中的核心组件。
接口层WbV4框架
接口框架简化和规范了业务接口开发工作,将通用的接口层功能打包到框架中,采用了Spring的面向切面(AOP)设计理念。接口框架基于jrsy进行二次开发,基于annotation定义接口(url,参数),内置Auth、频次控制、访问日志、降级功能,支撑接口层监控平台与服务治理,同时还有自动化的Ban-json/xml序列化。
服务层框架
服务层主要涉及RPC远程调用框架以及消息队列框架,这是微博平台在服务层使用最为广泛的两个框架。
MCQ消息队列
消息队列提供一种先入先出的通讯机制,在平台内部,最常见的场景是将数据的落地操作异步写入队列,队列处理程序批量读取并写入DB,消息队列提供的异步机制加快了前端机的响应时间,其次,批量的DB操作也间接的提高了DB操作性能,另外一个应用场景,平台通过消息队列,向搜索、大数据、商业运营部门提供实时数据。
微博平台内部大量使用的MCQ(SimplQuuSrvicOvrMmcach)消息队列服务,基于MmCach协议,消息数据持久化写入BrklyDB,只有gt/st两个命令,同时也非常容易做监控(statsquu),丰富的clintlibrary,线上运行多年,性能比通用的MQ高很多倍。
MotanRPC框架
微博的MotanRPC服务,底层通讯引擎采用了Ntty网络框架,序列化协议支持Hssian和Java序列化,通讯协议支持Motan、