大型网站核心架构要素
0、网站架构五要素
当前互联网架构设计主要包括五要素:性能、高可用、伸缩性、拓展性、安全性,以下篇幅将对这五要素做具体或者简略的介绍。
![](https://img2023.cnblogs.com/blog/1286512/202303/1286512-20230312124532714-1044359133.png)
一、性能篇
性能主要还是包括两个方面,一个是性能测试,一个是性能优化。其中性能测试又分为单纯的性能测试、负载测试、压力测试、稳定性测试性能测试:以系统设计初期规划的性能指标为预期目标,对系统不断施加压力,验证系统在资源可接受范围内,是否可以达到性能预期负载测试对系统不断增加并发请求以增加系统压力,知道系统的某项或者多项性能指标达到安全临界值,如果某种资源已经是饱和状态,继续施加系统压力,系统的处理能力不但不能提高,反而会下降压力测试:超过安全负载的情况下,对系统持续施加压力,直到系统崩溃或者不能再处理任何请求,以此来获得系统最大压力承受能力。稳定性测试被测试系统在特定硬件、软件、网络环境条件下,给系统加载一定的业务压力,使系统运行一段较长的时间,以此验证检测系统是否稳定。在不同生产环境、不同时间点的请求压力是不均匀的,呈波浪特性,因此为了更好的模拟生产环境 ,稳定性测试也应不均匀地对系统施加压力
性能优化
在测试完系统的性能后就需要开始对系统进行性能优化,性能优化相信网上已经有许许多多的教程,下面主要针对性的对要点进行整理
![](https://img2023.cnblogs.com/blog/1286512/202303/1286512-20230312124600375-167159067.png)
二、可用性(高可用)
一个网站或者说是服务想要高可用,首先架构要是高可用的,然后其依赖的数据是高可用的。在代码开发过程中需要迭代上线,这其中上线也需要是高可用的。当然在程序运行过程中,最重要的是监控。这个篇章主要讲讲监控,其余要点的会在脑图里体现
监控重要么?
首先要明确的一点是,不论是多厉害的设计,不论是多厉害的程序员,都不是完美的。经历过的人都知道,在生产环境,一切都是未知的,什么故障都有可能发生。监控,是对生产的一种敬畏。上线的服务必须有监控。
如何布置监控
以微服务为例布置监控可以分为基础监控和服务监控基础监控主要包括底层的机器指标监控,如top指数,cpu,内存,网络io等。这里不细说
服务监控
服务监控可以从以下几个方面考虑,也可以更具实际情况,下面只是提供一种思路。存活性监控存活性监控主要监控的是服务的可用性,检测服务是否挂了,或者说是假死。一般以接口服务为例,可用添加指定url拨测,检测返回值是否为期望值来监控。存活性监控也是最基础的监控。调用链监控调用链监控是一种跟踪监控,跟踪服务请求,监控服务间调用的情况,及时发现请求异常/网络异常/服务异常,在微服务系统中尤为重要。常用的工具有CAT、ZipKin、PinPoint.流程监控把整个系统的主要核心流程画成流程图/伪流程图,并在流程图上判断哪些点需要监控,监控指标是什么。让监控覆盖整合流程压力/性能监控监控系统接口的tps,或者是top99的接口响应时间。监控tps可以及时知道系统什么时候请求量超过安全线,结合top99响应时间,可以发现系统接口响应的情况,以便维护人员及时发现、解决问题。业务监控根据不同的业务,在业务核心资源,或者是核心步骤,设定监控。保障业务的顺利开展。出现业务漏洞时及时预警,减少业务漏洞导致的经济损失。日志收集把重要服务的日志收集起来,方便排查,同时也可以根据日志的某些参数设置监控预警,目前比较流行的是Elasticsearch +Logstash +Kibana搭建的日志收集系统。监控故障恢复其实很多监控告警的故障是可以自动恢复的,在布置完监控后,可以考虑如何实现故障自动恢复。同时,由于大型系统可能最后每天都有数百数千条预警信息,可以考虑引入人工智能监控系统。其他总的来说,监控的布置是灵活多变的。同时,需要多维度多角度的去看待需要监控的系统,做到方方面面的监控保护。总结一句话就是,天网恢恢疏而不漏以下是高可用的主要要点:
![](https://img2023.cnblogs.com/blog/1286512/202303/1286512-20230312124627361-309704714.png)
高可用
三、伸缩性
可伸缩性(可扩展性)是一种对软件系统计算处理能力的设计指标,高可伸缩性代表一种弹性,在系统扩展成长过程中,软件能够保证旺盛的生命力,通过很少的改动甚至只是硬件设备的添置,就能实现整个系统处理能力的线性增长,实现高吞吐量和低延迟高性能。
伸缩性
四、扩展性
网站的扩展性,指的是当业务有新的需求时,能够方便的在网站上增加新的功能模块,尽可能少的改动已有模块的能力。
![](https://img2023.cnblogs.com/blog/1286512/202303/1286512-20230312124718142-172095069.png)
五、伸缩性、扩展性与中台的思考
可能在前几年,你不一定听过中台,但是现在,必须承认,中台在国内技术圈子里的火爆程度,已经不亚于当年敏捷和微服务的火爆程度。现在任何一个和技术相关的讨论群中,早晚话题都会转向中台。笔者现在写的有点累了,这个篇幅又太长,以后单独写一篇把。溜了。
五、安全性
不知道读者有没有听过这样一句话:世界上没有安全的系统。当然,现实的确是这样的。以笔者的经验。构建一个安全的系统,主要可以从以下几个方面入手1.攻击与防御从攻击者的角度去思考如何防御,但是目前攻击手段层出不穷,所以从攻击者主要攻击手段角度构建的防御算是基础又必不可少的防御2.信息加密/签名对重要信息加密、签名等等,不做过多描述,注意加密密钥长度的有效期,加密算法也不是绝对安全的,破解只是时间问题,而这个时间又和密钥长度成正比,密钥太短攻击者使用彩虹表分分钟破解3.信息过滤、反垃圾字面意思4.自身漏洞处理在技术选型、或者是使用工具时,多注意版本漏洞,及时升级不安全的版本。这个点是最难做到的,因为一个系统,从操作系统到系统软件再到服务程序再小到服务程序依赖的jar包或者是中间件等等,这些都需要排查,当然也有扫描软件,例如绿盟的软件。5.其他风险主要是业务风险
![](https://img2023.cnblogs.com/blog/1286512/202303/1286512-20230312124829707-2085872749.png)
安全性