实施微服务架构的五大原则

合集下载

微服务 设计原则

微服务 设计原则

微服务设计原则微服务设计原则是指在设计和构建微服务架构时应遵循的一些基本准则和最佳实践。

这些原则有助于确保微服务架构的可扩展性、灵活性和可维护性。

下面是几个常见的微服务设计原则:1.单一职责原则(SRP):每个微服务应该只负责一个特定的业务功能或服务。

这样可以确保微服务的职责清晰明确,易于维护和扩展。

2.边界可划分原则(BCD):微服务应该根据业务领域边界来划分。

边界清晰的微服务可以更好地隔离和管理业务逻辑,降低微服务之间的耦合度。

3.高内聚原则(SCP):每个微服务的内部组件和功能应该紧密相关,并尽可能独立于其他微服务。

高内聚的微服务可以更好地支持单独的开发和部署,并提高系统的稳定性和可维护性。

4.松耦合原则(LKP):微服务之间应该通过明确定义的接口进行通信,而不是直接依赖于其他微服务的内部实现。

这样可以降低微服务之间的依赖关系,使系统更加灵活和可扩展。

5.分布式一致性原则(DCC):在微服务架构中,数据的一致性是一个重要的挑战。

微服务之间的数据交互应该采用一致性机制,如分布式事务或事件驱动的方式来保证数据的一致性。

6.容错性原则(FT):微服务应该具备容错能力,即当某个微服务发生故障时,系统能够自动切换到备用的微服务上,从而保证系统的可用性和稳定性。

7.可观察性原则(OM):微服务应该具备良好的监控和日志记录功能,以便及时发现和解决潜在的问题。

可观察性是保证微服务架构可靠性和性能的重要保证。

总的来说,微服务设计原则旨在提供一种灵活、可扩展和可维护的架构模式,促使开发团队更好地组织和管理大型分布式系统,并最大化地发挥微服务架构的优势。

以上列举的原则只是一部分,在实践中还需要根据具体情况进行灵活运用。

微服务架构设计原理

微服务架构设计原理

微服务架构设计原理微服务架构是一种将单个应用程序拆分为多个小型服务的架构风格。

每个服务都运行在自己的进程中,并通过轻量级的通信机制(通常是HTTP 或gRPC)进行相互调用。

以下是微服务架构的一些设计原理:1. 单一职责原则(Single Responsibility Principle):每个微服务应该只专注于完成一个特定的业务功能,并且应该能够独立地进行开发、测试、部署和扩展。

2. 自治性(Autonomy):微服务应该是自治的,拥有自己的生命周期和独立的数据源。

它们可以独立地进行部署、升级和扩展,而不影响其他微服务的运行。

3. 松耦合(Loose Coupling):微服务之间应该保持松耦合,通过明确的接口和契约进行交互。

这有助于提高系统的灵活性和可维护性。

4. 领域驱动设计(Domain-Driven Design):采用领域驱动设计的思想,将业务领域划分为独立的子领域,并将每个子领域对应到一个微服务中。

这样可以更好地理解和管理复杂的业务逻辑。

5. 数据独立性(Data Independence):每个微服务应该拥有自己独立的数据存储,避免数据共享和耦合。

这有助于提高数据的一致性和可维护性。

6. 容错性(Fault Tolerance):微服务架构应该具备容错能力,通过冗余、备份和错误恢复机制来确保系统的高可用性。

7. 可扩展性(Scalability):微服务应该能够轻松地进行水平扩展,通过添加更多的实例来处理增加的负载。

8. 敏捷开发(Agile Development):微服务架构支持敏捷开发方法,使得开发团队能够独立地开发、测试和部署微服务,提高开发效率和迭代速度。

9. 自动化测试(Automated Testing):由于微服务的独立性和松耦合性,自动化测试变得更加重要。

每个微服务都应该有全面的测试覆盖,以确保其可靠性和稳定性。

10. DevOps 文化(DevOps Culture):微服务架构强调开发、运维和质量保障团队之间的紧密合作,采用自动化的持续集成和持续部署(CI/CD)流程,实现快速交付和反馈。

微服务架构的服务拆分原则

微服务架构的服务拆分原则

微服务架构的服务拆分原则微服务架构是一种将应用程序拆分为一系列小型、自治的服务的架构风格。

通过将应用程序拆分为多个松耦合、高内聚的服务,可以提供更高的可伸缩性、可维护性和可扩展性。

在实施微服务架构时,服务的拆分是非常关键的一步,它直接影响到系统的整体性能和开发效率。

以下是微服务架构服务拆分的原则:1.单一职责原则(SRP):每个服务应该有清晰的职责,只负责解决特定的业务问题。

这样可以确保每个服务都能够专注于自己的领域,并且容易进行独立的开发、测试和部署。

2.边界上下文原则(BCP):将应用程序划分为不同的边界上下文,每个边界上下文都有自己的业务领域和数据模型。

服务的拆分应该根据边界上下文来进行,使得每个服务都能够独立地管理和维护自己的数据模型和业务逻辑。

3.服务自治原则(SCP):每个服务应该是自治的,即每个服务都有自己的数据存储和业务逻辑,并且可以独立地进行开发、测试和部署。

这样可以减少服务之间的耦合,提高系统的可伸缩性和可维护性。

4. 服务通信原则(CCP):服务之间的通信应该是基于轻量级的协议和消息传递机制的,例如RESTful API、消息队列等。

避免使用复杂的远程调用,降低服务之间的耦合性,提高系统的可扩展性和可靠性。

5.数据一致性原则(DCP):在拆分服务时,需要考虑数据的一致性和交互模式。

一致性可以通过事件驱动的方式来实现,每个服务都可以通过事件订阅和发布来同步数据和状态。

6.前后端分离原则(FEP):前端页面应该与后端服务解耦,前端可以通过API网关来访问多个后端服务。

这样可以实现前后端的并行开发、独立部署和扩展。

7.高内聚原则(CCP):每个服务应该有高内聚的功能,并且尽量减少对其他服务的依赖。

这样可以提高服务的独立性和可测试性,同时也减少了服务之间的耦合。

8.业务优先原则(BP):服务拆分应该根据业务需求来进行,关注解决核心业务问题。

而不是一味地将应用程序按照技术的维度进行拆分。

微服务微管理制度

微服务微管理制度

第一章总则第一条为了规范微服务架构的管理,提高系统架构的灵活性和可维护性,保障系统稳定运行,特制定本制度。

第二条本制度适用于公司内部所有采用微服务架构的项目和团队。

第三条微服务管理应遵循以下原则:1. 模块化原则:将系统分解为多个独立、可扩展的微服务。

2. 松耦合原则:微服务之间通过轻量级通信机制进行交互,降低服务间的依赖。

3. 服务自治原则:每个微服务拥有独立的部署、扩展和升级能力。

4. 标准化原则:统一服务接口规范、通信协议和开发规范。

5. 安全性原则:确保微服务架构的安全性,防止数据泄露和恶意攻击。

第二章微服务设计第四条微服务设计应遵循以下流程:1. 需求分析:对业务需求进行深入分析,确定服务边界。

2. 服务拆分:根据业务逻辑和数据独立性原则,将系统拆分为多个微服务。

3. 接口设计:定义微服务接口规范,包括接口名称、参数、返回值等。

4. 数据存储:根据微服务的业务需求,选择合适的数据存储方案。

5. 技术选型:选择合适的开发语言、框架和中间件。

第五条微服务设计应考虑以下因素:1. 业务独立性:确保每个微服务能够独立部署和扩展。

2. 数据一致性:确保微服务之间数据的一致性,防止数据冲突。

3. 性能优化:考虑微服务的性能,包括响应时间、吞吐量等。

4. 安全性:确保微服务的安全性,防止数据泄露和恶意攻击。

第三章微服务开发第六条微服务开发应遵循以下规范:1. 代码规范:遵循统一的代码风格和命名规范。

2. 测试规范:编写单元测试和集成测试,确保代码质量。

3. 文档规范:编写详细的服务文档,包括接口说明、使用示例等。

4. 版本控制:使用版本控制系统进行代码管理。

第七条微服务开发应使用以下工具和技术:1. 开发语言:Java、Python、Go等。

2. 框架:Spring Boot、Django、Gin等。

3. 数据库:MySQL、MongoDB、Redis等。

4. 中间件:RabbitMQ、Kafka、Consul等。

微服务架构原理和设计方法

微服务架构原理和设计方法

微服务架构原理和设计方法微服务架构是一种设计方法,将一个大型的应用程序拆分成一组小而独立的服务,每个服务都可以独立开发、部署和扩展。

每个服务都有自己的业务功能,并通过轻量级的通信机制进行通信和协作。

微服务架构的设计原则和方法可以帮助开发者构建可靠、可扩展和易于维护的系统。

一、微服务架构原理1.单一职责原则:每个微服务应该只关注一个业务功能,并尽量将功能拆分成更小的单元。

2.松耦合原则:每个微服务应该是相互独立的,在设计时应该尽量减小服务之间的依赖。

3.高内聚原则:每个微服务应该将相关的功能聚焦在一起,并通过定义清晰的接口进行通信。

4.弹性设计原则:微服务应该具备弹性,能够根据负载和需求进行伸缩,以适应不同的场景。

5.分布式设计原则:微服务架构涉及到多个服务之间的通信和协作,需要考虑分布式系统的设计和管理。

二、微服务架构设计方法1.服务拆分:将大型应用程序拆分成一个个小的服务,通过定义清晰的接口进行通信和协作。

可以根据业务功能或领域进行拆分,将功能聚焦在一个服务中。

2. 通信机制:选择适合的通信协议和机制,如RESTful API、消息队列等。

需要考虑请求响应时间、可靠性和并发处理的能力。

3.数据管理:每个微服务都有自己的数据库或数据存储,需要考虑数据一致性和事务管理。

可以使用分布式事务或事件驱动的方式进行数据管理。

4.容错和容灾:微服务架构涉及多个服务之间的依赖,需要考虑容错和容灾的问题。

可以使用断路器、重试机制和服务降级等方法来处理故障和异常情况。

5.监控和日志:每个微服务都需要有自己的监控和日志系统,用于跟踪和分析系统的性能和健康状况。

可以使用分布式追踪工具和日志收集器来进行监控和分析。

6.部署和扩展:每个微服务都可以独立部署和扩展,可以使用容器化技术和自动化部署工具来简化部署过程。

可以根据负载和需求来进行扩展,水平扩展或垂直扩展。

三、微服务架构的优点和挑战1.独立开发和部署:每个微服务都可以独立开发和部署,降低开发和部署的复杂性。

微服务设计标准

微服务设计标准

微服务设计标准微服务设计标准是一组规范和指导原则,用于指导如何设计和实现微服务架构。

以下是一些常见的微服务设计标准:1. 单一职责原则(Single Responsibility Principle):每个微服务应该只关注一个特定的业务功能或领域,确保每个微服务的职责清晰明确。

2. 接口隔离原则(Interface Segregation Principle):微服务之间的接口设计应该精简明确,避免接口的冗余和过度依赖。

3. 松耦合原则(Loose Coupling Principle):微服务之间应该拥有松散的耦合关系,通过消息队列、事件驱动等方式进行异步通信,降低微服务之间的依赖关系。

4. 高内聚原则(High Cohesion Principle):每个微服务应该包含相对自包含的功能模块,避免微服务中的功能过多或不相关的部分。

5. 容错设计原则(Fault Tolerance Principle):对于可能发生故障的部分,应该进行容错设计,如使用熔断器、限流器等机制来保护系统的稳定性。

6. 数据管理原则(Data Management Principle):每个微服务应该有自己的数据存储,避免微服务之间直接共享数据库,以保证数据的独立性和一致性。

7. 安全性原则(Security Principle):微服务应该具备一定的安全性控制,如身份验证、权限控制等,以保护系统和用户数据的安全。

8. 服务发现和注册原则(Service Discovery and Registration Principle):微服务应该能够自动注册和发现其他微服务,以便于实现水平扩展和动态部署。

9. 监控和日志原则(Monitoring and Logging Principle):微服务应该具备监控和日志记录的能力,以便于及时发现系统问题和进行故障排查。

10. 可测试性原则(Testability Principle):每个微服务应该具备可测试的特性,包括单元测试、集成测试等,以保证微服务的质量和稳定性。

微服务架构的服务拆分原则

微服务架构的服务拆分原则

微服务架构的服务拆分原则在微服务架构中,服务的拆分是构建灵活、可扩展、可维护的系统的重要部分。

服务的拆分需要遵循一定的原则,以确保各个服务具有独立性、可重用性、可扩展性,以及易于测试和维护。

本文将介绍微服务架构的服务拆分原则,包括单一职责原则、服务自治原则、服务组合原则、服务界面隔离原则、服务可替换原则、服务最小化原则和服务可测试原则。

一、单一职责原则单一职责原则(Single Responsibility Principle)是面向对象设计的基本原则之一,它要求一个类或服务只应该有一个引起变化的原因。

在微服务架构中,每个服务应该只有一个职责,并且这个职责应该被清晰地定义和实现。

单一职责原则可以帮助我们拆分出职责清晰、功能明确的服务,提高服务的内聚性和可维护性。

同时,它还有助于降低服务的复杂性,减少出错的可能性。

二、服务自治原则服务自治原则(Service Autonomy Principle)是指在微服务架构中,每个服务都应该具有自我管理和自我修复的能力。

每个服务应该拥有自己的数据库、应用程序接口(API)和服务质量(QOS)策略,以确保服务的高可用性和可靠性。

服务自治原则可以帮助我们减少不同服务之间的相互依赖和影响,提高服务的可靠性和可维护性。

同时,它还有助于提高服务的可扩展性和灵活性。

三、服务组合原则服务组合原则(Service Composition Principle)是指在微服务架构中,可以将多个小型服务组合成一个更大的服务。

这个原则强调将服务之间的交互和依赖关系降到最低,以便提高服务的可维护性和可重用性。

服务组合原则可以帮助我们将松耦合的服务组合在一起,以实现复杂的功能。

同时,它还有助于提高服务的可测试性和可部署性。

四、服务界面隔离原则服务界面隔离原则(Service Interface Isolation Principle)是指在微服务架构中,应该将服务接口与实现分离,以便降低服务的耦合性和提高服务的可维护性。

微服务架构的设计原则及实践

微服务架构的设计原则及实践

微服务架构的设计原则及实践现代软件系统的复杂性越来越高,在这种情况下,微服务架构被广泛认可为一种优秀的设计方式,能够将系统划分为多个小型服务,从而实现弹性、可靠性与可维护性。

那么,在微服务架构的设计中,有哪些核心原则需要遵循呢?本文将分享一些微服务架构的设计原则和实践,帮助读者更深入地理解微服务架构并应用到实际开发中。

一、单一职责原则单一职责原则是指,一个服务应该只承担一个明确的职责。

这是微服务架构的核心原则之一,它能够有效地降低服务的复杂性、提升服务的可维护性。

如果在设计微服务时过度复杂化,将一个服务拆分成多个不相关的组件,将会导致系统的可维护性进一步降低。

二、解耦原则解耦原则是指不同服务之间应该尽量减少依赖关系。

当系统中的某个服务发生变化时,其他服务不应该受到影响。

这种设计方式能够提升系统的弹性,降低微服务架构带来的不稳定性。

解耦原则的实践需要结合服务的拆分方式、协议设计和流程设计等方面进行综合考虑。

三、服务自治原则服务自治原则是指,每个微服务应该具备自主性,能够自我维护、管理和扩展。

这种设计方式能够提升系统的可靠性、弹性和可维护性。

服务自治原则的实践需要结合容器技术、容器编排工具和自动化运维理念等方面进行综合考虑。

四、基础设施即代码原则基础设施即代码原则是指,基础设施的管理和维护应该以代码形式完成。

这种设计方式能够提升基础设施的可靠性、可管理性和可重复性。

基础设施即代码原则的实践需要结合容器编排工具、自动化测试工具和集成部署工具等方面进行综合考虑。

五、公共代码库原则公共代码库原则是指,在微服务架构中,公共的代码应该集中管理,避免过多地复制代码。

这种设计方式能够提升代码的可维护性、降低重复编写代码的工作量,同时保证代码的一致性。

公共代码库原则的实践需要结合服务拆分设计、协议设计和测试框架等方面进行综合考虑。

六、分布式系统设计原则微服务架构是一种分布式系统设计,因此需要遵循分布式系统的设计原则。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实施微服务架构的五大原则“微服务化架构并非银弹,它的实施本身就会面临很多陷阱和挑战。

本文从微服务的生命周期全过程,阐述微服务架构的改造如何实施,以及如何避开各种陷阱,提升实施效率。

“随着业务的发展,代码量的膨胀和团队成员的增加,传统单体式架构的弊端越来越凸显,严重制约了业务的快速创新和敏捷交付。

为了解决传统单体架构面临的挑战,先后演进出了SOA服务化架构、RPC框架、分布式服务框架,最后就是当今非常流行的微服务架构。

微服务化架构并非银弹,它的实施本身就会面临很多陷阱和挑战,涉及到设计、开发、测试、部署、运行和运维等各个方面,一旦使用不当,则会导致整个微服务架构改造的效果大打折扣,甚至失败。

本文从微服务的生命周期全过程,阐述微服务架构的改造如何实施,以及如何避开各种陷阱,提升实施效率。

在实施微服务架构改造之前,我们的产品线遇到一个很大挑战,就是需求的交付周期越来越短,采用的传统MVC单体架构越来越难满足特性快速交付和上线的需求。

传统的电信项目,团队规模往往都非常大,甚至会跨地域。

跨团队、跨地域的分布式协同开发,代码的重用和共享是个难题。

例如我们的支付功能需要新增一个限额保护,短短十几行代码的一个小需求,评估之后竟然需要9个星期才能上线。

原因就是限额保护功能需要同时在9个不同的功能模块中修改,新增900多个测试用例用来做全量的回归测试,示例如下:通过对已有的MVC单体架构进行分析,我们发现主要存在如下几个问题:•研发成本高:代码重复率高,需求变更困难,无法满足新业务快速上线和敏捷交付。

•测试、部署成本高:业务运行在一个进程中,因此系统中任何程序的改变,都需要对整个系统重新测试并部署。

•可伸缩性差:水平扩展只能基于整个系统进行扩展,无法针对某一个功能模块按需扩展。

•可靠性差:某个应用BUG,例如死循环、OOM等,会导致整个进程宕机,影响其它合设的应用。

•代码维护成本高:本地代码在不断的迭代和变更,最后形成了一个个垂直的功能孤岛,只有原来的开发者才理解接口调用关系和功能需求,新加入人员或者团队其它人员很难理解和维护这些代码。

•依赖关系无法有效管理:服务间依赖关系变得错踪复杂,甚至分不清哪个应用要在哪个应用之前启动,架构师都不能完整的描述应用的架构关系。

以上问题的应对策略,就是服务化。

首先,需要对业务进行拆分。

当业务量大了以后,特别是当不同的功能耦合在一起的时候,任何一个地方的改动都是非常困难的,必须对业务进行拆分,拆分的策略有两种:•横向拆分。

按照不同的业务域进行拆分,例如订单、商品、库存、号卡资源等。

形成独立的业务领域微服务集群。

•纵向拆分。

把一个业务功能里的不同模块或者组件进行拆分。

例如把公共组件拆分成独立的原子服务,下沉到底层,形成相对独立的原子服务层。

这样一纵一横,就可以实现业务的服务化拆分。

其次,要做好微服务的分层:梳理和抽取核心应用、公共应用,作为独立的服务下沉到核心和公共能力层,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。

完成服务的拆分和分层工作之后,就会涉及到分布式的部署和调用。

如何透明化、高效的发现服务,需要一个服务注册中心,通过服务化和订阅、发布机制对应用调用关系解耦,支持服务的自动注册和发现。

在实施微服务架构之前,我们一起回顾下服务化架构的演进历史。

MVCMVC架构大部分人都用过,它主要用来解决前后端、界面、控制逻辑和业务逻辑分层问题。

比较流行的技术堆栈就是Spring + Struts + iBatis(Hibernate)+ Tomcat(JBoss)。

RPC随着业务特别是互联网的发展,业务规模的扩大,模块化逐步成为一种趋势,此时解决模块之间远程调用的RPC框架应运而生。

RPC需要解决模块之间跨进程通信的问题,不同的团队开发不同的模块,通过一个RPC框架实现远程调用,RPC框架帮业务把通信细节给屏蔽掉,但是RPC框架也有自身的缺点。

RPC本身不负责服务化,例如:服务的自动发现不管、服务的应用和发布不管、服务的运维和治理也不管。

没有透明化、服务化的能力,对整个应用层的侵入还是比较深的。

SOASOA服务化架构,企业级资产重用和异构系统间的集成对接,SOA架构的现状:在传统企业IT领域,主要是解决异构系统之间的互通和粗粒度的标准化(WebService)。

互联网领域,提供一套高效支撑应用快速开发迭代的服务化架构。

例如各个互联网公司自研或者开源的分布式服务框架。

微服务架构首先看一下微服务架构的定义:微服务(MSA)是一种架构风格,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。

它有如下几个特征:•小,且只干一件事情。

•独立部署和生命周期管理。

•异构性•轻量级通信,RPC或者Restful。

微服务架构的实施过程中,首先遇到的最大的难题,就是它的拆分原则。

微服务拆分原则:围绕业务功能进行垂直和水平拆分。

大小粒度是难点,也是团队争论的焦点。

不好的实践•以代码量作为衡量标准,例如500行以内。

•拆分的粒度越小越好,例如以单个资源的操作粒度为划分原则。

建议的原则•功能完整性、职责单一性。

•粒度适中,团队可接受。

•迭代演进,非一蹴而就。

•API的版本兼容性优先考虑。

代码量多少不能作为衡量微服务划分是否合理的原则,因为我们知道同样一个服务,功能本身的复杂性不同,代码量也不同。

还有一点需要重点强调,在项目刚开始的时候,不要期望微服务的划分一蹴而就。

微服务架构的演进,应该是一个循序渐进的过程。

在一个公司、一个项目组,它也需要一个循序渐进的演进过程。

一开始划不好,没有关系。

当演进到一个阶段时,微服务的部署、测试和运维等成本都非常低的时候,这对于你的团队来说就是一个好的微服务。

微服务的开发还会面临依赖滞后的问题。

例如:A要做一个身份证号码校验,依赖服务提供者B。

由于B把身份证号码校验服务的开发优先级排的比较低,无法满足A的交付时间点。

A会面临要么等待,要么自己实现一个身份证号码校验功能。

以前单体架构的时候,大家需要什么,往往喜欢自己写什么,这其实是没有太严重的依赖问题。

但是到了微服务时代,微服务是一个团队或者一个小组提供的,这个时候一定没有办法在某一个时刻同时把所有的服务都提供出来,“需求实现滞后”是必然存在的。

一个好的实践策略就是接口先行,语言中立,服务提供者和消费者解耦,并行开发,提升产能。

无论有多少个服务,首先需要把接口识别和定义出来,然后双方基于接口进行契约驱动开发,利用Mock 服务提供者和消费者,互相解耦,并行开发,实现依赖解耦。

采用契约驱动开发,如果需求不稳定或者经常变化,就会面临一个接口契约频繁变更的问题。

对于服务提供者,不能因为担心接口变更而迟迟不对外提供接口,对于消费者要拥抱变更,而不是抱怨和抵触。

要解决这个问题,一种比较好的实践就是管理+ 技术双管齐下:•允许接口变更,但是对变更的频度要做严格管控。

•提供全在线的API文档服务(例如Swagger UI),将离线的API文档转成全在线、互动式的API文档服务。

•API变更的主动通知机制,要让所有消费该API的消费者能够及时感知到API的变更。

•契约驱动测试,用于对兼容性做回归测试。

微服务开发完成之后需要对其进行测试。

微服务的测试包括单元测试、接口测试、集成测试和行为测试等,其中最重要的就是契约测试:利用微服务框架提供的Mock机制,可以分别生成模拟消费者的客户端测试桩和提供者的服务端测试桩,双方可以基于Mock测试桩对微服务的接口契约进行测试,双方都不需要等待对方功能代码开发完成,实现了并行开发和测试,提高了微服务的构建效率。

基于接口的契约测试还能快速的发现不兼容的接口变更,例如修改字段类型、删除字段等。

测试完成之后,需要对微服务进行自动化部署。

微服务的部署原则:独立部署和生命周期管理、基础设施自动化。

需要有一套类似于CI/CD的流水线来做基础设施自动化,具体可以参考Netflix开源的微服务持续交付流水线Spinnaker:最后一起看下微服务的运行容器:微部署可以部署在Dorker容器、PaaS平台(VM)或者物理机上。

使用Docker部署微服务会带来很多优先:•一致的环境,线上线下环境一致。

•避免对特定云基础设施提供商的依赖。

•降低运维团队负担。

•高性能接近裸机性能。

•多租户。

相比于传统的物理机部署,微服务可以由PaaS平台实现微服务自动化部署和生命周期管理。

除了部署和运维自动化,微服务云化之后还可以充分享受到更灵活的资源调度:•云的弹性和敏捷。

•云的动态性和资源隔离。

微服务部署上线之后,最重要的工作就是服务治理。

微服务治理原则:线上治理、实时动态生效。

微服务常用的治理策略:•流量控制:动态、静态流控制。

•服务降级。

•超时控制。

•优先级调度。

•流量迁移。

•调用链跟踪和分析。

•服务路由。

•服务上线审批、下线通知。

•SLA策略控制。

微服务治理模型如下所示:最上层是为服务治理的UI界面,提供在线、配置化的治理界面供运维人员使用。

SDK层是提供了微服务治理的各种接口,供服务治理Portal调用。

最下面的就是被治理的微服务集群,集群各节点会监听服务治理的操作去做实时刷新。

例如:修改了流控阈值之后,服务治理服务会把新的流控的阈值刷到服务注册中心,服务提供者和消费者监听到阈值变更之后,获取新的阈值并刷新到内存中,实现实时生效。

由于目前服务治理策略数据量不是特别大,所以可以将服务治理的数据放到服务注册中心(例如etcd/ZooKeeper),没有必要再单独做一套。

介绍完微服务实施之后,下面我们一起学习下微服务的最佳实践。

服务路由:本地短路策略。

关键技术点:优先调用本JVM内部服务提供者,其次是相同主机或者VM 的,最后是跨网络调用。

通过本地短路,可以避免远程调用的网络开销,降低服务调用时延、提升成功率。

原理如下所示:服务调用方式:同步调用、异步调用、并行调用。

一次服务调用,通常就意味着会挂一个服务调用线程。

采用异步调用,可以避免线程阻塞,提升系统的吞吐量和可靠性。

但是在实际项目中异步调用也有一些缺点,导致使用不是特别广泛:•需要写异步回调逻辑,与传统的接口调用使用方式不一致,开发难度大一些。

•一些场景下需要缓存上下文信息,引入可靠性问题。

并行调用适用于多个服务调用没有上下文依赖,逻辑上可以并行处理,类似JDK的Fork/Join, 并行服务调用涉及到同步转异步、异步转同步、结果汇聚等,技术实现难度较大,目前很多服务框架并不支持。

采用并行服务调用,可以把传统串行的服务调用优化成并行处理,能够极大的缩短服务调用时延。

三种服务调用方式的原理图如下:微服务故障隔离:线程级、进程级、容器级、VM级、物理机级等。

关键技术点:•支持服务部署到不同线程/线程池中。

•核心服务和非核心服务隔离部署。

相关文档
最新文档