浅谈互联网系统架构

2020/03/05      2532 文(wén)章来源:优百 作者:杨浩东

与传统企业应用(yòng)系统相比,现今的大型互联网应用(yòng)系统有(yǒu)如下特性:高并发、大流量、日均PV过几十亿,且在有(yǒu)活动时会短时间内爆发性增長(cháng);高可(kě)用(yòng),系统全天候不停机,不宕机;海量数据的存储和处理(lǐ);需求变更快速,更新(xīn)迭代频繁;安全环境恶劣等等。

上述这些挑战都主要源于系统巨大的使用(yòng)量、高并发的访问量以及相应的海量数据处理(lǐ),量变进而引发质变。此时,在这种环境下进行极其简单的业務(wù)都会变得异常复杂。

因此,就需要设计打造一种高可(kě)用(yòng)的互联网系统架构,能(néng)够让网站随着系统需求灵活变动,加快迭代更新(xīn)的速度,保障系统访问量的激增。

互联网系统架构的核心要素主要包括性能(néng)、可(kě)用(yòng)性、伸缩性、扩展性、安全性。

1、性能(néng)

一般通过测试系统响应时间、系统吞吐量、检测系统性能(néng)等,来衡量网站的性能(néng)是否达标。同时,我们也可(kě)以通过分(fēn)析这些性能(néng)指标,来对系统性能(néng)进行预测和异常报警,来保证系统的高可(kě)用(yòng)性。

优化系统性能(néng)的手段非常多(duō):

在客户端,我们可(kě)以通过压缩页面,缓存资源,页面合理(lǐ)布局等;还可(kě)用(yòng)通过CDN来加速网络访问,通过把静态的资源分(fēn)发到离用(yòng)户最近的网络运营商(shāng)的机房,或者使用(yòng)反向代理(lǐ)缓存热点文(wén)件来加速响应速度。

在服務(wù)端,我们可(kě)以使用(yòng)分(fēn)布式集群部署的方式改善系统性能(néng);也可(kě)以使用(yòng)异步的访问方式,通过消息队列来进行削峰解耦;还可(kě)以使用(yòng)本地缓存和分(fēn)布式缓存,通过缓存用(yòng)户访问的热点数据和文(wén)件来减少响应时间。

在代码实现层面,我们可(kě)以使用(yòng)多(duō)線(xiàn)程、缓存、索引等来优化数据结构和存储访问方式,提高系统的性能(néng)。

2、可(kě)用(yòng)性

系统的可(kě)用(yòng)性一般用(yòng)百分(fēn)比来衡量,即系统发生故障的时间占全年时间的占比。系统的可(kě)用(yòng)性 = 1-系统不可(kě)用(yòng)时间/一年的总时间)*100%

实现高可(kě)用(yòng)架构的主要方法是通过应用(yòng)服務(wù)和系统数据的冗余备份以及相应的失效转移来完成的。一旦部分(fēn)服務(wù)器出现了问题,就将服務(wù)切换到其他(tā)可(kě)用(yòng)的服務(wù)器上或者切换到备用(yòng)的服務(wù)器上来保障系统的访问。

对于应用(yòng)服務(wù)器,一般通过集群部署的方式和负载均衡来对外提供服務(wù)。此时,任何一台服務(wù)器宕机,则把相应的请求服務(wù)切换到其他(tā)服務(wù)器即可(kě)。但是这里有(yǒu)一个条件,集群中的应用(yòng)服務(wù)器不能(néng)保存请求的任何会话信息,也就是说请求必须是无状态的才行;否则,请求的会话信息会随着服務(wù)器的宕机而丢失。

一般网站系统服務(wù)都划為(wèi)三层,分(fēn)别是应用(yòng)层、服務(wù)层和数据层,每层相互独立。在一些稍大的系统应用(yòng)中,这三层内部还会进行更详细的、颗粒度更小(xiǎo)的划分(fēn)来做微服務(wù)的架构。此时,若服務(wù)器宕机,只会影响到有(yǒu)故障的那台服務(wù)器提供的服務(wù),而不会出现系统不可(kě)访问等严重问题。更细颗粒度的功能(néng)服務(wù)划分(fēn)有(yǒu)助于优化和实现系统高可(kě)用(yòng)性。

对于存储服務(wù)器,需要对数据进行实时备份。服務(wù)器宕机时,需要做失效转移,将数据访问转移到其他(tā)可(kě)用(yòng)的服務(wù)器上并进行数据恢复。

3、伸缩性

伸缩性是指可(kě)以通过往集群中加入服務(wù)器来缓解不断提升的用(yòng)户并行访问压力和海量增長(cháng)的数据处理(lǐ)储存能(néng)力。衡量一个网络系统伸缩性的指标就是,是否易于向集群中添加新(xīn)的服務(wù)器,并且新(xīn)加入的服務(wù)器提供的服務(wù)是否和原先服務(wù)器提供的服務(wù)没有(yǒu)差别,集群中的服務(wù)器数量是否有(yǒu)限制。

对于应用(yòng)服務(wù)器集群,因為(wèi)应用(yòng)服務(wù)器不保存数据,所以不需要特殊处理(lǐ),通过负载均衡向集群中加入服務(wù)器即可(kě)。

对于缓存服務(wù)器集群,加入新(xīn)的缓存服務(wù)器可(kě)能(néng)会发生缓存路由失效,进而导致缓存数据无法访问。此时,需要改进缓存路由的算法(例如一致性HASH算法)来保障数据的可(kě)访问性。

对于存储服務(wù)器,虽然关系型数据库支持主从热备,数据集群等机制。但是要做到大规模的集群可(kě)伸缩性,还是有(yǒu)必要在数据库之外进行实现,此时通过路由分(fēn)區(qū)算法等技术手段可(kě)以将多(duō)台数据库服務(wù)器或者数据库服務(wù)器集群组成一个能(néng)够提供优良伸缩性能(néng)的数据存储服務(wù)。

4、扩展性

不同于其他(tā)要素关注的是非功能(néng)性需求,系统的扩展性着重关注系统的功能(néng)性需求。一个具有(yǒu)良好扩展性的系统架构,能(néng)够提高迭代的频率,快速响应系统的需求变更。衡量扩展性也有(yǒu)对应的指标,即在系统加入新(xīn)的产品业務(wù)时,是否会影响现有(yǒu)产品。此时,若不需要改动或进行很(hěn)小(xiǎo)的改动就可(kě)以完成新(xīn)产品的上線(xiàn)运行,并且不同的产品之间是低耦合的关系,那么就可(kě)以说系统具备良好的可(kě)扩展性。

实现系统的扩展性主要通过分(fēn)布式服務(wù)和基于事件驱动的架构。基于事件驱动主要是指分(fēn)布式消息队列,通过消息队列进行系统之间的解耦。分(fēn)布式服務(wù)则是将业務(wù)脱离于可(kě)复用(yòng)的服務(wù)之外,通过编写可(kě)复用(yòng)的通用(yòng)服務(wù),不同产品单独实现自身业務(wù),做到产品之间的解耦。

5、安全性

安全的系统架构能(néng)够保护系统不受恶意访问和攻击,保障系统数据不会被窃取或丢失。

常用(yòng)方法就是防止注入攻击,CSRF攻击,还有(yǒu)一些其他(tā)可(kě)以利用(yòng)的系统漏洞。除此之外,我们还可(kě)以对数据进行非对称加密,利用(yòng)文(wén)本识别算法进行垃圾信息的分(fēn)类和过滤,应用(yòng)web防火墙等技术手段。

6、总结

可(kě)以看到,互联网系统架构一般通过使用(yòng)分(fēn)层、分(fēn)布式、集群、缓存、冗余、异步等方法来实现网站架构的核心要素。这些核心问题解决了,也就解决了系统架构的大部分(fēn)难题。

互联网发展到现在,各种系统架构设计也日趋成熟,各种技术方案也逐渐产品化。我们可(kě)以使用(yòng)现有(yǒu)的一些产品来搭建起自己的服務(wù),如存储、计算、网络等都可(kě)以按需購(gòu)买,按量付费。系统需要的高性能(néng)、高可(kě)用(yòng)等核心要素也已经由这些服務(wù)商(shāng)提供了。我们只需自己实现业務(wù)即可(kě)。但是,我们还是十分(fēn)有(yǒu)必要了解互联网架构中的一些核心要素和通用(yòng)技术手段,以便于更好的构建互联网系统架构。