在微服务架构中,API网关是核心的基础服务之一。在微服务流行之前,API网关已经在很多架构中扮演重要的角色,尤其是开放平台,此时的API网关是系统的统一入口,肩负了很多的业务责任,比如限流、计费等功能。而在微服务架构中,API网关可能往往需要兼顾内部和外部的所有微服务,承担更多的职责。

什么是API网关

简单说,API网关是微服务架构中的指路人与守护者。首先,她会提供最基本的路由服务,将调用转发到上游服务。其次,作为一个入口,还可以进行认证、鉴权、限流等操作,对上游服务保护。所以说,有了API网关,就可以做到“一夫当关,万夫莫开”。

一般的电商系统中, API网关位于订单服务和商品服务之前,所有外部的调用者(手机端和电脑Web端)都会先走网关,再进入具体的后端业务服务中。

为什么需要API网关

大多数Java工程师,都对Spring AOP有所了解,在实际开发中,使用面向切面编程在完成一些功能时,可以让代码的侵入性更小,实现更加优雅。而在微服务架构中,API网关可以给整个微服务增加面向切面编程的能力。

在API网关上,可以做到:

  • 安全相关:认证、鉴权、IP黑白名单
  • 流控
  • 集成服务发现
  • 日志和审计
  • 动态路由

在架构设计上,有了API网关也可以让整个架构更加灵活,很多业务系统,可能涉及到两套API,一套给自己的系统使用,一套给第三方使用,此时,就可以使用API网关进行分流。使用单独的API网关服务给第三方调用者,同时也可以针对第三方者做一些特殊的业务逻辑处理。

由于API网关在整个架构系统中位置特别重要,而且承受巨大的压力。所以,高性能和高可用都需要考虑。比较常用的做法是在网关的前面,加上负载均衡,这样,网关既能水平扩展,又能保证高可用。

API网关的三种使用场景

  1. OpenAPI。企业需要将自身数据、能力等作为开发平台向外开放,通常会以REST的方式向外提供,最好的例子就是淘宝开放平台、腾讯公司的QQ开放平台、微信开放平台。OpenAPI开放平台必然涉及到客户应用的接入、API权限的管理、调度次数管理等,必然会有一个统一的入口进行管理,这正是API网关可以发挥作用的时候。
  2. 微服务网关。微服务的概念最早再2012年提出,在Martin Fowler的大力推广下,微服务在2014年后得到了大力发展。在微服务架构中,有一个组件必不可少,就是微服务网关,微服务网关处理了负载均衡、缓存、路由、访问控制、服务代理、监控、日志等。API网关在微服务架构中正是以微服务网关的身份存在。
  3. API服务管理平台。上述的微服务架构对企业来说有可能实施上是困难的,企业有很多遗留系统,要全部抽取为微服务器改动太大,对企业来说成本太高。但是由于不同系统间存在大量的API服务互相调用,因此需要对系统间服务调用进行管理,清晰地看到各系统调用关系,对系统间调用进行监控等。API网关可以解决这些问题,我们可以认为如果没有大规模的实施微服务架构,那么对企业来说微服务网关就是企业API服务管理平台。

API网关在企业整体架构中的地位

一个企业随着信息系统复杂度的提高,必然出现外部合作伙伴应用、企业自身的公网应用、企业内网应用等,在架构上应该将这三种应用区别开,三种应用的安排级别、访问方式也不一样。 因此在我的设计中将这三种应用分别用不同的网关进行API管理,分别是:API网关(OpenAPI合伙伙伴应用)、API网关(内部应用)、API网关(内部公网应用)。

企业中如何应用API网关

  1. 对于OpenAPI使用的API网关来说,一般合作伙伴要以应用的形式接入到OpenAPI平台,合作伙伴需要到 OpenAPI平台申请应用。 因此在OpenAPI网关之外,需要有一个面向合作伙伴的使用的平台用于合作伙伴,这就要求OpenAPI网关需要提供API给这个用户平台进行访问。 如下架构:

    当然如果是在简单的场景下,可能并不需要提供一个面向合作伙伴的门户,只需要由公司的运营人员直接添加合作伙伴应用id/密钥等,这种情况下也就不需要合作伙伴门户子系统。

  2. 对于内网的API网关,在起到的作用上来说可以认为是微服务网关,也可以认为是内网的API服务治理平台。 当企业将所有的应用使用微服务的架构管理起来,那么API网关就起到了微服务网关的作用。 而当企业只是将系统与系统之间的调用使用rest api的方式进行访问时使用API网关对调用进行管理,那么API网关起到的就是API服务治理的作用。 架构参考如下:

  3. 对于公司内部公网应用(如APP、公司的网站),如果管理上比较细致,在架构上是可能由独立的API网关来处理这部分内部公网应用,如果想比较简单的处理,也可以是使用面向合作伙伴的API网关。 如果使用独立的API网关,有以下的好处:

  • 面向合作伙伴和面向公司主体业务的优先级不一样,不同的API网关可以做到业务影响的隔离。
  • 内部API使用的管理流程和面向合作伙伴的管理流程可能不一样。
  • 内部的API在功能扩展等方面的需求一般会大于OpenAPI对于功能的要求。

基于以上的分析,如果公司有能力,那么还是建议分开使用合作伙伴OPEN API网关和内部公网应用网关。

微服务架构基础之API网关相关推荐

  1. 微服务:简述微服务架构中的API网关

    微服务:简述微服务架构中的API网关 API网关是任何微服务架构的重要组成部分.有了它我们可以在一个独立的模块上方便的处理一些非业务逻辑,可以让微服务本身专注在自身特定的功能上,使得每个微服务的开发更 ...

  2. 微服务架构之「 API网关 」

    点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 在微服务架构的系列文章中,前面已经通过文章<架构设计之「服务注册 」>介绍过了服务注 ...

  3. yii2 请求外部api_微服务架构之「 API网关 」

    作者:奎哥来自公众号:不止思考 在微服务架构的系列文章中,前面已经通过文章<架构设计之「服务注册 」>介绍过了服务注册的原理和应用,今天这篇文章我们来聊一聊「 API网关 」. 「 API ...

  4. 下一代微服务架构基础:ServiceMesh?

    最近,ServiceMesh(服务网格) 概念在社区里头非常火,有人提出 2018 年是 ServiceMesh 年,还有人提出 ServiceMesh 是下一代的微服务架构基础.作为架构师,如果你现 ...

  5. 微服务架构基础之Service Mesh

    ServiceMesh(服务网格) 概念在社区里头非常火,有人提出 2018 年是 ServiceMesh 年,还有人提出 ServiceMesh 是下一代的微服务架构基础. 那么到底什么是 Serv ...

  6. 微服务架构 基础(三)

    微服务架构 基础(三) 持续更新- 继续前面的基础二工程进行扩展 服务降级.服务熔断和服务限流 基本概念理解 服务雪崩 多个服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又 ...

  7. 微服务架构如何设计API代理网关和OAuth2授权认证框架

    1,授权认证与微服务架构 1.1,由不同团队合作引发的授权认证问题 去年的时候,公司开发一款新产品,但人手不够,将B/S系统的Web开发外包,外包团队使用Vue.js框架,调用我们的WebAPI,但是 ...

  8. 谈谈微服务设计中的API网关模式

    来源:架构头条(ID: ArchFront) 原文:http://dwz.date/crrw 根据 Gartner 对微服务的定义:"微服务是范围狭窄.封装紧密.松散耦合.可独立部署且可独立 ...

  9. 微服务技术栈:API网关中心,落地实现方案

    本文源码:GitHub·点这里 || GitEE·点这里 一.服务网关简介 1.外观模式 客户端与各个业务子系统的通信必须通过一个统一的外观对象进行,外观模式提供一个高层次的接口,使得子系统更易于使用 ...

  10. C++轻量级微服务_微服务技术栈:API网关中心,落地实现方案

    一.服务网关简介 1.外观模式 客户端与各个业务子系统的通信必须通过一个统一的外观对象进行,外观模式提供一个高层次的接口,使得子系统更易于使用: 简单说一下外观模式,网关和这个模式很像,但是比外观模式 ...

最新文章

  1. Ubuntu 14.04 64bit上编译安装MonaServer并测试
  2. OUR D3.JS 数据可视化专题站(转)
  3. MySQL 5.7.18 zip 文件安装过程
  4. APR分析-共享内存篇
  5. SAP 电商云 Spartacus UI 实现的 ngrx-router-store.js 的 serializer
  6. 一文带你了解华为云DevCloud为何能全面领跑中国DevOps云服务市场
  7. 记录A component required a bean named ‘studentService‘ that could not be found.
  8. LeetCode 1338. 数组大小减半
  9. linux下搜狗安装目录,Linux安装搜狗输入法
  10. 使用DevExpress的WebChartControl控件绘制图表(柱状图、折线图、饼图)
  11. mysql 内存表 速度_mysql查询速度。为什么用内存表查询tmp表比直接选择慢?
  12. Scikit-learn:模型选择Model selection之pipline和交叉验证
  13. 一文搞懂URI与URL
  14. PreparedStatement使用
  15. 魔兽地图编辑器自定义地图预览图片的方法
  16. 【raft】学习六:etcd/raft 选举和选举优化
  17. svg 右键意见删除cvs_一种实现svg自定义鼠标右键菜单的方法
  18. 每周一喂丨图说WiFi安全
  19. 基于Java毕业设计校园疫情防控管理系统源码+系统+mysql+lw文档+部署软件
  20. 魔兽世界服务器显示新,《魔兽世界》怀旧服再开新服,背后的原因竟然是!

热门文章

  1. oracle12c之表级别恢复
  2. 11.23A T4方(思维好题----杜教筛(总复习))
  3. Visual C#经典游戏编程开发源码
  4. 液基薄层细胞 宫颈细胞学计算机诊断,液基薄层细胞制片技术与宫颈细胞学诊断.pdf...
  5. [附源码]Java计算机毕业设计SSM超市进销存系统
  6. qt 操纵access_操纵媒体自动分类的5个紧急考虑
  7. H5 新增内容大全(包括Web Workers、SSE、WebSocket的详细使用代码)
  8. 考研视频倍速平时电脑学习--中国大学MOOC电脑版
  9. 2022年全球市场加密代币总体规模、主要企业、主要地区、产品和应用细分研究报告
  10. Postgresql数据库安装报错