新浪微博的架构演变
新浪的模式
最开始 lamp
Linux+Apache+MySql+PHP
; PHP 开发,所有的数据,包括微博,用户,关系都存储在 MySQL 数据库中
最终的
【如图】
系统分为三层
- 底层: 基础服务器
- 中间层: 平台服务和应用服务层
- 最上层: API 和业务层
基础服务器
提供数据库、缓存、存储、搜索等数据服务,以为其他一些基础技术服务;
本服务支持了海量数据和高并发访问,是系统的基础
平台服务和应用服务层
业务核心的微博/关系/用户…,这些服务被分割在独立的服务模块,通过依赖调用和共享基础数据构成业务基础
API 和业务层
各种客户端/WEB 网站和第三方应用,通过调用 API 集成到新浪微博的系统中,共同组成一个生态系统
这些被分层和分割后的业务模块和基础技术模块分布式部署,每个模块都部署在一个独立的服务器集群上,通过远程调用的方式进行依赖访问;
网站一般将物理机虚拟化成多个虚拟机后,在虚拟机上部署应用,并且可以在不同虚拟机上使用相同的端口号
微博发布模式更改
开始的同步模式:微博发布使用同步模式,用户发表微博后系统立即将这条微博插入到数据库所有粉丝的订阅列表中;如果是明显发微博,会引起大量的数据库写操作,超出数据库负载,系统性能急剧下降,用户响应延迟急剧下降;
更改的异步模式:改用异步推拉结合的模式,用户发表后将微博写入队列后立即返回,用户响应迅速;消息队列消费者任务将微博推送给所有当前在线粉丝的订阅列表,非在线用户登录后再根据关注列表拉取微博订阅列表;
采用多级缓存策略
- 热门微博和明星微博缓存在所有微博服务器上
- 在线用户的微博和近期微博缓存在分布式缓存集群中
对于用户常用的刷微博操作,几乎全部都是缓存访问操作,可以获得很好的系统性能;
多个数据中心
- 用户可以就近访问以加快速度,改善系统性能
- 同时属于数据冗余复制的灾备中心;
所有用户和微博数据通过远程消息系统在不同的数据中心之间同步,提高系统可用性
自动化工具
自动化监控,自动化发布,自动化故障修复
安全审核策略
- 网站常见的安全策略
- 多级安全审核策略以保护系统和用户
总结
正确的模式可以更好地利用业界和前人的思想与实践,用更少的时间开发更好的系统,使设计者的水平也达到了更高的境界;
但是模式受其使用场景限制,不恰当地使用模式可能不但没有解决原来的老问题,还会带来更棘手的问题;
山寨与创新的最大区别不在于是否抄袭,是否模仿,而是对问题和需求是否真正理解和把握;