学习微服务注册解决方案和Eureka的实现

微服务注册解决方案和Eureka

微服务架构会遇到的问题

  1. 调用地址硬编码到了微服务的java代码中。
  2. 正式应用的时候微服务会有一大堆,调用方端需要记录维护每一个其他微服务的地址。增加了开发难度
  3. 微服务调用做负载均衡会有问题。
  4. 调用关系链路复杂,导致追踪困难

服务注册Eureka (AP型注册中心)

微服务注册中心

注册中心可以说是微服务架构中的“通讯录”, 它记录了服务和服务地址的映射关系。在分布式系统架构中,服务会注册到这里,当服务需要调用其他服务时,就这里找到服务的地址,进行调用

 

学习微服务注册解决方案和Eureka的实现

注册中心的主要作用

注册中心是微服务架构非常重要的一个组件,在微服务架构里主要起到了协调者的作用,功能如下:

  • 服务发现:

    • 服务注册/反注册: 保存服务提供者和服务调用者信息。
    • 服务订阅/取消订阅: 服务调用者订阅服务提供者的信息,最好有实时推送功能。
    • 服务路由(可选): 具有筛选整合服务提供者的能力
  • 服务配置:

    • 配置订阅: 服务提供者和服务调用者订阅微服务相关的配置。
    • 配置下发: 主动将配置推送给服务提供者和服务调用者。
  • 服务健康检查

    • 检测服务提供者的健康状况。

主流注册中心及参数

  Nacos Eureka Consul CoreDNS Zookeeper
一致性协议 CP+AP AP CP CP
健康检查 TCP/HTTP/MYSQL/Client Beat Client Beat TCP/HTTP/gRPC/Cmd Keep Alive
负载均衡策略 权重/ metadata/Selector Ribbon Fabio RoundRobin
雪崩保护
自动注销实例 支持 支持 不支持 不支持 支持
访问协议 HTTP/DNS HTTP HTTP/DNS DNS TCP
监听支持 支持 支持 支持 不支持 支持
多数据中心 支持 支持 支持 不支持 不支持
跨注册中心同步 支持 不支持 支持 不支持 不支持
SpringCloud集成 支持 支持 支持 不支持 支持
Dubbo集成 支持 不支持 不支持 不支持 支持
K8S集成 支持 不支持 支持 支持 不支持

Eureka概述

Eureka 基础知识

Eureka是Netfilx开发的服务发现框架,SpringCloud将它集成在自己的子项目spring-cloud-netfilx中,

实现SpringCloud的服务发现功能

 

学习微服务注册解决方案和Eureka的实现

上图简要的描述了Eureka的基本架构,由3个角色组成

  1. Eureka Server

    提供服务注册和发现

  2. Service provider

    • 服务提供方
    • 将自身服务注册到Eureka,从而使服务消费方能够找到
  3. Service Consumer

    • 服务消费者
    • 从Eureka获取注册服务列表,从而能够消费服务

Eureka的交互流程与原理

  1. Eureka Server需要单独搭建,就是我们的注册中心。

  2. 集群搭建时新增加的server会复制最近server的服务注册列表。

  3. 每个微服务(提供者和消费者)需要集成Eureka Client

  4. Eureka Server提供了服务发现功能,当服务提供者启动会通过client自动注册本身相关服务。

  5. Eureka Server会将注册信息保存到内存中。

  6. Eureka Client每30秒会向Eureka Server发送心跳表示自己仍然存活。

  7. 当配置时间之内Eureka Server没有收到Client发送的心跳,Server认定该服务宕机或下线,就会删除内从中的注册信息
  8. 消费者通过Eureka Client向注册中心发送请求,拉取所有的注册信息。并存储到内存
  9. 从内存中找到需要request的地址并发起请求。

注意: 当注册中心删除了下线的服务,可能有些client还并没有更新注册信息,依然保留有过期的注册信息。这个就是不能完全保证C (一致性),只能保证A (可用性)P (分区容错性)