一读小说 » 女频频道 » 梦幻情缘之夏荷 » 微服务架构技术体系

微服务架构技术体系

    服务集成服务之间必须要集成,而这种集成关系远比简单的API调用较复杂。对于微服务架构而言,我们的思路是尽量采用标准化的数据结构和通信机制,并降低系统集成的耦合度。我们把微服务架构中的服务之间的集成模式分为以下四类。同时还会引入其他一些手段来实现服务与服务之间的有效集成。接口集成。接口集尝是服务之间集成的最常用的手段,通常基于业务逻辑的需要进行集成。RPC、消息传递和服务总线都可以归为这种集成方式。RPC架构是服务之间进行集成的最基本的方式。在RPC架构的实现思路上,远程服务提供者以某种形式提供服务,调用相关信息,远程代理对象通过动态代理拦截机制生成远程服务的本地代理,让远程调用在使用上如同本地调用一样。而网络通信应该与具体协议无关,通过序列化和反序列化方式对网络数据进行有效的传输。raprepresentialstatetransfer,表述性状态转移从技术上讲也可以认为是RPC架构的一种具体表现形式。因为RPC架构中最基本的网络通信、序列化和反序列化、传输协议和服务调用等组件都能在rest中有所体现。但rest代表的并不是一种技术,也不是一种标准和规范。而是一种设计风格。要理解restful架构,最好的方法就是理解它的全称representational这个词组。职业就是表述性状态转移,针对的是网络上的各种资源,resource。所以通俗的讲,rest。就思源在网络中以某种表现形式进行状态转移,消息统计message机制或者称为消息传递机制。可认为是一种系统集中组件,是在分布式系统中完成消息的发送和接收的基础软件,用于消除服务交互过程中的耦合度。关于耦合度的具体表现形式,我们在下一节中还会具体展开。消通信机制,实现系统解余的做法是在服务与服务之间添加一个中间层,这样紧耦合的单阶段过程调用就转变成了松耦合的。这样过程可以通过中间层进行消息的存储和处理。这个中间层就是以各种消息中间键为代表的消息通信系统messagingsystem、企业服务总线enterpriseseriousbossesb本质上也是一种系统集成组件,用于解决分布式环境下的异步协作问题,可以看作是对消息通信系统的扩展和延伸。ESB提供的一批核心组件包括路由器、转换器和端点路由器,在一个位置上维护消息目标地址,并基于消息本身或上下文进行路由。转换器transformer用于易购系统之间进行数据适配,数据结构类型、表现形式、传输方式都是潜在的需要转换的对象端点endpoint封装。线系统的交互数据集成数据集成同样可以用于微服务之间的交互。常见的共享数据库sharedata是一个选择,但也可以通过数据复制datareplication的方式实现数据集成。在微服务架构中,我们追求数据的独立性,但对于一些遗留系统而言,无法重新打造数据体系,数据复制就成为了一种折中的集成方法。所谓数据复制,就是在不同的数据容器中保存同一份业务数据。这里的同一份业务数据的概念不在于数据内容的完全一致性,而在于这些数据背后的业务逻辑的一致性。客户端集成。由于微服务是一个能够独立运行的整体,有些微服务会包含一些u界面。时间也可以通过UI界面进行集成。从某一个微服务的角度讲,调用他的服务就是该服务的客户端。由于客户端与微服务之间的集成可以分为三种方式,即直接集成使用frontend服务器和使用API网关。直接继承的方式比较简单,就是客户端通过微服务提供的访问入口直接对微服务进行集成,这种方式适用于微服务数量不是太多的场景。如果采用直接继承的方式,服务按照业务模块进行划界。编的和命名是一项最佳实践。friend服务器有时候也可以认为是一种total门户机制,即把客户端所需要的各种CSSjavascriptreport的公共资源统一放在front服务器,然后每个每个微服务包含自身特有的hitmail等客户端代码片段以及业务逻辑,通过集成front服务器上的公共资源完成独立服务的运行。当服务数量较多且客户端集成场景比较复杂时,通常就需要单独抽取一层作为客户端访问的统一入口,这一层在微服务架构中称为API网关gateway。网关的主要作用就是对后端的各个微服务进行整合,从而为不同的客户端提供定制化的内容外部集成。这里把外部集成单独剥离出来的原因在于,现实中很多服务之间的集成需求来自于与外部服务的依赖和整合,而在集成方式上,也综合采用接口集成、数据集成和客户端集成。以集成方式各有其应用场景和特点,现实中的很多系统包含的集成方式并不限于其中一种。关于服务拆分和服务集成的方法论和工程实践不是本书的重点,读者可以参考笔者的微服务设计原理和架构一书做进一步的了解。中文重点介绍的就是接口集成,并试图通过响应式编程的方式实现基于restful风格以及消息通信的微服务集成需求。微架构的核心组件微服务的实现首先需要提供一系列的基础组件。包括事件驱动、集成和负载均衡服务、路由等分布式环境下的通用组件,也包括API、网关和配置管理等微服务架构所特有的功能组件。同时,基于服务注册中心的服务发布和订阅机制是微服务体系下实现服务治理的基本手段。而关于如何保证服务的可靠性,我们也需要考虑服务容错、服务隔离、服务限流和服务降级等需求和实现方案。最后,我们也需要使用服务监控手段来管理服务质量和运行时的状态。事件驱动事件驱动架构evendrivearchitectureeda定义了一个设计和实现应用系统的架构风格,在这个架构风格里,事件可传输于松散耦合的组件和服务之间。是处理架构的优势就在于,当系统中需要添加另一个业务逻辑来完成整个流程时,只需要对处于该流程中的事件添加一个订阅者即可,不需要对原有的系统做大量修改。考虑到在微服务架构中的服务数量较多,且不可避免的需要对服务进行重构,事件处理在系统扩展类的性的优势就尤为明显。而在技术实现上,通过消息通信机制,我们不必花费太大代价就能实现事件驱动架构响应式编程在一定程度上也是事件驱动架构的一种表现形式。负载均衡集群cluster指的就是将几台机器集中在一起实现同一业务,而负载均衡loadbalance就将请求分摊到位于集群的多个服务器上进行执行。素材房根据服务器地址列表所存放的位置可以分成两大类,一类是服务器端的负载均衡,另一类就是客户端的负载均衡。另一方面,以各种负载均衡算法为基础的分发策略决定了负载均衡效果。在集群化环境中,当客户端请求到达集群时,如何确定由一台服务器进行请求响应,就是服务路由routine的问题。从这个角度上讲,负载均衡也是一种路由思路,但是负载均衡的出发点是由服务分发,而不是解决路由问题,常见的静态、动态负载均衡算法也无法实现精细化的路由管理。服务路由的。管理分为几个大类,包括直接路由、间接路由和路由规则。API网关的本质就是一种外观模式。pattern的具体实现,它是一种由服务器端应用程序并作为系统访问的唯一入口API网关封装了系统的内部架构,为每个客户端提供了一个定制的API。同时,它可能。在微架构中,API网关的核心要点是。所有客户端的和消费端都通过统一的网关接入微服务,在网关层处理通用的非业务功能配置中心在微服架构中一般都需要引入配置中心configurationcenter的相关工具,采用配置中心也就意味着采用集中式配置管理的设计思想。对于集中式配置中心而言,开发、测试和生产等不同的环境配置信息保存在统一的存储媒介中,这是一个维度,而在另一个维度就是分布式集群环境。需要确保集群在。同一服务,所有服务器保存同一份配置文件,并且能够同步更新。服务在微服务架构中,服务治理。agoverngovern可以说是最关键的一个要素,因为各个微服务需要通过服务治理来实现自动化的服务注册、registration和发现。discovery。服务治理的需求来自服务的数量,如果在服务数量并不是太多的场景下,服务消费者获取服务提供者地址的基本思路是通过配置中心,当服务的消费者需要调用某个服务时,基于配置中心中的存储的目标服务的具体地址构建链路完成调用。但当服务数量较多时,为了实现微服务架构中的服务注册和发现,通常都需要构建一个独立的媒介来管理服务的实力,这个媒介一般被称为服务注册中心servicecenter。另一方面,服务提供者和服务消费者都相当于服务注册中心的客户端应用程序,在系统运行时,服务提供者的注册提供者的注册中心客户端程序。自身提供的服务。而服务消费的注册中心客户端程序则。从注册中心查询当前定位的服务信息,并周期性的刷新服务状态。同时,为了提高服务路由的效率和容错性,服务消费者可以配备缓存机制以加速服务路由。更重要的是,当服务注册中心不可用的时候,服务消费者可以利用本地缓存路由来实现对现有服务的可靠调用。服靠。在微服务架构中,各个服务独立部署,且服务与服务之间存在相互依赖关系。和单块系统相比,微服务架构中出现服务访问失败的原因和场景非常复杂,这就需要我们从服务可靠性的角度出发,对服务自身和服务与服务之间的交互过程进行设计。在吗?好臭,赶紧冲。为什么这么臭?你们有什么?真服务失败常见的。对,包括超时timeout和重试retry机制。超时机制指的是调用服务的操作,可以是配置为执行超时,如果服务未能在这个时间内响应,将回复一个失败消息。同时为了降低网络顺态异常所造成的网络通信问题,可以使用重试机制。这两种方式都会产生同步等待,因此合理限制超时时间和重复次数是一般的做法。当运行在同一个集群中,出现通信链路故障、服务端超时以及业务异常等场景,都会导致服务调用失败,容错、fault。机制基本思想就是勇于和重试。提到一个服务器出现问题时,不妨试试其他服务器。集群的建立已经满足了勇于的条件,而围绕如何进行重试就产生了fell。囊肿常见的集群容错策略服务隔离包括一些常见的隔离思路以及特定的隔离实现技术框架。所谓隔离,本质上就是对系统进行分割,从而实现当系统发生故障时,能限定传播范围和影响范围,其发生故障后,只有出问题的服务器不可用,保证其他服务仍可用。常见的隔离措施包括县城隔离、进程隔离、集群隔离、机床隔离、好隔离。关于服务的可靠性,还有一个重要的概念,称为服务熔断。服务熔断类似于现在世界中的保险丝,当某个异常条件被触发时,就直接熔断整个服务,并不是一直等到该服务超时。当服务降级就是当某个服务熔断之后,服务端准备一个本地的回退,forback。方法,返回一个默认值,服务监控我们知道,在传统的单块系统中,所有的代码都在同一台服务器上,如果服务运行中出现了异常和错误,我们只要关注一台服务器就可以快速定位和处理问题。但在微服务架构中,事情显然没有那么简单。微服务架构的本质也是一种分布式架构,微服务架构的特点决定了各个服务器部处在分布式环境中,各个微服务独立部署和运行,彼此通过网络交互,而且都是无状态的服务。一个服务端的请求可能经过很多个微服务的处理和传递才能完成。业务逻辑在这种场景下,我们首先需要面临的一个核心问题就是如何管理服务之间的调用,另一方面就是如何跟踪业务流的处理顺序和结果,也是服务监控的一个核心。通常要借助于日志聚合和服务跟踪技术来处理和解决这两个核心问题。的技术体系。本书的定位是讨论响应式微服务架构构建过程中的工程实践。无论是实践响应式微服务架构还是传统的微服务架构,都需要借助某一种具体的技术体系。为了微服务架构,首先需要选择的一种主流的工具来构建单个微服务。当系统中存在多个微服务时,我们就应该提供服务治理、负载均衡、服务容错、API、网关配置、中心事件驱动等。同时,微服务架构技术体系也包括如何对微服务进行测试,以及基于日志聚合和服务跟踪的服务监控管理微服务核心组件的实现技术。微服务之间的首先要进行通信。关于服务通信微服务架构明确要求服务之间通过跨近程的远程调用方式进行通信。关于远程调用有三种风格的解决方案及rpcrest和自定义实现。而在服务与服务之间的交互方式上也存在两个维度,即按照交互对象的数量分为一对一和一对多,以及按照请求响应的方式分为同步和一步。目前RPC框架可供选择的余呃余地很大,如阿里巴巴。adealbboFacebookwrite和GooglerPC都是非常主流的实践,而基于rest实现的框架有J束CM。一本书将要详细的响应式的。webflux事件驱动架构实现的工具。本方式通常有各种消息的中间键,比如基于gJavamassserviceJA消息服务的规范的activeMQ和基于aoqpadvancedmessagequeen。pro高级消息队列协议规范到MQ和大数据流式计算机领域应用非常广泛的Co。但还有效阿里巴巴自行研发的MQ。这些消息中间件中的activeMQ一般很。很少有人考虑,如果是相对轻量级的应用,可以选择rabbitMQacouple和rocketMQ则适用于大型的应用的场景。负载均衡分为服务端负载均衡和客端负载均衡两大类,实现方式在服务器的软件中我们可以选择呃。nonnonxhaproxy。LS等工具而类似,而类似letRobin工具则是一种可以单独使用的负载均衡机制。所的分布式的服务框架几乎都内置了负载均衡的实现,所以负载均衡本身并不需要太多的选择。API网关微服务的核心组件,而Netflixossopensourcesoftware中的有一个zoo提供了一套过滤器的机制,可以很好的支持签名校验、登录校验等前置过滤功能处理,同时它也维护了路由规则和服务实力,以便完成服务路由功能。其他可参考的API网关含有开源springcloudway和cold。K的作用是完全集成的配置消息管理。目前比较流行的包括spring旗下的springcloudconfigguTaoabouto的diamond和bau的disccomfort。Ispringcloudconflict支持将支持配置信息存放在配置服务本地的内存中,I支持放在远程的GIit仓库中,这点与其他工具在设计上有较大不同。demand和discomfort都是基于myscu作为存储媒介,amond采用的是拉模型及每隔15秒拉一次全量数据,而comfort基于lookkeeperto推模型实施推送。在配置数据模型上,a只支持keyvalue数据的结构采用的是非配置文件模式,而支持的就是传统的配置文件模式。也支持keyvalue什么?老的名额可以基本上给我。找。精油。