内容简介:http://allenlsy.com/service-discovery你如果想和你所有的朋友失去联系,最简单的办法就是换个电话号码,然后不通知任何人。在微服务架构中也一样,如果一方换了 IP 地址,其他 service 就找不到它了。
http://allenlsy.com/service-discovery
你如果想和你所有的朋友失去联系,最简单的办法就是换个电话号码,然后不通知任何人。
在微服务架构中也一样,如果一方换了 IP 地址,其他 service 就找不到它了。
Service discovery 的作用,就是帮忙在网络中寻找 service 。
为什么需要 service discovery
如果网站的架构都是在物理主机的基础上搭建的,那么配置、IP 地址,在多数时候都是相对稳定不变的。
但如果 app 在云端,因为 service 会经历重启、崩溃、伸缩,所以很多 service 都是使用动态的 IP。那么手动再来配置每台服务器就不方便了。
Service discovery 的组成
它由3部分组成:
-
service registry,维护一个列表,存储各个 service 的位置信息
-
service provider 提供服务。服务开始时把自己 register 到 registry 上。服务断线时 de-register 。
-
service consumer 使用其他服务。它需要从 registry 获取其他服务的位置
Service discovery 的设计
其实我们需要做的就是维护一个 service name -> [ server IPs ] 的 hash table。注意这里使用的是 server IPs 集合,因为一个 service 可能由很多太 server 提供。
当需要获取一个 service IP 时,直接从数组中随机选择一个即可。
这样的话,用一个 redis 都可以实现一个简单的 service discovery。
但这里有以下一些复杂的情况要考虑:
-
service 掉线时,多半不能 de-register 。那么 service discovery 如何知道它掉线了?现在的解决方案是, service discovery 会时不时对 service 做 health check ,比如每5秒一次。如果 service 无法连接,那么就 de-register
-
consumer 是不是每次查询其他 service 都要向询问 register?为了减小 register 的压力,consumer 可以维护一份本地的 provider 位置信息
-
在 2) 的基础上,如果 provider 信息变了,如何通知 consumer?其实实现方法挺多的。1) 如果 consumer 主动更新自己,那么consumer 可以时不时和 registry 同步信息,比如每1分钟一个。这样 registry 压力还是挺大。也可以是只有当 consumer 发现,使用本地提供的信息仍然无法连接 provider 时才向 registry 同步信息。这更像是一个 cache 的设计。 2) 如果 provider 主动更新 consumer,那么可以使用 pub-sub 模式。设计一个message queue,所有 consumer 监听这个queue。provider 位置信息变化时发一个 message,consumer 收到后更新自己。不过这样,每个 consumer 需要多一个 thread 来 listen to queue
-
如何避免 registry 的 single point of failure?使用分布式系统来实现 registry ,比如 zookeeper / etcd / consul
另一种实现方法,是使用 client-side discovery ,从客户端的角度实现 discovery。每一个客户端都有一份 provider 的位置信息,由客户端来实现 load balance 。Airbnb 的 SmartStack 和 Netflix 的 Eureka 就类似这个思路。这个方法有利有弊吧。
Netflix 的 Eureka:https://github.com/Netflix/eureka/wiki/Understanding-eureka-client-server-communication
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 单体架构与微服务架构对比,为什么采用微服务架构
- Java架构书籍:微服务架构必读书单(附微服务架构模式进阶导图)
- 「微服务架构」微服务架构中的数据一致性
- 架构演进之「微服务架构」
- 微服务架构 VS 单体架构
- 从单体架构到微服务架构
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
首席产品官1 从新手到行家
车马 / 机械工业出版社 / 2018-9-25 / 79
《首席产品官》共2册,旨在为产品新人成长为产品行家,产品白领成长为产品金领,最后成长为首席产品官(CPO)提供产品认知、能力体系、成长方法三个维度的全方位指导。 作者在互联网领域从业近20年,是中国早期的互联网产品经理,曾是周鸿祎旗下“3721”的产品经理,担任CPO和CEO多年。作者将自己多年来的产品经验体系化,锤炼出了“产品人的能力杠铃模型”(简称“杠铃模型”),简洁、直观、兼容性好、实......一起来看看 《首席产品官1 从新手到行家》 这本书的介绍吧!
在线进制转换器
各进制数互转换器
RGB HSV 转换
RGB HSV 互转工具