构建现代软件架构的两大支柱
一、分布式架构:资源与任务的分散布局
1、分布式系统的概念
图片来源于网络,如有侵权联系删除
- 分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统,这些节点可以是物理上不同的服务器、虚拟机或者容器等,一个大型的电商系统,可能有专门处理用户认证的节点、商品管理的节点、订单处理的节点等,每个节点都运行着特定的软件组件,并且它们相互协作来提供完整的服务。
- 与集中式系统相比,分布式系统的资源是分散的,在集中式系统中,所有的计算、存储等资源都集中在一个中心节点上,而分布式系统将这些资源分布在多个节点上,这样做的好处是提高了系统的可扩展性,当系统的业务量增长时,可以通过增加节点的方式来扩展系统的处理能力,而不需要更换整个中心节点的硬件设备。
2、分布式系统的特性
高可用性:由于资源分布在多个节点上,当某个节点出现故障时,其他节点可以接管其工作,从而保证系统的持续运行,在一个分布式文件存储系统中,如果一个存储节点损坏,系统可以自动将存储在该节点上的数据重新分配到其他正常的节点上,用户仍然可以正常访问文件。
可扩展性:可以方便地添加新的节点来增加系统的处理能力、存储容量等,以云计算平台为例,用户可以根据自己的业务需求,动态地增加虚拟机实例的数量,以应对流量高峰或者数据量的增长。
并行性:分布式系统中的多个节点可以同时处理不同的任务,从而提高系统的整体处理效率,在科学计算中,一个复杂的计算任务可以分解成多个子任务,分配到不同的计算节点上并行计算,大大缩短计算时间。
3、分布式系统面临的挑战
数据一致性:在分布式环境下,由于数据分布在多个节点上,如何保证数据的一致性是一个难题,在一个分布式数据库系统中,当多个用户同时对同一份数据进行修改时,需要采用合适的一致性协议,如Paxos或者Raft协议,来确保数据在各个节点上的最终一致性。
网络通信:节点之间通过网络进行通信,网络的延迟、带宽限制和故障等都会影响系统的性能和可靠性,在一个分布式实时监控系统中,如果网络出现拥塞,监控数据的传输就会受到影响,可能导致监控结果不准确或者延迟。
分布式事务处理:当一个业务操作涉及多个节点上的数据修改时,需要保证事务的原子性、一致性、隔离性和持久性(ACID)特性,在一个电商系统中,下单操作涉及到库存减少、订单生成和用户账户余额扣除等多个操作,这些操作分布在不同的节点上,如何保证整个下单过程的事务完整性是一个复杂的问题。
图片来源于网络,如有侵权联系删除
二、微服务架构:服务的精细化拆分与组合
1、微服务的定义与理念
- 微服务架构是一种将单一应用程序开发为一组小型服务的方法,每个服务都运行在自己的进程中,并使用轻量级机制(如HTTP RESTful API)进行通信,一个在线旅游系统可以拆分为酒店预订服务、机票预订服务、旅游景点推荐服务等多个微服务,每个微服务都有自己独立的业务逻辑和数据存储,它们可以独立开发、部署和扩展。
- 微服务的理念强调服务的独立性和自治性,各个微服务可以由不同的团队开发,使用不同的技术栈,这使得团队可以根据业务需求和技术专长选择最适合的技术来开发微服务,酒店预订服务可能使用Java开发,而旅游景点推荐服务可能使用Python开发,只要它们之间通过统一的接口进行通信即可。
2、微服务架构的优点
灵活性与可维护性:由于每个微服务都是独立的,对某个微服务的修改不会影响到其他微服务,如果要对酒店预订服务中的价格计算逻辑进行修改,只需要在该微服务内部进行调整,而不会影响到机票预订服务或其他服务,这使得系统的维护更加容易,降低了系统的复杂度。
技术多样性:不同的微服务可以采用不同的技术栈,这为企业利用新技术提供了便利,对于一些对性能要求较高的微服务,可以采用Go语言开发;对于一些注重数据分析的微服务,可以采用R语言或者Python中的数据科学库。
可扩展性:每个微服务都可以独立扩展,如果酒店预订服务的业务量增长,可以单独对该微服务进行水平扩展(增加实例数量)或垂直扩展(提升单个实例的资源配置),而不需要扩展整个旅游系统的所有服务。
3、微服务架构面临的问题
服务治理:随着微服务数量的增加,如何对这些服务进行有效的管理成为一个挑战,包括服务的注册与发现、服务的监控、服务的版本管理等,当一个新的微服务上线或者一个旧的微服务更新版本时,如何让其他依赖它的微服务能够及时发现并正确调用是需要解决的问题。
图片来源于网络,如有侵权联系删除
分布式系统复杂性:微服务架构本质上是分布式系统,所以也面临着分布式系统的一些问题,如数据一致性和网络通信等,当酒店预订服务和机票预订服务都需要访问用户的基本信息时,如何保证用户信息在不同服务中的一致性是一个难题。
微服务间的通信开销:由于微服务之间通过网络进行通信,过多的微服务交互会增加通信开销,从而影响系统的整体性能,一个复杂的业务流程可能涉及多个微服务的调用,如果每个微服务的响应时间较长或者网络延迟较大,会导致整个业务流程的执行时间大大增加。
三、分布式与微服务的关系
1、微服务是分布式架构的一种实现方式
- 微服务架构采用了分布式的思想,将一个大型的应用拆分成多个小的服务,这些服务分布在不同的节点上运行,在一个大型的金融系统中,账户管理微服务、交易处理微服务、风险评估微服务等可能分布在不同的服务器或者容器中,它们通过网络进行通信和协作,这体现了分布式系统中资源分散和节点协作的特点。
2、分布式技术为微服务提供支撑
- 分布式技术中的一些概念和工具,如分布式数据库、分布式缓存、分布式消息队列等,对微服务架构的实现起到了重要的支撑作用,分布式数据库可以为不同的微服务提供数据存储,每个微服务可以有自己独立的数据库模式或者使用共享的分布式数据库中的部分数据,分布式缓存可以提高微服务的性能,当多个微服务需要频繁访问某些数据时,可以将这些数据缓存到分布式缓存中,减少数据库的访问压力,分布式消息队列可以用于微服务之间的异步通信,当交易处理微服务完成一笔交易后,可以通过消息队列通知风险评估微服务进行风险评估,这样可以提高系统的响应速度和可靠性。
分布式和微服务是现代软件架构中非常重要的概念,分布式架构提供了资源分散和节点协作的框架,而微服务架构则是在这个框架下对服务进行精细化拆分和组合的一种方法,它们各自有其特点、优点和面临的挑战,并且在实际的软件系统开发中相互关联、相互支撑,共同为构建高效、灵活、可扩展的软件系统提供了有力的保障。
评论列表