微服务:Eureka,Ribbon,Hystrix( 二 )

对比:

  • Eureka - JAVA - AP - HTTP
  • Consul - Go - CP - HTTP / DNS
  • Zookeeper - Java - CP - 客户端
  • Nacos - Java - 支持 AP / CP 切换 - HTTP
服务注册中心组件 Eureka服务注册中心的一般原理、对比了主流的服务注册中心方案,目光聚焦 Eureka 。
Eureka 基础架构:
Eureka Server 需要手动搭建一个工程,并引入相关依赖,进行对应的配置文件设置 。?Renew 心跳 / 心跳检测:服务注册默认 30s 续约,默认 90s 没有收到续约就会将 Client 实例从服务列表中剔除 。?ApplicationService 服务提供者 ----> Eureka Client --注册服务--> Eureka Server 注册中心?Eureka Server 注册中心 --服务列表-缓存--> Eureka Client ----> ApplicationClient 客户端消费者?ApplicationClient 客户端消费者 --调用服务--> ApplicationService 服务提供者Eureka 交互流程及原理:
不同的 Eureka Server 会互相同步复制(Replicate)服务实例列表;每个 Eureka Server 是一个集群;Eureka Server 搭建集群来保持高可用服务注册中心;每个 Eureka Server 可能处于不同地域不同的机房 。?Eureka 服务注册中心:[Eureka Server 1, Eureka Server 2, Eureka Server 3]?Appllication Service 服务提供者 - 含有 Eureka ClientApplication Client 服务消费者 - 含有 Eureka Client?服务提供者可以进行 Register, Renew, Cancel, Get Registry 于服务注册中心 。服务消费者可以进行 Get Registry 于服务注册中心 。?服务消费者 Make Remote Call 于服务提供者 。Eureka 包含两个组件 - Eureka Server 和 Eureka Client:
  • Eureka Client 是一个 Java 客户端,用于简化与 Eureka Server 的交互;Eureka Server 提供服务发现的能力 。
  • 各个微服务启动时,会通过 Eureka Client 向 Eureka Server 进行注册自己的信息(如网络信息),Eureka Server 会存储该服务的信息 。
  • Application Service 作为服务提供者向 Eureka Server 中注册服务,Eureka Server 接受到注册事件会在集群和分区中进行数据同步,Application Client 作为消费端(服务消费者)可以从 Eureka Server 中获取到服务注册信息,进行服务调用 。
  • 微服务启动后,会周期性地向 Eureka Server 发送心跳以续约自己的信息; Eureka Server 默认心跳续约周期为 30s,默认 90s 后会将还没有续约的 Client 给剔除 。
  • 如果 Eureka Server 在一定时间内没有接收到某个微服务节点的心跳,将会注销该微服务节点(默认 90 秒) 。
  • 每个 Eureka Server 同时也是 Eureka Client,多个 Eureka Server 之间通过复制的方式完成服务注册列表的同步 。
  • Eureka Client 会缓存 Eureka Server 中的信息 。即使所有的 Eureka Server 节点都宕掉,服务消费者依然可以使用缓存中的信息找到服务提供者 。
Eureka 通过心跳检测、健康检查和客户端缓存等机制,提高系统的灵活性、可伸缩性和高可用性 。
搭建单例 Eureka Server 服务注册中心实现过程:
  1. 单实例 Eureka Server -> 访问管理界面 。
  2. 服务提供者(商品微服务注册到集群) 。
  3. 服务消费者(页面静态化微服务注册到 Eureka / 从 Eureka Server 获取服务信息) 。
  4. 完成调用。
1)搭建 Eureka Server 服务 lagou-cloud-eureka
lagou-parent 中增加 Spring Cloud 版本号依赖管理;Spring Cloud 是一个综合的项目,下面有很多子项目,比如 eureka 子项目;Greemwich 对应的 Spring Boot 是 2.0.x 版本 。
<dependencyManagement><dependencies><!-- SCN --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Greenwich.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>2)lagou-cloud-eureka 工程 pom.xml 中引入依赖
<dependencies><!-- Eureka server 依赖 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency></dependencies>注意:在父工程的 pom 文件中手动引入 jaxb 的 jar,因为 Jdk 9 之后默认没有加载该模块,但是 Eureka Server 使用到,所以需要手动导入,否则 Eureka Server 服务无法启动 。
父工程 lagou-parent 的 pom 中增加依赖:
<!-- 引入 Jaxb,开始 --><dependency><groupId>com.sun.xml.bind</groupId><artifactId>jaxb-core</artifactId><version>2.2.11</version></dependency><dependency><groupId>javax.xml.bind</groupId><artifactId>jaxb-api</artifactId></dependency><dependency><groupId>com.sun.xml.bind</groupId><artifactId>jaxb-impl</artifactId><version>2.2.11</version></dependency><dependency><groupId>org.glassfish.jaxb</groupId><artifactId>jaxb-runtime</artifactId><version>2.2.10-b140310.1920</version></dependency><dependency><groupId>javax.activation</groupId><artifactId>activation</artifactId><version>1.1.1</version></dependency><!-- 引入 Jaxb,结束 -->


推荐阅读