什么是微服务

微服务架构(通常简称为微服务)是指开发应用所用的一种架构形式。通过微服务,可将大型应用分解成多个独立的组件,其中每个组件都有各自的责任领域。
在处理一个用户请求时,基于微服务的应用可能会调用许多内部微服务来共同生成其响应。微服务是互联网业务发展的结果,互联网业务的飞速发展导致系统的架构也在不断地发生变化,总体来说,系统的架构大致经历了:单体应用架构—>
SOA 架构—>微服务架构 的演变,具体发展历程和各自的优缺点如下表所示。

因此,微服务是互联网发展的必然结果,很多传统公司的系统架构也在逐步微服务化。但是,随着互联网业务的发展,API 的数量也在剧增,使用网关对API统一管理也将面临挑战,选择一个更强大的
API 网关,可以有效地增强系统的监控、容灾、鉴权和限流等能力。

什么是微服务网关

API网关是一个服务器,是系统的唯一入口。 从面向对象设计的角度看,它与外观模式类似。

API网关封装了系统内部架构,为每个客户端提供一个定制的API。它可能还具有其它职责,如身份验证、监控、负载均衡、缓存、协议转换、限流熔断、静态响应处理。

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

微服务网关作为微服务后端服务的统一入口,它可以统筹管理后端服务,主要分为数据平面和控制平面:

数据平面主要功能是接入用户的HTTP请求和微服务被拆分后的聚合。使用微服务网关统一对外暴露后端服务的API和契约,路由和过滤功能正是网关的核心能力模块。另外,微服务网关可以实现拦截机制和专注跨横切面的功能,包括协议转换、安全认证、熔断限流、灰度发布、日志管理、流量监控等。
控制平面主要功能是对后端服务做统一的管控和配置管理。例如,可以控制网关的弹性伸缩;可以统一下发配置;可以对网关服务添加标签;可以在微服务网关上通过配置Swagger功能统一将后端服务的API契约暴露给使用方,完成文档服务,提高工作效率和降低沟通成本。

微服务遇到的挑战

微服务网关应该首先要具备 API 路由能力,微服务数量变多,API 数量急剧增加,网关还可以根据具体的场景作为流量过滤器来使用,以提供某些额外可选功能,因此对微服务
API Gateway 提出了更高要求,比如:

  • 可观测性:在以往的单体应用中,排查问题往往通过查看日志定位错误信息和异常堆栈;但是在微服务架构中服务繁多,出现问题时的问题定位变得非常困难;因此,如何监控微服务的运行状况、当出现异常时能快速给出报警,这给开发人员带来很大挑战。

鉴权认证:而微服务架构下,一个应用会被拆分成若干个微应用,每个微应用都需要对访问进行鉴权,每个微应用都需要明确当前访问用户以及其权限。尤其当访问来源不只是浏览器,还包括其它服务的调用时,单体应用架构下的鉴权方式就不是特别合适了。在微服务架构下,要考虑外部应用接入的场景、用户 -

  • 服务的鉴权、服务 - 服务的鉴权等多种鉴权场景。
  • 系统稳定性:若大量请求超过微服务的处理能力时,可能会将服务打垮,甚至产生雪崩效应、影响系统的整体稳定性。
  • 服务发现:微服务的分散管理,让微服务的负载均衡的实现也更具有挑战性。

解决方案

API 网关作为客户端和服务端的中间桥梁,为微服务系统提供统一的管理机制:
除了基础的请求分发、API 管理和条件路由等功能,还包括身份验证、监控报警、调用链追踪、负载均衡、限流隔离和熔断降级。身份认证:下图表示的是微服务联合
API 网关如何进行身份认证的,由图可见所有请求都通过网关,从而有效地隐藏了微服务。

监控报警/调用链追踪:
API 作为客户端和服务端的中间桥梁,是微服务监控的最好载体,API 网关监控功能的主要职责是及时发现网关以及后端服务器的连接异常,在 API
的监控平台上面用户可以随时查看日志信息,监控信息,调用链等等,并且主机发生的任何异常都会自动报警到控制台。有些网关甚至可以做到给客户端和服务端双向报警。

限流隔离/熔断降级:
随着互联网业务规模的增加,系统的并发度增高,多个服务之间相互调用链路,一条核心链路往往可能调用十个服务。如果在链路中,某个服务的
rt(响应时间)急剧上升,上游服务不断请求,造成恶性循环,上游等待结果线程数越多,使得更上游服务阻塞最终整条链路无法使用,从而导致服务雪崩,所以对入口流量进行整治管理是很有必要的,下图表示微服务系统是如何结合
API 网关进行限流隔离和熔断降级的。

主流网关选择

在微服务领域,有许多开源网关实现,有 NGINX、Kong、Apache APISIX 和 Envoy 等,Java 技术栈的有 Netfilx Zuul、Spring Cloud Gateway、Soul 等。或许你会问“有了
NGINX 和 Kong,为什么还需要 Apache APISIX?” ,下面做个简单对比。

网关 痛点 优势
NGINX 修改配置需要 Reload 才能生效,跟不上云原生的发展。 1. 老牌应用;2. 稳定可靠,久经考验;3. 高性能。
Apache APISIX 文档不够丰富和清晰,需要待改进。 1. Apache 基金会顶级项目;2. 技术架构更贴合云原生;3. 性能表现优秀;4. 生态丰富;5. 除了支持 Lua 开发插件外,还支持 Java、Go、Python、Node 等语言插件
Kong 1. 默认使用 PostgreSQL 或 Cassandra 数据库,使得整个架构非常臃肿,并且会带来高可用的问题;2. 路由使用的是遍历查找,当网关内有超过上千个路由时,它的性能就会出现比较急剧的下降;3. 一些重要功能是需要付费的。 1. 开源 API 网关的鼻祖,用户数众多;2. 性能满足大部分用户的需求;3. 生态丰富;4. 支持 Lua 和 Go 开发插件。
Spring Cloud Gateway 虽然 Spring 社区成熟,但是 Gateway 资源缺乏。 1. 内置了非常多的开箱即用功能,并且都可以通过 SpringBoot 配置或者手工编码链式调用来使用;2. Spring 系列可扩展性强,易配置,可维护性好; 3. Spring 社区成熟;4. 简单易用;5. 对于 Java 技术栈来说方便
Traefik 生产案例不太多 1. 基于 golang开发 2. 云原生可编程 api/对接各种服务发现

参考

微服务为什么要用到 API 网关?
5 种主流API网关技术选型,yyds!
全新一代API网关,带可视化管理,文档贼友好! | mall学习教程

微服务-微服务为什么要用到 API 网关相关推荐

  1. .NET微服务体系结构中为什么使用Ocelot实现API网关

    为什么要使用API网关而不是直接通信? 在微服务架构中,客户端应用程序通常需要使用来自多个微服务的功能.如果直接执行该消费,则客户端需要处理多个微服务端点以进行呼叫.当应用程序发展并引入新的微服务或更 ...

  2. .NET Core微服务之路:基于Ocelot的API网关实现--http/https协议篇

    前言 最近一直在忙公司和私下的兼职,白天十个小时,晚上四个小时,感觉每天都是打了鸡血似的,精神满满的,连自己那已经学打酱油的娃都很少关心,也有很长一段时间没有更新博客了,特别抱歉,小伙伴们都等得想取关 ...

  3. 蚂蚁金服 mPaaS 服务端核心组件体系概述:移动 API 网关 MGS

    根据<开篇 | mPaaS 服务端核心组件体系概述>,我们已经初步了解 mPaaS 平台后端各组件的核心架构体系. 而在 mPaaS 服务端众多组件中,移动 API 网关 MGS 是连接移 ...

  4. NET Core微服务之路:基于Ocelot的API网关实现--http/https协议篇

    前言 最近一直在忙公司和私下的兼职,白天十个小时,晚上四个小时,感觉每天都是打了鸡血似的,精神满满的,连自己那已经学打酱油的娃都很少关心,也有很长一段时间没有更新博客了,特别抱歉,小伙伴们都等得想取关 ...

  5. NET Core微服务之路:基于Ocelot的API网关Relay实现--RPC篇

    前言 我们都知道,API网关是工作在应用层上网关程序,为何要这样设计呢,而不是将网关程序直接工作在传输层.或者网络层等等更底层的环境呢?让我们先来简单的了解一下TCP/IP的五层模型. (图片出自ht ...

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

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

  7. 建设微服务API网关的一些实践

    随着这些年微服务的流行,API网关已经成为微服务架构中不可或缺的一环.一方面它承担着服务对外的唯一门户,一方面它提取了许多应用的共性功能. 整体架构 我们的API网关目前的架构如下图所示,可以看到AP ...

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

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

  9. c++突破网关屏蔽_通过API网关实现微服务管控-限流,熔断和降级

    今天准备谈下基于API网关来实现微服务治理管控中的服务限流,熔断和降级方面的内容.在前面谈微服务架构的时候也谈到过类似通过Hystrix,Sentinel来是服务限流熔断.包括也不断地在谈去中心化架构 ...

  10. java net包 网关_Net分布式系统之六:微服务之API网关

    本人建立了个人技术.工作经验的分享微信号,计划后续公众号同步更新分享,比在此更多具体.欢迎有兴趣的同学一起加入相互学习.基于上篇微服务架构分享,今天分享其中一个重要的基础组件"API网关&q ...

最新文章

  1. Tengine Framework基础
  2. 微软宣布加入 OpenJDK,打不过就改变 Java 未来!
  3. CRM Fiori应用里My Opportunity - My Appointment中My的准确含义
  4. 信息学奥赛一本通C++语言——1075:药房管理
  5. 重磅!阿里巴巴Blink正式开源,重要优化点解读\n
  6. yii2 asset.php,Yii2中使用asset压缩js,css文件的方法_php实例
  7. 【限时免费】云计算时代的安全和智能运维(11月18日周六|广州)
  8. cartographer探秘第四章之代码解析(四) --- 后端优化 --- 约束计算
  9. NOIP2013提高组华容道题解
  10. eclipse Git使用教程
  11. html5shiv源码,前端开发必配置:html5shiv.js和respond.min.js的作用说明!
  12. 电子计算机分类 可以分为哪些,计算机按照工作原理进行分类可以分为
  13. 手机TF 卡 无法读取,提示需要格式化
  14. (转)Silverlight 巧用文件生成时间强制客户端载入最新xap文件
  15. 浅析Endian(字节序问题)
  16. 数图互通高校房产管理模块周转房管理是怎样管理如合同、续租、到期提醒
  17. 以Mesos和Docker为核心的云操作系统
  18. linux分区出现hfs,在Arch Linux上挂载HFS +分区
  19. ubuntu下安装搜狗拼音输入法
  20. 华硕计算机硬件信息,华硕EeePC T101MT配置信息及散热

热门文章

  1. RabbitMQ延时队列
  2. 基于JAVAWeb的学生宿舍公寓后台管理系统
  3. 浅析即时通讯开发P2P技术如何降低实时视频直播带宽
  4. mysql如何恢复单表_MySQL如何恢复单库或单表,以及可能遇到的坑
  5. 航天器/控制器飞行能够实现自主控制么?
  6. TIPTOP 4GL——自定义按钮前加图标
  7. 计算机中的电子科学与技术论文,电子科学与技术优秀毕业论文.doc
  8. 我愿称之为最强归纳—浮点数的规格化与进制数之间的转换
  9. PHP环境配置和验证
  10. C语言之——自定义数据类型