Spring Cloud 微服务实战(三) - 服务注册与发现

0 分布式下服务注册的地位和原理

0.1 分布式系统中为什么需要服务发现



A 类比青楼中的嫖客, B 类比青楼女子,注册中心呢就相当于青楼中的妈咪
一般 嫖客服务一来,就肯定直接点名春花还是秋月呀,直接问妈咪要花魁就行

0.2 服务发现的两种方式

◆ 客户端发现

  • Eureka

◆ 服务端发现

  • Nginx
  • Zookeeper
  • Kubernetes

我们这里使用Eureka

◆ 基于Netflix Eureka做了二次封装
◆ 两个组件组成:

  • Eureka Server注册中心
  • Eureka Client服务注册

1 注册中心 Eureka Server

新建项目

使用@EnableEurekaServer

就可以让应用变为Eureka服务器,这是因为spring boot封装了Eureka Server,让你可以嵌入到应用中直接使用

  • 直接运行成功如下


  • 但是不断报异常,why?



    这是因为该应用虽然是 Server 端,但也同时是 Client 端,也需要一个注册中心将自己注册进去
    为消除其异常,修改下配置

  • 配置需要注册的地址,也就是往自己身上注册


  • 通过观察源码,知道其实是一个 map, 所以配置如下



    启动仍旧报错,其实正常问题,因为服务端自己又是 Server, 又是 Client, 服务端未启动完成时,客户端肯定是无法找到服务端的
    但是 eureka 的服务端/客户端采用心跳通信方式



    可看到地址已随配置被改变
  • 接下来配置实例名


  • 但是该应用本身就是个注册中心,不需要将其显示在注册实例中,通过以下配置


  • 为防止冲突,将端口号回改为默认



2 服务中心

  • 为避免每次手动启动,将应用打成 war 包(jar)


    通过 java 命令启动
    启动成功效果

    Mac 下 Ctrl+C 退出服务

    后台执行

    查看其相关进程信息
  • 如此该应用就方便了我们,不需要每次都去手动启动应用,在后台会重启,若想杀死进程直接 kill


3 Eureka Client的使用

默认情况下,DiscoveryClient的实现将使用远程发现服务器自动注册本地Spring Boot服务器。可以通过在@EnableDiscoveryClient中设置autoRegister=false来禁用此功能。

  • 启动Server, 再启动 Client


    发现并没有注册成功实例
  • 因为没有配置注册目标地址信息


  • 之后再次重启,依旧无法注册成功,几经勘察,添加以下依赖后,成功运行,注册到服务器


  • 再指定 client 名字


  • 发现成功注册


  • 此为 client 应用ip 地址


  • 但其实可以自定义


  • 接着点击进入那个链接,URL如下


  • Eureka保证分布式CAP理论中的AP
    有时会发现如下红色警戒!

    Eureka看明白了这一点,因此在设计时就优先保证可用性
    我们可以容忍注册中心返回的是几分钟以前的注册信息,但不能接受服务直接宕机。也就是说,服务注册功能对可用性的要求要高于一致性!

如果Eureka服务节点在短时间里丢失了大量的心跳连接(可能发生了网络故障),那么这个 Eureka节点会

  • 进入“自我保护模式”
    但该节点对于新的服务还能提供注册服务, 当网络故障恢复后,这个Eureka节点会退出“自我保护模式”
  • 同时保留那些“心跳死亡”的服务注册信息不过期
    对于“死亡”的仍然保留,以防还有客户端向其发起请求

Eureka的哲学是,同时保留“好数据”与“坏数据”总比丢掉任何数据要更好

  • 在开发模式,最好关闭该模式(默认是开启的),注意仅能在开发环境关闭哦!
  • 生产环境禁止关闭!!!


4 Eureka的高可用

如果一台 eureka 宕机了咋办呢,为了实现高可用, 如果直接加一台服务器并无任何卵用,

4.1 考虑将两台 eureka 互相注册

  • 复制得到两份 eureka,并以端口区分


  • 将 eureka1注册到 eureka2上并启动


  • 将 eureka2注册到 eureka1上并启动




发现 client 在1,2同时都注册成功了!
假如此时 eureka1宕机了,会发生什么呢?


  • 我们来将1给关闭



  • 发现2依旧存活,并且 client 还在连接
  • 若此时再 client 端重启又会发生什么呢?


    在这里插入图片描述
  • 因为无法注册,自然报错了, E2上也没有 client 端再连接了


  • 那么问题来了,怎么才能保证 E1宕机后, client 仍能注册在 E2上呢?只要保持每次都同时往两个 E 注册


同理可得,当有3个 E 时,如此相互注册



  • 新建 E3





    对于我们的本地开发环境,部署一个 E 即可,不再集群

5 Eureka总结

◆ @EnableEurekaServer @EnableEurekaClient
◆ 心跳检测、健康检查、负载均衡等功能
◆ Eureka的高可用,生产上建议至少两台以上
分布式系统中 ,服务注册中心是最重要的基础部分

  • 结构图


参考

SpringCloud Finchley三版本微服务实战
互联网Java进阶面试训练营

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容