大型网站核心架构要素
性能
浏览器端:浏览器缓存、页面压缩、合理页面布局、减少 Cookie 传出、CDN。
应用服务器端:本地缓存、分布式缓存、异步操作、服务器集群。
代码层面:多线程、改善内存管理等。
数据库端:索引、缓存、SQL 优化等性能优化手段、NoSQL 优化数据模型、存储结构、伸缩性。
可用性
假设系统中任何一台或多台服务器宕机时,以及出现各种不可预期的问题时,系统整体依然保持可用。
提高网站可用性的主要手段是冗余。
1、对于应用服务器,多台服务器负载均衡,前提是应用服务器上不能保存请求的回话信息(小姐姐小哥哥游泳健身表单)。
2、对于存储服务器,实时热备份。
3、开发过程质量保证,预发布验证、自动化测试、自动化发布、灰度发布,减少将故障引入线上环境。
伸缩性
所谓伸缩性是指通过不断向及群众加入服务器的手段来缓解不断上升的用户并发访问压力和不断增长的数据存储需求。
1、对于应用服务器集群,只要服务器上不保存数据,所有服务器都是对等的,通过合适的负载均衡设备就可以向进群中不断添加服务器。
2、对于缓存服务器集群,加入新的服务器可能会导致缓存路由失败,进而导致及群众大部分缓存数据无法访问。虽然缓存的数据可以通过数据库重新加载,但是如果应用已经严重依赖缓存,可能会导致整个网站崩溃,需要改进缓存路由算法保证缓存数据的可访问性。
3、数据库虽然支持数据复制,主从热备等机制,但是很难做到大规模集群的可伸缩性,因此关系数据库的集群伸缩性方案必须在数据库之外实现,通过路由分区等手段将部署有多个数据库的服务器组成一个集群。
至于 NoSQL 数据库,天生就是为海量数据而生,伸缩性通常都非常好。
扩展性
增加新的业务产品时,是否可以实现对现有产品透明吴映香,不需要任何改动或者很少的搞懂现有业务功能就可以上线新的产品。不同产品之间的少耦合。
网站可扩展架构的主要手段是事件驱动和分布式服务。
事件驱动架构在网站通常利用消息队列来实现,分布式服务则是将业务和可复用服务分离开来,通过分布式服务框架调用。
安全性
现存和潜在的攻击和窃密手段,是否有可靠的应对策略。
EOF