微服务模式系列之四:客户端服务实现

译者自序:

熟悉我的朋友都知道,我很不喜欢翻译东西,因为在两种语言的思维方式之间做频繁切换对我来说是件很痛苦的事情。但是这次不一样,公司和同事的大力支持降低了我的痛苦指数,让我能够坚持把Chris Richardson的微服务模式系列文章翻译完,今天发布第四篇——《客户端服务实现》。

背景

不同服务之间通常需要相互调用。在单体应用程序当中,服务间通过语言层级的方法或者过程实现相互调用。在传统的分布式系统部署下,服务在固定并且已知的位置(主机与端口)运行,从而确保各服务可利用HTTP/REST或者某种RPC机制进行相互调用。然而,现代化微服务应用程序中通常在虚拟化或者容器化环境中运行,在这样的环境中服务的实例数量和位置是动态变化的。

因此,要想实现客户端向动态变化的一组服务端实例发送请求,我们必须采用新的机制。

问题

服务的客户端——包括API网关或者其它服务——如何才能获取服务端实例的位置?

需求

  • 每一服务实例都会在特定位置(主机与端口)通过HTTP/REST或者Thrift等方式发布一个远程API。
  • 服务端实例的具体数量及位置会发生动态变化。
  • 虚拟机与容器通常会被分配动态IP地址。
  • 服务实例的数量会发生动态变化。例如,EC自动伸缩组会根据负载情况随时调整实例数量。

方案

在向某一服务发送请求时,客户端会通过查询 Service Registry,即服务注册表,以获取该服务实例的位置。该注册表中包含全部服务的位置。

以下示意图展现了这种模式的结构。

而这正是微服务底盘框架的典型处理方式。

举例

Netflix OSS正是客户端发现机制的典型代表:

结果

客户端发现机制拥有以下优势:

客户端发现机制亦存在着以下弊端:

  • 这一模式使客户端与 Service Registry5相耦合。
  • 需要为应用程序中使用的每种编程语言/框架建立客户端服务发现逻辑,例如Java/Scala以及JavaScript/Node JS。举例来说,Netflix Prana就为非JVM客户端提供了一套基于HTTP代理的服务发现方案。

相关模式

文中关键词链接地址:

1.Eureka:https://github.com/Netflix/eureka/wiki/Eureka-at-a-glance

2.Service Registry:http://microservices.io/patterns/service-registry.html

3.Ribbon Client:https://github.com/Netflix/ribbon

4.服务器端发现:http://microservices.io/patterns/server-side-discovery.html

5.Service Registry:http://microservices.io/patterns/service-registry.html

6.Service Registry:http://microservices.io/patterns/service-registry.html

7.微服务底盘:http://microservices.io/patterns/microservice-chassis.html

8.服务器端发现:http://microservices.io/patterns/server-side-discovery.html

原文链接:http://microservices.io/patterns/client-side-discovery.html

关于译者:

宋潇男

EAII-企业架构创新研究院 专家委员

现任普元云计算架构师,曾任华为云计算产品技术总监。曾负责国家电网第一代云资源管理平台以及中国银联基于OpenStack的金融云的技术方案、架构设计和技术原型工作。

原著作者

Chris Richardson

世界十大软件架构师之一,《POJOS IN ACTION》一书的作者。他的研究领域包括Spring、Scala、微服务架构设计、NoSQL数据库、分布式数据库、分布式数据管理、事件驱动的应用编程等。

原文发布于微信公众号 - EAWorld(eaworld)

原文发表时间:2016-10-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Cloud Foundry来调整微服务API

[本文由John Wetherill撰写。]

20710
来自专栏BestSDK

开发事半功倍,25款最好用的自动化软件部署工具|附下载地址

选择一个号的软件部署工具是一个很棘手的问题,因为对一个开发团队来说,对于他们适合的工具可能无法满足另外一个团队的需求,本文收集了25个最好的软件部署工具,用以帮...

1.2K11
来自专栏Timhbw博客

小白搭建博客教程之流程

2016-03-1209:03:37 发表评论 431℃热度 搭建个人博客其实说简单也简单,说难也难,当初我一个独自探索,到现在也差不多摸清门路了,因此写一个...

44910
来自专栏算法channel

BAT面试14: 谈谈 docker 在深度学习任务中的应用

Docker是一种容器技术,它就像一个沙盒把应用程序隔离开来,不管有没有遇到过你至少听到某些应用程序不能兼容,最常见的就是升级某个系统,老版本跟新版本不能兼容,...

3083
来自专栏SDNLAB

Neutron和ONOS集成实践

一.Neutron和ONOS集成 1、Neutron和ONOS社区动态 首先,我们可以从Neutron项目中的doc/source/policies/neutr...

3685
来自专栏木头编程 - moTzxx

PHP 网站应用微信登录

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/de...

7903
来自专栏日常学python

Python骚操作 | 还原已撤回的微信消息

一大早醒来,发现女神昨晚发来三条消息,但是显示都已撤回,OMG,我错过了什么?群里有一个漂亮妹纸的爆照照片撤回了,想看又看不到!群里大佬分享的经典语录被撤回了,...

3586
来自专栏MoeLove

GitLab CI 使用 InsecureRegistry

继上次分享后,有读者留言问 dind 使用 insecure-registry 相关的问题。

1251
来自专栏XAI

初识Bluemix-基于Bluemix快速开发可具有Watson认知能力的IOT应用

参与IBM的“第八格”技术论坛,体验了一把基于Bluemix如何快速将一个IOT服务应用开发出来,用Node-red工具创建一个可视化应用。 NODE-RED ...

3848
来自专栏EAWorld

微服务模式系列之八:第三方注册

译者自序: 熟悉我的朋友都知道,我很不喜欢翻译东西,因为在两种语言的思维方式之间做频繁切换对我来说是件很痛苦的事情。但是这次不一样,公司和同事的大力支持降低了我...

2798

扫码关注云+社区

领取腾讯云代金券