springcloud之eureka初识篇

 最近在学习springcloud,最先学习的就是eureka,现在将自己学习的内容整理成笔记,方便理解、复习,同时供其他小伙伴参考。

eureka作为分布式服务的注册中心其作用主要是对各个服务模块的维护管理,协调多个微服务模块之间的相互通信而存在的。

设当前有4个服务模块,服务1,服务2,服务3,服务4,每个服务模块都注册到eureka(注册中心)时,即每个服务模块将自己的相关信息都告知给注册中心,同时可获取eureka上别的服务注册的相关信息,此时各个服务模块只需要获取eureka上的服务注册列表就可知道当前存在哪些服务可以调用,不需要和各个服务模块相互通信来确定是否可调用。

例:

G243,G7038,G520,G1127这4辆高铁,他们分别把自己的信息提供给列车管理中心(eureka),此时管理中心就有了4辆列车的相关信息,此时某辆列车想知道其他列车今天是否运行时只需要去问管理中心(eureka)就好了,就能知道今天其他哪些列车在运行,从哪里开往哪里,几点经过哪里等相关信息,不需要挨个去问其他列车来此确认。

PS:列车在管理中心知道今天有其他哪些列车在运行,在与其他列车交流时是根据在管理中心获取的信息直接与该列车进行交流,不需要通过管理中心在进行交流。

例:G243在管理中心知道今天G7038,G520也在运行,同时获取了他俩的联系方式,此时他想跟其他两例车交流直接根据联系方式呼叫列车就行了,不需要在经过管理中心。

总的来说eureka使每个服务更多的只注重自身的业务,不需要消耗大量资源去关注其他服务的相关信息。

     eureka通过http(RESTful API)的方式实现各个服务进行相互之间的通讯。

eureka功能点:

  1. 注册:eurekaClient将自己的信息注册到eurekaServer,共其他eurekaClient查看。
  2. 按需注册:eurekaClient在注册成功后自身信息发生了变化,此时与server中的自身信息不对应了,该状态client会进行重新注册。
  3. 拉取:eurekaClient可以从eurekaServer获取其他eurekaClient的注册信息。
  4. 远程调用:根据获取到的其他Client的注册信息进行服务调用。
  5. 续约(心跳):client会根据某些配置以指定频率发送请求给eurekaSever,让sever知道该服务当前正常运行—默认每30秒发送一次续约请求。
  6. 状态推送:client可以将自己的状态推送给Server。通过续约操作server可以知道该client还在运行但是不知道client的运行状态是否良好。如client数据库无法正常连接了那么此时client自身是有问题的,但是可以正常向sever发送续约请求,sever只知道client在正常运行但是并不知道client已经出现问题了,该情况下client可以把自己的状态告诉sever,让server知道该client虽然还在运行但是本身出现了问题。
  7. 下线:client在停止服务的时候会告知sever,sever知道后会把该client的信息从注册列表中清除掉。
  8. 自我保护:sever会根据某些配置来选择是否清楚某些注册实例。如clientA向severA进行注册了,因为服务器间的网络原因导致ServerA与clientA在一定时间(90S)没有正常通讯,但是clientA本身是没有问题的,如果这时仅因为暂时通讯中断而把clientA的注册信息清除掉显然并不友好,同时其他client也无法向Server获取clientA的信息导致无法调用clientA,在设置自我保护模式后server不会因为暂时与clientA通讯中断而清除clientA的注册信息,会根据某些配置在达到某些特定条件后再清除clientA的信息。
  9. 同步:server之间的注册信息是通过相互同步复制的方式进行的,以此达到高可用、集群时数据一致。

eureka分为eurekaServer与eurekaClient。

eurekaServer(服务端):eurekaClient向服务端注册自己的服务信息,让其他client可以从该sever获取自己的信息进而调用自己的功能。

eurekaClient(客户端):向服务端注册自己的信息供其他client调用,同时拉取server中其他client的注册信息以达到调用其他client功能的目的。

eurekaServer同时拥有客户端的功能,它既能让client向自己注册也能向其他sever注册自己的信息。

eureka的缺点:

服务端之间的同步复制是依赖是HTTP实现的,所以对网络的要求很高,当网络不好时可以造成通讯延迟甚至通讯中断等问题导致数据不同步,不满足CAP原则中的C(数据一致性)。

QA:让我们自己做:如何做?
客户端:
功能:

  • 注册自身信息
  • 拉取注册表
  • 从注册表选一个服务调用


服务端:
写个web server。
功能:

  • 定义注册表:

Map<name,Map<id,InstanceInfo>> == Map<服务名,Map<实例ID,实例信息>>
当前基本都是集群的状态每个服务模块其实都不值一个服务实例,所以当调用该服务时会根据服务名找到一组该服务,再在其中获取一个具体的服务实例进行调用。

  • 别人可以向我注册自己的信息。
  • 别人可以从我这里拉取他人的注册信息。
  • 我和我的同类可以共享注册表。

eureka是用:jersey实现,也是个mvc框架。
我们可以自己写个spring boot web实现。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值