背景

我们都知道,在微服务架构风格里,一个应用会被拆分成多个小的服务系统,并且这些小系统都可以自成体系,可以拥有自己的数据库、框架语言等。它们通常都可以提供接口来被各种应用程序调用。

但是在UI上进行展示的时候,我们通常需要在一个界面上展示很多数据,这些数据可能来自于不同的微服务中。

打个比方:要查看一个电商平台的商品详情页,这个商品详情页包括标题、价格、库存、评价等等,这些数据可能在不同的微服务系统之中,如下所示:

•产品 - 负责提供商品的标题,描述,规格等。

•价格 - 负责对产品进行定价,价格策略计算,促销价等。

•库存 - 负责产品库存。

•评价 - 负责用户对商品的评论,回复等。

现在,商品详情页需要从这些微服务中拉取相应的信息,问题来了?

由于用的是多个服务系统的架构,所以依靠单个数据库的 join 查询结果不可行,那么该怎么访问各个服务呢?

按照微服务设计的指导原则,我们的微服务可能存在下面的问题:

•服务使用了多种协议,因为不同的协议有不同的应场景用,比如可能同时使用 HTTP, AMQP, gRPC 等。

•服务的划分可能随着时间而变化。

•服务的实例或者Host+端口可能会动态的变化。

那么,对于前端的UI需求也可能会有以下几种:

•粗粒度的API,而微服务通常提供的细粒度的API,对于UI来说如果要调用细粒度的api可能需要调用很多次,这是个不小的问题。

•不同的客户端设备可能需要不同的数据。Web,H5,APP

•不同设备的网络性能,对于多个api来说,这个访问需要转移的服务端会快得多

那么如何解决呢?

这种情况下,我们就需要一个今天要讲的这个东西, API 网关(API Gataway)。

API 网关

下面是百度上针对于 API 网关的介绍:

API网关是一个服务器,是系统的唯一入口。从面向对象设计的角度看,它与外观模式类似。API网关封装了系统内部架构,为每个客户端提供一个定制的API。它可能还具有其它职责,如身份验证、监控、负载均衡、缓存、请求分片与管理、静态响应处理。

API网关方式的核心要点是,所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能。通常,网关也是提供REST/HTTP的访问API。服务端通过API-GW注册和管理服务。

Chris Richardson 在他的博客中把 API 网关划分为以下两种:

•单节点 API 网关

•Backends for frontends 网关

单节点网关

单节点的 API网关为每个客户端提供不同的API,而不是提供一种万能风格的API。

这个网关和微软在 eShop 项目中推荐的网关是一致的。

Backends for frontends 网关

这种模式是针对不同的客户端来实现一个不同的API网关。

落地方案

以上两种 API 网关有什么问题呢?

通常情况下, API 网关要做很多工作,它作为一个系统的后端总入口,承载着所有服务的组合路由转换等工作,除此之外,我们一般也会把安全,限流,缓存,日志,监控,重试,熔断等放到 API 网关来做,那么可以试想在高并发的情况下,这里可能会出现一个性能瓶颈。

另外,如果没有开源项目的支撑前提下,自己来做这样一套东西,是非常大的一个工作量,而且还要做 API 网关本身的高可用等,如果一旦做不好,有可能最先挂掉的不是你的其他服务,而就是这个API网关。

这个时候,通常我们会去找一些开源的 API 网关项目,博主已经给你找好了,目前社区的关于 API Gataway 的项目有以下这些:

Goku:Goku是一个可扩展的开放源码API Layer(也称为API网关或API中间件)。开箱即用,全界面配置,操作简单,通过插件扩展,它提供了超越核心平台的额外功能和服务。

Orange:基于OpenResty的一个API网关程序,同样是由国人开发的。

Netflix zuul:Zuul是一种提供动态路由、监视、弹性、安全性等功能的边缘服务。Zuul是Netflix出品的一个基于JVM路由和服务端的负载均衡器。

apiaxle: Nodejs 实现的一个 API 网关。

api-umbrella: Ruby 实现的一个 API 网关。

总结

通过本文我们了解到了什么是 API 网关以及API网关的作用和其在微服务架构中所处的地位。然后我们了解到了 API 网关的一些开源项目以及博主介绍的落地方案,在实际的实践中还是多希望大家能够多多思考总结,这样我们才能够变得更加强大。

翻译:Eolinker

来源:www.eolinker.com

python 微服务 网关_关于API微服务网关相关推荐

  1. openfeign调用服务是否需要网关_阿里新一代微服务解决方案:Spring Cloud Alibaba

    1.Spring Cloud Alibaba 是什么 Spring Cloud Alibaba 是阿里巴巴提供的微服务开发一站式解决方案,是阿里巴巴开源中间件与 Spring Cloud 体系的融合. ...

  2. eureka上的微服务不能通过服务名调用_掌门教育微服务体系 Solar | 阿里巴巴 Nacos 企业级落地上篇...

    联席作者:吴毅挺 任浩军 张彬彬 廖梦鸽 张金星 胡振建 郑重鸣谢:Nacos - 彦林,Spring Cloud Alibab - 小马哥.落夜,Nacos 社区 - 张龙(pader).春少(ch ...

  3. dubbo k8s 服务发现_将Dubbo微服务迁移到k8s集群环境中前的思考与落地

    将Dubbo微服务迁移到k8s中的思考与落地 说到容器化,不得不提kubernetes这个集群编排系统,它是一个开源系统,用于容器化应用的自动部署.扩缩和管理. Kubernetes 将构成应用的容器 ...

  4. centos同网段双网关_学习笔记之初识网关

    网关这个名词对于很多人来说应该是个很耳熟的名词吧.在设置电脑的IP时就经常会看到默认网关这个名词,如下图所示: 那么网关到底是个什么东西呢?从名字上来看网关是一个关口,网关就是从一个网络到另一个网络的 ...

  5. 基于docker微服务架构_使用基于微服务的流架构更好地进行大规模的复杂事件处理(第1部分)...

    基于docker微服务架构 基于微服务的流架构与开源规则引擎相结合,使实时业务规则变得容易 这篇文章旨在详细介绍我将OSS业务规则引擎与Kafka风格的现代流消息传递系统集成在一起的项目. 该项目的目 ...

  6. 用python搭建微商城_怎么搭建微商城?用什么系统好?

    微信目前拥有10亿用户,是我们每个人每天都使用的app,给商家带来了大量的机会,很多公司和商家都纷纷开始搭建微商城系统平台,实现在微信公众号内销售商品. 很多人还不知道怎么去搭建一个微商城,我会在这篇 ...

  7. envoy api 网关_在边缘,作为网关或在网格中构建控制平面以管理Envoy代理的指南...

    envoy api 网关 最近, Envoy已成为流行的网络组件. 马特·克莱因( Matt Klein )在几年前写了一个博客,内容涉及Envoy的动态配置API,以及它如何成为Envoy的采用曲线 ...

  8. gateway网关_使用Sentinel实现gateway网关及服务接口限流

    点击关注"阿甘正专",设为星标 奇迹每天都在发生,等你而来 1.Sentinel 简介 1.1 Sentinel是什么: 随着微服务的流行,服务和服务之间的稳定性变得越来越重要.S ...

  9. Python Tornado搭建高并发Restful API接口服务

    Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快能实现高并发.得利于其 非阻塞的方式和对epoll的运用,Torn ...

  10. python解决租房问题_高德API+Python解决租房问题

    项目简介:编写Python脚本爬取某租房网站的房源信息,利用高德的 js API 在地图上标出房源地点,划出距离工作地点1小时内可到达的范围,附上公交路径规划功能查看不同路径的用时. 本教程由ekCi ...

最新文章

  1. python 获取用户ip_Python爬虫教程:你还在苦苦拉票吗?刷票小程序案例原理剖析!...
  2. Network | UDP checksum
  3. R语言读取出现 列的数目比列的名字要多的解决方法
  4. 理解Canvas的save()和restore()方法
  5. @property、@sythesize以及Ivar和@dynamic讲解(下)
  6. 似然估计中为什么要取对数以GMM为例
  7. Java+MyEclipse+Tomcat (三)配置MySQL及查询数据显示在JSP网页中
  8. duration转为时间戳_Flink Table APIamp;SQL编程指南之时间属性(3)
  9. aix如何查看日志策略_aix的日志的一些操作理解
  10. 杭电1978 How many ways
  11. CNN更新换代!性能提升算力减半,还即插即用
  12. 简易新闻客户端android
  13. 如何在 Mac 上打开和提取 RAR 文件?
  14. Java类的域初始化_Java域的初始化
  15. 网站设计(3常用标签)
  16. day 26 学习Linux-01天
  17. 立体声音频效果插件:TBProAudio ST1 for Mac
  18. python提取图片中的文字自动填表,python提取图片中的文字并生成word文档
  19. qt打印预览html,QT 5.9 实现 QWebEngineView 打印html内容
  20. Fiddler基本使用

热门文章

  1. 计算机电工电子怎么学,计算机在电子电工课中的应用
  2. python抓取北京所有社区医院经纬度
  3. fw313r手机登录_迅捷(FAST)fw313r路由器手机设置教程 | 192路由网
  4. 锐捷服务器虚拟化技术_锐捷核心交换机VSU虚拟化配置
  5. 游戏服务器开发都要学什么
  6. linux网络操作系统项目教程课本,Linux网络操作系统项目式教程(CentOS7.6)-课后练习题.docx...
  7. 服务器远程开多个桌面,远程桌面多开,远程桌面多开的工具介绍,操作方法
  8. TCP/IP常见攻击手段
  9. ubuntu下rabbitvcs安装后无右键菜单解决办法
  10. 制作自己的绿色版 FireFox