微服务的功能
-
服务的注册和发现
- 服务注册:向服务注册中心注册一个服务实例,服务提供者将自己的服务信息(如IP地址、服务名等)告知服务注册中心。
- 服务发现:当服务消费者需要消费另外一个服务时,服务注册中心能够告知服务消费者它所需要的消费服务的实例信息。
-
服务的容载和均衡
-
服务的容错
-
熔断机制:当一个服务处理用户请求的失败次数在一定时间内小于设定的阀值时,熔断器处于关闭状态,服务是正常;当服务处理用户请求的失败次数大于设置的阀值时,说明服务出现错误,打开熔断器,这时所有请求会执行快速失败,不执行业务逻辑。当处于打开状态的熔断器,一段时间后会处于半打开状态,并执行一定数量的请求,剩余的请求会执行快速失败,若执行的请求失败了,则继续打开熔断器;若成功了,熔断器关闭。

熔断机制不仅可以防止系统“雪崩”效应,还有以下作用:
- 将资源进行隔离,如果某个服务的某个api接口出现故障,指挥隔离改api接口。
- 服务降级。当服务处于正常的状态时,大量的请求在短时间内同时涌入,超过了服务的处理能力,这时熔断器会被打开,将服务降级,以免服务器因负载过高出现故障。
- 自我修复能力。
-
服务网关
微服务系统通过将资源以api接口的形式暴露对外界来提供服务。在微服务系统中,api接口资源你通常是由网关服务统一暴露,内部服务不直接对外提供api资源暴露。
- 网关将所有服务的api接口资源统一聚合,对外统一暴露,外界系统调用的api接口都是网关对外暴露的。外界不需要知道微服务架构中各个服务调用的复杂性,也保护了微服务api接口,防止被外界直接调用或者敏感信息暴露。
- 网关可以做一些身份认证、权限认证,防止非法请求操作aip接口。
- 网关可以实现监控,实时日志输出,对请求进行记录。
- 网关可以用来做流量监控。
- api接口从内部分离出来,方便做测试。
-
服务配置的统一管理3.
微服务架构中需要统一管理配置文件的组建,例如Spring Cloud的Spring Cloud Config组建、阿里的Diamond、百度的Disconf、携程的Apollo等。
以Spring Cloud Config为例:
-
Config Server 读取配置文件仓库的配置信息,其中配置文件仓库可以存在配置服务的本地仓库,也可以放在远程的Git仓库。
-
配置服务启动后,读取配置文件信息,读取完成的配置信息存放在配置服务的内存中。
-
当启用服务A、B时,由于服务A、B指定了向配置服务读取配置信息,服务A、B向配置服务读取配置服务。
-
当服务的配置信息需要修改或修改完成后,想配置服务发送Post请求进行刷新,这时服务A、B会向配置服务重新读取配置文件。

-
链路追踪
微服务系统是一个分布式架构系统,微服务系统按业务划分服务单元,一个微服务系统往往有很多个服务单元。由于服务单元数量很多且业务复杂,服务与服务之间调用有可能非常负载,一旦出现了异常和错误,就会很难定位问题。所以在微服务架构中,必须实现分布式链路追踪,去跟进一个请求到底有哪些服务参与,参与的顺序又是怎样的,从而使每个链路清晰可见。
-
实时日志
Spring Cloud
常见组件
-
服务注册和发现组件Eureka
Eureka组件提供了服务的健康监测,以及友好的UI。Eureka组件可以让开发人员随时了解服务单元的运行情况。Spring Cloud也支持Consul和Zookeeper,用于服务注册和发现。
-
熔断组件Hystrix
除了有一些基本的熔断器功能外还能够实现服务降级、服务限流的功能,也提供了熔断器的健康检测,以及熔断器健康数据的api接口。Hystrix Dashboard提供了单个服务熔断器的健康数据的界面展示。Hystrix Turbine组件提供了多个服务的容电器的健康状态数据的界面展示。
-
负载均衡组件Ribbon
通常和Eureka、Zuul、RestTemplate、Feign配合使用。Ribbon和Zuul配合,很容易做到负载均衡,将请求根据负载均衡策略分配到不同的服务实力。Ribbon和RestTemplate、Feign配合,在消费服务时能够做到负载均衡。
-
路由网关Zuul
智能路由和过滤的功能。内部服务的api接口通过Zuul网关统一对外暴露,内部服务的api接口不能直接暴露,防止内部信息对外暴露。
-
Spring Cloud config
提供了仓库配置文件统一管理功能。Spring Cloud Config包括Server端和Client端,Server端读取本地仓库或者远程仓库的配置文件,所有的Client向Server读取配置信息,从而达到配置文件统一管理的目的。通常情况下,Spring Cloud Config和Spring Cloud Bus相互配合刷新指定的Client或所有Client的配置文件。
-
Spring Cloud Security
对Spring Security组件的封装,向服务单元提供了用户验证和权限验证。
-
Spring Cloud Sleuth
分布式链路追踪组件,封装了Dapper、Zipkin和Kibana等组件,通过它可以知道服务之间的相互依赖关系,并实时观察链路的调用情况。
-
Spring Cloud Stream
数据流操作包,可以封装RabbitMq、ActiveMq、Kafka、Redis等消息组件,利用Spring Cloud Stream可以实现消息接口和发送。
项目一览
- Spring Cloud Config:服务配置中心组件。
- Spring Cloud Netflix:通过包装Nerflix公司的微服务组件实现的,也是Spring Cloud核心的核心组件,包括Eureka、Hystrix、Zuul、Archaius等。
- Eureka:服务注册和发现组件。
- Hystrix:熔断器组件。
- Zuul:智能路由网关组件。
- Feign:声明式远程调度组件。
- Ribbon:负载均衡组件。
- Archaius:配置管理Api组件,一个机遇Java的配置管理库,用于多配置的动态获取。
- Spring Cloud Bus:消息总线组件,用于动态刷新服务的配置。
- Spring Cloud Sleuth:服务链路追踪组件,封装了Dapper、Zipkin、Kibina等组件,可以实时监控服务的链路调用情况。
- Spring Cloud Data Flow:大数据操作组件。Spring XD替代品。
- Spring Cloud Security:安全模块组件,通常配合OAuth2使用来保护微服务系统的安全。
- Spring Cloud Consul:对Consul的封装,和Eureka类似,服务注册和发现组件。
- Spring Cloud Zookeeper:对Zookeeper的封装,服务注册和发现组件。
- Spring Cloud Stream:数据流操作组件,实时发送和接收消息。
- Spring Cloud CLI:对Spring Boot CLI的封装,可以让用户以命令行方式快速运行和搭建容器。
- Spring Cloud Task:基于Spring Task,提供了任务调用和任务管理功能。
- Spring Cloud Connectors:用于Paas云平台连接到后端。
Dubbo
阿里巴巴开源的分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
Dubbo核心内容:
- RPC远程调用:封装了长连接NIO框架,如Netty、Mina等,采用多线程模式。
- 集群容错:提供了基于接口方法的远程调用的功能,并实现了负载均衡策略、失败容错等功能。
- 服务发现:集成了Apache的Zookeeper组件,用于服务注册和发现。
Kubernetes
容器集群管理系统,为容器化的应用程序提供部署运行、维护、扩展、资源调度、服务发现等功能。
主要特点如下:
- Planet Scale(大容量)
- Never Outgrow(永不过时)
- Run Anywhere(随时随地的运行)
主要功能:
-
Autumatic Binpacking(自动包装)
根据程序自身的资源需求和一些其它方面的需求自动配置容器。能够最大化的利用机器的工作负载,提高资源的利用率。
-
Self-healing(自我修复)
容器失败自动重启,当节点处于“死机”状态时,它会替代并重新编排;当容器达到用户设定的无响应阀值时,它会被剔除,并且不让其他容器调用它,知道它恢复服务。
-
Horizontal Scaling(横向扩展)
可以根据机器的CPU的使用率来调整容器的数量,只需要开发人员在命令行输入几个命令。-
-
Automated Rollouts and Rollbacks(自动部署或回滚)
-
Secret and Configuration management(配置管理)
部署和更新应用程序的配置,不需要重新打镜像,并且不需要在堆栈中暴露配置。
-
Storage Orchestration(存储编排)
-
Batch execution(批量处理)