当前位置: 首页 > article >正文

网关: 用途和产品对比

概述

  • 微服务中的有一个非常关键的组件: API网关

  • 和配置中心一样,在没有采用微服务架构的时候

  • 我们可以自己搭建自己的API网作作为统一的 API 出口和安全验证

  • 在微服务架构之下,服务被拆的非常的零散,在降低了耦合度的同时

  • 也给服务的统一管理增加了难度,就如下边这张图

  • 在旧的服务治理下,像身份验证, 限速, 安全, 日志等等这些通用的功能

  • 需要在每一个服务中单独实现, 这使得系统的维护就没有一个全局的视图来统一的管理这些功能

  • Api 网关致力于解决这些问题,它为微服统一管理这些通用的功能

  • 在此基础上提高系统的可扩展性,看下面这张图

  • 用了微服务之后,搭建上API网关就变成了下面这样

  • 它可以使得服务本身更专注于自己的领域,很好的对服务调用者和服务提供者做了隔离

  • 也就是身份认证,限速,安全,日志,缓存,监控等等,这些都由API网关来做了

  • 而下边的每一个服务,它只需要关心自己的领域,做好自己的服务就可以了

API网关的意义

  • 首先它可以集合多个API, 统一API的入口
    • 既然是微服务,肯定会有很多很多的服务
    • 假如有API网关在调用多个微服务的时候,就只需要调用API网关就可以了
    • 不用关心每一个微服务,它的地址是什么等等
    • 调用的时候只需要告诉API网关, 我要调用哪个微服务就可以
  • 避免内部信息的泄露
    • 因为它对所有的API进行了管控,自然也就避免了泄露
    • 这样下边的服务就不用关心安全问题了,也不用关心自己的敏感信息被暴露的问题
  • 提供安全认证
    • 为服务还提供了安全认证,比如说 sql 注入安全验证等等
    • 权限的控制,也可以在API网关中来做
  • 支持混合的通信协议
    • 一般都会采用 HTTP Restful 等协议
    • 而微服务内部的通信一般会使用 GRPC,AMQP协议等等,它是不统一的
    • 这些一般外部系统也是不支持的,所以需要通过API网关来对外提供API的服务,并且统一协议
  • 降低微服务的复杂度
    • 微服务一般会比单体架构有很大的管理复杂度,比如说令牌的验证,限流等等
    • 假如没有API网关的话,每个微服务都要自己来做这些功能
    • 微服务对外开放后就要考虑安全的问题
    • 微服务引入了API网关之后呢,每个服务就不用关心这些问题
    • 这些问题都放在API网关上来做就行了

API网关弊端

  • 集合增加额外管理和维护成本
    • 首先它需要安装新的中间件
    • 这样也就增加了额外的管理和维护的成本
  • 避免开发时需遵循网关路由规则
    • 开发的时候,指定路由的时候,需要按照api的网关的规则来指定
  • 容易引发单点故障
    • 因为是api网关,所以就会有单一的入口
    • 大家请求都会访问到这个入口
    • 假如API网关出现问题以后,就会导致所有的微服务都不可用了

API 网关产品对比


1 )nginx

  • 它用的比较广泛,它是免费开源的高性能的HTTP服务器和反向代理服务器
  • 同时也是可以用作 API 网关的,它以高性能稳定丰富的功能级简单的配置和资源的消耗闻名
  • Nginx 作为API网关非常的简单,配置也比较简单

2 ) Zuul

  • 它是 SpringCloud中的一个组件,使用非常方便,它提供了一些非常多的功能
  • 比如说,认证,鉴权,限流,动态路由,监控,弹性,安全负载均衡等等
  • 所以用做来做网关是一个非常不错的选择

3 )Kong

  • 它是专注于提供微服务API网关的一个平台
  • 对比,Zuul 只是其中一个组件,而Kong是专注于提供微服务网关,它专门做这个,并且是一个平台
  • 它本身是基于Nginx来实现的, 但是它在Nginx的基础之上,又提供了更方便的配置方式和插件
    • 比如说:验证,日志,限流等等
  • 当需要为应用添加限流功能的时候
    • 因为它只提供了基本的路由功能
    • 开发者需要自己来研发相应的功能,才可以
    • 可能你觉得一个功能还并不麻烦
    • 但是如果在此基础上,今后提出更多的要求,那就比较麻烦了
  • 对于Kong来说,限流功能就是一个插件,只需要简单的配置就可以
  • Kong的插件机制是极高可扩展性的, 可以很方便的为路由和服务提供各种插件
  • 网关所需要的基本特性,它也全部都具备

http://www.kler.cn/a/416178.html

相关文章:

  • 【Java基础入门篇】三、面向对象和JVM底层分析(1)
  • 【设计模式】【结构型模式(Structural Patterns)】之适配器模式(Adapter Pattern)
  • CentOS 上安装各种应用的命令行总结
  • Tomcat(39)如何在Tomcat中配置SSL会话缓存?
  • Go语言中高效生成测试文件的方法:实践与优化
  • Gentoo Linux部署LNMP
  • 【数据分析】鞅
  • 微积分复习笔记 Calculus Volume 2 - 3.1
  • 抓包之wireshark基础用法介绍
  • Windows中 qemu虚拟机 安装银河麒麟V10 arm架构系统 服务器版
  • Ubuntu20.04下配置Cuda12.1+Cudnn
  • 民安:助力提升城市安全水平
  • Sui 链游戏开发实战:用 Move 写一个链上剪刀石头布游戏!
  • mathtype快捷键失灵怎么办?一键解决,不要卸载重装
  • MySQL 两个数据库之间数据交互——Federated Tables
  • python中把字符串转换成字典
  • C#反序列化XML时提示XML 文档(1, 1)中有错误
  • 出于安全考虑,你的平板电脑已设置为禁止安装来源不明的应用,对于这种工业的安卓平板,应该怎么解决问题呢
  • angular语法
  • JSON_EXTRACT 使用