分布式架构简述
2019-03-25刘洋
刘洋
摘 要:信息时代,互联网是最引人注目的行业,互联网的发展,极大程度地改变了人们的生产生活。系统架构作为互联网应用程序的基础,在互联网发展过程中起着举足轻重的作用。本文立足于当下,较为系统地阐述了分布式系统架构的发展、原理及优缺点,探讨了分布式架构的研究现状。
关键词:互联网;系统架构;分布式架构
中图分类号:TP311 文献标识码:A 文章编号:1671-2064(2019)03-0018-02
1 分布式架构介绍
近几十年以来,互联网技术飞速发展,对于硬件的要求也越来越高,在不断增加应用程序体量的过程中,传统的单应用架构遇到了越来越多的难题。主要表现为:系统容量不足、系统可用性与稳定性降低、更新应用程序对于用户的影响越来越大等。单应用架构逐渐不适应新时代互联网发展的需求,人们渴望出现一种更加稳定可用的系统架构。在这种情况下,分布式架构应运而生[1]。
分布式架构指由多个独立的通过网络连接起来的计算机各自执行不同的任务,以达到性能提升的系统架构。在分布式系统中,一个计算机可以同时与多个其他的计算机“连接”起来,这些计算机可以分主次,也可以不分,多个计算机也可以组成一个大的模块与其他模块连接,最终可以组成一个相当复杂的系统。根据使用场景的不同,分布式系统有分布式计算、分布式存储、分布式文件等多种系统形态。
2 应用程序架构的发展历程
1946年第一台计算机诞生以来,系统架构经历了一个漫长的发展历程。最初,计算机算力较弱,互联网也没有出现,应用程序的主要架构就是单应用,在互联网发展初期,计算机性能的发展速度还可以适应应用程序的发展速度,集中式依然是主流应用架构。但随着应用程序复杂性的不断提升,需要有高性能的大型机来满足应用程序的需要,而复杂的大型机成本高昂,而且需要具备高专业知识的人进行管理。而与之相比,小型机连接的系统操作要求低,性价比高,更适合庞大的应用程序。由此,产生了最初的分布式架构。
随着用户数量的不断增加,一个服务器无法支持太多人访问,增加服务器数量是最好的方式。通过增加服务器来分担压力,可以很快提高系统性能。但新的问题又出现了:如何进行多服务器的任务分配?如果分配不当,就会出现有的服务器性能冗余,而有的服务器负载过重的问题。此时,就需要添加一个中间件:负载均衡器,来分配各个服务器的负载[2]。
随着数据库容量的持续增大,出现了很多用户访问同一数据的情况,这些重复访问对数据库是一个很大的负担,于是,出现了缓存机制,通过对高频且变化较少的数据的提前缓存,可以处理相当一部分请求,大大减小了数据库的负担。
应用逐渐发展,用户服务器的负载也越来越大,于是我们将用户服务器进行功能拆分,如分为信息接收模块,信息处理模块,信息输出模块。信息处理模块又可以根据信息的类别分为多种信息的处理模块。
通过不同粒度,不同层次的分离,分布式系统架构就变得复杂了起来。
3 分布式架构的主要工作原理
3.1 理论原理
分布式架构通过网络连接独立的计算机以实现功能,在实践中,分布式系统遇到的问题可以分为两类:
如何使单个计算机稳定无误地运行。
如何使计算机之间的连接稳固可靠。
接下来我们从这两个方面出发,对分布式架构的工作原理进行阐述。
3.1.1 单体工作
负载均衡算法:分布式系统处理数据时,需要尽可能地使提供相同服务的计算机均衡地执行任务,以求最大程度地利用单个计算机的性能。下文介绍几个常用的负载均衡算法。
輪询法指将请求有顺序地逐个发给各个服务器。这种算法可以使用简单的方式做到相当程度的平均分配,但没有考虑到各台机器之间的性能差异,在系统并发量较高时,容易出现高性能计算机性能过剩,低性能计算机性能不足的问题[3]。
加权轮询法指根据各台计算机性能的高低为不同的计算机分配权重,根据权重进行分配,能者多劳,这种算法更加合理。但有新机器加入时,如果依然按照该规则分配,原来的服务器由于有原先分配的请求,负担较大,负载依旧不均衡[4]。
动态轮询法指根据各台服务器的负载压力进行任务分配。动态轮询可以最大程度地均衡各个服务器的负载压力,但它比前两种多出了一个获取服务器状态的过程,这个过程本身就需要消耗资源。
哈希方式指利用数据的某个特征计算出一个哈希值,根据哈希值决定处理数据的服务器。哈希算法的好处是可以将具有某一特征的数据分配到特定的服务器进行处理。但它的缺点也特别明显:当某一特征的数据量过大时,就会出现“数据倾斜”的问题,而且由于数据的特征总数常常是固定的,加入服务器时,如果新的计算机数与原来的计算机数不成倍数,就需要大规模地进行数据迁移。
一致性哈希使计算出的哈希值域成为一个封闭的环,将节点分布到环上,每个节点处理自己到下一个节点的数据。这种方式解决了哈希方式拓展性不高的问题,但当进行节点增减时,与增减节点相邻的节点就会出现负载过小或过大的问题,负载难以均匀分配。
单机故障:宕机就是某些原因导致的计算机无法正常工作的状态。这是一种很常见的服务器故障,一般需要人工重启机器,但机器的内存信息将丢失,这时就需要从数据库中读取数据或回放日志进行状态恢复。
存储数据丢失也是一种常见的故障,通常由硬盘问题导致。解决此问题的唯一方法是设立数据副本,重新写入信息。
3.1.2 网络连接
由于网络连接的不稳定,分布式系统运行时时常出现消息丢失,消息乱序,数据错误等问题。
消息丢失是指通信过程中由于网络问题导致网络数据丢失。消息丢失会影响网络的一致性,甚至会出现网络分化的问题。
消息亂序指消息不是按照发送顺序到达接收端。对于需要实时更新的网络,消息乱序是一个很大的问题。
数据错误是指网络传输过程中有可能发生的比特错误等导致的消息错误。数据错误会使网络中出现无用信息,从而影响系统一致性。消息错误一般需要使用校验码系统进行检查才能发现。
对于网络问题导致的消息传输问题,最简单的解决方式是重新发送,但有的情况不允许重新发送,例如网络付款信息。这时可以引入一个中间件:消息队列。消息队列可以根据接收端返回的信息决定是否继续发送信息,发送成功后将信息删除。
3.2 实际案例分析
任何理论都需要进行实际的应用,下文将举一个生产过程中的实例来补充解释上述理论。
图1是一个跨公司的购物系统的示意图,用户通过乙公司向甲公司购买产品,所以需要通过乙公司查询信息,向甲公司付款。购买时,用户先将订单信息发送至订单乙,订单乙将订单信息发送至财务乙,财务乙向财务甲请求付款链接并发给用户,用户向甲公司付款后,财务甲将付款成功信息反馈给财务乙并通知订单甲,订单甲通知订单乙下单成功。在实际运行过程中,这一套系统出现了两个问题。一个问题出现在乙公司内部,乙公司订单模块向财务模块请求信息时网络中断,订单信息无法发送。乙公司在解决这个问题时,在本公司的订单和财务模块之间添加了一个消息队列,如图2所示,从而实现了高可用性的信息传递。
第二个问题出在两公司的信息传递过程中,甲公司将信息传给乙公司时,由于乙公司机器原因,没有收到,导致付款信息无法返回给用户,这对于购物系统是一个大问题,因为用户不可能再次执行付款操作,且由于信息保密,无法在两公司之间添加消息队列。解决问题时,如图3所示,乙公司的技术人员使用了一个代理服务器,由代理服务器代为接受信息,同时在乙公司内设置两个订单服务器,这样,当其中一台订单服务器发生宕机时,另一台服务器可以立即代其执行任务,保证了消息的成功发送,也给另一台服务器的重新部署争取了时间。
通过这个案例,我们可以得到几点启示:
(1)提高分布式系统可用性的一个重要方法是添加中间件。(2)当服务器有宕机危险时,可通过添加备用服务器增强系统的稳定性。
4 两种架构的优缺点对比
单应用架构:
优点:结构简单,易于开发;结构明确,易于管理;结构集中,易于排障;系统运行不受网络影响。
缺点:系统稳定性与可用性低;系统启动慢;更新应用时对应用影响大;对硬件要求高。
分布式架构:
优点:系统稳定性与可用性高;系统启动快;更新应用时对应用影响小;对硬件要求低。
缺点:结构复杂,不易开发;结构庞大,不易管理;结构分散,不易排障;受网络影响较大。
5 结语与展望
分布式架构使多个计算机通过网络进行连接,极大地提高了系统的稳定性、可用性、可拓展性。在应用程序不断大型化、复杂化的今天,有着重要的现实意义。可以预见,通过不断的改进发展,趋利避害,未来分布式架构一定能发挥出更大的作用。
参考文献
[1] 张华伟,熊璋,欧阳元新.分布式系统中异地数据库的数据一致性维护[J].计算机工程与应用,2004,40(23):172-175.
[2] 葛五祥,陈志刚.基于三层B/S模式的分布式系统设计[J].计算技术与自动化,2004,23(3):73-75.
[3] 陈志刚,李登,曾志文.分布式系统中动态负载均衡实现模型[J].中南大学学报:自然科学版,2001,32(6):635-639.
[4] 陈志刚,李登,曾志文.分布式系统中一种动态负载均衡策略、相关模型及算法研究[J].小型微型计算机系统,2002,23(12):1434-1437.