3. 大型网站核心架构要素
软件架构:有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。
一般来说,除了当前系统的功能需求外,软件架构还需要关注性能、可用性、伸缩性、扩展性和安全这5个架构要素。
3.1 性能
性能是网站的重要指标,对用户请求的所有环节进行优化:
- 在浏览器端,可以通过浏览器缓存、使用页面压缩、合理页面布局、减少Cookie传输等手段改善性能;可以使用CDN,将网站静态资源分发至离用户最近的网络服务商机房;可以在网站机房部署反向代理服务器,缓存热点文件,加快请求响应速度。
- 在应用服务器端,可以使用服务器本地缓存和分布式缓存;通过异步消息队列操作;在高并发情况下,可将多台服务器组成一个集群共同对外提供服务,改善性能
- 在代码层面,可以使用多线程、改善内存管理等手段优化性能
- 在数据库服务器端,索引,缓存,SQL优化;NoSQL数据库通过优化数据结构、存储结构、伸缩特性等手段在性能方面的优势
3.2 可用性
网站高可用的主要手段是冗余。
对于应用服务器而言,多台应用服务器通过负载均衡设备组成一个集群共同对外提供服务,通过失效转移机制实现应用的高可用。
对于存储服务器,需要对数据进行实时备份。
除了运行环境,还需要软件开发过程的质量保证。通过预发布验证、自动化测试、自动化发布,灰度发布等手段。
3.3 伸缩性
指通过不断向集群中加入服务器手段来缓解不断上升的用户并发访问压力和不断增长的数据存储需求。
对于应用服务器,只要服务器不保存数据,所有服务器都是对等的,通过使用合适的负载均衡设备就可以向集群中不断加入服务器。
对于缓存服务器,加入新的服务器可能导致缓存路由失效。虽然缓存的数据可以通过数据库重新加载,但严重依赖,可能导致网站崩溃。
关系数据库虽然支持数据复制、主从热备功能,但很难做到大规模集群的可伸缩性,因此需在数据库之外实现,通过路由分区等手段将多个数据库的服务器组成一个集群。
NoSQL数据库产品,先天是为海量数据而生,伸缩性非常好。
3.4 扩展性
衡量网站扩展性好坏的标准就是在网站增加新的业务产品时,是否可以实现对现有产品透明无影响。
网站可扩展架构的主要手段是:事件驱动架构和分布式服务。
事件驱动架构在网站通常利用消息队列来实现。
分布式服务则是将业务和可复用业务分离开来,通过分布式服务框架调用。
3.5 安全性
衡量网站安全架构的标准技术就是针对现存和潜在的各种攻击与窃密手段,是否有可靠的应对策略。