目前 Java 中有两套成熟的微服务框架:

  • Spring Cloud 整合的微服务工具集
  • Spring Cloud Alibaba 微服务一站式解决方案
  • 当然也可以自行选择最适合业务需要的工具,因为上面的工具集也是使用单一的工具整合起来使用的。
  • 阿里系的微服务工具介绍和使用可以查看 spring-cloud-alibaba 的 github 文章,你也可以去 官方中文网
  • 使用 Spring Cloud Alibaba 时,可以参考 官方版本选择说明
  • 为什么上面只写了使用 ali 系工具注意的点,因为普通程序员都有大厂崇拜心里 (包括我)。随着经验的增加,逐渐认识到这是不可取的,要有自己的思考。

Java 微服务组件

得益于 Javaer 非常多,所以大佬们出品的微服务的组件也是多种多样,这就是 Java 生态带来的自信!可以选择的东西很多,啊?什么?你说你是选择困难症!

那你听我细细到来:单单服务间的远程调用就有很多解决方案,比如 RMI(Sun/Oracle)、Thrift(Facebook)、Dubbo(阿里巴巴)、gRPC(Google)、otan2(新浪)、Finagle(Twitter)、brpc(百度)、Arvo(Hadoop)、JSON-RPC、REST 等。你想选择哪种呢?

一般而言,微服务组件按照功能大致分为以下几种,这些工具各司其职,在项目中完成自己的职责共同造就项目的无敌状态!!!

1. 服务注册与发现中心组件(管理微服务的健康值状态)

  1. Eureka(Netflix)
  2. Consul(HashiCorp,GO语言编写),启动后可以访问 ip:8500 进入管理页面
  3. Nacos(Alibaba开源),启动后可以使用 ip:8848 进入管理页面
  4. Zookeeper(Apache,Java 语言编写)

2. 服务间通信组件(远程调用)

  1. RestTemplate + Ribbon(NetFlix) 实现负载均衡
  2. OpenFeign(包含 Ribbon) 伪 http 客户端,支持 Spring 注解
  3. Dubbo(阿里开源)

RestTemplate 与 Openfegin 对比:

  • RestTemplate 将路径写死在代码中,不利于维护。
  • Openfegin组件(内部集成了 Ribbon):解决了 RestTemplate 实现服务间通信的所有问题,并且使用简单,支持注解。

使用 OpenFeign 组件进行客户端的服务通信时,映射地址(@RequestMapping)和被调用的 FeignClient 的对应的方法映射地址必须相同;方法名称可以不同,但为确保一致性,推荐使用相同的方法名和相同的映射地址。

3. 服务熔断器组件(解决服务雪崩问题)

  1. Hystrix(进入了维护模式)以及对应的可视化展示工具 Hystrix DashBoard
  2. Sentinel(阿里开源)

Hystrix 断路器打开条件:

  • 当满足一定的阈值,默认 10 秒内超过 20 个请求
  • 当失败率达到一定的时候,默认 10 秒内超过 50% 的请求失败

4. 服务网关中心组件(提供请求统一入口,路由转发,过滤)

  1. Gateway (转发、负载均衡、断言、过滤)
  2. zuul1.x zuul2.x
  3. Nacos(阿里开源)

5. 服务统一配置中心组件

  1. config 组件:
    ConfigServer 获取远程仓库的地址存入本地仓库
    ConfigClient 根据 ConfigServer 读取自身配置
  2. bus 组件:消息总线:将微服务所有节点链接到一起,通过总线实现自动配置刷新
  3. Nacos(阿里开源)

6. 事务组件

  1. Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。

本站由 江湖浪子 使用 Stellar 1.28.1 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。