3. 大型网站核心架构要素
什么是架构?
最高层次的规划,难以改变的决定。
软件架构的定义:
有关软件整体结构与组件的抽象描述,用于指导大型软件系统各方面的设计。
3.1 性能
- 浏览器端:浏览器缓存、页面压缩、合理布局页面、减少 Cookie 传输。
- CDN、反向代理。
- 应用服务器端:服务器本地缓存、分布式缓存、集群部署。
- 通过异步操作将用户请求分发到消息队列。
- 代码层面:多线程、改善内存管理。
- 数据库服务器端:索引、缓存、SQL 优化、NoSQL 数据库。
衡量网站性能的指标:响应时间、TPS、系统性能计数器等。
3.2 可用性
网站高可用的主要手段是冗余,应用部署在多台服务器上同时提供访问,数据存储在多台服务器上互相备份,任何一台服务器宕机都不会影响应用的整体可用,也不会导致数据丢失。
应用服务器:负载均衡、无状态服务器。
存储服务器:数据实时备份、
软件开发的质量保证:预发布验证、自动化测试、自动化发布、灰度发布。
3.3 伸缩性
伸缩性
通过不断向集群中加入服务器,来缓解不断上升的用户并发访问压力和不断增长的数据存储需求。
衡量架构伸缩性的主要标准:
- 是否可以用多台服务器构建集群?
- 是否容易向集群中添加新的服务器?
- 加入新的服务器后是否可以提供和原来的服务器无差别的服务?
- 集群中可容纳的总的服务器数量是否有限制?
应用服务器集群:保证无状体服务器。
缓存服务器集群:改进缓存路由算法。
关系数据库:路由分区。
NoSQL 数据库。
3.4 扩展性
网站的扩展性架构直接关注网站的功能性需求。
衡量网站架构扩展性的主要标准:
- 在网站增加新的业务产品时,是否可以实现对现有产品透明无影响,不需要任何改动或者很少改动既有业务功能就可以上线新产品。
- 不同产品之间是否很少耦合,一个产品改动对其他产品无影响,其他产品和功能不需要受牵连进行改动。
网站可扩展架构的主要手段:事件驱动架构、分布式服务。
- 事件驱动架构:消息队列。
- 分布式服务:将业务和可复用服务分离开来,通过分布式服务框架调用。
- 升级支持多版本服务。
3.5 安全性
衡量网站安全性架构的标准:针对现存和潜在的各种攻击与窃密手段,是否有可靠的应对策略?