分布式架构基础面试分析
目录:
为什么需要分布式架构?
分布式架构有哪些优势?
分布式架构有哪些劣势?
分布式架构中有哪些关键技术?
如何基于架构设计提高其系统性能?
如何基于架构设计提高其系统稳定性?
分布式架构设计有哪些难点?
为什么需要分布式架构?
当一个系统的业务量越来越大时,我们需要垂直或是水平拆分业务系统,同时为了避免所有业务都部署在一台机器上时,一旦机器出现故障从而导致整体不可用,就需要将这些业务部署在多台计算机上,来构建一个分布式架构。分布式架构可以更好的提高系统的容量、可靠性(避免单点故障)、性能。同时因为模块化,系统的可重用性以及并行开发的效率也会提高。
分布式架构有哪些优势?
可以实现更大数据量的存储。
可以更好提高系统的高可用性。
可以更好提高系统的可重用性。
可以更好提高系统的性能。
分布式架构有什么劣势?
分布式系统架构虽然解决了“单点”和“性能容量”的问题,但却新增了一些新的问题。
会增加架构设计的难度。
部署和维护的成本也会加大。
很多技术方案都是“按下葫芦浮起瓢”,都是有得有失,分布式架构也是如此,理性面对即可。
分布式架构有哪些关键技术?
服务治理。
服务治理的最大意义是需要把服务间的依赖关系、服务调用链,以及关键的服务给梳理出来,并对这些服务进行性能和可用性方面的管理。
架构管理。
基于服务所形成的架构需要有架构版本管理、整体架构的生命周期管理,以及对服务的编排、聚合、事务处理等服务调度功能。
DevOps。
分布式系统可以更为快速地更新服务,但是对于服务的测试和部署都会是挑战。所以,还需要DevOps的全流程,其中包括环境构建、持续集成、持续部署等。自动化运维。有了DevOps后,我们就可以对服务进行自动伸缩、故障迁移、配置管理、状态管理等 一系列的自动化运维技术了。
资源调度管理。
应用层的自动化运维需要基础层的调度支持,也就是云计算IaaS层的计算、存储、网络等资源调度、隔离和管理。
整体架构监控。
如果没有一个好的监控系统,那么自动化运维和资源调度管理只可能成为一个泡影, 因为监控系统是你的眼睛。没有眼睛,没有数据,就无法进行高效的运维。所以说,监控是非常重要 的部分。这里的监控需要对三层系统(应用层、中间件层、基础层)进行监控。
流量控制。
我们的流量控制,负载均衡、服务路由、熔断、降级、限流等和流量相关的调度都 会在这里,包括灰度发布之类的功能也在这里。
如何基于架构设计提高其性能?
应用缓存。
为系统添加缓存,可以有效地提高系统的访问能力。从前端的浏览器,到网络,再到后端的服务,底层的数据库、文件系统、硬盘和CPU,全都有缓存,这是提高快速访问能力最有效的手段。
负载均衡。
负载均衡是做水平扩展的关键技术,我们可以使用多台机器来共同分担一部分流量请求。
异步调用。
异步系统主要通过消息队列来对请求做排队处理,这样可以把前端的请求的峰值给“削平”了,而后端通过自己能够处理的速度来处理请求。
数据分区和数据镜像。
数据分区是把数据按一定的方式分成多个区(比如通过地理位置),不同的数据区来分担不同区的流量。
如何基于架构提高系统的稳定性?
服务拆分。
服务拆分可以更好的实现故障隔离,同时也可以重用服务模块。
服务冗余。
服务冗余是为了去除单点故障,支持服务的弹性伸缩,以及故障迁移。
限流降级。
当系统扛不住压力时,只能通过限流或者功能降级的方式来停掉一部分服务,或是拒绝一部分用户,以确保整个架构不会挂掉。
高可用架构。
高可用就是从冗余架构的角度来保障可用性。比如多租户隔离,灾备多活等。总之,就是为了不出单点故障。
高可用运维。
指的是DevOps中的CI(持续集成)/CD(持续部署)。一个良好的运维应做了足够的自动化测试,做了相应的灰度发布,以及对线上系统的自动化控制。这样,可以做到“计划内”或是“非计划内”的宕机事件的时长最短。
分布式架构设计有什么难点?
异构系统存在很多不标准问题。
构建软件时使用的编程语言、通讯协议、数据格式、运维标准可能不同,进而导致架构设计的复杂度越来越高。
系统架构中的服务依赖问题。
传统的单体应用,一台机器挂了,整个软件就挂掉了,分布式架构下也可能会出现这样的问题,因为一个服务可能会依赖于另一个服务,某个服务挂掉了,会导致调用链上的服务都出现故障(这就是多米诺骨牌效性)
故障发生的概率更大。
分布式系统中,服务和机器都会比较多,故障发生的频率会更大,只是影响面没有单体应用的影响面大,分布式系统中故障可以被隔离。还有就是分布式架构管理相对于单体架构也更加复杂,没有优秀的架构管理人员,故障的频率还是会非常高。
多层架构的运维复杂度更大。
分布式架构中,我们可以将系统分为四层(基础层、平台层、应用层、接入层)。基础层包括机器、网络和存储设备。平台层就是中间件层,包括tomcat、MySQL、Redis、Kafka类似的软件。应用层就是我们的业务软件,包括各种业务服务。接入层就是接入用户请求的网关、负载均衡、CDN、DNS等。