python 微服务 网关_关于API微服务网关
背景
我们都知道,在微服务架构风格里,一个应用会被拆分成多个小的服务系统,并且这些小系统都可以自成体系,可以拥有自己的数据库、框架语言等。它们通常都可以提供接口来被各种应用程序调用。
但是在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微服务网关相关推荐
- openfeign调用服务是否需要网关_阿里新一代微服务解决方案:Spring Cloud Alibaba
1.Spring Cloud Alibaba 是什么 Spring Cloud Alibaba 是阿里巴巴提供的微服务开发一站式解决方案,是阿里巴巴开源中间件与 Spring Cloud 体系的融合. ...
- eureka上的微服务不能通过服务名调用_掌门教育微服务体系 Solar | 阿里巴巴 Nacos 企业级落地上篇...
联席作者:吴毅挺 任浩军 张彬彬 廖梦鸽 张金星 胡振建 郑重鸣谢:Nacos - 彦林,Spring Cloud Alibab - 小马哥.落夜,Nacos 社区 - 张龙(pader).春少(ch ...
- dubbo k8s 服务发现_将Dubbo微服务迁移到k8s集群环境中前的思考与落地
将Dubbo微服务迁移到k8s中的思考与落地 说到容器化,不得不提kubernetes这个集群编排系统,它是一个开源系统,用于容器化应用的自动部署.扩缩和管理. Kubernetes 将构成应用的容器 ...
- centos同网段双网关_学习笔记之初识网关
网关这个名词对于很多人来说应该是个很耳熟的名词吧.在设置电脑的IP时就经常会看到默认网关这个名词,如下图所示: 那么网关到底是个什么东西呢?从名字上来看网关是一个关口,网关就是从一个网络到另一个网络的 ...
- 基于docker微服务架构_使用基于微服务的流架构更好地进行大规模的复杂事件处理(第1部分)...
基于docker微服务架构 基于微服务的流架构与开源规则引擎相结合,使实时业务规则变得容易 这篇文章旨在详细介绍我将OSS业务规则引擎与Kafka风格的现代流消息传递系统集成在一起的项目. 该项目的目 ...
- 用python搭建微商城_怎么搭建微商城?用什么系统好?
微信目前拥有10亿用户,是我们每个人每天都使用的app,给商家带来了大量的机会,很多公司和商家都纷纷开始搭建微商城系统平台,实现在微信公众号内销售商品. 很多人还不知道怎么去搭建一个微商城,我会在这篇 ...
- envoy api 网关_在边缘,作为网关或在网格中构建控制平面以管理Envoy代理的指南...
envoy api 网关 最近, Envoy已成为流行的网络组件. 马特·克莱因( Matt Klein )在几年前写了一个博客,内容涉及Envoy的动态配置API,以及它如何成为Envoy的采用曲线 ...
- gateway网关_使用Sentinel实现gateway网关及服务接口限流
点击关注"阿甘正专",设为星标 奇迹每天都在发生,等你而来 1.Sentinel 简介 1.1 Sentinel是什么: 随着微服务的流行,服务和服务之间的稳定性变得越来越重要.S ...
- Python Tornado搭建高并发Restful API接口服务
Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快能实现高并发.得利于其 非阻塞的方式和对epoll的运用,Torn ...
- python解决租房问题_高德API+Python解决租房问题
项目简介:编写Python脚本爬取某租房网站的房源信息,利用高德的 js API 在地图上标出房源地点,划出距离工作地点1小时内可到达的范围,附上公交路径规划功能查看不同路径的用时. 本教程由ekCi ...
最新文章
- python 获取用户ip_Python爬虫教程:你还在苦苦拉票吗?刷票小程序案例原理剖析!...
- Network | UDP checksum
- R语言读取出现 列的数目比列的名字要多的解决方法
- 理解Canvas的save()和restore()方法
- @property、@sythesize以及Ivar和@dynamic讲解(下)
- 似然估计中为什么要取对数以GMM为例
- Java+MyEclipse+Tomcat (三)配置MySQL及查询数据显示在JSP网页中
- duration转为时间戳_Flink Table APIamp;SQL编程指南之时间属性(3)
- aix如何查看日志策略_aix的日志的一些操作理解
- 杭电1978 How many ways
- CNN更新换代!性能提升算力减半,还即插即用
- 简易新闻客户端android
- 如何在 Mac 上打开和提取 RAR 文件?
- Java类的域初始化_Java域的初始化
- 网站设计(3常用标签)
- day 26 学习Linux-01天
- 立体声音频效果插件:TBProAudio ST1 for Mac
- python提取图片中的文字自动填表,python提取图片中的文字并生成word文档
- qt打印预览html,QT 5.9 实现 QWebEngineView 打印html内容
- Fiddler基本使用
热门文章
- 计算机电工电子怎么学,计算机在电子电工课中的应用
- python抓取北京所有社区医院经纬度
- fw313r手机登录_迅捷(FAST)fw313r路由器手机设置教程 | 192路由网
- 锐捷服务器虚拟化技术_锐捷核心交换机VSU虚拟化配置
- 游戏服务器开发都要学什么
- linux网络操作系统项目教程课本,Linux网络操作系统项目式教程(CentOS7.6)-课后练习题.docx...
- 服务器远程开多个桌面,远程桌面多开,远程桌面多开的工具介绍,操作方法
- TCP/IP常见攻击手段
- ubuntu下rabbitvcs安装后无右键菜单解决办法
- 制作自己的绿色版 FireFox