您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

微服务架构实践之api-gateway

时间:2019-09-04 13:28:18  来源:  作者:

在微服务架构风格中,一个大应用通常会被拆分成为了多个小的服务系统提供出来,这些小的系统他们可以自成体系,也就是说这些小系统可以拥有自己的数据库,框架甚至语言等,这些小系统通常以提供 Rest Api 风格的接口来被 H5, Android, IOS 以及第三方应用程序调用。

我们通常需要在一个界面上展示很多数据,这些数据可能来自于不同的微服务中,比如在一个电商系统中,查看一个商品详情页,这个商品详情页包含商品的标题,价格,库存,评论等,这些数据对于后端来说可能是位于不同的微服务系统之中。我们要如何从这些微服务中拉取相应的信息回来呢?

基于以上背景,在微服务架构中,我们可能会遇到一下问题:

  • 服务的划分可能随着时间或者需求变更而变化
  • 服务实例会动态变化
  • 服务的API粒度,相对而言在微服务架构中,每个服务都只提供相对细粒度的API
  • 不同的客户端(H5,App等)可能需要不同的数据

这种情况下,我们就需要:API 网关(API Gateway)。API 网关模式意味着你要把API 网关放到你的微服务们的最前端,并且要让 API 网关变成由应用所发起的每个请求的入口,这样就可以明显的简化客户端实现和微服务应用程序之间的沟通方式。

API 网关

API Gateway 可以分为两种:

1.单节点 API Gateway

微服务架构实践之api-gateway

2.BFF(Backends for frontends) Gateway

微服务架构实践之api-gateway

API 网关职责

在我们内部,API 网关需要承担包括但不限于下面的这些职责:

1.请求路由,版本控制

API Gateway 是微服务的入口,可以根据不同的请求路由到不同的服务上,也可以在 Gateway 上进行路由的版本控制,这样即使后服务发生了变化,Gateway 的路径依然可以不改变。

2.用户登录,权限认证

客户端在与我们后端服务进行交互之前,需要先进行登录鉴权操作,这是后端所有的服务都需要有的共有逻辑,因此在 Gateway 做这个事情就再合适不过。

3.数据聚合

由于不同的客户端往往需要的数据完全不同,而这些数据又是不同的 service 提供的,比如上面提到的查看一个商品详情页,我们可能需要同时从商品服务,库存服务,评价服务等中拉取信息,我们可以借助 Gateway 方便完成来自不同 service 的数据聚合。

4.协议转换

在我们的实践中,CS(Client to Server)协议和SS(Server to Server)协议是不一样的,为了保证数据传输的可靠性,我们的CS协议会有鉴权以及加密解密的逻辑,而在内部的SS协议则不需要这些逻辑,因此在 Gateway 我们需要有一个协议转换的过程。

5.熔断,降级,限流

当监测到某个服务发生异常,或者当服务的流量超过我们服务的承载能力等情况时,我们可以采取相应的措施,对整个系统的容错性、稳定性有很大帮助。

6.负载均衡

API 网关知道所有服务实例的地址,所以可以根据不同服务采取不同的负载均衡策略。

7.灰度发布

有时候我不希望让所有的流量都一次性的到达程序的新版本,因为那个新版本也许并没有测试地很充分。灰度发布允许你直接只导入指定量的流量到新的版本,API 网关就可以帮你来做这件事情。你可以配置10%的请求到新的版本,然后一旦你确保了新版本没有bug,你可以把流量切换到100%。

API 网关架构

在我们的内部规划中(部分功能未实现),我们的 API 网关主要会分为三个部分,也就是上图中绿色的几部分:

1.多网关集群(Backends for frontends)

我们针对不同的客户端,都有相应的网关层来接入。现阶段这一部分已经实现的功能主要是:用户登录,鉴权,服务发现注册,协议转换,接口版本控制等。后续我们还规划的功能有:监控,APM调用链,日志,流控策略等。

2.聚合服务(Merge Service)

在某些客户端的需求中,比如上面提到的商品详情的页面,我们需要从多个服务拉取数据,为了减少客户端的复杂度,以及加快客户端的访问速度,我们会在前面加一个聚合层,用来做聚合查询,在某些接口中可以把多个服务的数据一次性返回给客户端。

3.仪表盘管理端(Dashboard)

Dashboard 提供可视化的分析平台,包括服务的管理,监控数据报警配置,日志查询,灰度发布操作,API文档管理等,这些功能对于开发和日常运维来说是非常重要的。



Tags:微服务架构   点击:()  评论:()
声明:本站部分内容来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除,谢谢。
▌相关评论
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
▌相关推荐
1、Spring Cloud介绍Spring Cloud家族有许多成员:Spring Cloud Config - 配置管理工具包,集中化管理集群配置,目前支持本地存储、Git 以及 Subversion;Spring Cloud Bus - 事件、...【详细内容】
2020-06-21   微服务架构  点击:(1)  评论:(0)  加入收藏
IOE架构对于金融业来说,涉及信息安全和成本过高的问题之外,还有许多技术上的问题。IOE架构的本质是“集中式计算+闭源商用系统”,程序运行在少数主机服务器上,底层代码无从得知,...【详细内容】
2020-06-01   微服务架构  点击:(9)  评论:(0)  加入收藏
当前,传统企业的 IT 系统以单体架构为主,在面对互联网业务的冲击时,系统架构的性能瓶颈逐渐显现。云计算、Docker、DevOps、持续交付等概念的深入人心,以 Spring Cloud 为代表的...【详细内容】
2020-05-10   微服务架构  点击:(5)  评论:(0)  加入收藏
1. 前言3 月 10 日,Linux 基金会宣布旗下项目 TARS 正式成立 TARS 基金会,宣称致力于构建微服务。该项目是腾讯公司捐献给 Linux 基金会的一个项目,据称该项目在腾讯已经使用...【详细内容】
2020-03-27   微服务架构  点击:(7)  评论:(0)  加入收藏
在微服务时代,服务数量及规模越来越大,服务的部署及运维的模式如果仍然采用传统方式就会大大增加运维成本。所以微服务时代的运维方式一定是Devops模式,通过构建自动化运维发...【详细内容】
2020-03-16   微服务架构  点击:(6)  评论:(0)  加入收藏
一:最初的需求几年前,小明和小皮一起创业做网上超市。小明负责程序开发,小皮负责其他事宜。当时互联网还不发达,网上超市还是蓝海。只要功能实现了就能随便赚钱。所以他们的需求...【详细内容】
2020-03-14   微服务架构  点击:(82)  评论:(0)  加入收藏
导言:耦合性,是对模块间关联程度的度量。耦合的强弱取决于模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。模块间的耦合度是指模块之间的依赖关系,包括控制关...【详细内容】
2020-02-16   微服务架构  点击:(27)  评论:(0)  加入收藏
一、微服务简介1. 微服务的诞生微服务是基于分而治之的思想演化出来的。过去传统的一个大型而又全面的系统,随着互联网的发展已经很难满足市场对技术的需求,于是我们从单独架...【详细内容】
2020-02-06   微服务架构  点击:(0)  评论:(0)  加入收藏
前言关于微服务的架构,我们前面的文章中给出了大概的说明,也就是说微服务架构的应用与传统的大型单体应用架构相比,最大的区别在于从原来的基于单一应用进程的设计转变为基...【详细内容】
2020-01-09   微服务架构  点击:(34)  评论:(0)  加入收藏
从单体应用架构到分布式应用架构再到微服务架构,应用的安全访问在不断的经受考验。为了适应架构的变化、需求的变化,身份认证与鉴权方案也在不断的变革。面对数十个甚至上百个微服务之间的调用,如何保证高效安全的身份认...【详细内容】
2020-01-08   微服务架构  点击:(8)  评论:(0)  加入收藏
微服务是什么?微服务是一种细粒度(Fine-Grain)的SOA或许在座的高朋了解过其概念。个人认为,与其说微服务是一种技术,不如将其定义为一种架构,而架构则是"技"的实现与"术"的策略相...【详细内容】
2019-12-02   微服务架构  点击:(42)  评论:(0)  加入收藏
什么是微服务首先微服务并没有一个官方的定义,想要直接描述微服务比较困难,我们可以通过对比传统WEB应用,来理解什么是微服务。 传统的WEB应用核心分为业务逻辑、适配器以及API...【详细内容】
2019-11-15   微服务架构  点击:(40)  评论:(0)  加入收藏
1.微服务限流随着微服务的流行,服务和服务之间的稳定性变得越来越重要。缓存、降级和限流是保护微服务系统运行稳定性的三大利器。缓存的目的是提升系统访问速度和增大系统能...【详细内容】
2019-10-28   微服务架构  点击:(46)  评论:(0)  加入收藏
什么是微服务?在了解微服务架构前,我们需要先了解什么是微服务 在传统单体架构(如上图左侧)中,我们一个项目的所有模块是聚合在一个程序中。我们所有模块数据都存放到一个数据库...【详细内容】
2019-10-25   微服务架构  点击:(26)  评论:(0)  加入收藏
一、背景软件架构,总是在不断的演进中...把时间退回到二十年之前,当时企业级领域研发主要推崇的还是C/S模式,PB、Delphi这样的开发软件是企业应用开发的主流。随着时间的推移,基...【详细内容】
2019-10-02   微服务架构  点击:(22)  评论:(0)  加入收藏
在微服务世界中,每个人都使用缓存,缓存无处不在。缓存可以提高性能,减少后端负载,或者减少down机时间。有许多方法可以配置系统中的缓存,缓冲应该被放在系统的哪个层上?根据以往...【详细内容】
2019-09-27   微服务架构  点击:(24)  评论:(0)  加入收藏
以前的文章讨论过《互联网架构,究竟为啥要做服务化?》,随着数据量、并发量、业务复杂度的增长,互联网架构会出现以下问题: 代码到处拷贝 底层复杂性扩散 基础库(so/jar/dll)耦合 SQ...【详细内容】
2019-09-17   微服务架构  点击:(46)  评论:(0)  加入收藏
案例背景介绍:在实践微服务架构时,我们经常会面对以下需求:如何隔离外部和内部,如何保障后台服务安全性,如何降低运维成本,如何减少变更的流程和错误成本,如何减少客户端与服务的耦...【详细内容】
2019-09-17   微服务架构  点击:(52)  评论:(0)  加入收藏
前言最近系统(基于SpringCloud+K8s)上线,运维团队早上8点左右在群里反馈,系统登录无反应!我的第一反应是Mysql数据库扛不住了。 排查问题也是一波三折,有网络问题,也有mysql读写分...【详细内容】
2019-09-16   微服务架构  点击:(56)  评论:(0)  加入收藏
Aliware是阿里巴巴中间件技术品牌,包含5个中间件产品,主要是:EDAS、DRDS、MQ、ARMS、CSB。Aliware从2007年开始,经历了8年多的双11大促,每次大促都能使产品体系更上一个台阶。像JStorm、Dubbo、Rocketmq等等一系列的开源产...【详细内容】
2019-09-09   微服务架构  点击:(72)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条