1.3 分布式架构的特征
前面我们介绍了一个简单的分布式系统,相信大家已经对它有了感性的认识。和集中式架构相比,分布式架构将资源、服务、任务、计算分布到不同的容器、服务器、网络节点中,它们需要协同完成一个或者多个任务。接下来,我们总结一下分布式架构的特征。
•分布性。将分布两字分开来看,“分”指的是拆分,可以理解为服务的拆分、存储数据的拆分、硬件资源的拆分。通过前面的例子可以看出,电商系统针对客户浏览商品并下订单这个业务过程,被拆分了商品服务、订单服务、库存服务和支付服务;它会根据商品 ID 对商品数据进行拆分,并存放到不同的数据库表中;对应用服务器和数据库服务器也会进行拆分。“布”指的是部署,也指资源的部署。既有计算资源,例如订单服务、库存服务,它们被部署到不同的容器或者应用服务器中,也有存储资源,例如将商品数据水平分布到不同的数据库服务器。简单来说,分布性就是拆开了部署。如果说单体架构是将计算和存储任务(应用)都分配到同一个物理资源上,那么分布式架构就是将这些任务(应用)放到不同的硬件资源上,并且这些硬件资源有可能分布在不同的网络中。
•自治性。从分布性的特征来看,资源分散了,以前一份资源做的事情,现在由多份资源同时完成。这样提高了系统的性能和可用性,这也是设计分布式架构的目的。分布性导致了自治性。简单来说,自治性就是每个应用服务都有管理和支配自身任务和资源的能力。例如,订单服务拥有自己的硬件资源,包括容器或者应用服务器,同时还处理商品下单的任务。对内,它可以采用自己的技术来实现,并不受其他服务的影响,业务上专注于处理订单业务;对外的沟通则使用服务注册中心和消息队列,与其他服务是平等关系。
•并行性。自治性导致每个应用服务都是一个独立的个体,拥有独立的技术和业务,占用独立的物理资源。这种独立能够减小服务之间的耦合度,增强架构的可伸缩性,为并行性打下基础。商品服务是被调用最为频繁的服务,特别在用户访问量增大时,需要进行水平扩展,从原来的 1 个服务扩展成 2 个,甚至更多。扩展后的这些服务完成的功能相同,处理的业务相同,占用的资源也相同,它们并行处理大量请求,相当于将一个大任务拆解成了若干个小任务,分配到不同的服务器上完成,因此并行性也会被称为并发性。其目的还是提高性能和可用性。
•全局性。分布性使得服务和资源都是分开部署的,自治性说明单个服务拥有单独的业务和资源,多个服务通过并行的方式完成大型任务。多个分布在不同网络节点的服务应用在共同完成一个任务时,需要有全局性的考虑。例如,商品服务在调用支付服务时,需要通过服务注册中心感知支付服务的存在;多个库存服务对商品库存进行扣减时,需要考虑临界资源的问题;订单服务在调用支付服务和库存服务的时候需要考虑分布式事务问题;当主数据库服务器挂掉的时候,需要及时切换到从数据库服务器,这些都是全局性的问题。说白了,就是分散的资源要想共同完成一件大事,需要沟通和协作,也就是拥有大局观。