zoukankan      html  css  js  c++  java
  • springcloud之Eureka上

    0 环境

    系统环境:win10
    编辑器:IDEA

    1 注册中心

    Eureka是springcloud中的注册中心。
    原因: 当是单体应用 类似一条直线 随着项目越来越大 系统拆分 类似那个藕(模块间相互协作 调用) 为了解决服务之间的耦合 注册中心有必要出现了

    2 Eureka构成

    Eureka分为两部分:服务端和客户端,服务端就是注册中心,接收其他服务注册,客户端则是Java客户端,用来注册。
    
    Eureka有三个角色:
    Eureka Server:注册中心
    Eureka Provider:服务提供者
    Eureka Consumer:服务消费者

    3 基础搭建

    Eureka由Java开发的,springcloud使用springboot对Eureka进行了封装,使用方便。

    1 对应的版本

     

    2 创建一个springboot项目 添加Eureka依赖

    2 yml配置 启动Eureka功能

    # 给当前服务取一个名字
    spring:
      application:
        name: eureka
    
    # 设置端口号
    server:
      port: 1234
    
    # 默认情况下 Eureka Server也是一个普通的微服务 即当它是一个注册中心的时候 他有2种 1:注册中心 2:普通服务(把自己注册到自己的上面去)
    # 比喻不形象 Server是一个结婚登记处 1:他是一个登记员 登记其他人的结婚信息 2:同时他也是人类的一员 他也可能结婚 那么自己登记自己老 也不是不可以
    
    # register-with-eureka为false 表示不把当前项目注册到服务中心上
    # fetch-registry为false 表示不从Eureka Server上获取注册信息
    eureka:
      client:
        register-with-eureka: false
        fetch-registry: false

    3 启动项目

    浏览器输入http://localhost:1234/

    4 Eureka后台管理界面介绍

    4 Eureka集群

    注册中心使用之后 所有服务都要通过服务注册中心进行信息交换 服务注册中心的稳定性很重要 一旦注册中心崩了 整个系统都会受到影响 在实际使用中 Eureka一般是以集群的形式出现的
    
    Eureka集群 多个Eureka实例的启动 多Eureka实例之间 相互注册、同步数据 共同组成一个Eureka集群
    (你中有我 我中有你 互通有无)

    1 全景

     2 yml配置

    # 给当前服务取一个名字
    spring:
      application:
        name: eureka
    
    # 设置端口号
    server:
      port: 1234
    
    
    # 默认情况下 Eureka Server也是一个普通的微服务 即当它是一个注册中心的时候 他有2种 1:注册中心 2:普通服务(把自己注册到自己的上面去)
    # 比喻不形象 Server是一个结婚登记处 1:他是一个登记员 登记其他人的结婚信息 2:同时他也是人类的一员 他也可能结婚 那么自己登记自己老 也不是不可以
    
    # register-with-eureka为false 表示不把当前项目注册到服务中心上
    # fetch-registry为false 表示不从Eureka Server上获取注册信息
    eureka:
      client:
        register-with-eureka: true
        fetch-registry: true
        # A服务要注册到B上面
        service-url:
          defaultZone: http://eurekaB:1235/eureka
      instance:
        hostname: eurekaA
    # 给当前服务取一个名字
    spring:
      application:
        name: eureka
    
    # 设置端口号
    server:
      port: 1235
    
    # 默认情况下 Eureka Server也是一个普通的微服务 即当它是一个注册中心的时候 他有2种 1:注册中心 2:普通服务(把自己注册到自己的上面去)
    # 比喻不形象 Server是一个结婚登记处 1:他是一个登记员 登记其他人的结婚信息 2:同时他也是人类的一员 他也可能结婚 那么自己登记自己老 也不是不可以
    
    # register-with-eureka为false 表示不把当前项目注册到服务中心上
    # fetch-registry为false 表示不从Eureka Server上获取注册信息
    eureka:
      client:
        register-with-eureka: true
        fetch-registry: true
        # A服务要注册到B上面
        service-url:
          defaultZone: http://eurekaA:1234/eureka
    instance:
      hostname: eurekaB

    3 打jar包

     

    java jar xxxx.jar --spring.profiles.active=a
    java jar xxxx.jar --spring.profiles.active=b
    启动2个实例时 可能会报一些错 不影响使用 页面登陆不了 排除你自己哪里写的有问题了

     

    启动成功后 确实是相互注册了 共建了一个集群

    5 Eureka细节

    Eureka分为Eureka Server和Eureka Client

    1 Eureka Server

    对外提供的功能:
    (服务端的接收 发放 同步server端)
    1.服务注册(接收) 所有服务都注册到server端
    2.提供注册表(发放) 注册表将所有注册到服务上来的整理成一个列表 Eureka调用服务时 获取这个注册表 正常情况下 注册表会缓存下来 若缓存失效 直接获取最新的注册表
    3.同步状态 Eureka Client通过注册、心跳等机制 和Eureka Server同步当前客户端的状态

    2 Eureka Client

    Eureka Client很多事情帮你做了(自动拉取 更新以及缓存server信息 哪怕所有server节点凉了 client依旧能获取到想要的地址(但是地址可能不太准确)) 简化每个服务和server之间的交互

    2.1 服务注册

    服务提供者将自己注册到服务注册中心(server) 提示->服务提供者(业务划分上的划分) 本质上是Eureka Client 当Eureka Client向Eureka Server注册时 需要提供必要的元信息 比如IP地址 名称 运行状态 端口等。。。

    2.2 服务续约

    Eureka Client注册到Eureka Server上之后 注册成功后 Eureka Client每隔30s向Eureka发送一条心跳信息(告诉它我还活着)  若连续90s(连续3次没法送)有没有收到Eureka Client的续约消息 它会认为Client挂了 赶紧把client从服务列表撤销
    eureka:
      instance:
        # 服务续约时间 默认为30s
        lease-renewal-interval-in-seconds: 30
        # 服务失效时间 默认为90s
        lease-expiration-duration-in-seconds: 90

    2.3 服务下线

    当client下线时 发消息通知server我下线了

    2.4 获取注册表信息

    Eureka Client从Eureka Server上获取服务的注册信息 将其缓存在本地 本地客户端调用服务器  会从该信息中查找远程服务所对应的IP地址等信息 Eureka Client上缓存服务定期30s更新 若本地缓存注册表的信息与server传过来的信息有变化的话 Client会自动处理
    eureka:
      client
        # 是否运行获取注册表信息
        fetch-registry: true
        # Client上缓存的服务注册信息 定期30s更新
        registry-fetch-interval-seconds: 30

    6 Eureka集群原理

     

    在这个图上 Eureka通过Replicate进行数据同步 不同Eureka Server之间的节点地位均等 节点间集群的形成 通过置顶的serviceUrl相互注册 高可用节点的可用性得到提高 
    
    若集群中某个节点失效 client自动切换到其他server上(每个server节点相互同步) Eureka连接方式 不建议单线连接(1->2->3 此时1也会和3互相同步) 可以指定多个注册地址(这样配置serviceUrl 1->2 1->3) 
    
    Eureka分区:
    1.region->地理上的不同区域
    2.zone->具体的机房

     7 小结

    1.注册中心的出现解决了服务间的耦合
    
    2.Eureka三种角色 server(注册中心) client(provider(提供者) consumer(服务消费者) )
    
    3.Eureka搭建 引入依赖 在application上开启server服务 在yml中配置服务名 端口号。。。启动成功后 会显示系统状态 副本 注册上来的服务信息 系统运行环境 以及该的一些ip等基本信息
    
    4.eureka集群(类似互联网 离了你照转) 比如需要2个eureka yml配置 注 register-with-eureka: true fetch-registry: true 配置一个hostname serviceUrl->其他yml的(http://hostname:port/application name)
    为了省事 打包运行 即可看到相互注册了
    
    5.eureka细节 server -> 对外提供3个功能:给予服务注册(接收) 提供注册表 便于client的调用 同步 判断client是否活着 活着才能同步 否则就被杀掉(无情) 
        client -> 特色:自动拉取 更新 缓存信息      
          服务注册:服务提供者将自己注册上去(业务划分出2个角色 本质是一个人) 注册时需要提供一些元信息 ip啥的(类似身份证 手机号啥的 证明你是你开玩笑的 好认识你和你交朋友) 
          服务续约:注册上来 噩梦刚开始 client向server30s续约(费)一次 告诉server别杀我 我还活着 server连续3次90s未接收到client消息 掉线了(类似在黑吧 当你时间到了 给你3次机会 你还没有付费 你个穷鬼 别站在茅坑不拉屎 赶紧下来) 就这样被server从服务列表中剔除了
          服务下线:告诉server我下线了(老板 我下线了 我结一下帐)
          获取注册表信息(消费者):从server上获取信息 缓存本地 更新操作 -> 根据信息比对是否进行更新处理
          提供者:向server注册 提供自身的信息 以及与server心跳时间(存活)的约定 以及服务下线的功能
          消费者:从server获取服务注册信息 并缓存 定期对比该服务信息进行更新处理
    
    6.集群
        server每个节点地位平等 通过Replicate数据同步 serverUrl相当于拨号 节点相互之间的连接方式(某个节点崩溃怎么办) 脚踏""只船
    作者:以罗伊
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    逆向笔记
    后缀名验证
    hook 虚表
    findhex
    敏捷开发模式下如何划定测试范围
    通过数据库来看互联网系统架构演变
    论技术人的总结习惯
    08.基于IDEA+Spring+Maven搭建测试项目--Maven的配置文件settings.xml
    07.基于IDEA+Spring+Maven搭建测试项目--logback.xml配置
    06.基于IDEA+Spring+Maven搭建测试项目--dubbo-consumer.xml配置
  • 原文地址:https://www.cnblogs.com/my-ordinary/p/12354069.html
Copyright © 2011-2022 走看看