前言
上一篇 "大型网站架构概述,我们需要知道的这八个架构范式" ,我们主要一起了解了大型网站架构中为解决高并发访问、海量数据处理、高可靠运行等一系列问题与挑战,所践行的八大范式。
今天我会跟大家分享的是,我们在做大型网站基础架构的时候,要必须理解的这五个架构要素,我们可以通过这些架构要素来衡量我们整体系统架构设计的优劣,来判断是否达到了我们的要求。
一般来说软件架构需要关注性能、可用性、伸缩性、扩展性和安全性这5个架构要素。
性能是大型网站架构设计的一个重要方面,任何软件架构设计方案都必须考虑可能带来的性能问题,也正因为性能问题几乎无处不在,在请求链路的任何一个环节,都是我们去做极致性能优化方案中的切入点。
一、高性能的网络和硬件
涉及到网络硬件、逻辑计算、通信协议和数据存储等部分。
1.CDN加速。
将网站的静态资源通过CDN加速,内容缓存在离用户接入网络最近的机器,通过调度系统将用户的请求路由或者引导到离用户接入网络最近或者访问效果最佳的服务器。
2.足够的带宽。
带宽必须要满足在网站峰值的情况还能足够快速的使用,所以网络带宽应该大于峰值流量 = 峰值QPS * 平均请求大小。只有在保证带宽的情况才能实现高性能服务,这是基础条件。
3.服务器性能。
服务器性能主要从CPU、内存和磁盘三个方面来考虑,根据业务需求和成本进行性价比充分考虑,不同的服务类型,对服务器的要求完全不一样。
比如计算型服务对CPU的要求会明显高于IO型服务等等,另外磁盘存储,SSD会优于机械磁盘太多,参照性价比,我司现在采购早已经放弃了机械磁盘。
4.负载均衡设备。
对于有条件的团队可以采购硬件负载均衡设备,加强后台服务负载均衡的能力,比如F5,从性能的角度会由于LVS,但从性价比的角度,由于LVS是开源产品,例如我司还是选择的LVS。
二、服务的高性能设计
服务的高性能设计是互联网产品高性能架构设计中最重要的一环,对服务整体性能起到决定性的作用,我们从以下3个方面来总结:
1.浏览器端
可以通过浏览器缓存、页面压缩传输、合理布局页面、减少Cookie传输等手段,甚至可以使用CDN加速功能。
2.应用服务器端
可以使用服务器本地缓存和分布式缓存,也可以通过异步操作方式来加快响应,在高并发请求的情况下,可以将多台应用服务器组成一个集群共同对外服务,提高整体处理能力,改善性能。
3.数据库服务器端
可用使用索引、缓存、SQL性能优化等手段,还可以使用NoSQL数据库来优化数据模型、存储结构等。
衡量网站性能有一系列指标,重要的有响应时间、TPS、系统性能计数器等,通过这些指标以确定系统设计是否达到目标。
可用性即能够不间断提供服务的时间。
几乎所有网站都承诺7×24小时可用,但事实上任何网站都不可能达到完全的7×24,总会有一些故障时间,扣除这些故障时间,就是网站的可用时间。一些大型网站可以做到4个9以上的可用性,也就是99.99%。
网站高可用的主要手段就是冗余,应用部署在多台服务器上同时提供服务,数据存储在多台服务器上相互备份,任何一台服务器都不会影响应用的整体可以,通常的实现手段即把多台服务器通过负载均衡设备组成一个集群。
衡量一个系统架构设计是否满足高可用的目标,就是假设系统中任何一台或者多台服务器宕机时,以及出现各种不可预期的问题时,系统整体是否依然可用。
网站的伸缩性是指不需要改变服务器的硬件设计,仅仅靠改变应用服务器的部署数量,就可以扩大或缩小服务器的处理能力。
一般来说,网站的伸缩性设计可分为两类
前者是不同服务器部署不同的服务,提供不同的功能。后者是集群中多台服务器部署相同的服务,提供相同的功能。
伸缩性架构设计
而且伸缩性往往又跟可用性、正确性和性能耦合在一起,所以架构师必须对网站的商业目标、历史演化和技术路线了然于胸,并综合考虑技术团队的知识储备和结构以及管理层的战略愿景和规划,才能做出最适合的伸缩性架构决策。
衡量架构伸缩性的主要标准有是否可用多台服务器构建集群,是否容易向集群中添加新的服务器,加入新的服务器后是否可以提供和原来的服务器无差别的服务,集群中可容纳的总服务器数量是否有限制等等。
不同于其他架构要素主要关注非功能性需求,网站的扩展性架构直接关注网站的功能需求。
网站快速发展,功能不断扩展,如何设计网站的架构使其能够快速响应需求变化,是网站可扩展架构的主要目标。
衡量网站架构扩展性好坏的主要标准就是在网站增加新的业务产品时,是否可以实现对现有产品透明无影响,不同产品之间是否很少耦合等。
网站可扩展架构的主要手段有事件驱动架构和分布式服务。
互联网跟传统软件不同,它是开放的,任何人在任何地方都可以访问网站。网站的安全架构就是保护网站不受恶意访问和攻击,保护网站的重要数据不被窃取。
安全性架构,具体来说说就是保证数据的保密性、完整性、真实性、占有性。
高性能,高可用,可伸缩,可扩展和安全性是大型网站架构设计中最核心的几个要素,我们的设计方案也都是要以保障这几个要素为基准。