天天看点

1.3微服务--微服务应该具备的功能微服务应该具备的功能

微服务应该具备的功能

一、重点总结

“服务”是一个独立运行的单元组件,每个单元组件运行在独立的进程中,组件与组件之间通常使用HTTP 这种轻量级的通信机制进行通信,微服务具备特点:

1、按照业务来划分服务,单个服务代码量小,业务单一,易于维护

2、每个微服务都有自己独立的基础组件,例如数据库、缓存等,且运行在独立的进程中

3、微服务之间的通信是通过HTTP 协议或者消息组件,且具有容错能力

4、微服务有一套服务治理的解决方案,服务之间不相合,可以随时加入和剔除服务

5、单个微服务能够集群化部署,并且有负载均衡的能力

6、整个微服务系统应该有一个完整的安全机制,包括用户验证、权限验证、资源保护等

7、整个微服务系统有链路追踪的能力

8、有一套完整的实时日志系统

微服务具备功能:

1、服务的注册和发现

2、服务的负载均衡

3、服务的容错

4、服务网关

5、服务配置的统一管理

6、链路追踪

7、实时日志

二、服务的注册与发现

微服务系统由很多个单一职责的服务单元组成,而每一个微服务又有众多实例。由于系统的服务粒度较小,服务数量众多,服

务之间的相互依赖成网状,所以该需要服务注册中心来统一管理微服务实例, 方便查看每一个微服务实例的健康状态

服务注册是指向服务注册中心注册一个服务实例,服务提供者将自己的服务信息(如服务名、IP 地址等〉告知服务注册中心

服务发现是指当服务消费者需要消费另外一个服务时,服务注册中心能够告知服务消费者它所要消费服务的实例信息

通常情况下, 一个服务既是服务提供者,也是服务消费者。服务消费者一般使用HTTP 协议或者消息组件来进行服务消费

服务的注册与发现如图所示:

1.3微服务--微服务应该具备的功能微服务应该具备的功能

服务注册巾心会提供服务的健康检查方案,检查被注册的服务是否可用

三、服务的负载均衡

在微服务架构中服务之间的相互调用一般是通过HTTP 通信协议来实现,但网络往往具有不可靠性,为了保证服务的高可用,服务单元往往是集群化部署的,如何确定服务消费者应该调用哪个服务提供者的实例就需要使用服务的负载均衡

服务的负载均衡:所有的服务都向服务注册中心注册,服务注册中心持有每个服务的应用名和IP 地址等信息,同时每个服务也会获取所有服务注册列表信息。服务消费者集成负载均衡组件,该组件会向服务消费者获取服务注册列表信息,并每隔一段时间重新刷新获取该列表。当服务消费者消费服务时,负载均衡组件获取服务提供者所有实例的注册信息,并通过一定的负载均衡策略(开发者配置),选择一个服务提供者的实例,向该实例进行服务消费,这样就实现了负载均衡

1.3微服务--微服务应该具备的功能微服务应该具备的功能

服务注册中心不但需要定时接收每个服务的心跳(用来检查服务是否可用),而且每个服务会定期获取服务注册列表的信息,当服务实例数量很多时,服务注册中心承担了非常大的负载。由于服务注册中心在微服务系统中起到了至关重要的作用,所以必须实现高可用。解决方案是将服务注册中心集群化,使每个服务注册中心的数据实时同步

1.3微服务--微服务应该具备的功能微服务应该具备的功能

四、服务的容错

微服务在实际项目中,包含的服务数量往往非常多,服务之间的相互依赖性复杂, 一个网络请求通常需要调用多个服务才能完成。如果个服务不可用,例如网络延迟或故障,会影响到依赖这个不可用的服务的其他服务

1.3微服务--微服务应该具备的功能微服务应该具备的功能

如图所示,微服务系统有很多个服务, 当服务F因某些原因导致了服务的不可用,来自用户的网络请求需要调用服务F,服务F无响应,用户的请求都处于阻塞状态,在高并发的场景下,短时间内会导致服务器的线程资源消耗殆尽。 另外,依赖于服务F的其他的服务, 也会等待服务F的响应而处于阻塞状态,进而导致它们也不可用, 最后使整个系统处于瘫痪的状态【雪崩效应】

为了解决分布式系统的雪崩效应,分布式系统引进了熔断器机制:

当一个服务的处理用户请求的失败次数在一定时间内小于设定的阀值时,熔断器处于关闭状态,服务正常;

当服务处理用户请求的失败次数大于设定的阀值时,说明服务出现了故障,打开熔断器, 这时所有的请求会执行快速失败, 不执行业务逻辑;

当处于打开状态的熔断器时, 一段时间后会处于半打开状态, 并执行一定数量的请求,剩余的请求会执行快速失败,若执行的请求失败了,则继续打开熔断器;若成功了, 则将熔断器关闭;

1.3微服务--微服务应该具备的功能微服务应该具备的功能

熔断器机制作用:

1)将资源进行隔离,如果某个服务里的某个API接口出现了故障,只会隔离该API接口,不会影响到其他接口;

2)服务降级的功能。当服务处于正常的状态时,大量的请求在短时间内同时涌入,超过了服务的处理能力,这时熔断器会被打开,将服务降级,以免服务器因负载过高而出现故障;

3)自我修复能力。当因某个微小的故障,例如网络服务商的问题,导致网络在短时间内不可用, 熔断器被打开

五、服务网关

微服务系统通过将资源以API 接口的形式暴露给外界来提供服务,过程:

1、在微服务系统中, API接口资源通常是由服务网关(也称API 网关)统一暴露,内部服务不直接对外提供API 资源的暴露,在一定程度上保护了微服务系统的安全;

2、API 网关通常有请求转发的作用, 另外它可能需要负责一定的安全验证,网关层以集群的形式存在。在服务网关层之前,需要加上负载均衡层,通过一定的路由策略, 将请求转发到网关层;

3、到达网关层后,经过一系列的用户身份验证、权限判断, 最终转发到具体的服务。具体的服务经过一系列的逻辑运算和数据操作,最终将结果返回给用户

网关层作用:

1)网关将所有服务的API 接口资源统一聚合,对外统一暴露;

2)网关可以防止非法请求操作API 接口,对内部服务起到保护作用

3)网关可以实现监控功能,实时日志输出,对请求进行记录

4)网关可以用来做流量监控,在高流量的情况下,对服务进行降级

5)API 接口从内部服务分离出来,方便做测试

【服务网关架构图】:

1.3微服务--微服务应该具备的功能微服务应该具备的功能

六、服务配置的统一管理

微服务中每个服务都有大量的配置文件,而这些配置在不同的环境中也是不一样的;随着服务数量的增加,配置文件的管

理也是一件非常复杂的事,故需要有统一管理配置文件的组件,这些配置组件所实现的功能大体相同,但又有些差别;

下面以Spring Cloud Config 为例来阐述服务配置的统一管理:

1)Config Server (配置服务)读取配置文件仓库的配置信息,其中配置文件仓库可以存放在配置服务的本地仓库,也可以放在远程的Git 仓库

2)配置服务启动后,读取配置文件信息,读取完成的配置信息存放在配置服务的内存中

3)当启动服务A、B 时,由于服务A 、B 指定了向配置服务读取配置信息,服务A 、B向配置服务读取配置信息

4)当服务的配置信息需要修改且修改完成后,向配置服务发送Post请求进行刷新,这时服务A、B会向配置服务重写读取配置文件

1.3微服务--微服务应该具备的功能微服务应该具备的功能

对于集群化的服务, 可以通过使用消息总线来刷新多个服务实例。如果服务数量较多,对配置中心需要考虑集群化部署,从而使配置中心高可用,做分布式集群

七、服务链路追踪

微服务系统是一个分布式架构的系统,微服务系统按业务划分服务单元, 一个微服务系统有很多个服务单元,由于服务单元数量很多且业务复杂,服务与服务之间的调用有可能非常复杂, 一旦出现了异常和错误,就会很难去定位,所以在微服务架构中,必须实现分布式链路追踪,去跟进一个请求到底有哪些服务参与,参与的顺序又是怎样的,从而使每个请求链路清晰可见,出了问题很快就能定位

如图所示,在微服务系统中, 一个来自用户的请求先达到前端A ,然后通过远程调用,达到系统的中间件B、C(如负载均衡、网关等),最后达到后端服务D 、E ;后端经过一系列的业务逻辑计算,最后将数据返回给用户

1.3微服务--微服务应该具备的功能微服务应该具备的功能

对于这样一个请求, 经历了这么多服务, 将它的请求过程的数据记录下来就需要用到服务链路追踪;目前,常见的链路追踪组件有Google 的Dapper、Twitter 的Zipkin,以及阿里的Eagleeye等,都是非常优秀的链路追踪开源组件。

————————————————————————————————————————————

内容来源---《深入理解Spring Cloud与微服务构建》