微服务框架的设计与实现

合集下载

微服务架构的设计和实现方法

微服务架构的设计和实现方法

微服务架构的设计和实现方法随着互联网的蓬勃发展,越来越多的企业开始采用微服务架构来实现业务。

微服务架构是一种面向服务的架构,它将应用程序划分为一系列小型服务,每个服务都可以独立部署和维护,通过内部通信来协同工作,从而实现高可用性、可扩展性和可维护性。

本文将介绍微服务架构的设计和实现方法,包括服务划分、服务通信、服务注册和发现、负载均衡以及容错处理等方面。

一、服务划分微服务架构的核心思想是将应用程序拆分为一系列小型服务,每个服务都专注于一项特定的业务功能。

因此,正确的服务划分对于构建可扩展、可维护的微服务架构至关重要。

服务划分的原则包括:单一职责原则、高内聚低耦合原则、业务驱动原则、自治性原则和可替换性原则。

在进行服务划分时,应该考虑以下几个方面:1.功能划分:将应用程序按照功能进行划分,每个服务负责一个业务功能。

2.数据划分:将应用程序按照数据进行划分,每个服务负责一个数据域。

3.流程划分:将应用程序按照流程进行划分,每个服务负责一个流程。

二、服务通信服务通信是微服务架构的关键,它涉及到多个服务之间的通信和协作。

常见的服务通信方式包括同步调用、异步调用和事件驱动。

在进行服务通信时,应考虑以下几个方面:1.协议选择:选择适合业务需求的通信协议,如HTTP、TCP、UDP等。

2.编解码方式:选择合适的编解码方式,如JSON、XML、Protobuf等。

3.异常处理:在进行服务通信时,可能会出现各种异常情况,需要进行有效的异常处理。

三、服务注册和发现服务注册和发现是微服务架构中的一个核心组件,它用于管理和查找服务。

通常情况下,每个服务都需要向注册中心进行注册,以便其他服务可以发现它并与之通信。

常见的服务发现工具包括Zookeeper、Eureka和Consul等。

在进行服务注册和发现时,应考虑以下几个方面:1.注册信息:确定服务需要注册的信息,如服务名称、版本号、IP地址等。

2.发现机制:选择适合项目的服务发现机制,如客户端发现、服务器发现、单点负载均衡等。

微服务架构设计与实现

微服务架构设计与实现

微服务架构设计与实现随着互联网的不断发展,应用系统已经不再简单地局限于单一的业务场景,而是越来越复杂多样化,因此,如何构建一个可靠、高效、可扩展、易维护的应用系统,已成为当前研究的热点之一。

在这种情况下,微服务架构就应运而生,因其具有高可伸缩性、代码的独立性、解耦性、可维护性以及易于升级等特点。

一、什么是微服务架构微服务架构是一种将单体应用拆分成小型、轻量级的服务的架构模式。

每个微服务可以独立运行,通过应用编程接口API进行交互。

每个微服务可以由不同的技术栈实现,并且可以升级和部署。

通过将应用程序拆分成更小的部分并将其部署到独立的服务器上,微服务能够更好地满足业务需求。

二、微服务架构的优势1.可伸缩性微服务架构采用组件化的方式,每个微服务都可独立部署,可以根据业务需求对其进行弹性扩展。

这样,可以根据系统的实际负载情况来增减服务器的数量,从而保证服务的可用性和高效性。

2.代码的独立性由于每个微服务的代码都是相互独立的,因此,它们可以由不同的开发团队独立开发和部署,这为不同的业务线提供了更灵活的开发方式,同时,也方便了团队协作和后期维护。

3.解耦性在微服务架构中,每个微服务都是相互独立的,这就意味着,如果其中一个服务发生了故障,它不会对其它服务造成影响,这降低了系统出现故障的风险。

同时,因为不同的服务之间相互独立,各个服务之间的耦合性也会被大大降低,这样就可以更加方便地编写和维护应用程序。

4.可维护性在微服务架构中,每个微服务都处于一个独立的进程中。

这使得软件的升级和部署变得非常容易。

当一个服务需要更新时,你只需要更新该服务的代码,然后在无缝地替换实例即可,而不会影响到其他服务的运行。

5.易于升级一个成熟的微服务架构应该可以轻松进行升级,这意味着你可以使用高版本的不同技术栈来替换旧技术栈,对于企业和应用系统来说,这是非常重要的,因为应用系统需要不断地进行技术升级来保持其竞争力。

三、微服务架构的实现要实现微服务架构,需要考虑以下要素:1.服务注册与发现在微服务架构中,每个服务都是一个独立的单元,因此需要一个服务注册中心来管理所有的服务。

微服务架构的设计与实现

微服务架构的设计与实现

微服务架构的设计与实现随着互联网技术的快速发展,微服务架构在企业应用开发中越来越受到关注和应用。

微服务架构以其分布式、高可用、易扩展等特点,在解决复杂系统开发问题上展现出巨大的优势。

本文将从设计和实现两个方面介绍微服务架构的相关内容。

一、微服务架构的设计1. 服务拆分微服务架构的核心思想是将一个庞大而复杂的系统拆分成多个独立的服务,每个服务负责特定的业务功能。

服务拆分的原则是职责单一、高内聚、松耦合,以便于独立开发、部署和扩展。

在设计过程中,可以根据业务模块的划分来确定服务的边界。

2. 服务间通信微服务之间通过轻量级的协议进行通信,常用的协议包括RESTful API、消息队列和RPC。

选择合适的通信协议需要考虑系统的性能、可靠性和可维护性。

此外,服务间通信的安全性也是需要重视的一点,可以采用加密、身份验证等方式来保护通信的安全。

3. 服务注册与发现为了实现服务的动态扩展和替换,微服务架构需要一个服务注册和发现的机制。

常用的解决方案有ZooKeeper、Etcd和Consul等。

通过注册中心,每个服务可以将自己的信息注册到其中,其他服务可以根据需要动态地发现和调用其他服务。

二、微服务架构的实现1. 开发语言和技术栈选择微服务架构允许每个服务使用不同的开发语言和技术栈,但在实际应用中,为了方便管理和维护,建议选择统一的开发语言和技术栈。

常用的语言有Java、Python和Golang,常用的技术栈有Spring Cloud、Netflix OSS和Docker等。

2. 服务容器化将每个服务打包成一个独立的容器,可以方便地进行部署和管理。

容器化技术有助于提高系统的可靠性和可伸缩性。

常用的容器化技术有Docker、Kubernetes和Mesos等。

3. 服务监控和治理微服务架构中,由于服务的数量较多,需要有监控和治理的手段来保证系统的稳定性。

可以通过日志、指标监控、链路追踪等手段来对服务进行监控。

同时,还可以借助服务网关和配置中心等工具来实现对服务的治理和动态配置。

微服务架构的设计与实现

微服务架构的设计与实现

微服务架构的设计与实现随着互联网的不断发展,对于软件的需求也越来越多样化,面对着如此庞大复杂的系统,单一的架构已经无法满足需求,因此,微服务架构应运而生。

微服务架构,简单来说,就是将一个大系统拆分成多个小系统,每个小系统都可以独立运行,可以实现快速部署。

微服务架构的优点微服务架构能够让开发人员对系统中的某些部分进行更加有针对性的优化和扩展,同时,不会影响到整个系统的其他部分,使得系统可以更快速地加入新功能,并且在整个系统升级的时候也能够避免不必要的麻烦,更加灵活。

同时,由于每个服务都是独立的,所以当一个服务出现问题时候,不会影响到整个系统的其他服务的正常运行,从而提高了系统的可靠性。

微服务架构的设计和实现微服务架构的设计和实现可以分为以下几步:1.确定服务边界在设计微服务架构时,最重要的一个环节就是确定服务的边界。

每个服务都应该只负责完成一项特定的业务功能,同时,尽可能避免与其他模块产生耦合,减少模块之间的相互依赖,使得多个服务之间可以实现解耦合,更加灵活。

2.选择通信协议在微服务架构中,由于是将一个大系统拆分成多个小系统,那么多个小系统之间的通讯就非常重要,必须要考虑到通信协议的选择。

对于通信协议的选择可以根据实际需求来进行选择,例如在一些大型互联网公司内部,常常会使用Http和RPC进行通信,这样可以大大加快服务之间的通信速度,提高了系统的性能。

3.选择合适的数据存储方案在微服务架构中,数据存储非常重要,数据的正确性和准确性直接影响到业务的稳定性。

对于数据存储方案,可以参考现有的数据库方案,比如MySQL、MongoDB等,同时也可以考虑NoSQL方案,如Redis、Memcached等。

4.确定服务拆分策略在确定服务拆分的时候,主要是通过业务需求来定位服务的拆分边界,同时要考虑到服务之间的依赖和协作,也要考虑到服务之间的业务区隔。

需要注意的是,在进行服务拆分时,要根据每个服务的功能,来进行服务之间的划分和组织,同时保证每个服务的扩展性和灵活性。

微服务架构设计与实现

微服务架构设计与实现

微服务架构设计与实现微服务架构是一种以轻量级的、可组合的服务为基础构建复杂应用程序的架构风格。

它提倡将单一的应用程序划分为一组小型服务,每个服务运行在其独立的进程中,并通过专用的通信机制相互配合。

微服务架构的设计与实现涉及到多个方面的考虑和决策。

一、架构设计的原则在设计微服务架构时,需要遵循以下原则:1. 高内聚低耦合:每个微服务应具有高内聚性,即将相关业务和功能封装在一起,并通过清晰的、统一的接口暴露给其他服务调用。

同时,微服务之间应该尽可能低耦合,减少对其他服务的依赖。

2. 独立部署和可扩展性:每个微服务应该能够独立部署,这样可以更加灵活地进行版本更新和维护;同时,每个微服务应该是可扩展的,能够根据业务需求进行水平扩展。

3. 服务自治和去中心化管理:每个微服务应该具有自治性,即自己管理自己的数据和业务逻辑,并且不依赖其他微服务的内部状态。

同时,服务的管理应该是去中心化的,每个服务都负责自己的生命周期。

4. 持续集成和快速交付:微服务架构强调持续集成和快速交付的能力。

每个微服务应该具有自动化测试和部署流程,以保证代码质量和快速的发布周期。

二、架构组件的选择与设计在实现微服务架构时,需要选择并设计适当的组件来支持各项功能和需求。

以下是一些常用的组件和技术:1. 服务注册与发现:使用服务注册与发现组件来管理服务的注册和发现,方便服务之间的通信和调用。

2. 负载均衡与容错:通过负载均衡和容错机制,将请求分发给多个实例,增加系统的可用性和弹性。

3. 配置管理:使用配置管理工具来集中管理配置信息,实现动态的配置更新和加载。

4. 消息队列与事件驱动:引入消息队列和事件驱动机制来实现微服务之间的异步通信和解耦。

5. 日志与监控:通过日志和监控系统,实时追踪系统的运行状态和性能指标,及时发现和解决问题。

三、通信协议与接口设计在微服务架构中,通信是微服务之间重要的环节,需要设计合适的通信协议和接口。

以下是一些通信协议和接口设计的要点:1. 使用轻量级的通信协议,例如RESTful API或者消息队列协议,以降低通信的开销。

微服务架构设计与实现

微服务架构设计与实现

微服务架构设计与实现微服务架构是一种允许开发人员将一个大型应用程序拆分为多个小型服务的架构设计模式。

每个小型服务都可以独立部署和扩展,并与其他服务通过API进行通信。

随着分布式计算和云计算的普及,微服务架构成为现代应用程序开发的一种热门选择。

本文将详细介绍微服务架构的设计和实现,包括以下几个方面。

1.什么是微服务架构?- 解释微服务架构的基本概念和目标。

- 强调微服务架构与传统单体应用架构的不同之处。

- 提出为什么微服务架构适合现代应用程序开发的论点。

2.微服务架构的优势- 分析微服务架构相对于单体架构的优势。

- 强调微服务架构的可伸缩性和容错性。

- 讨论微服务架构对团队组织和开发流程的影响。

3.微服务架构的关键组件- 介绍微服务架构的核心组件,如服务发现,负载均衡,熔断器等。

- 解释每个组件的作用和实现原理。

- 探讨如何选择和配置适合自己应用程序需求的组件。

4.微服务架构的通信机制- 讨论微服务架构中服务之间的通信方式,如同步和异步通信。

- 强调API的重要性,以及如何设计和管理API。

- 探讨消息队列和事件驱动架构对微服务通信的增强作用。

5.微服务架构的部署和运维- 探讨微服务架构的部署策略,如容器化和自动化部署。

- 强调监控和日志记录在微服务架构运维中的重要性。

- 讨论如何处理故障和故障恢复。

6.微服务架构的挑战和解决方案- 分析微服务架构可能面临的挑战,如服务之间的依赖性和性能问题。

- 提出相应的解决方案,如服务网关和缓存机制。

- 潜在的安全问题和解决方案。

7.微服务架构的最佳实践- 探讨如何设计和实现可扩展,可靠和易于维护的微服务架构。

- 强调测试的重要性和如何实施有效的测试策略。

- 讨论持续集成和持续交付在微服务架构中的应用。

8.微服务架构的案例研究- 分析一些成功采用微服务架构的实际案例,如Netflix和Uber。

- 探讨这些案例中的设计和实现要点。

- 强调如何从这些案例中借鉴经验,应用于自己的应用程序开发。

微服务架构的设计和实现

微服务架构的设计和实现

微服务架构的设计和实现随着互联网的快速发展,业务的需求和应用的复杂性也越来越高,传统的单体应用架构已经无法满足现代应用的需求。

微服务架构作为一种新型的架构模式,其独特的优势和能力已经被越来越多的企业所认可和采用。

本文将重点介绍微服务架构的设计和实现。

一、什么是微服务架构?微服务架构是一种将应用拆分成若干小的、自治的服务单元,每个服务单元独立部署、独立运行、独立升级、独立维护,服务之间通过轻量级的通信协议进行交互的应用架构模式。

与传统的单体应用架构相比,微服务架构有以下几点优势:1. 高可伸缩性:可以根据业务需求动态伸缩,提高性能和资源利用率。

2. 高可用性:各个服务单元独立部署和运行,一个服务出现问题不会对整个应用产生影响。

3. 灵活性:不同的服务单元可以使用不同的技术栈、不同的编程语言,充分发挥开发者的个性化和技能优势。

4. 易于维护:每个服务单元自治,可以独立部署、独立测试、独立升级,降低维护成本。

二、微服务架构的设计在设计微服务架构时,需要考虑以下几个方面:1. 服务拆分:将业务拆分成小的、自治的服务单元。

2. 服务通信:服务之间需要通过轻量级的通信协议进行交互,比如RESTful API、gRPC等。

3. 数据库设计:每个服务单元独立使用自己的数据库,避免数据泄露和风险。

4. 服务注册与发现:使用服务注册中心来管理服务的注册、发现和负载均衡等。

5. 安全策略:采用安全策略,保障服务间的交互安全。

例如,设计一个在线商城系统,可以将其拆分成商品服务、订单服务、用户服务等小的、自治的服务单元。

每个服务单元可以使用不同的技术栈和数据库,并通过RESTful API进行交互。

同时,使用服务注册中心来管理服务的注册和发现,通过配置路由规则来实现负载均衡。

三、微服务架构的实现在实现微服务架构时,需要考虑以下几个方面:1. 技术选型:根据业务需求和技术特点选择合适的技术栈,比如Spring Boot、Django等。

微服务架构的设计和实现

微服务架构的设计和实现

微服务架构的设计和实现随着互联网技术的不断发展和应用,企业的业务场景也不断变化,普通的单体应用架构已经无法满足企业的需求。

微服务架构作为一种新的架构风格,已经逐渐受到了广大企业的认可和应用。

但是,微服务架构的设计和实现并不是一件简单的事情,需要考虑很多因素和技术,下面我将从以下几个方面来进行阐述。

一、为什么选择微服务架构1.1 更好的可扩展性微服务架构的设计理念就是小而自治,每个服务只负责一部分功能,因此可以更好地实现可扩展性。

当一个服务的负载增加时,我们只需要增加对应的服务实例即可,不会导致整个系统的性能下降。

1.2 更好的灵活性微服务架构将整个系统分解为多个小服务,每个服务都是可以独立开发、部署和运行的。

这种架构可以更好地支持敏捷开发和快速迭代,并且可以更方便地实现服务的中途变更。

1.3 更好的可维护性当整个系统由一个单体应用架构变为微服务架构时,每个服务都可以比较容易地管理和维护。

而且当一个服务出现问题时,我们只需要定位到该服务,而不需要对整个系统进行排查。

这也可以减少人力和资源的浪费。

二、微服务架构的设计思路2.1 拆分服务拆分服务是微服务架构的基础,每个服务只需要负责一部分功能,保证单一职责原则。

在拆分服务过程中,我们需要考虑服务之间的依赖关系,将高内聚、低耦合的服务拆分为单独的服务,保证划分的服务是自治的。

2.2 设计 API 接口API 接口是服务之间的纽带,通过定义规范的 API 接口,可以使得服务更加自治。

这样就方便了服务之间的协作和交互,同时也保证了更好的扩展性和可维护性。

2.3 消息队列消息队列是微服务架构中不可或缺的部分,它可以在服务之间实现异步通信,从而提高系统的整体并发性能。

同时,消息队列还可以实现解耦和流量控制的功能,保证服务之间的协调性和稳定性。

2.4 服务注册和发现服务注册和发现是微服务架构中很重要的环节,它可以帮助服务之间准确地发现和调用。

当新的服务实例加入时,服务注册和发现机制会自动将它注册到服务发现中心,从而使得其它服务可以调用它。

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

微服务框架的设计与实现①张晶1, 黄小锋2, 李春阳31(北京中电普华信息技术有限公司, 北京100192)2(中国电建集团国际工程有限公司, 北京100048)3(国网信息通信产业集团有限公司, 北京100031)摘 要: 相对于传统单块架构, 微服务框架具有技术选型灵活, 独立部署, 按需独立扩展等优点, 更适合当前互联网时代需求. 但微服务架构的使用引入了新的问题, 如服务注册发现、服务容错等. 对微服务框架引入的问题进行分析, 并给出了微服务框架的一种实现方案, 在框架层面解决服务注册发现、服务容错等共性问题, 使业务系统开发人员专注于业务逻辑实现, 简化系统开发的难度, 提高开发效率.关键词: 微服务框架; 服务注册; 服务发现; 服务容错Design and Implementation of Microservice ArchitectureZHANG Jing1, HUANG Xiao-Feng2, LI Chun-Yang31(Beijing China Power Information Technology Co. Ltd., Beijing 100192, China)2(PowerChina International Group Limited, Beijing 100048, China)3(State Grid Information & Telecommunication Industry Group Co. Ltd., Beijing 100031, China)Abstract: Compared with traditional single block architecture, microservice architecture has many advantages, such as flexible technology selection, independent deployment, and independent scalability more suitability for the current needs of the internet age, etc. But microservice architecture also introduces new problems such as service registration, service discovery, service fault tolerance. On the basis of the analysis for problems mentioned above, this paper proposes one implementation of microservice framework, which can solve service registration, service discovery, service fault tolerance and other common problems. Based on this, developers only need to focus on the development of business functions, so that it can simplify the difficulty of system development and improve development effectiveness.Key words: microservice architecture; service registration; service discover; fault tolerance传统信息化系统的典型架构是单块架构(Monolithic Architecture), 即将应用程序的所有功能都打包成一个应用, 每个应用是最小的交付和部署单元, 应用部署后运行在同一进程中. 单块架构应用具有IDE友好、易于测试和部署等优势, 但是, 随着互联网的迅速发展, 单块架构临着越来越多的挑战, 主要表现在维护成本高、持续交付周期长、可伸缩性差等方面[1].微服务架构(Microservices)的出现以及在国内外的成功应用, 成为系统架构的一种新选择. 很多大型宝等都已经从传统单块架构迁移到微服务架构[2]. 微服务架构提倡将单块架构的应用划分成一组小的服务, 互联网公司如Twitter、Netflix、Amazon 、eBay、淘服务之间互相协调、互相配合, 为用户提供最终价值.1 微服务架构微服务架构是一种架构模式, 采用一组服务的方式来构建一个应用, 服务独立部署在不同的进程中, 不同服务通过一些轻量级交互机制来通信, 例如RPC、HTTP等, 服务可独立扩展伸缩, 每个服务定义了明确的边界, 不同的服务甚至可以采用不同的编程语言来实现, 由独立的团队来维护[3].相对于传统的单体应用架构, 微服务架构具有单个服务易于开发、理解和维护; 复杂度可控; 技术选①收稿时间:2016-09-18;收到修改稿时间:2016-11-03 [doi: 10.15888/ki.csa.005796]型灵活; 独立部署; 按需独立扩展等优点[4]. 但是, 采用微服务架构也会引入新的问题, 本文对微服务架构引入的问题进行分析, 提出了一种微服务框架的实现方式, 在框架层面解决服务注册发现、服务容错等共性问题, 使业务系统开发人员专注于业务逻辑实现, 降低开发难度, 提升开发效率.1.1 微服务框架目前, 业界流行的微服务框架主要有两个: Spring Boot和Dropwizard. SpringBoot继承了原有Spring框架的优秀基因, 简化了开发、配置、部署和监控过程, 帮助开发者快速启动一个Web容器. Dropwizard 从前端网页、核心服务、资料库存取到资源监控, 提供了一个轻量级的开发架构, 帮助开发者快速的打造一个Rest风格的后台服务, 同时集成hibernate4、log4j、slf4j、jackson等开源组件.2 微服务框架设计基于微服务架构的应用是分布式系统, 增加了系统设计和实现的难度, 主要体现在以下几个方面:①在运行环境中, 微服务实例的网络地址是动态分配的, 微服务运行的实例数量也是动态变化的, 因此, 需要一套服务发现机制, 使服务调用者可以获取正确的服务地址, 同时服务提供者一般以集群方式提供服务, 也引入了负载均衡和健康检查问题.②在微服务架构中, 服务之间存在着复杂的依赖关系, 在高并发访问下, 依赖的稳定性影响系统的可用性及性能. 因此需要提供服务容错机制, 当依赖的服务发送故障时, 不会使调用方线程被长时间占用不释放, 避免故障在系统中蔓延.③每个服务独立部署运行, 服务之间的通信是进程间通信, 需要有一个高效的进程间通信机制支撑微服务之间的交互.④每个微服务可以有多个不同的实例, 这使得服务按需动态伸缩成为可能, 在高并发时可以启动同一服务的多个实例, 以提高响应速度. 但服务实例的启停及流量的调度和分发需要一套负载监控和负载均衡组件来管理.⑤一个微服务应用可能由上百个服务构成, 服务可以采用不同语言和框架. 每个服务都有自己的部署、资源、扩展和监控需求. 因此需要提供版本管理和部署组件, 实现微服务的动态部署和无缝升级. 2.1 服务发现目前服务发现的方式主要有两种: 服务端发现(server-side discovery)和客户端发现(client-side discovery). 这两种方式都通过注册中心方式提供服务注册信息的分布式管理. 当服务上线时, 服务提供者将服务信息注册到注册中心, 并通过心跳维持长链接. 服务调用者通过注册中心寻址, 根据负载均衡算法找到服务. 当服务下线时, 注册中心会发通知给服务客户端. 如图1和图2所示.图1 服务端发现图2 客户端发现服务端方式, 所有服务对于服务调用者透明, 但系统中需要维护一个高可用的负载均衡组件, 负载均衡组件在服务调用者和服务提供者之间增加了一跳, 有一定性能开销. 客户端方式架构简单, 扩展灵活, 同时服务消费方和服务提供方之间是直接调用, 没有额外开销, 性能比较好.2.2 服务容错在微服务架构中, 服务之间会有错综复杂的依赖关系. 在实际生产环境中, 由于网络连接缓慢、资源繁忙、脱机等原因会造成服务出错或者服务延迟, 如果微服务不能对其依赖的服务的故障进行容错和隔离, 那么该服务本身就处在被拖垮的风险中. 因此在微服务框架设计时需要加入容错措施, 确保某一服务出问题不会影响系统整体可用性. 可用的措施包括[5]:①断路器当某个微服务发生故障后, 通过断路器的故障监控, 向调用方返回一个错误响应, 调用方主动熔断, 以防止线程因调用故障服务被长时间占用不释放, 避免了故障在分布式系统中的蔓延. 如果故障恢复, 电路又能自动恢复.②限流增加限流机制, 限定对微服务的并发访问, 如限制单位时间内的并发数, 对超过这个限制的请求拒绝, 防止在突发流量或被攻击时被击垮.③回退回退是系统的弹性恢复能力, 是指在熔断或者限流发生的时候, 系统采用何种处理逻辑. 常见的处理策略有直接抛出异常, 也称快速失败; 返回空值或缺省值; 返回备份数据.2.3 总体架构通过对微服务框架进行分析, 确定了微服务框架的总体架构, 在框架层面解决负载均衡、服务发现、服务容错、监控报警、进程通信、自动化弹性部署等问题. 架构图如图3所示.图3总体架构图微服务框架包括基础开发框架、服务运行管理和部署监控工具三部分.基础开发框架: 提供微服务开发的基础组件, 包括展现组件、IOC组件、持久化组件、序列化组件、服务通信组件、服务监控组件、日志管理组件、缓存组件、嵌入式组件和权限管理组件, 实现微服务开发的通用功能, 整合开源成熟框架, 屏蔽底层技术细节. 其中, 日志管理记录重要的框架层日志、度量和调用链数据, 同时将日志、度量等接口暴露出来, 让业务层能根据需要记录业务日志数据; 服务通信组件提供基于REST/RPC的同步请求响应模式和基于消息的异步通信模式.服务运行管理: 提供微服务运行时服务注册、服务发现、服务路由及限流容错功能. 其中, 服务路由实现请求验证、请求动态路由和静态响应处理等功能; 限流和容错组件, 能够在运行时自动限流和容错, 保护服务. 同时和动态配置相结合, 实现动态限流和熔断.部署监控工具包括动态配置、部署管理、中间件监控、服务监控、调用链分析功能. 其中, 动态配置组件支持文件方式配置, 集成动态运行时配置, 能够在运行时针对不同环境动态调整服务的参数和配置; 部署管理实现一键部署灰度发布功能.3 框架实现3.1 技术架构微服务框架实现时采用的技术架构如图4所示.图4技术架构图在微服务框架实现时, 选择了业界开源成熟的框架, 通过框架整合实现微服务开发和运行管理. 其中Spring Boot作为微服务的基础开发框架, 提供展现、依赖注入、持久化、嵌入式容器、日志、缓存等基础功能. 集成Consul组件实现服务注册发现[6]; Ribbon 组件实现客户端负载均衡; Hystrix组件实现服务延迟和容错[7]; Zuul组件提供动态路由, 监控, 弹性, 安全等边缘服务.3.2 基础架构选型目前开源的微服务基础框架主要有Dropwizard和SpringBoot. 两个框架在实现技术上存在一定差异[8], 如表1所示.Dropwizard简单轻量, 但第三方集成力度不足, 社区支持薄弱, 很多关键特性如依赖注入需要开发者自己实现; Spring boot聚焦于Spring应用, 可以借力Spring家族体系的其它成员, 完成通信、数据访问等功能, 体系强大, 社区活跃. Spring Boot带来了一系列的生态圈的集成, 为微服务开发提供了基础. 因此选择Spring Boot作为基础框架.表1 Dropwizard和SpringBoot对比框架HTTP REST JSON Official integration Service typeSpring Boot TomcatJettySpringJacksonGSONJson-simple40+ OfficialStarter POMs forany purposeHTTP/RESTJMSMessageQueuingSOAPDropwizard Jetty Jersey JacksonHibernateValidator、Guava、ApacheHttpClient、Jersey、JDBI、Freemarker、Jodatime、MustacheHTTP/REST3.3运行管理框架服务运行管理引入了四个主流的开源框架, 每个框架相互独立, 实现时需要与基础框架Spring Boot集成. 为了实现框架整合, 同时简化开发难度, 引入Spring Cloud组件. Spring Cloud是一个基于Spring Boot实现的云应用开发工具, 它为基于JVM的云应用开发中的配置管理、服务发现、断路器、智能路由、分布式会话和集群状态管理等操作提供了一种简单的开发方式[9]. 以Hystrix组件整合为例, Spring Cloud提供了spring-cloud-starter-hystrix模块, 通过注解的方式轻松使用Hystrix, 如注解@HystrixCommand将断路器机制加入到业务处理方法中, 代码如表2所示.表2 @HystrixCommand示例.指定getProducerFallback为备用方法. 当断路器处于断开状态时, getProducerFallback方法将替代getValue接受调用.@HystrixCommand(fallbackMethod = "getProducerFallback")public ProducerResponse getValue() {return restTemplate.getForObject("http:.producer",ProducerResponse.class);}private ProducerResponse getProducerFallback() {return new ProducerResponse(42);}4 结语微服务框架已经在国家电网统一应用开发平台V2.9.0版本中实现, 该版本经过第三方安全、性能测试, 目前正在项目组试点应用.本文针对目前流行的微服务框架进行了介绍, 对微服务框架实现时需要解决的问题进行了分析, 设计了微服务的总体架构、实现架构, 重点分析了微服务架构所带来的服务注册发现、服务容错问题. 该微服务架构全面的解决了微服务开发的通用问题, 基于该微服务框架进行业务系统开发, 开发人员只需要关注微服务内部业务功能的开发, 可以降低系统的开发难度, 提高开发效率.参考文献1 王磊.解析微服务架构(一)单块架构系统以及其面临的挑战./cn/articles/analysis-the-architecture -of-microservice-part-01.[2015-05-11].2 姜斌.2016技术将继续颠覆现实发力引擎之“微服务”./article/a/2016-05-11/15838064.[201 6-05-11].3 Fowler M, Lewis J. Microservices. / articles/microservices.html.[2014-03-25].4 肖勤.微服务架构实践经验分享.http:/article/ 2015-08-07/2825412.[2015-08-12].5 杨波.实施微服务,我们需要哪些基础框架?http://www. /cn/articles/basis-frameworkto-implement-micro-se rvice/.[2015-12-01].6 HashiCorp. Introduction to Consul. https://www.consul. io/intro/index.html.7 Netflix. Hystrix: Latency and Fault Tolerance for Distributed Systems. https:///Netflix/Hystrix.8 Ullah R. Dropwizard vs Spring Boot—A Comparison Matrix. https:///articles/dropwizard-vs-spring-boot?utm_so urce=tuicool&utm_medium=referral.[2015-02-02].9 Pivotal Software. Spring Cloud. http://projects.spring.io/ spring-cloud/.2016.。

相关文档
最新文档