多云和混合云场景下的 API 管理:挑战与选择

news2024/9/22 15:45:30

作者张超,API7 Cloud 产品负责人,Apache APISIX PMC 成员。

原文链接

一、多云和混合云

如今微服务已经成为最流行的一种软件架构,人们通过自己对业务的理解,和科学方法(比如领域驱动设计的理论)的加持将组织对外提供的产品拆分为一个个微服务,同时按照微服务的架构调整组织架构(逆康威定律)来开展业务的迭代。

以往组织习惯于自建数据中心来部署自家的产品,这些数据中心可能构建在买断或者是租赁的机房中,组织需要对机房的设备进行复杂的管理,包括交换机、服务器、磁盘、机柜等这些硬件设施,以及应对因为机房掉电、机柜温度过高、服务器崩溃等带来的故障。应对这些要问题往往会花费大量的人力财力,同时达不到很好的效果,使得自己产品的 SLA(服务等级约定)往往无法达到对客户的承诺,从而造成赔偿。

随着云的兴起,人们越来越习惯于将自己的业务部署到公有云之上,公有云帮助用户屏蔽了硬件的细节,工程师再也不用关心基础设施的搭建和维护问题,而是可以把自己的精力尽可能得放到业务的部署、维护和开发之上。然而,除了享受云带来的便利以外,云的兴起和使用也给用户带来了其他的一些问题:

  • 被“锁定”,当深度使用了云上某产品后,导致业务无法轻易迁移到其他的云,或者是从云上离开。这种情况特别发生在使用云提供的 PaaS 或者 SaaS 产品,然后与自己的业务发生了强绑定。通常因为在选购产品时,业务正处于高速发展的阶段,决策人往往忽略了使用云产品所带来的捆绑效应。
  • 可用性问题,大家都懂得“不要把鸡蛋放在一个篮子里”的道理,然后在业务上升期时,组织考虑的是快速上线产品,占据市场,对于基建的考虑往往是不足的,在这样的情况下,如果发生云某某区域机房掉电、光缆被挖断等问题,就会对业务造成影响。 于是现在人们越来越习惯于同时使用多种公有云或者除了使用云以外,额外再搭建私有云的方式,来规避上述提到的问题。这就是我们常说的“多云”和“混合云”。

“多云”指的是同时使用多种公有云,将业务镜像地、或者异构地部署到这些云上,同时尽可能采用标准服务(避免厂商锁定)。因为使用了多种云,当某个云出现不可用的情况下,它对业务的影响能够被缩小,甚至通过 DNS 修改解析等方式,启用备份的云,从而确保业务的连续性。“混合云”指的是组织除了使用了一个或者多个公有云以外,还拥有自建的私有云(或者数据中心),在此场景下,部分业务可能部署在私有云,其他的可能都已经上公有云,或者所有业务都在云上,而私有云负责管理和监控。总之,在采用了“多云”或者“混合云”这样的模式后,在提升服务可用性的同时,软件部署方式的灵活性也大大提升。

然而,在应用“多云”和“混合云”后,如何高效、简单的管理云上的微服务,则变得更加棘手。这当中比较经典的要属 API 的管理了,如今大量的微服务都选择使用 API 这一方式来进行交互,当微服务部署之后,它们提供的 API 需要能够被暴露到外部,以便和外部的调用方连接,从而提供服务。

二、多云、混合云场景下 API 管理的需求

我们知道对于管理微服务 API 而言,一款好的 API 网关是必不可少的,API 网关能够安全、高效地将微服务 API 暴露出去,然而,采用“多云“,“混合云”这样的模式后,对于 API 网关的需求不仅仅局限在 API 网关自身的功能是否满足业务的需求了,具体来说,我们需要考虑:

是否支持多集群管理

正如前文所述,在采用“多云”或者“混合云”,后,每个云或者私有数据中心所部署的业务可能存在着比较大的差异,因此用户需要在这些云上分别部署一套套的 API 网关集群,且可想而知这些网关集群的配置、证书、API 密钥等可能不尽相同。如果用户选择使用的网关不支持多集群的管理,可能会对 API 的管理造成很大的麻烦,尤其是在业务扩张期,API 网关集群规模越来越大,数量越来越多的时候。

在这种情况下,一款支持多集群管理的 API 网关产品 便能极大地降低管理员的管理成本。

  1. 用户拥有一个统一的控制台,并且在该控制台中可选择当前需要配置和查看的集群,并且可以根据实际业务的部署情况,上线或者下线一个网关集群。
  2. 用户可以控制台上查看所有这些 API 网关集群的运行状态,包括常见的 QPS、延迟、网关集群 CPU 和内存占用率等。

是否支持协作

由于业务的快速发展,少数几个 API 网关管理员可能无法承担起维护全部 API 网关集群的重担,同时考虑到大部分的网关配置,比如添加路由、为路由配置插件等,可以由开发者自行处理,不需要全部由管理员经手。因此,是否支持“协作”对于管理来说,也变得重要起来。具体来说,管理员可以邀请组织内的其他成员加入到该 API 网关集群的管理中,同时使用 RBAC 之类的策略为大家分配不同的权限,比如为管理员设置 Organization Admin 的角色(可以执行任意操作),为普通开发者设置为 Service Admin 的角色(仅可维护少数几个服务和路由),进而在实现协作的基础上确保操作安全,并且在员工离职或者出现岗位变动时,及时回收账号或者修改权限。

试想如果不支持协作,那么大概率一个组织内的成员会共享一个账号,这种用法在初期可能具备一定的便利性,但是时间一长它的潜在危害就会暴露出来,比如某员工在离职后可能依然可以登录并进行配置,甚至一些不怀好意的员工可能会选择删除全部数据,这对于组织对外的产品和服务来说是灾难性的。而且在进行复盘时,管理员甚至无法将具体的操作和具体某个成员关联起来,因为大家共享同一账号(即便是保有审计日志的情况下)。

是否可运行在任何基础设施上

随着容器化和容器编排的技术越来越成熟,以往很多运行在虚拟机之上的微服务都纷纷转投了 Kubernetes 的怀抱,这就意味着,用户可能会选择使用 Kubernetes、传统的虚拟机、甚至是物理机(比如在自己的私有数据中心里)。如果用户选择的 API 网关产品在功能上非常丰富,能够满足业务需求,但是又受限于底层基础设施,或者缺乏成熟的安装工具,这样会让用户处于两难的境地,要么放弃使用,要么自行进行二次开发从而使得该 API 网关获得运行在某个基础设施之上的能力。无论如何,这都会带来使用上的成本。

三、选择

结合上文所述,在“多云”和“混合云”的场景下,如何选择 API 网关则变得极其重要,这里列举了几种常见的选择,用户应该根据他们的实际场景和发展的考虑来进行分析。

不同云不同方案

通常来说每一家公有云厂商都会提供其内置的 API 网关解决方案,用户可以根据现有产品的开发规格对云上的 API 网关方案进行选型。

优点如下:

  1. 使用成本极低,无需部署,无需维护
  2. 通常支持按需付费,早期使用可能只需要极低的费用

缺点是:

  1. 往往不同云的 API 网关使用方式相互不兼容,完成同一种配置需要经历不同的路径
  2. 各家的产品功能不对称,比如 A 厂商可能支持 mTLS,而 B 厂商不支持
  3. “混合云”场景下,可能需要再选择一款开源的或者商业化的 API 网关,部署在用户自己的私有云上

采用该方案时,如果想要获得一致的使用体验,可能需要基于不同的解决方案进行产品化,开发一个配置同步产品,屏蔽底层的细节,这里可能需要用户自行进行调研,分析以及开发(但可能会遇到兼容性问题,功能受限,只能使用几个 API 网关产品的交集功能),且需要考虑同步失败情况。

Configuration Syncer

当然,用户也可以选择手动重复配置每一个云上的 API 网关(如果可以忍受的话)。

Duplicated Configuration

使用开源解决方案

考虑到在不同云使用不同方案的缺点,用户也可以考虑使用开源的 API 网关解决方案(如 Apache APISIX, Kong, Tyk, Traefik 等),这样的好处是,你可以在每个云(包括私有数据中心)上使用同一种 API 网关,从而避免了不同解决方案之间的兼容问题。且一个成熟,生态强大的开源的 API 网关可以帮助用户解决很多场景的问题,即便不能覆盖全部的场景,这些 API 网关通常也允许用户通过多种不同的方式进行扩展,比如 Apache APISIX 允许用户通过使用 Go、Java、Python、Lua、WASM 等语言和技术进行扩展。

然而这些开源 API 网关通常采用 Open Core 的开源策略,产品中的核心功能都开源了,但是面向企业级的管理能力,如可视化控制台、多集群管理、审计、SSO 等功能往往是收费的(集成在它们的商业产品中),这就导致如果用户不希望向他们付费,只能选择自研一套管理平台(也称为网关的控制面)来管理这些 API 网关。这可能意味着用户需要为此招聘一名全职的工程师负担起这部分的开发工作。

Custom Control Plane

购买企业级 API 网关 SaaS 服务

如果开源的 API 网关在功能上满足需求,但是因为无法接受自研控制面的成本的话,用户也可以考虑联系这些开源软件的原厂(如 Apache APISIX 背后的原厂 API7.ai,Kong 背后的原厂 Kong inc,以及 Tyk 背后的原厂 Tyk inc 等),这些原厂往往会提供不同的企业级 API 网关产品和支持服务。尤其在“多云”和“混合云”的场景下,这些原厂相继都发布了他们的 SaaS 产品。API 网关的 SaaS 产品往往聚焦在管理侧,提供开箱即用的控制台,而不关心 API 网关实例具体部署在哪里(当然,某些 SaaS 服务也支持托管 API 网关实例,但这往往也会引入其他问题,比如代理 API 时的延迟)。

SaaS

SaaS 服务通常会为每个租户托管一个用户独享的网关控制面,然后将用户部署的(或者 SaaS 服务托管的)网关实例进行连接(往往会使用 mTLS 等策略确保数据的安全性、隐私性),进而对它们进行管理。虽然购买 SaaS 服务需要花费一定的金钱,但是相比于招聘专职的工程师维护一个 API 网关和它的控制面,这些支出可能会更低。

当然,采购 SaaS 服务需要谨慎,用户确认订单前,应该从下面几个方面对一个 SaaS 服务进行评估:

  1. 这个 SaaS 服务是否能满足现在以及未来一段时间的使用需求?
  2. 这个 SaaS 服务厂商是否专业诚信?他们拥有哪些用户案例?
  3. 这个 SaaS 服务是否合规,符合 GDPR,拥有 SOC2 审计报告?
  4. 这个 SaaS 服务是否有明确的 SLA 条款?
  5. 这个 SaaS 服务是如何收费的?用户是否可以预估未来一年或者几年的支出?

完全自研

如果开源的 API 网关解决方案无法满足用户的实际场景,用户可能选择考虑完全自研专属于他们的 API 网关产品,但这往往费时费力,且网关本身的稳定性也是一个重大问题。研发一个 API 网关虽然不像实现一个关系型数据库或者浏览器那么难,但也不是一朝一夕就可以完成的,因此完全自研可以认为是“最坏的策略”。往往只能作为最后的选择。

四、总结

在云原生的大环境下,在“多云”和“混合云” 的场景下进行 API 的管理将会成为每一个组织发展时将面临的一个问题,甚至在没有采用“多云”和“混合云”之前就应该开始未雨绸缪。 尽管本文给出了几种不同的选择,但是需要谨记的是,它们之中没有“银弹”,用户应该根据业务的实际情况和发展方向选择一个“目前看来最合适的方案”。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/351680.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

算法刷题打卡第93天: 最大的以 1 为边界的正方形

最大的以 1 为边界的正方形 难度:中等 给你一个由若干 0 和 1 组成的二维网格 grid,请你找出边界全部由 1 组成的最大 正方形 子网格,并返回该子网格中的元素数量。如果不存在,则返回 0。 示例 1: 输入&#xff1a…

c++11 标准模板(STL)(std::multimap)(九)

定义于头文件 <map> template< class Key, class T, class Compare std::less<Key>, class Allocator std::allocator<std::pair<const Key, T> > > class multimap;(1)namespace pmr { template <class Key, class T…

【论文速递】ACL 2021-CasEE: 一种用于重叠事件抽取的级联解码联合学习框架

【论文速递】ACL 2021-CasEE: 一种用于重叠事件抽取的级联解码联合学习框架 【论文原文】&#xff1a;A Joint Learning Framework with Cascade Decoding for Overlapping Event Extraction 【作者信息】&#xff1a;Sheng, Jiawei and Guo, Shu and Yu, Bowen and Li, Qian…

Python登陆系统

前言 #源码见文末公众号哈# 登录系统 一个简单的登录系统包含了登录账户、注册账户、修改密码以及注销账户的操作。 1. 登录账户 登录系统主要需要判断账户是否存在&#xff0c;不存在就注册一个账户&#xff0c;如果第一次登录系统&#xff0c;我们需要先新建一个文件&…

解密Teradata与中国市场“分手”背后的原因!国产数据库能填补空白吗?

2月15日&#xff0c;西方的情人节刚刚过去一天&#xff0c;国内IT行业就爆出一个大瓜。 继Adobe、甲骨文、Tableau、Salesforce之后&#xff0c;又一个IT巨头要撤离中国市场。 Teradata天睿公司官宣与中国市场“分手”&#xff0c;结束在中国的直接运营。目前&#xff0c;多家…

MySQL Study Notes Design in 2023

文章目录1 概述1.1 MySQL相关概述1.2 数据模型1.3 SQL分类2 数据库设计-DDL2.1 约束2.2 字段3 数据库操作-DML3.1 增加(insert)1 概述 1.1 MySQL相关概述 数据库&#xff1a;英文为 DataBase&#xff0c;简称DB&#xff0c;它是存储和管理数据的仓库。 数据库管理系统&#xf…

为什么重写equals必须重写hashCode

关于这个问题&#xff0c;看了网上很多答案&#xff0c;感觉都参差不齐&#xff0c;没有答到要点&#xff0c;这次就记录一下&#xff01; 首先我们为什么要重写equals&#xff1f;这个方法是用来干嘛的&#xff1f; public boolean equals &#xff08;Object object&#x…

Wallys|5 GHz 802.11ax|Does wallys QCN9074-5G module support W56?

Wallys|5 GHz 802.11ax|Does wallys QCN9074-5G module support W56?-Does wallys QCN9074-5G module support W56?-The answer is---sure!In this article,we’ll introduce about the W56 at 11ax 5GHz.If you realized this article is helpful, kindly help re-post / co…

《C陷阱与缺陷》----词法“陷阱”

导言&#xff1a; 由于一个程序错误可以从不同层面采用不同方式进行考察&#xff0c;而根据程序错误与考察程序的方式之间的相关性&#xff0c;可以将程序错误进行划分为各种陷阱与缺陷&#xff1a; ①.词法“陷阱” ②.语法“陷阱” ③.语义“陷阱” ④.连接问题 ⑤.库函数问…

Microsoft Office 2021 / 2019 Direct Download Links

前言 微软Office在很长一段时间内都是最常用和最受欢迎的软件。从小型创业公司到大公司,它的使用比例相当。它可以很容易地从微软的官方网站下载。但是,微软只提供安装程序,而不提供完整的软件供下载。这些安装文件通常比较小。下载并运行后,安装的文件将从后端服务器安装M…

2023美赛B题思路数据代码分享

文章目录赛题思路2023年美国大学生数学建模竞赛选题&论文一、关于选题二、关于论文格式三、关于论文提交四、论文提交流程注意不要手滑美赛B题思路数据代码【最新】赛题思路 (赛题出来以后第一时间在CSDN分享) 最新进度在文章最下方卡片&#xff0c;加入获取一手资源 202…

【软件架构设计】SOA/软件架构设计---面向服务的架构(SOA详细解释)

文章目录面向服务的架构SOA 概述1. 服务的基本结构2.SOA 设计原则3. 服务构件与传统构件SOA 的关键技术1. UDDI2.WSDL3.SOAP4.RESTSOA 的实现方法1.Web Service2. 服务注册表3. 企业服务总线微服务1.微服务的优势2. 微服务面临的挑战3.微服务与 SOA面向服务的架构 迄今为止&am…

使用html-to-image代替html2canvas,结合jspdf实现下载pdf(下载截图下载前端dom元素)

一、问题 一开始的时候&#xff0c;准备使用html2canvasjspdf来实现的&#xff0c;但是遇到了一个麻烦的问题&#xff0c;在其他项目中使用html2canvas没有任何问题&#xff0c;但是在要开发的项目中使用&#xff0c;就给我报错&#xff0c;是真滴烦。 html2canvas报错 Uncau…

map和set介绍及其底层模拟实现

致努力前行的人&#xff1a; 要努力&#xff0c;但不要着急&#xff0c;繁花锦簇&#xff0c;硕果累累都需要过程&#xff01; 目录 1.关联式容器 2.键值对 3.树形结构的关联式容器 3.1set的介绍 3.2set的使用 3.3multiset的使用 3.4map的使用 3.5multimap的使用 4.常见的面试题…

【Ctfshow_Web】信息收集和爆破

0x00 信息收集 web1 直接查看源码 web2 查看不了源码&#xff0c;抓包即可看到&#xff08;JS拦截了F12&#xff09; web3 抓包&#xff0c;发送repeater&#xff0c;在响应包中有Flag字段 web4 题目提示后台地址在robots&#xff0c;访问/robots.txt看到Disallow: /fl…

vite结合ts使用mock模拟数据,实现前后端异步开发

vite结合ts&#xff0c;vue3 使用mock模拟数据&#xff0c;实现前后端异步开发 第一步&#xff1a;安装依赖 安装mock&#xff1a;npm install mockjs --save-dev安装vite-mock插件&#xff1a;npm install vite-plugin-mock --save 注解1&#xff1a; npm 安装依赖包的时候…

消息中间件----内存数据库 Redis7(第3章 Redis 命令)

Redis 根据命令所操作对象的不同&#xff0c;可以分为三大类&#xff1a;对 Redis 进行基础性操作的命令&#xff0c;对 Key 的操作命令&#xff0c;对 Value 的操作命令。3.1 Redis 基本命令首先通过 redis-cli 命令进入到 Redis 命令行客户端&#xff0c;然后再运行下面的命令…

2023年浙江建筑八大员(市政质量员)考试试题题库及答案

百分百题库提供建筑八大员&#xff08;质量员&#xff09;考试试题、建筑八大员&#xff08;质量员&#xff09;考试预测题、建筑八大员&#xff08;质量员&#xff09;考试真题、建筑八大员&#xff08;质量员&#xff09;证考试题库等,提供在线做题刷题&#xff0c;在线模拟考…

如何在 Debian 11 上设置一个静态 IP 地址

当你在电脑上安装一个新的操作系统时&#xff0c;DHCP服务器会给你分配一个动态IP地址。然而&#xff0c;在各种情况下&#xff0c;你可能需要在你的机器上设置一个静态IP地址&#xff0c;例如&#xff0c;当你正在托管一个网络服务器&#xff0c;或者任何服务需要一个IP地址而…

K_A12_007 基于STM32等单片机驱动AS608光学指纹识别模块 OLED0.96显示

K_A12_007 基于STM32等单片机驱动AS608光学指纹识别模块 OLED0.96显示一、资源说明二、基本参数参数引脚说明三、驱动说明对应程序:四、部分代码说明1、接线引脚定义1.1、STC89C52RCAS608光学指纹模块1.2、STM32F103C8T6AS608光学指纹模块五、基础知识学习与相关资料下载六、视…