大型网站核心架构要素
架构是一种高层次的规划,难以改变的决定,是有关软件整体结构与组建的抽象描述,用于指导大型软件系统各方面的设计。
软件架构设计需要关注性能、可用性、伸缩性、扩展性和安全性
性能
衡量网站性能的指标有:响应时间、TPS、系统性能计数器,通过统计这些指标衡量网站的性能,及时作出预警。
性能优化的几种方式:
-
在浏览器端,使用浏览器缓存、页面压缩、合理布局、减少cookie传输等去改善
-
使用CDN,将网站静态内容分发至离用户最近的网络服务商机房,使用户通过最短路径获取数据,还可以在机房部署反向代理服务器,缓存热点文件
,加快请求响应速度,减轻应用服务器负载压力 -
在应用服务端,使用服务器本地缓存和分布式缓存,加快用户对热点文件的访问,减轻负载压力
-
通过异步操作将请求发送至消息队列等待后续任务处理,当前请求直接返回给用户
-
将多台应用服务器组成一个集群共同对外提供服务,提高整体处理能力,改善性能
-
代码层面,通过多线程、改善内存管理等
-
在数据库服务端,采用缓存、索引、SQL优化以及NoSQL数据库优化数据模型、存储结构、伸缩特性等
可用性
保证网站7*24小时高可用
网站使用的硬件服务器本身不保证高可用,随时可能出现硬件故障,服务器宕机,所以需要从技术角度保证网站可用性
高可用常见的手段是冗余,部署在多台服务器上同时提供访问,数据存储在多个服务器上进行备份,任意单机故障不会导致数据丢失
对于应用服务器来说,需要通过负载均衡设备保证服务的可用性;对存储服务器来说,需要通过实时备份保证数据可用性
除了运行环境以外,网站的高可用还要软件开发过程的质量保证。通过预发布验证、自动化测试、自动化发布、灰度发布等手段,减少线上故障的可能性
伸缩性
网站通过集群的方式将多个服务器组成一个整体,共同提供服务。可伸缩性是指可以不断向集群中增加服务器来缓解不断上升的用户并发访问压力和不断增长的数据存储要求
加入新机器之后尽量可以提供与原来无差别的服务。
对于应用服务器来说,只要服务对等,通过负载均衡设备可以不断加入服务器。
对于缓存服务器来说,加入新的服务器可能导致缓存路由失效,进而导致集群中大部分缓存都无法使用,如果来不及加载,可能导致网站崩溃
需要选用合适的路由算法,保证缓存数据的可访问性。
关系数据库支持数据复制,主从热备,很难做到大规模进群的可伸缩,因此关系型数据库可以通过路由、数据分区等手段部署多个数据库的服务器组成一个集群
NoSQL数据库产品善于处理海量数据,对伸缩性支持较好。
扩展性
网站的扩展性指能够快速响应需求的变化,设计出可扩展的架构,当业务增加时,可以实现对现有产品透明无影响的上线。需要减少模块的耦合
网站可扩展架构的主要手段是事件驱动架构和分布式服务。
事件驱动架构主要采用消息队列进行实现,将用户请求和其他业务时间构成消息发布到消息队列,消息的处理者作为消费者从消息队列中获取消息进行处理,将消息的产生
与消息的处理分开。
分布式服务主要是将业务和可复用的业务进行分离,新增的产品调用可复用的业务实现自身业务逻辑,对产品本身没有什么影响,可以通过提供多版本的服务
实现透明升级。
第三方开发者使用第三方接口提供给开放的平台服务。
安全性
保护网站不受恶意访问和攻击,保护重要数据不被窃取
网友评论