1.SpringCloud

SpringCloud是一套非常完整的微服务解决方案。它利用 Spring Boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 Spring Boot 的开发风格做到一键启动和部署。
常用组件
服务注册与发现:Eureka、Nacos
服务网关:Zuul、Gateway
负载均衡组件:Ribbon
远程调用组件:OpenFeign
服务保护组件:Hystrix、Sentinel
配置管理组件:SpringCloud Config、Nacos
优点

  • 耦合度比较低
  • 配置简单,跨平台
  • 并行开发,减轻团队成本

缺点

  • 部署、集成测试麻烦
  • 数据管理、性能监控麻烦

微服务基础 - 图1
微服务基础 - 图2

2.服务注册发现

每个SpringCloud服务器启动后向注册中心注册本服务器信息,如服务别名、服务器IP、端口号等,其他服务进行请求时先根据服务别名从注册中心获取到目标服务器IP和端口号,并将获取到的信息缓存到本地,然后通过本地使用HttpClient等技术进行远程调用。
微服务基础 - 图3整体的执行流程如下:

  1. 在服务启动时,服务提供者通过内部的注册中心客户端应用自动将自身服务注册到注册中心,包含主机地址、服务名称等等信息;
  2. 在服务启动或者发生变更的时候,服务消费者的注册中心客户端程序则可以从注册中心中获取那些已经注册的服务实例信息或者移除已下线的服务;

上图还多一个设计缓存本地路由,缓存本地路由是为了提高服务路由的效率容错性,服务消费者可以配备缓存机制以加速服务路由。更重要的是,当服务注册中心不可用时,服务消费者可以利用本地缓存路由实现对现有服务的可靠调用。

  • Zookeeper
  • Eureka
  • Consul
  • Nacos
  • Kubernetes

3.SpringBoot、SpringCloud、dubbo

SpringBoot专注于快速、方便开发单个微服务;SpringCloud关注全局的服务治理框架。

服务调用方式dubbo是RPC,springcloud Rest Api
注册中心dubbo是zookeeper,springcloud是eureka,也可以是zookeeper。

网关

网关是所有微服务的门户,路由转发仅仅是最基本的功能,除此之外还有其他的一些功能,比如:认证鉴权熔断限流日志监控等。
Spring Cloud Gateway 基于Spring Boot 2.x、Spring WebFlux和[Project Reactor构建。

  1. 路由(route):gateway的基本构建模块。它由ID、目标URI、断言集合和过滤器集合组成。如果聚合断言结果为真,则匹配到该路由。
  2. 断言(Predicate ):参照Java8的新特性Predicate,允许开发人员匹配HTTP请求中的任何内容,比如头或参数。
  3. 过滤器(filter):可以在返回请求之前或之后修改请求和响应的内容。

Hystrix/Sentinel

Hystrix 是一个延迟和容错库,旨在隔离远程系统,服务和第三方库的访问点,当出现故障是不可避免的故障时,停止级联故障并在复杂的分布式系统中实现弹性。
服务降级(当接口调用失败,自动执行一个空的方法。避免线程阻塞)
服务熔断 当接口调用失败,自动执行提前定义好的熔断方法 统一返回错误信息)
服务隔离:隔离服务间的相互影响

Sentinel是流量防卫兵,以流量为切入点,从流量控制熔断降级系统负载保护等多个维度保护服务的稳定性。
Sentinel 分为两个部分

  • 核心库(Java 客户端)不依赖任何框架/库,能够运行于所有 Java 运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。
  • 控制台(Dashboard)基于 Spring Boot 开发,打包后可以直接运行,不需要额外的 Tomcat 等应用容器。

Sentinel 具有以下特征

  • 丰富的应用场景:秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。
  • 完备的实时监控:Sentinel 同时提供实时的监控功能。可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。
  • 广泛的开源生态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Apache Dubbo、gRPC、Quarkus 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。同时 Sentinel 提供 Java/Go/C++ 等多语言的原生实现。
  • 完善的 SPI 扩展机制:Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。

微服务基础 - 图4
微服务基础 - 图5

Feign/openFeign

Feign旨在使得Java Http客户端变得更容易。它集成了Ribbon、RestTemplate实现了负载均衡的执行Http调用,只不过对原有的方式(Ribbon+RestTemplate)进行了封装,开发者不必手动使用RestTemplate调服务,而是定义一个接口,在这个接口中标注一个注解即可完成服务调用,这样更加符合面向接口编程的宗旨,简化了开发。

OpenFeign是springcloud在Feign的基础上支持了SpringMVC的注解,OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。

Spring Cloud Bus

提供了跨多个实例刷新配置的功能

分布式安全部署.pptx