浅谈互联网系统架构

2020/03/05      2525 文章来源:优百 作者:杨浩东

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

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

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

互联网系统架构的核心要素主要包括性能、可用性、伸缩性、扩展性、安全性。

1、性能

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

优化系统性能的手段非常多:

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

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

在代码实现层面,我们可以使用多线程、缓存、索引等来优化数据结构和存储访问方式,提高系统的性能。

2、可用性

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

实现高可用架构的主要方法是通过应用服务和系统数据的冗余备份以及相应的失效转移来完成的。一旦部分服务器出现了问题,就将服务切换到其他可用的服务器上或者切换到备用的服务器上来保障系统的访问。

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

一般网站系统服务都划为三层,分别是应用层、服务层和数据层,每层相互独立。在一些稍大的系统应用中,这三层内部还会进行更详细的、颗粒度更小的划分来做微服务的架构。此时,若服务器宕机,只会影响到有故障的那台服务器提供的服务,而不会出现系统不可访问等严重问题。更细颗粒度的功能服务划分有助于优化和实现系统高可用性。

对于存储服务器,需要对数据进行实时备份。服务器宕机时,需要做失效转移,将数据访问转移到其他可用的服务器上并进行数据恢复。

3、伸缩性

伸缩性是指可以通过往集群中加入服务器来缓解不断提升的用户并行访问压力和海量增长的数据处理储存能力。衡量一个网络系统伸缩性的指标就是,是否易于向集群中添加新的服务器,并且新加入的服务器提供的服务是否和原先服务器提供的服务没有差别,集群中的服务器数量是否有限制。

对于应用服务器集群,因为应用服务器不保存数据,所以不需要特殊处理,通过负载均衡向集群中加入服务器即可。

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

对于存储服务器,虽然关系型数据库支持主从热备,数据集群等机制。但是要做到大规模的集群可伸缩性,还是有必要在数据库之外进行实现,此时通过路由分区算法等技术手段可以将多台数据库服务器或者数据库服务器集群组成一个能够提供优良伸缩性能的数据存储服务。

4、扩展性

不同于其他要素关注的是非功能性需求,系统的扩展性着重关注系统的功能性需求。一个具有良好扩展性的系统架构,能够提高迭代的频率,快速响应系统的需求变更。衡量扩展性也有对应的指标,即在系统加入新的产品业务时,是否会影响现有产品。此时,若不需要改动或进行很小的改动就可以完成新产品的上线运行,并且不同的产品之间是低耦合的关系,那么就可以说系统具备良好的可扩展性。

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

5、安全性

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

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

6、总结

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

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