微博平台的发展历程中,技术架构的演变引人注目。从早期的架构发展到现在,其背后蕴含着诸多值得关注的内容。
微博架构的早期转变
随着微博业务规模增大,第一代架构难以满足需求。于是衍生出了第二代架构。这个阶段意义非凡,例如对业务功能进行模块化等处理,后台从php转为Java并走向SOA架构。这种改变是业务发展推进的结果,曾经很长一段时间它支撑着微博平台的业务发展。这是一个巨大的转变,在特定的时间节点,微博团队权衡了各种技术的优缺点,最终做出这样的决策来适应不断增长的用户数量和复杂的业务需求。
第二代架构转变并不是简单地换语言和构建框架,这背后涉及到大量的人力和物力投入。团队需要对新语言Java进行深入学习和研究,对原有的业务逻辑进行重新梳理和编写,这个过程在微博发展的历程中持续了一段时间。
第三代技术体系的水平维度
微博平台的第三代技术体系有其独特之处。采用正交分解法建立模型,在水平方向是三级分层模型即接口层、服务层与资源层。这种水平维度的划分在大中互联网后台业务系统设计里非常普遍,在微博的每一代技术体系里都有体现。这种分层不是随意为之,而是经过大量的实践和探索得出的成果。
接口层、服务层和资源层各自承担着不同的功能。以微博当时的业务情况来说,这样明确的划分有助于提高系统的效率、可维护性、扩展性等。比如不同的团队可以集中精力在对应的层进行开发和优化,这种分工明确的模式有助于在微博这样大型的互联网平台迅速推进技术迭代和业务发展。
三代架构中的服务器类型
与分层模型对应的,微博中的服务器类型主要有三种。前端机提供API接口服务,这是用户直接交互的第一道大门。接着是队列机处理上行业务逻辑特别是数据写入。还有存储,如mc、mysql等多种存储方式。这些服务器类型在每一代的架构里也会根据分层模型的调整而有所优化。
前端机的功能要确保稳定高效,在微博经历每一次流量高峰的时候它都是第一道防线。队列机则要保证写入数据的准确性和及时性。存储方面就需要平衡多种存储方式的优缺点,根据数据的不同性质和需求分配到合适的存储类型,这些都是微博平台运营和发展的硬件基础。
接口框架的功能特性
微博的接口框架基于Jersey二次开发。通过annotation定义接口有着多种优点。内置Auth、频次控制等功能大大增强了接口的安全性、可控性。同时它还能支撑接口层监控平台与服务治理。自动化的Bean - json/xml序列化也是很关键的优势。
这些功能特性使得微博的接口框架能更好地适应快速变化的业务需求。像Auth功能可以很好地防止非法访问,保护用户隐私;频次控制则能合理地调配资源,避免恶意访问或者过载。这些功能在实际运营中不断调整优化来贴合微博平台的动态需求。
服务层的框架运用
服务层主要涉及RPC远程调用框架和消息队列框架。其中微博平台大量使用的MCQ消息队列服务非常有特色。基于MemCache协议,它的性能比通用的MQ高很多倍。消息数据写入BerkeleyDB进行持久化,操作简单且容易监控。
RPC远程调用框架实现了服务的远程调用功能,有助于不同模块之间的交互通信。这些框架已经在微博平台稳定运行多年,它们的存在是微博服务稳定流畅的重要保障。比如在用户之间大规模数据交互、微博的实时动态更新等功能的背后,都离不开这些框架的有力支撑。
资源层的组件
资源层的框架非常多。有封装MySQL与HBase的中间件,还有定制化的计数组件等。微博最值得一提的是将SSD应用于分布式缓存。把传统存储方式扩展为Redis/MC + SSD Cache + Mysql模式。SSD Cache作为L2缓存起了多方面的作用,降低了成本,减轻了数据库访问压力。
这种组件方式是微博在实践中探索得出的非常有利于自身发展的模式。在当时的业务场景下,数据量巨大且增长迅速,原有的存储和缓存方式成本高且效能不够理想,SSD Cache这种解决方案是符合微博实际情况的较好方式。
微博平台技术架构的演变随着业务发展不断进行。你了解的其他互联网平台技术架构演变过程中有类似微博的例子吗?