热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

杂谈,微服务APIGateway

让我们想象一下你正在建立一个使用微服务模式的网上商店,你所用的产品详细信息页面。你需要开发多个版本的产品详情界面:l由服务器端Web应用程序生成的HTM

让我们想象一下你正在建立一个使用微服务模式的网上商店,你所用的产品详细信息页面。你需要开发多个版本的产品详情界面:

  l  由服务器端Web应用程序生成的HTML - HTML5/ Javascript的桌面和移动浏览器用户界面。

  l  原生Android和iPhone客户端 - 这些客户端通过的REST API服务器交互。

此外,网上商店必须通过使用由第三方应用REST API公开的产品详细信息。一个产品的详细信息界面可以显示很多有关产品的信息。例如,Amazon.com的详细信息页面包括:

  l  关于这本书,如标题,作者,价格等基本信息

  l  这本书购买历史记录

  l  可用性

  l  购买选项

  l  购买这本书的客户还买了那些

  l  顾客评论

  l  卖家排名

  l  ...

  由于网上商店使用微服务模式的,产品详细信息数据分布在多个服务。 例如,

  l  产品信息 - 有关产品,如标题,作者基本信息

  l  定价服务 - 产品价格

  l  订购服务 - 购买历史记录产品

  l  库存服务 - 产品供应

  l  评论服务 - 客户评论...

  因此,显示产品细节的代码需要在所有这些服务中获取信息。 

难题

  微服务的客户端是如何访问个体服务的? 

考虑因素

   l  通过微服务提供的API的粒度往往和客户端需要的不同。微服务通常提供细粒度的API,这意味着客户端需要与多个服务进行交互。例如,如上所述,客户端需要的产品的细节需要从多种服务获取数据。

  l  不同的客户端需要不同的数据。例如,产品详情页桌面浏览器的版本通常更复杂于移动版本。

  l  网络性能因为不同类型的客户端而不同。例如,移动网络通常要慢得多,并具有高得多的延迟。当然,任何广域网是比一个局域网慢得多。这意味着手机本地客户端使用的网络与服务端web应用的LAN的性能特点区别很大。服务端web应用可以在不影响用户体验的情况下,向后端服务发送大量请求,但手机客户端只能发送少量的请求。

  l  服务实例数量和它们的位置(主机+端口)动态改变。

  l  服务可能随时间改变,所以要对客户端隐藏细节。

解决方案

  可以实现一个API 网关,他是所有客户端的入口。 API网关有两种方式来处理请求。有些请求被简单地代理/路由到合适的服务上,其他的请求被转给到一组服务。 

  

  该API网关可以为每个客户端提供不同的API,而不是提供一个适合所有情况下的API。例如,Netflix的API网关运行客户端特定适配器代码,提供给每个客户端它们需要的API。

   API网关还可以实现安全性,例如: 验证客户端被授权执行请求。

 结论

  使用API​​网关具有以下优点:

  l  使服务和客户端解耦。

  l  使客户端和服务部署环境解耦。

  l  提供了最佳的API给每个客户端。

  l  减少的请求/往返次数。例如,API网关可以一次性检索多个服务的数据。更少的请求也意味着更少的开销,提高了用户体验。一个API网关对于移动应用至关重要。

  l  简化了客户端的调用,因为API网关可以组合服务,并提供组合后的façade接口。

  API网关模式也有一些缺点:

  l  增加的复杂性,API网关是必须开发、部署和管理的另一个应用。

  l  增加的响应时间,因为通过API网关多了一层网络跳转。然而,对于大多数应用的额外往返的成本是微不足道的。

问题

  如何实现API网关?API网关需要支持高并发、高负载,使用事件响应机制(IO两种机制:一种是阻塞式的,另一种是事件响应式的,还有最新的一种是GO语言微线程方式)是最好的方法。在JVM上,可以基于NIO的库如Netty,另外 NodeJS是另一个选择。


推荐阅读
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • Android 渐变圆环加载控件实现
    本文介绍了如何在 Android 中创建一个自定义的渐变圆环加载控件,该控件已在多个知名应用中使用。我们将详细探讨其工作原理和实现方法。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
  • 本文总结了汇编语言中第五至第八章的关键知识点,涵盖间接寻址、指令格式、安全编程空间、逻辑运算指令及数据重复定义等内容。通过详细解析这些内容,帮助读者更好地理解和应用汇编语言的高级特性。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
author-avatar
佐什么猗
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有