干货丨千万流量大型分布式系统架构设计实战
- 前言 -
- 大型分布式网站架构技术 -
用户多,分布广泛 大流量,高并发 海量数据,服务高可用 安全环境恶劣,易受网络攻击 功能多,变更快,频繁发布 从小到大,渐进发展 以用户为中心 免费服务,付费体验
高性能:提供快速的访问体验。 高可用:网站服务一直可以正常访问。 可伸缩:通过硬件增加/减少,提高/降低处理能力。 安全性:提供网站安全访问和数据加密、安全存储等策略。 扩展性:方便地通过新增/移除方式,增加/减少新的功能/模块。 敏捷性:随需应变,快速响应;
- 高性能架构 -
前端优化:网站业务逻辑之前的部分; 浏览器优化:减少HTTP请求数,使用浏览器缓存,启用压缩,CSS JS位置,JS异步,减少Cookie传输;CDN加速,反向代理; 应用层优化:处理网站业务的服务器。使用缓存,异步,集群 代码优化:合理的架构,多线程,资源复用(对象池,线程池等),良好的数据结构,JVM调优,单例,Cache等; 存储优化:缓存、固态硬盘、光纤传输、优化读写、磁盘冗余、分布式存储(HDFS)、NoSQL等。
- 高可用架构 -
应用层:一般设计为无状态的,对于每次请求,使用哪一台服务器处理是没有影响的。一般使用负载均衡技术(需要解决Session同步问题)实现高可用。 服务层:负载均衡,分级管理,快速失败(超时设置),异步调用,服务降级,幂等设计等。 数据层:冗余备份(冷,热备[同步,异步],温备),失效转移(确认,转移,恢复)。数据高可用方面著名的理论基础是CAP理论(持久性,可用性,数据一致性[强一致,用户一致,最终一致])
- 可伸缩架构 -
应用层:对应用进行垂直或水平切分。然后针对单一功能进行负载均衡(DNS、HTTP[反向代理]、IP、链路层)。 服务层:与应用层类似; 数据层:分库、分表、NoSQL等;常用算法Hash,一致性Hash。
- 可扩展架构 -
模块化,组件化:高内聚,低耦合,提高复用性,扩展性。 稳定接口:定义稳定的接口,在接口不变的情况下,内部结构可以“随意”变化。 设计模式:应用面向对象思想,原则,使用设计模式,进行代码层面的设计。 消息队列:模块化的系统,通过消息队列进行交互,使模块之间的依赖解耦。 分布式服务:公用模块服务化,提供其他系统使用,提高可重用性,扩展性。
- 安全架构 -
- 敏捷性 -
- 大型架构举例 -
- 大型电商系统的演进过程 -
- 一张图说明电商架构 -
- 大型电商网站架构案例 -
大型门户,比如网易,新浪等; SNS网站,比如校内,开心网等; 电商网站,比如阿里巴巴,京东商城,国美在线,汽车之家等。
建立一个全品类的电子商务网站(B2C),用户可以在线购买商品,可以在线支付,也可以货到付款; 用户购买时可以在线与客服沟通; 用户收到商品后,可以给商品打分,评价; 目前有成熟的进销存系统;需要与网站对接; 希望能够支持3~5年,业务的发展; 预计3~5年用户数达到1000万; 定期举办双11、双12、三八男人节等活动; 其他的功能参考京东或国美在线等网站。
- 需求功能矩阵 -
- 网站初级架构 -
使用集群对应用服务器进行冗余,实现高可用;(负载均衡设备可与应用一块部署) 使用数据库主备模式,实现数据备份和高可用;
注册用户数-日均UV量-每日的PV量-每天的并发量; 峰值预估:平常量的2~3倍; 根据并发量(并发,事务数),存储容量计算系统容量。
每天的UV为200万(二八原则); 每日每天点击浏览30次; PV量:200*30=6000万; 集中访问量:24*0.2=4.8小时会有6000万*0.8=4800万(二八原则); 每分并发量:4.8*60=288分钟,每分钟访问4800/288=16.7万(约等于); 每秒并发量:16.7万/60=2780(约等于); 假设:高峰期为平常值的三倍,则每秒的并发数可以达到8340次。 1毫秒=1.3次访问;
需要部署大量的服务器,高峰期计算,可能要部署30台Web服务器。并且这三十台服务器,只有秒杀,活动时才会用到,存在大量的浪费。 所有的应用部署在同一台服务器,应用之间耦合严重。需要进行垂直切分和水平切分。 大量应用存在冗余代码 服务器Session同步耗费大量内存和网络带宽 数据需要频繁访问数据库,数据库访问压力巨大。
业务拆分 应用集群部署(分布式部署,集群部署和负载均衡) 多级缓存 单点登录(分布式Session) 数据库集群(读写分离,分库分表) 服务化 消息队列 其他技术
缓存自动过期; 缓存触发过期;
- 流程说明 -
- 架构汇总 -
作者:烂猪皮
来源:
https://my.oschina.net/editorial-story/blog/1808757
评论