上犹电脑信息网我们一直在努力
您的位置:上犹电脑信息网 > win7问题 > Java开发大型互联网-如何实现及使用一个API网关-win7默认网关不可用

Java开发大型互联网-如何实现及使用一个API网关-win7默认网关不可用

作者:上犹日期:

返回目录:win7问题

引言

API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

实现使用API网关

通常更好的方式是使用大家都熟知的API网关,API网关是提供系统唯一入口的一台服务器,它和面向对象设计模式中的门面类似:API网关封装了内部的系统架构并向每个客户端提供裁剪的API,它也可能负责诸如用户验证、监控、负载均衡、缓存、请求改造和管理以及静态内容响应等职责。

下图展示了API网关通常适应的架构:

Java开发大型互联网-如何实现及使用一个API网关

API网关负责请求路由、组合以及协议转换。所有来自客户端的请求都先经过API网关,然后被路由分配到相应的微服务中,API网关通常调用多个微服务并聚合其结果来处理请求,它可以在HTTP或者WebSocket这些web友好协议与内部使用的web不友好协议间相互转换。

API网关可以为每个客户提供定制化的API,它通常为移动客户端暴露粗粒度的API,比如提供(/productdetails?productid=xxx**)节点使得移动应用单一请求就能获取所有的产品明细。API网关调用产品信息、推荐、评分等服务,组合这些结果来处理客户端请求。

一个非常牛的例子就是Netflix API网关,Netflix 流服务在上百种包含电视、机顶盒、智能手机、游戏系统、平板电脑等设备上都可用。起初Netflix想为它们的流服务提供一种 one‑size‑fits‑all API,然而,他们发现由于设备的不同划分以及独特需求,这样设计是不现实的。现在他们使用API网关通过运行设备相关的适配器代码为客户端提供裁剪的API,适配器通常为每个请求调用平均六到七个后台服务, Netflix API网关现在每天处理上亿请求。

实现一个API网关

现在我们讨论了API网关的动机和一些权衡,现在来考虑一些设计的问题吧:

性能与扩展性

只有少数类似Netflix的公司需要每天处理上亿的请求,然而,对大多数应用来讲,API网关的性能和扩展性通常也非常的重要。在一个支持异步非阻塞IO的平台上构建API网关是明智的选择,我们有多种技术可以用来实现可扩展的API网关。基于JVM你可以选择基于NIO的诸如Netty、Vertx、Spring Reactor或JBoss Undertow等框架,Node.js也是一个流行的选项,它是一个构建于Chrome JS引擎的平台,另一选择是使用NGINX Plus,它提供了成熟、可扩展、高性能的web服务器和反向代理,并可以方便的被部署、配置和编程, NGINX Plus 可以管理用户校验、权限控制、请求负载均衡、响应缓存以及应用级别的健康检查和监控。

使用响应式编程模型

API网关通过简单路由到相应后台服务来处理请求,通过调用多个后台服务并聚合结果来处理它。对于一些请求,比如产品明细请求,后端对应的服务是彼此独立的,为减少请求时间,API网关应该并行的处理这些请求。然而有时候,请求之间是有依赖关系的,API网关可能在路由请求到后台服务之前先去调用用户校验服务验证请求的合理性,类似的,在获取用户心愿单中的上的产品信息的时候,API网关必须先获取包含那些信息的用户档案再去获取每个产品的信息,另一个有趣的例子就是Netflix Video Grid。

使用传统的异步回调方式来写API组合代码很快就会把你带进回调地狱。代码将会变得纠缠不清、难以理解也容易出错。更好的方式是使用响应式方法来写声明式风格的API网关代码,比如,响应式抽象包括Scala中的 Future 、Java 8中的CompletableFuture 以及JavaScript中的Promise ,还有微软为.NET开发的Reactive Extensions (also called Rx or ReactiveX), Netflix为了API网关的使用为基于JVM规范创造了RxJava,当然还有为JavaScript创造的RxJS ,可以运行在浏览器和Node.js中。使用响应式风格将会使你写出更简单更高效的API网关代码。

服务调用

微服务架构的应用是采用进程间通信的分布式系统,存在两种进程间通讯的方式:一种是采用异步基于消息机制的通信,比如使用消息中介产品 JMS 或者AMQP,当然还有 Zeromq服务直接调用的无中介消息产品;另一种方式是使用HTTP或者Thrift这种同步机制进行通信,一个系统应该同时使用同步和异步风格,甚至为每种方式使用不同的实现,因此,API网关也必须支持这些不同的通信机制。

服务发现

API网关需要知道和它通信的每个服务的地址(IP地址和端口),在一个传统应用中,你可能硬编码,但在一个流行的,基于云的微服务应用中,这就是一个大问题了。基础架构服务,比如消息中介,通常有一个静态地址,我们可以在系统环境变量中之指定,然而,获取一个应用服务的地址就不是一件简单的事情了,应用服务拥有动态分配的地址,而且,一组服务实例可能因为自动扩展或升级而动态的变化,因此,API网关应该像系统中的其他服务客户端一样,需要服务发现机制:要么是服务端发现 或者是 客户端发现。稍后的文章将会详细介绍服务发现的问题,现在,我们有必要意识到,如果系统使用客户端服务发现的话,API网关应该能够查询服务注册 Service Registry,服务注册是所有服务实例登记其地址的数据库。

处理局部故障

实现API网关时需要强调的另一个问题是局部故障。这个问题在分布式系统中很常见,比如一个服务可能调用另一个响应很慢或者不可用的服务,API网关千万不要在等待已经挂掉服务响应的时候阻塞。当然,如何处理错误取决于具体的应用场景或者具体因为哪个服务挂掉:比如,如果产品明细场景中的推荐服务挂掉了,那么API网关还是应该返回其他的产品信息,保障产品对用户仍然可以使用,推荐列表可以返回空或者预先硬编码的Top 10商品,但是如果产品信息服务挂掉的话,API网关就要返回客户一个错误了。

API网关如果可能话也可以返回缓存的数据,比如,由于产品价格很少变化,API网关可以在价格服务不可用时使用缓存,数据可能是API网关自己缓存,也可能缓存在诸如Redis和Memcached这样的外部缓存中。通过返回默认值或者缓存值,API网关确保局部故障不会影响用户体验。

总结

以 上就是我对Java开发大型互联网-如何实现及使用一个API网关问题及其优化总结,分享给大家,希望大家知道什么是Java大型互联网-Java开发大型互联网-如何实现及使用一个API网关问题及其优化。觉得收获的话可以点个关注收藏转发一波喔,谢谢大佬们支持!

  • 1、多写多敲代码,好的代码与扎实的基础知识一定是实践出来的

  • 2、可以去百度搜索腾讯课堂图灵学院的视频来学习一下java架构实战案例,还挺不错的。

  • 最后,每一位读到这里的网友,感谢你们能耐心地看完。希望在成为一名更优秀的Java程序员的道路上,我们可以一起学习、一起进步!都能赢取白富美,走向架构师的人生巅峰!

  • 3丶想了解学习以上课程内容可加群:469717771 验证码头条(06 必过)欢迎大家的加入哟!

Java开发大型互联网-如何实现及使用一个API网关

相关阅读

关键词不能为空
极力推荐
  • 华为交换机简单配置方法-超级终端win7

  • 超级终端win7,一.准备工作1.超级终端的安装设置WindowsVista/Win7取消了WinXP时代自带的超级终端软件。首先下载超级终端文件。笔记本无COM口的,需另外购买一条USB转COM口线,安装驱动即可

电脑蓝屏_电脑怎么了_win7问题_win10问题_设置问题_文件问题_上犹电脑信息网

关于我们