api网关(http转grpc使用)对比
创始人
2024-05-31 19:56:55
0

目录

  • 网关是什么?
  • api网关
  • api网关的作用
  • 常见api网关
    • OpenResty
    • Kong

网关是什么?

  1. 网关,可以将网关比作“门”,但是需要区分网关与网桥的区别;

    1. 网桥工作在数据链路层,在不同或相同类型的LAN之间存储并转发数据帧,必要时进行链路层上的协议转换。可连接两个或多个网络,在其中传送信息包。

    2. 网关是一个大概念,不具体特指一类产品,只要连接两个不同的网络都可以叫网关,网桥一般只转发信息,而网关可能进行包装。

  2. 通俗的例子:

    1. 假如你要去找集团老板
    2. 所有想见老板的人都得从公司大门进入(统一入口)(这个门相当于将办公室和外界隔离了,主要为了保护里面的安全以及正常工作)。
    3. 门卫肯定会让你出示相关证件(鉴权检验)。
    4. 如果鉴权之后, 发现你找老板其实只是为了和他谈谈两元店的生意, 门卫会跟你说这个用不着找老板, 你去集团投资部就行了(动态路由, 将请求路由到不同的后端集群中), 此时会对你进行一些包装,例如给你出具一个访问证类似的,然后告诉你路该怎么走…

api网关

对应过来,api网关就是:

  1. API网关是一个服务器,是系统的唯一入口。(“门”)
  2. API网关封装了系统内部架构,为每个客户端提供一个定制的API。(隔离)
  3. 可能还具有其它职责,如身份验证、监控、负载均衡、缓存、协议转换、限流熔断、静态响应处理。(鉴权,负载,动态路由)
  4. API网关方式的核心要点是,所有的客户端和消费端都通过统一的网关接入微服务。

在这里插入图片描述

api网关的作用

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

  • 数据平面主要功能是接入用户的HTTP请求和微服务被拆分后的聚合。使用微服务网关统一对外暴露后端服务的API和契约,路由和过滤功能正是网关的核心能力模块。另外,微服务网关可以实现拦截机制和专注跨横切面的功能,包括协议转换、安全认证、熔断限流、灰度发布、日志管理、流量监控等。

  • 控制平面主要功能是对后端服务做统一的管控和配置管理。例如,可以控制网关的弹性伸缩;可以统一下发配置;可以对网关服务添加标签;可以在微服务网关上通过配置Swagger功能统一将后端服务的API契约暴露给使用方,完成文档服务,提高工作效率和降低沟通成本

  • 路由功能:路由是微服务网关的核心能力。通过路由功能微服务网关可以将请求转发到目标微服务。在微服务架构中,网关可以结合注册中心的动态服务发现,实现对后端服务的发现,调用方只需要知道网关对外暴露的服务API就可以透明地访问后端微服务。

  • 负载均衡:API网关结合负载均衡技术,利用Eureka或者Consul等服务发现工具,通过轮询、指定权重、IP地址哈希等机制实现下游服务的负载均衡。

  • 统一鉴权:一般而言,无论对内网还是外网的接口都需要做用户身份认证,而用户认证在一些规模较大的系统中都会采用统一的单点登录(Single Sign On)系统,如果每个微服务都要对接单点登录系统,那么显然比较浪费资源且开发效率低。API网关是统一管理安全性的绝佳场所,可以将认证的部分抽取到网关层,微服务系统无须关注认证的逻辑,只关注自身业务即可。

  • 协议转换:API网关的一大作用在于构建异构系统,API网关作为单一入口,通过协议转换整合后台基于REST、AMQP、Dubbo等不同风格和实现技术的微服务,面向Web Mobile、开放平台等特定客户端提供统一服务。

  • 指标监控:网关可以统计后端服务的请求次数,并且可以实时地更新当前的流量健康状态,可以对URL粒度的服务进行延迟统计,也可以使用Hystrix Dashboard查看后端服务的流量状态及是否有熔断发生。

  • 限流熔断:在某些场景下需要控制客户端的访问次数和访问频率,一些高并发系统有时还会有限流的需求。在网关上可以配置一个阈值,当请求数超过阈值时就直接返回错误而不继续访问后台服务。当出现流量洪峰或者后端服务出现延迟或故障时,网关能够主动进行熔断,保护后端服务,并保持前端用户体验良好。

  • 黑白名单:微服务网关可以使用系统黑名单,过滤HTTP请求特征,拦截异常客户端的请求,例如DDoS攻击等侵蚀带宽或资源迫使服务中断等行为,可以在网关层面进行拦截过滤。比较常见的拦截策略是根据IP地址增加黑名单。在存在鉴权管理的路由服务中可以通过设置白名单跳过鉴权管理而直接访问后端服务资源。

  • 灰度发布:微服务网关可以根据HTTP请求中的特殊标记和后端服务列表元数据标识进行流量控制,实现在用户无感知的情况下完成灰度发布。

  • 流量染色:和灰度发布的原理相似,网关可以根据HTTP请求的Host、Head、Agent等标识对请求进行染色,有了网关的流量染色功能,我们可以对服务后续的调用链路进行跟踪,对服务延迟及服务运行状况进行进一步的链路分析。

  • 文档中心:网关结合Swagger,可以将后端的微服务暴露给网关,网关作为统一的入口给接口的使用方提供查看后端服务的API规范,不需要知道每一个后端微服务的Swagger地址,这样网关起到了对后端API聚合的效果。

  • 日志审计:微服务网关可以作为统一的日志记录和收集器,对服务URL粒度的日志请求信息和响应信息进行拦截

常见api网关

  1. Nginx+lua:OpenRestyKong、Orange、Abtesting gateway 等
  2. Java:Zuul/Zuul2、Spring Cloud Gateway、Kaazing KWG、gravitee、Dromara soul 等
  3. Go:Janus、fagongzi、Grpc-gateway
  4. Dotnet:Ocelot
  5. NodeJS:Express Gateway、Micro Gateway

按照使用数量、成熟度等来划分,主流的有 4 个:

  1. OpenResty
  2. Kong
  3. Zuul/Zuul2
  4. Spring Cloud Gateway

c++的水太深,小伙子们把握不住,java太复杂繁琐,因此可以选择的api网关有:OpenResty,Kong,Grpc-Gateway.

KongTraefikAmbassadorTykZuul
基本
主要用途企业级API管理微服务网关微服务网关微服务网关微服务网关
学习曲线适中simplesimple适中simple
成本开源/企业版开源开源/pro开源/企业版开源
社区star2074221194171942997186
配置
配置语言Admin Rest api, Text file(nginx.conf 等)TOMLYAML(kubernetes annotation)Tyk REST APIREST API,YAML静态配置
配置端点类型命令式声明式声明式命令式命令式
拖拽配置yesnononono
管理模式configurabledecentralised, self-servicedecentralised, self-servicedecentralised, self-servicedecentralised, self-service
部署
kubernetes适中(k8s yaml,helm chart)easyeasy适中(k8s yaml,helm chart)适中(k8s yaml,helm chart)
Cloud IAAShigheasyN/Aeasyeasy
Private Data CenterhigheasyN/Aeasyeasy
部署模式金丝雀(企业版)金丝雀金丝雀,shadow金丝雀金丝雀
statepostgres,cassandrakuberneteskubernetesredis内存文件
可扩展性
扩展功能插件自己实现插件插件自己实现
扩展方法水平水平水平水平水平
功能
服务发现动态动态动态动态动态
协议http,https,websockethttp,https,grpc,websockethttp,https,grpc,websockethttp,https,grpc,websockethttp,https
基于kong+nginxtraefikenvoytykzuul
ssl 终止yesyesyesyesno
websocketyesyesyesyesno
routinghost,path,methodhost,pathhost,path,headerhost,path
限流yesnoyesyes需要开发
熔断yesyesnoyes需要其他组件
重试yesyesnoyesyes
健康检查yesnonoyesyes
负载均衡算法轮询,哈希轮询,加权轮询加权轮询轮询轮询,随机,加权轮询,自定义
权限Basic Auth, HMAC, JWT, Key, LDAP, OAuth 2.0, PASETO, plus paid Kong Enterprise options like OpenID ConnectbasicyesHMAC,JWT,Mutual TLS,OpenID Connect,基本身份验证,LDAP,社交OAuth(例如GPlus,Twitter,Github)和传统基本身份验证提供程序开发实现
tracingyesyesyesyes需要其他组件
istio集成nonoyesnono
dashboardyesyesgrafana,Prometheusyes

OpenResty

  1. OpenResty基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

  2. 通过揉和众多设计良好的 Nginx 模块,OpenResty 有效地把 Nginx 服务器转变为一个强大的 Web 应用服务器,基于它开发人员可以使用 Lua 编程语言对 Nginx 核心以及现有的各种 Nginx C 模块进行脚本编程,构建出可以处理一万以上并发请求的极端高性能的 Web 应用

Kong

  1. kong是一款基于OpenResty(Nginx + Lua模块)编写的高可用、易扩展的,由Mashape公司开源的API Gateway项目。
  2. Kong是基于NGINX和Apache Cassandra或PostgreSQL构建的,能提供易于使用的RESTful API来操作和配置API管理系统,所以它可以水平扩展多个Kong服务器,通过前置的负载均衡配置把请求均匀地分发到各个Server,来应对大批量的网络请求。
  3. 中文文档:https://github.com/qianyugang/kong-docs-cn

相关内容

热门资讯

四年级描写小公鸡的作文【精简... 四年级描写小公鸡的作文 篇一小公鸡的生活小公鸡是一只活泼可爱的小动物,它们有着鲜艳的羽毛和红红的冠子...
四年级作文假如我来当老师【经... 四年级作文假如我来当老师 篇一如果我来当老师,我会尽力做到最好。作为一个四年级的学生,我对自己的能力...
六年级上册语文第三单元作文(... 六年级上册语文第三单元作文 篇一主题:我的家乡我的家乡位于一个小城市,虽然不大,但是我对它有着深深的...
期末考试小学生六年级作文(经... 期末考试小学生六年级作文 篇一我的成长随着时间的推移,我已经到了小学六年级了。在这个学期即将结束之际...
关爱的六年级作文400字 【实用】关爱的六年级作文400字合集9篇  无论是在学校还是在社会中,大家都经常看到作文的身影吧,作...
六年级作文(最新6篇) 六年级作文 篇一:我的暑假生活这个暑假,我过得非常充实和有意义。我参加了许多有趣的活动,也学到了很多...
春天的校园六年级作文400字... 春天的校园六年级作文400字 篇一:春风吹拂的校园春天是一个美丽的季节,也是一个充满希望和活力的季节...
六年级下册让真情自然流露作文... 六年级下册让真情自然流露作文 篇一真情的力量在我们的生活中,真情是一种宝贵的力量。它可以让我们更加真...
走进新学期六年级作文(优质3... 走进新学期六年级作文 篇一新学期开始了,我升入了六年级。对于这个新的开始,我既充满期待又有些紧张。首...
黑暗中的光明六年级作文【经典... 黑暗中的光明六年级作文 篇一:勇敢面对黑暗黑暗,对于很多人来说,是一种恐惧的存在。在黑暗中,我们看不...
青春如彩虹般绚丽作文600字... 青春如彩虹般绚丽作文600字六年级 篇一青春是一段美丽而绚烂的时光,就像彩虹一样绚丽多彩。在这段青春...
夜游珠江六年级作文550字【... 夜游珠江六年级作文550字 篇一夜游珠江夜晚,珠江两岸的灯光闪烁,江面波光粼粼,我和爸爸妈妈一起来到...
小升初满分作文:奶奶的爱【推... 小升初满分作文:奶奶的爱 篇一奶奶是我最亲近的人,她的爱无处不在。无论是在家里还是在学校,奶奶总是给...
追梦人600字作文 追梦人600字作文···· 追梦人···· 桥林小学 六(3)班 李斌每个人都有梦想,人生有了梦想就...
感恩朋友六年级作文【最新3篇... 感恩朋友六年级作文 篇一感恩朋友朋友,是我们成长道路上最为珍贵的财富。她们和我一起度过了美好的六年级...
一到六年级的作文下雨【实用6... 一到六年级的作文下雨 篇一雨天的乐趣下雨了,这是多少孩子最喜欢的天气啊!尤其是在一到六年级的小学生们...
哥哥真厉害作文1000字【优... 哥哥真厉害作文1000字 篇一哥哥真厉害我有一个哥哥,他是我心目中最厉害的人。他不仅聪明、勤奋,还有...
六年级上册第二单元作文(优秀... 六年级上册第二单元作文 篇一我的梦想我是一个六年级的学生,我的名字叫小明。每个人都有自己的梦想,而我...
小学六年级暑假作文400字(... 小学六年级暑假作文400字 篇一:我的暑假生活暑假来临了,我迫不及待地迎接了属于我的自由时光。暑假里...
我是一场秋雨小学六年级作文(... 我是一场秋雨小学六年级作文 篇一:秋雨的魅力秋天是一个美丽的季节,它给大地带来了一场场降雨,也给我们...