一、大型网站的特点
- 用户多,分布广
- 大流量,高并发
- 海量数据
- 服务高可用
- 安全环境恶劣,易受攻击
- 功能多,变更快,频繁发布
二、大型网站架构目标
- 高性能:快速访问。
- 高可用:服务一直可以正常访问。
- 可伸缩:通过增加/减少硬件,提高/降低处理能力。
- 扩展性:方便增加、减少功能或者模块。
- 安全性:提供安全访问和安全存储等策略。
- 敏捷性:随需应变,快速响应。
三、大型网站架构模式
- 分层: 合理规划层次边界和接口,禁止跨层次的调用。分层可以清晰的展现软件逻辑结构,便于开发维护,更是高并发向分布式发展的重要基础。一般分为应用层,服务层,数据层,管理层,分析层。
- 分割: 分层是将软件在横向方面进行切分,分割是在纵向方向进行切割。一般是在功能上进行,可按照业务/模块/功能特点进行划分。
- 分布式: 分层和分割的主要目的是为了切分后的模块便于分布式部署。将应用分开部署(如:多台物理机),通过远程调用协同工作。
- 集群: 多台服务器部署相同的应用/模块/功能构成一个集群,通过负载均衡统一对外提供服务。
- 负载均衡:
- 缓存: CDN,反向代理,本地缓存,分布式缓存。数据访问热点不均衡,在某个时间段内有效,不会很快过期。将数据放在距离应用或用户最近的位置,加快访问速度。
- 异步: 降低耦合性。消息队列可提高系统可用性,加快响应速度,消除并发访问高峰。
- 冗余: 冷备份,热备份,灾备数据中心。增加副本,提高可用性,安全性,性能。
- 安全: XSS、注入攻击、CSRF; 单向加密、对称加密、非对称加密。
四、性能
- 性能指标: 响应时间、吞吐量、TPS。
- 浏览器优化:减少Http请求数,使用浏览器缓存,启用压缩,减少Cookie传输;CDN加速,反向代理;
- 应用层优化:缓存,异步,集群
- 代码优化:多线程,资源复用(对象池,即连接池,线程池等),良好的数据结构,JVM调优,单例,Cache等;
- 存储优化:缓存,固态硬盘,光纤传输,优化读写,磁盘冗余,分布式存储(HDFS),NOSQL等;
五、可用
在任何时候都可以正常提供服务。
网站高可用的主要手段是冗余备份及失效转移。应用部署在多台服务器上同时对外提供访问,数据存储在多台服务器上互相备份。
- 应用层:设计为无状态的。一般使用负载均衡技术(需要解决Session同步问题)实现高可用。
- 服务层:负载均衡,分级管理,快速失败(设置超时),异步调用,服务降级,幂等设计等。
- 数据层:冗余备份(冷备,热备[同步,异步],温备),失效转移(确认,转移,恢复)。数据高可用方面的理论基础是CAP理论(持久性,可用性,数据一致性[强一致,用户一致,最终一致])
六、伸缩
伸缩性是指在不改变原有架构设计的基础上,通过添加/减少硬件(服务器)的方式,提高/降低系统的处理能力。
是否可以用多台服务器构建集群,是否容易向集群中添加新机器。加入新的服务器后是否可以提供和原来无差别服务的能力。
- 应用层:对应用进行垂直或水平切分。然后针对单一功能进行负载均衡
(DNS,HTTP[反向代理],IP,链路层)。 - 服务层:与应用层类似;
- 数据层:读写分离、分库,分表,分区,NOSQL等。
七、扩展
可以方便的进行功能模块的新增/移除,提供代码/模块级别良好的可扩展性。
不同于其他架构要素主要关注非功能性需求,网站的扩展性直接关注网站的功能需求。快速响应网站的需求变化,是网站可扩展的主要目的。
衡量网站扩展性好坏的主要标准就是在网站增加新的业务产品时,是否可以实现对现有产品透明无影响,不需要任何改动或者改动很少现有的业务功能就可以上线新产品。
网站可扩展架构的主要手段是事件驱动结构和分布式服务:
- 事件驱动架构在网站通常利用消息队列实现。
- 分布式服务则是将业务和可复用服务分离开,通过分布式服务框架调用。
模块化,组件化:高内聚,低耦合,提高复用性,扩展性。
稳定接口:定义稳定的接口,在接口不变的情况下,内部结构可以“随意”变化。
设计模式:应用面向对象思想,原则,使用设计模式,进行代码层面的设计。
消息队列:模块化的系统,通过消息队列进行交互,使模块之间的依赖解耦。
分布式服务:公用模块服务化,提供其他系统使用,提高可重用性,扩展性。
扩展性是系统架构设计层面的开闭原则(对扩展开放,对修改关闭)。
八、安全
对已知问题有有效的解决方案,对未知/潜在问题建立发现和防御机制。
应用系统安全:防止跨站脚本攻击(XSS),注入攻击,跨站请求伪造(CSRF),错误信息,HTML注释,文件上传,路径遍历等。还可以使用Web应用防火墙,进行安全漏洞扫描等措施,加强应用级别的安全。
常用的加解密算法(单项散列加密[MD5,SHA],对称加密[DES,3DES,RC]),非对称加密[RSA]等。
参考
《大型网站技术架构 核心原理与案例分析 --李智慧》
网友评论