首页 热门物流资讯 微服务实战(二):怎么运用API Gateway

微服务实战(二):怎么运用API Gateway

【编者的话】本系列的第一篇介绍了微服务架构办法。它谈论了选用微服务的长处和缺陷,除了一些杂乱的微服务,这种办法仍是杂乱运用的抱负挑选。 当你决议将运用作为一组微服务时,需求决议运用…

【编者的话】本系列的第一篇介绍了微服务架构办法。它谈论了选用微服务的长处和缺陷,除了一些杂乱的微服务,这种办法仍是杂乱运用的抱负挑选。




当你决议将运用作为一组微服务时,需求决议运用客户端怎么与微服务交互。在单体式程序中,一般只要一组冗余的或许负载均衡的服务供给点。在微服务架构中,每一个微服务露出一组细粒度的服务供给点。在本篇文章中,咱们来看它怎么影响客户端到服务端通讯,一同提出一种API Gateway的办法。

介绍

假定你正在为在线购物运用开发一个原生手机客户端。你需求完成一个产品终究页来展现商品信息。




例如,下面的图展现了你在亚马逊Android客户端上滑动产品终究页时看到的信息。

尽管这是一个智能手机运用,这个产品终究页展现了十分多的信息。例如,不只这里有产品根本信息(姓名、描绘和价格),还有以下内容:

  • 购物车中的物品数

  • 下单前史

  • 用户谈论

  • 低库存正告

  • 快递选项

  • 林林总总的引荐,包含常常跟这个物品一同被购买的产品、购买该物品的其他顾客购买的产品以及购买该产品的顾客还阅读了哪些产品。

  • 可选的购物选项



当选用一个单体式运用架构,一个移动客户端将会经过一个REST恳求(GET api.company.com/productdetails/productId)来获取这些数据。一个负载均衡将恳求分发到多个运用实例之一。运用将查询各种数据库并回来恳求给客户端。




相对的,若是选用微服务架构,终究页上的数据会散布在不同的微服务上。下面列举了或许与产品终究页数据有关的一些微服务:

  • 购物车服务 -- 购物车中的物品数

  • 下单服务 -- 下单前史

  • 分类服务 -- 根本产品信息,如姓名、图片和价格

  • 谈论服务 -- 用户谈论

  • 库存服务 -- 低库存正告

  • 快递服务 -- 快递选项、截止时刻、来自不同快递API的成本计算

  • 引荐服务 -- 引荐产品


咱们需求决议移动客户端怎么拜访这些服务。请看下面这几种办法

客户端到微服务直接通讯

理论上说,一个客户端能够直接给多个微服务中的任何一个建议恳求。每一个微服务都会有一个对外服务端(https://serviceName.api.company.name)。这个URL或许会映射到微服务的负载均衡上,它再转发恳求到详细节点上。为了查找产品细节,移动端需求向上述微服务逐一发恳求。



另一个存在的问题是客户端直接恳求微服务的协议或许并不是web友爱型。一个服务或许是用Thrift的RPC协议,而另一个服务或许是用AMQP音讯协议。它们都不是阅读或防火墙友爱的,而且最好是内部运用。运用应该在防火墙外选用相似HTTP或许WEBSocket协议。

这个计划的另一个缺陷是它很难重构微服务。跟着时刻的推移,咱们或许需求改动体系微服务现在的切分计划。例如,咱们或许需求将两个服务兼并或许将一个服务拆分为多个。可是,假如客户端直接与微服务交互,那么这种重构就很难施行。

因为上述三种问题的原因,客户端直接与服务器端通讯的办法很少在实践中运用。

选用一个API Gateway

一般来说,一个更好的解决办法是选用API Gateway的办法。API Gateway是一个服务器,也能够说是进入体系的仅有节点。这跟面向对象规划办法中的Facade办法很像。API Gateway封装内部体系的架构,而且供给API给各个客户端。它还或许有其他功用,如授权、监控、负载均衡、缓存、恳求分片和办理、静态呼应处理等。下图展现了一个习惯当时架构的API Gateway。

API Gateway担任恳求转发、组成和协议转化。一切来自客户端的恳求都要先经过API Gateway,然后路由这些恳求到对应的微服务。API Gateway将常常经过调用多个微服务来处理一个恳求以及聚合多个服务的成果。它能够在web协议与内部运用的非Web友爱型协议间进行转化,如HTTP协议、WebSocket协议。

API Gateway能够供给给客户端一个定制化的API。它露出一个粗粒度API给移动客户端。以产品终究页这个运用场景为例。API Gateway供给一个服务供给点(/productdetails?productid=xxx)使得移动客户端能够在一个恳求中检索到产品终究页的悉数数据。API Gateway经过调用多个服务来处理这一个恳求并回来成果,触及产品信息、引荐、谈论等。

一个很好的API Gateway比如是Netfix API Gateway。Netflix流服务供给数百个不同的微服务,包含电视、机顶盒、智能手机、游戏体系、平板电脑等。起先,Netflix视图供给一个适用全场景的API。可是,他们发现这种办法不好用,因为触及到林林总总的设备以及它们共同的需求。现在,他们选用一个API Gateway来供给容错性高的API,针对不同类型设备有相应代码。现实上,一个适配器处理一个恳求平均要调用6到8个后端服务。Netflix API Gateway每天处理数十亿的恳求。

API Gateway的长处和缺陷

如你所料,选用API Gateway也是优缺陷并存的。API Gateway的一个最大优点是封装运用内部结构。比较起来调用指定的服务,客户端直接跟gatway交互更简单点。API Gateway供给给每一个客户端一个特定API,这样减少了客户端与服务器端的通讯次数,也简化了客户端代码。




API Gateway也有一些缺陷。它是一个高可用的组件,必需求开发、布置和办理。还有一个问题,它或许成为开发的一个瓶颈。开发者有必要更新API Gateway来供给新服务供给点来支撑新露出的微服务。更新API Gateway时有必要越轻量级越好。不然,开发者将因为更新Gateway而排行列。可是,除了这些缺陷,关于大部分的运用,选用API Gateway的办法都是有用的。

完成一个API Gateway

已然咱们现已知道了选用API Gateway的动机和优缺陷,下面来看在规划它时需求考虑哪些工作。

功用和可扩展性

只要少量公司需求处理像Netflix那样的规划,每天需求处理数十亿的恳求。可是,关于大多数运用,API Gateway的功用和可扩展性也是十分重要的。因而,创立一个支撑同步、非堵塞I/O的API Gateway是有意义的。现已有不同的技能能够用来完成一个可扩展的API Gateway。在JVM上,选用根据NIO技能的结构,如Netty,Vertx,Spring Reactor或许JBoss Undertow。Node.js是一个非JVM的盛行渠道,它是一个在Chrome的JavaScript引擎根底上树立的渠道。一个可选的计划是NGINX Plus。NGINX Plus供给一个老练的、可扩展的、高功用web服务器和反向署理,它们均简单布置、装备和二次开发。NGINX Plus能够办理授权、权限操控、负载均衡、缓存并供给运用健康检查和监控。

选用反响性编程模型

Netflix Video Grid

运用传统的同步回调办法来完成API兼并的代码会使得你进入回调函数的噩梦中。这种代码将十分难度且难以保护。一个高雅的解决计划是选用反响性编程办法来完成。相似的反响笼统完成有Scala的Future,Java8的CompletableFuture和JavaScript的Promise。根据微软.Net渠道的有Reactive Extensions(Rx)。Netflix为JVM环境创立了RxJava来运用他们的API Gateway。同样地,JavaScript渠道有RxJS,能够在阅读器和Node.js渠道上运转。选用反响编程办法能够协助快速完成一个高效的API Gateway代码。

服务调用

一个根据微服务的运用是一个散布式体系,而且有必要选用线程间通讯的机制。有两种线程间通讯的办法。一种是选用异步机制,根据音讯的办法。这类的完成办法有JMS和AMQP。别的的,例如Zeromq归于服务间直接通讯。还有一种线程间通讯选用同步机制,例如Thrift和HTTP。现实上一个体系会一同选用同步和异步两种机制。因为它的完成办法有很多种,因而API Gateway就需求支撑多种通讯办法。

服务发现

服务端发现,要么是客户端发现。后续的一篇文章将会更详细的介绍这部分。假如选用客户端发现服务,API Gateway必需求去查询服务注册处

处理部分失利

在完成API Gateway过程中,别的一个需求考虑的问题便是部分失利。这个问题发生在散布式体系中当一个服务调用别的一个服务超时或许不行用的状况。API Gateway不该该被阻断并处于无限期等候下流服务的状况。可是,怎么处理这种失利依赖于特定的场景和详细服务。例如,假如是在产品详情页的引荐服务模块无呼应,那么API Gateway应该回来剩余的其他信息给用户,因为这些信息也是有用的。引荐部分能够回来空,也能够回来固定的顶部10个给用户。可是,假如是产品信息服务无呼应,那么API Gateway就应该给客户端回来一个过错。

在缓存有用的时分,API Gateway应该能够回来缓存。例如,因为产品价格改变并不频频,API Gateway在价格服务不行用时应该回来缓存中的数值。这类数据能够由API Gateway本身来缓存,也能够由Redis或Memcached这类外部缓存完成。经过回来缓存数据或许默许数据,API Gateway来保证体系过错不影响到用户体会。

Netflix Hystrix关于完成长途服务调用代码来说是一个十分好用的库。Hystrix记载那些超越预设定的极限值的调用。它完成了circuit break办法,使得能够将客户端从无呼应服务的无尽等候中中止。假如一个服务的过错率超越预设值,Hystrix将中止服务,而且在一段时刻内一切恳求马上失效。Hystrix能够为恳求失利界说一个fallback操作,例如读取缓存或许回来默许值。假如你在用JVM,就应该考虑运用Hystrix。假如你选用的非JVM环境,那么应该考虑选用相似功用的库。

总结

关于大多数微服务根底的运用,完成一个API Gateway都是有意义的,它就像是进入体系的一个服务供给点。API Gateway担任恳求转发、恳求组成和协议转化。它供给给运用客户端一个自界说的API。API Gateway能够经过回来缓存或许默许值的办法来掩盖后端服务的过错。在本系列的下一篇文章中,咱们将谈论服务间的通讯问题。




原文链接:Building Microservices: Using an API Gateway (翻译:陈杰;审校:杨峰)




===============================================


译者介绍


陈杰
,北京理工大学计算机学院在读博士,研讨方向是自然语言处理在企业网络诺言点评方面的运用,平常也乐于去完成一些突发的主意。在疲于装备体系环境时发现了Docker,跟我们一同学习、运用和研讨Docker。

出处:http://dockone.io/article/482

本文来自网络,不代表快递资讯网立场。转载请注明出处: http://www.llaiot.com/popular-logistics-information/1804.html
上一篇
下一篇

为您推荐

返回顶部