《企业级容器云架构开发指南》—2.3.3 服务发现

举报
华章计算机 发表于 2019/05/30 22:30:48 2019/05/30
【摘要】 本书摘自《企业级容器云架构开发指南》一书中的第2章,第2.3.3节,编著是闫健勇 龚 正 吴治辉  屈晓萌 王健飞 王 伟 刘晓红。

2.3.3 服务发现

在单体阶段,为了完成一次服务请求,代码需要知道服务实例的网络位置(IP地址和端口)。传统应用都运行在物理硬件上,服务实例的网络位置都是相对固定的。例如,代码可以从一个经常变更的配置文件中读取网络位置。而对于一个现代的、基于云微服务的应用来说,这却是一个很麻烦的问题。服务实例的网络位置都是动态分配的,而且因为扩展、失效和升级等需求,服务实例会经常动态改变。因此,客户端代码需要使用一种更加复杂的服务发现机制。目前有两大类服务发现模式:客户端发现和服务器端发现。

如图2-20所示的客户端发现模式指当使用客户端发现模式时,客户端负责决定相应服务实例的网络位置,并且对请求实现负载均衡。客户端从一个服务注册表中查询,其中是所有可用服务实例的库。客户端使用负载均衡算法从多个服务实例中选择一个,然后发出请求。

客户端发现模式的优劣势如下。

优势:相对较为直接,不再考虑负载均衡,由于客户端知道可用的服务注册表信息,剩下的控制都可以由服务的请求端完成,可通过使用散列一致性更有效地实现负载均衡。

劣势:针对不同的语言注册不同的服务,在客户端需要实现每种语言的发现逻辑。

image.png

图2-20 客户端服务发现

如图2-21所示,服务器端的发现模式指单独做一个负载均衡,这是与客户端发现模式最大的区别。还是通过注册表找到一个可用的服务,之后要把所有的请求发给作为服务器端的负载均衡,由服务器端的负载均衡具体地来找到可用的实例,然后进行相应的通信。

image.png

图2-21 服务器端服务发现

服务器端发现模式的优劣势如下:

优势:客户端无须关注发现细节。

劣势:除非部署环境提供负载均衡,否则负载均衡是一个需要配置和管理的高可用的功能。

两种方式各有利弊,可以根据实际情况进行选择。

服务注册表也有自注册的模式,以及第三方注册的模式。自注册的模式比较简单,不需要其他系统功能,但如果想把服务实例和服务注册表联系起来,必须在每种编程语言和框架内实现注册代码。第三方注册模式即服务和注册表分离,不需要每种编程语言和架构完成注册逻辑,但需要配置和管理一个高可用系统。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。