微服务学习笔记(一)—总体概述

1、什么是微服务,“服务”是一个独立运行的单元组件;每个组件运行扎起独立的进程中,组件之间通信通常使用HTTP这种轻量级的通信机制进行他通信。

2、微服务具备哪些特点

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

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

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

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

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

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

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

(8)有一套完整的实时日志系统。

3、微服务具备的功能

  微服务具有以上这些特点,那么微服务需要具备一些什么样的功能呢?微服务的功能主要 体现在以下儿个方面。 口服务的注册和发现。 口服务的负载均衡。 口服务的容错。 口服务网关。 口服务配置的统一管理。 口链路追踪。 口实时日志。

3.1 服务的注册、发现、负载均衡

                      

                                                           

3.2 服务的容错----服务的熔断机制

3.2.1 雪崩效应

                            

         服务F 因某些原因导致了服务的不可用,来自于用户的网络请求需要调用服务F 。由 于服务F 无响应,用户的请求都处于阻塞状态, 在高并发的场景下, 短时间内会导致服务器的 线程资源消耗殆尽。另外,依赖于服务F 的其他的服务,例如图中的服务E、服务G、服务J, 也会等待服务F 的响应,处于阻塞状态,导致这些服务的线程资源消耗殆尽,进而导致它们的 不可用,以及依赖于它们的服务的不可用,最后导致整个系统处于瘫痪的状态。

3.2.2 熔断机制

             

当一个服务的处理用户请求的失败次数在一定时间内小于设定的阀值时,熔断器处于关闭状态,服务正常: 当服务处理用户请求的失败次数大于设定的阀值时,说明服务出现了故障,打开熔断器,这时所有的请求会执行快速失败,不执行业务逻辑。当处于打开状态的熔断器时, 一段时间后会处于半打开状态,并执行一定数量的请求, 剩余的请求会执行快速失败,若执行的请求失败了,则继续打开熔断器;若成功了,则将熔断器关闭。

3.2.3 服务网关

在微服务系统中, API接口资源通常是由服务网关(也称API 网关〉统一暴露,内部服务不直接对外提供API 资源 的暴露。

API 网关通常有请求转发的作用, 另外它可能需要负责一定的安全验证,例如判断某个请求是否合法,该请求对某一个资源是否具有操作权限等。通常情况,网关层以集群的形式存在。在服务网关层之前,有可能需要加上负载均衡层,通常为Nginx双机热备,通过一定的路由策略, 将请求转发到网关层。到达网关层后,经过一系列的用户身份验证、权限判断, 最终转发到具体的服务。具体的服务经过一系列的逻辑运算和数据操作,最终将结果返回给用户。

                                       

网关层具有很重要的意义, 具体体现在以下方面。

口网关将所有服务的API 接口资源统一聚合,对外统一暴露,外界系统调用的API 接口都网关对外暴露的API 接口。外界系统不需要知道微服务架构中各服务相互调用的复杂性,微服务系统也保护了其内部微服务单元的API 接口,防止被外界直接调用以及服务的敏感信息对外暴露。

网关可以做一些用户身份认证、权限认证,防止非法请求操作API 接口,对内部服务起到保护作用。 口网关可以实现监控功能,实时日志输出,对请求进行记录。 口网关可以用来做流量监控,在高流量的情况下,对服务进行降级。 口API 接口从内部服务分离出来,方便做测试。 当然,例关实现这些功能,需要做高可用,否则网关很可能成为架构中的瓶颈。最常用的网关组件有Zuu l 、Nginx 等。

3.2.4 服务配置的统一管理

在实际开发过程中,每个服务都有大量的配置文件,例如数据库的配置、日志输出级别的配置等,而往往这些配置在不同的环境中也是不一样的。随着服务数量的增加,配置文件的管理也是一件非常复杂的事。在微服务架构中,需要有统一管理配置文件的组件, 例如S pring Cloud 的Spring CloudCon fig 组件、阿里的Diamond 、百度的Disconf、携程的Apollo 等。这些配置组件所实现的功能大体相同,{旦士在又有些差别,下面以Spring Cloud Config 为例来阐述服务配置的统一管理。

                 

首先, Config Server (配置服务〉读取配置文件仓库的配置信息,其中配置文件仓库可以存放在配置服务的本地仓库,也可以放在远程的Git 仓库(例如GitHub 、Coding 等〉。 口配置服务启动后,读取配置文件信息,读取完成的配置信息存放在配置服务的内存中。 口当启动服务A、B 时,由于服务A 、B 指定了向配置服务读取配置信息,服务A 、B向配置服务读取配置信息。 口当服务的配置信息需要修改且修改完成后,向配置服务发送Po s t 请求进行刷新,这时服务A 、B 会向配置服务重写读取配置文件。

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

3.2.5 服务链路追踪

微服务架构中,必须实现分布式链路追踪,去跟进一个请求到底有哪些服务参与,参与 的顺序又是怎样的,从而使每个请求链路清晰可见,出了问题很快就能定位。

                                                                     

Google 开源了链路追踪组件Dapper , 并在2010 年发表了论文《Dapper, a Large-Scale Distributed Systems Tracing In仕astructure》,这篇文章是业内实现链路追踪的标杆和理论基础,具有非常高的参考价值。目前,常见的链路追踪组件有Google 的Dapper、Twitter 的Zipkin,以及阿里的Eagleeye(鹰眼)等,都是非常优秀的链路追踪开源组件。

4、Spring Cloud

(1 )服务注册和发现组件Eureka

( 2 )熔断组件Hystrix

(3 )负载均衡组件Ribbon

( 4 )路由网关Zuul

上述的4 个组件都来自于Netflix 的公司, 统一称为Spring Cloud Netflix

( 5 ) Spring Cloud Config

( 6 ) Spring Cloud Security

( 7 ) Spring Cloud Sleuth

( 8 ) Spring Cloud Stream

Spring Cloud Config :服务配置中心,将所有的服务的配置文件放到本地仓库或者远 程仓库,配置中心负责读取仓库的配置文件,其他服务向配置中心读取配置。Spring Cloud Config 使得服务的配置统一管理, 并可以在不人为重启服务的情况下进行配置 文件的刷新。

Spring Cloud Netflix :它是通过包装了Netflix 公司的微服务组件实现的,也是Spring Cloud 核心的核心组件,包括Eureka 、Hystrix 、Zuul 、Archaius 等。 0 Eureka :服务注册和发现组件。 0 Hystrix :熔断器组件。Hystrix 通过控制服务的API 接口的熔断来转移故障,防止微 服务系统发生雪崩效应。另外, Hystrix 能够起到服务限流和服务降级的作用。使用 Hystrix Dashboard 组件监控单个服务的熔断器的状态,使用Turbine 组件可以聚合多 个服务的熔断器的状态。

Zuul : 智能路由网关组件。Netflix Zuul 能够起到智能路由和请求过滤的作用,是服 务接口统一暴露的关键模块,也是安全验证、权限控制的一道门。

Feign : 声明式远程调度组件。

Ribbon : 负载均衡组件。

Archaius :配置管理API 的组件, 一个基于Java 的配置管理库, 主要用于多配置的动 态获取。

Spring Cloud Bus : 消息总线组件,常和Spring Cloud Config 配合使用,用于动态刷 新服务的配置。

口Spring Cloud Sleuth :服务链路追踪组件,封装了Dapper 、Zipkin, Kibina 等组件,可 以实时监控服务的链路调用情况。

Spring Cloud Data Flow :大数据操作组件, Spring Cloud Data Flow 是SpringXD 的替 代品,也是一个混合计算的模型,可以通过命令行的方式操作数据流。

Spring Cloud Security : 安全模块组件,是对Spring Security 的封装,通常配合0Auth2 使用来保护微服务系统的安全。

Spring Cloud Consul :该组件是Spring Cloud 对Consul 的封装,和Eureka 类似,它是 另一个服务注册和发现组件。

Spring Cloud Zookeeper : 该组件是Spring Cloud 对Zoo keeper 的封装,和Eureka 、Consul 类似,用于服务的注册和发现。 0 Spring Cloud Stream :数据流操作组件,可以封装Redis 、RabbitMQ 、Kafka 等组件, 实现发送和接收消息等。

Spring Cloud CLI :该组件是Spring Cloud 对Spring Boot CLI 的封装,可以让用户以 命令行方式快速运行和搭建容器。

Spring Cloud Task : 该组件基于Spring Task ,提供了任务调度和任务管理的功能。

Spring Cloud Connectors : 用于Paas 云平台连接到后端。

             

5、Kubernetes

是一个容器集群管理系统,为容器化的应用程序提供部署运行、维护、扩展、资源调度、服务发现等功能。

           

附录:

       

(本章结束)

猜你喜欢

转载自blog.csdn.net/LUCKWXF/article/details/90518611