• 中间件在新浪微博中的应用之道
  • 发哥 发表于 2016/7/14 13:45:00 | 分类标签: 微博架构 架构设计 系统架构
  • 什么是中间件

    本文以及之后文章中提及的中间件指的都是:在项目开发中抽象出来的可以公用的独立系统。比如mysql、redis、nginx、mq、HA、服务化以及各种proxy等。

    中间件分类


    架构的多层次孕育了中间件的多样性,各层次中间件的彼此协作为架构注入了强大的生命力。下面是新浪微博平台架构图:
    接口层

    接口层主要指定API规范,对外提供API服务,实现与web和移动应用的接口交互。用到的中间件包括:

        (1) LoadBalancer 负载均衡器负责将前端的请求路由到具体的机器,并检测服务状态,踢出不可用机器,发现新机器

        (2) Webserver 接收来自前端的请求,并调用业务程序进行处理。可以是容器的形式,比如tomcat;也可以是转发,比如nginx;如果业务程序自己实现了webserver,也可以不用专门的webserver

        (3) WebFramework 程序框架是程序开发规范的落地,严格来说不在中间件的范畴,这里写出来仅供参考。新浪是用的是基于jersey的Web V4,内置Auth、频次控制、访问日志、降级功能,支撑接口层监控平台与服务治理

    服务层

    服务层是模块化的细粒度服务的聚合,对外提供业务逻辑(用户、微博)和独立服务(短链、发号器)。

        (1) RPC框架 服务化核心组件,所有的服务都基于该框架开发。该组件规范RPC接口制定,数据序列化

        (2) mq 消息队列,高性能神器,程序异步化首选组件,可以用来完成数据同步,规避数据库事务

        (3) config 注册中心,可用于配置管理,服务治理,与RPC框架配合实现服务的快速扩缩容,High Availability,Load Banlance

    资源层

    资源层是数据的聚合,微博所有数据的最终归宿。

        (1) mysql 风靡全球的sql存储服务器,数据最终落地点
        (2) redis 同样风靡的in-memory nosql存储服务,用于缓存热数据
        (3) ssdcache 基于ssd的缓存服务,与redis协作,作为L2 cache,节约了redis资源,减少了击穿DB的风险
        (4) 对象库 将微博的对象序列化后存入对象库,并生成唯一ObjectId,需要时直接通过ObjectId获取,主要针对大对象、非结构化数据

     
    中间件的作用

    中间件得是通用组件先抽象出功能模型,再对功能模型进行具体化的产品。因此,中间件首先满足各种业务的需求。其次,独立出来的中间件,功能比较专一,在一点上更容易做到最好(性能和功能),由于多种业务都会使用中间件,性能和功能的提升都会带来翻倍的消息。最后,抽象出的中间件能帮助更快的进行新产品的开发。
  • 请您注意

    ·自觉遵守:爱国、守法、自律、真实、文明的原则

    ·尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法规

    ·严禁发表危害国家安全,破坏民族团结、国家宗教政策和社会稳定,含侮辱、诽谤、教唆、淫秽等内容的作品

    ·承担一切因您的行为而直接或间接导致的民事或刑事法律责任

    ·您在编程中国社区新闻评论发表的作品,本网站有权在网站内保留、转载、引用或者删除

    ·参与本评论即表明您已经阅读并接受上述条款

  • 感谢本文作者
  • 作者头像
  • 昵称:发哥
  • 加入时间:2013/6/13 0:00:00
  • TA的签名
  • 这家伙很懒,虾米都没写
  • +进入TA的空间
  • 以下内容也很赞哦
分享按钮