首页 > 其他分享 >当 Amazon Lambda 遇上 Apache APISIX 可以擦出什么火花?

当 Amazon Lambda 遇上 Apache APISIX 可以擦出什么火花?

时间:2023-04-13 18:11:33浏览次数:103  
标签:Serverless 插件 请求 Amazon Apache APISIX

本文首先介绍了什么是 Serverless,以及为什么需要 Serverless;其次,讲述了一个好的网关在 Serverless 架构下的重要性,而 APISIX 就是这样的一个网关;最后,本文重点介绍了 APISIX 中的 Serverless 类型的插件 aws-lambda,同时列举了 Apache APISIX 其它 Serverless 相关插件。

作者程小兰,API7.ai 技术工程师,Apache APISIX Contributor。

原文链接

使用 Amazon Lambda 时为什么需要 Apache APISIX?

Serverless 和 Amazon Lambda

什么是 Serverless?

Serverless 的基础概念是将运行服务所需的基础设施交由云服务提供商管理,以及一些自部署的 Serverless 平台,从而让使用 Serverless 的工程师可以专注于面向客户业务应用层的开发,而不需要在基础设施的构建、管理、扩容等任务上投入过多精力。很多云服务提供商也在推出 Serverless 相关的产品,Amazon Serverless 的核心是名为 Amazon Lambda 的计算服务。

如图 1 所示,和传统的开发、编译、部署运行方式不同,使用 Amazon Serverless 计算服务 Lambda,仅需要上传源文件,选择执行环境并执行,便能得到运行结果。在该过程中,服务器部署, runtime 安装、编译、都由 Amazon Serverless 计算平台管理执行。对工程师来说,只需要维护源代码和 Amazon Serverless 执行环境的相关配置即可。于此相关的技术有BaaS(Backend as a Service,后端即服务),是指我们不再编写和/或管理所有服务端组件,把应用中的各个部分完全外包出去,而 Serverless 是一种新的运行代码的托管环境。

Architecture Diagram

图1 Server vs Serverless

为什么需要 Serverless?

对于开发人员而言,Serverless 可以对程序执行细节进行抽象,让业务开发工程师专注于代码本身;对于成本而言,只需按照使用量付费;对于服务性能而言,可以自动响应任何规模的代码执行请求,可以通过调整函数内存大小优化代码执行时间和响应时间。从如图 1 中的对比也可以看出,基于 Serverless 的开发,对于开发人员来说更友好。

使用 Serverless 时为什么需要一个网关?

Serverless 服务的使用也存在一些问题:比如将函数 URL 硬编码到应用程序中;其次应用程序逻辑的授权和身份验证问题也比较繁琐;再者更新云服务提供商的过程也是一个比较艰巨的工程。网关可以天然的解决上述的问题,通过组合的方式,Serverless可以更好的解决上述问题。图 2 描述的是如何用 Amazon Serverless 的相关服务迅速组装一个简单的 Web Service,网关在授权等问题中发挥重要作用。以 Apache APISIX 为例,它为流行的云服务提供商(AWS、Azure)提供 Serverless 框架支持;可以定义一个路由去启用 Serverless 插件,而不是将函数 URL 硬编码到应用程序中;为开发人员提供了热更新函数 URI 的灵活性,更新不同的 FaaS 云服务提供商也没有什么额外的麻烦;此外,这种方法减轻了应用程序逻辑的授权和身份验证问题。

Architecture Diagram

图2 用 Amazon Serverless 的相关服务组装一个 Web Service

Apache APISIX

Apache APISIX 是 Apache 软件基金会下的云原生 API 网关,它兼具动态、实时、高性能等特点,提供了负载均衡、动态上游、灰度发布(金丝雀发布)、服务熔断、身份认证、可观测性等丰富的流量管理功能。

我们可以使用 Apache APISIX 来处理传统的南北向流量,也可以处理服务间的东西向流量。同时,它也支持作为 K8s Ingress Controller 来使用。APISIX 通过插件来扩充生态,目前也内置了各类插件,覆盖了 API 网关的各种领域,如认证鉴权、安全、可观测性、流量管理、多协议接入等,当然,也包含很多 Serverless 相关插件。

AWS Lambda 插件

aws-lambda 插件用于将 AWS Lambda 作为动态上游集成至 APISIX,从而实现将访问指定 URI 的请求代理到 AWS 云。用户使用该插件终止对已配置 URI 的请求,并代表客户端向 AWS Lambda Gateway URI 发起一个新的请求。

这个新请求中携带了之前配置的授权详细信息,包括请求头、请求体和参数(以上参数都是从原始请求中传递的),然后 aws-lambda 插件会将带有响应头、状态码和响应体的响应信息返回给使用 APISIX 发起请求的客户端。该插件支持通过 AWS API key 和 AWS IAM secrets 进行授权。插件细节可参考官方文档 或者 博客

Apache APISIX 与 Serverless 相关插件总结

除了 Amazon Lambda,Apache APISIX 还支持与 Azure Function、Lua 函数和 Apache OpenWhisk 等 Serverless 相关生态的集成,从而提供相应的 Serverless 插件,具体如下。

表 1 Apache APISIX Serverless 相关插件具体信息
插件名称 描述
serverless 用户可以通过 Serverless 插件上传自定义的 Lua 脚本,并根据配置中的 phase 来指定代码运行阶段。例如在 access 阶段对请求进行访问控制,在 header filter,body filter 阶段,对响应头或响应体进行修改,或者在 log 阶段打印个性化日志等。另外,由于 Serverless 插件是热加载的,因此我们不需要重新启动 Apache APISIX 便可立即生效。
azure-functions 用于将 Azure Serverless Function 作为动态上游集成至 APISIX,从而实现将访问指定 URI 的请求代理到 Microsoft Azure 云服务。启用 azure-functions 插件后,该插件会终止对已配置 URI 的请求,并代表客户端向 Azure Functions 发起一个新的请求。该新请求中携带了之前配置的授权详细信息,包括请求头、请求体和参数(以上参数都是从原始请求中传递的)。之后便会通过 azure-functions 插件,将带有响应头、状态码和响应体的信息返回给使用 APISIX 发起请求的客户端。
openwhisk 用于将开源的分布式无服务器平台 Apache OpenWhisk 作为动态上游集成至 APISIX。启用 openwhisk 插件后,该插件会终止对已配置 URI 的请求,并代表客户端向 OpenWhisk 的 API Host 端点发起一个新的请求,然后 openwhisk 插件会将响应信息返回至客户端。
openfunction 用于将开源的分布式无服务器平台 CNCF OpenFunction 作为动态上游集成至 APISIX。启用 openfunction 插件后,该插件会终止对已配置 URI 的请求,并代表客户端向 OpenFunction 的 function 发起一个新的请求,然后 openfunction 插件会将响应信息返回至客户端。

Architecture Diagram

图3 Apache APISIX 与 Serverless 相关产品的关联图

总结

近年来,随着微服务架构的出现,一切都在迁移到云端,不少云服务提供商也在推出 Serverless 相关的产品,基于 Serverless 的开发已经成为一种十分便利的开发模式。

本文首先介绍了 Serverless 是什么,以及为什么需要 Serverless;其次,讲述了一个好的网关在 Serverless 架构下的重要性,而 APISIX 就是这样的一个网关;最后,本文重点介绍了 APISIX 中的 Serverless 类型的插件 aws-lambda,同时列举了 Apache APISIX 其它 Serverless 相关插件。

关于 API7.ai 与 APISIX

API7.ai 支流科技 是一家提供 API 处理和分析的开源基础软件公司,于 2019 年开源了新一代云原生 API 网关 -- APISIX 并捐赠给 Apache 软件基金会。此后,API7.ai 一直积极投入支持 Apache APISIX 的开发、维护和社区运营。与千万贡献者、使用者、支持者一起做出世界级的开源项目,是 API7.ai 努力的目标。

标签:Serverless,插件,请求,Amazon,Apache,APISIX
From: https://www.cnblogs.com/apisix/p/17315930.html

相关文章

  • 分布式场景下,Apache YARN、Google Kubernetes 如何解决资源管理问题?
    所有的资源管理系统都需要解决资源的有效利用、任务的有效响应、调度策略的灵活配置这三个最基本问题。那么在分布式的场景下,YARN和Kubernetes是怎么解决的呢?本篇进行介绍。  — ApacheYARN —YARN全称为(YetAnotherResourceNegotiator),是一个集群共享的调度框架,有良好......
  • APISIX 是怎么保护用户的敏感数据不被泄露的?
    本文以APISIX作为例子,为大家介绍了如何借助GlobalDataEncryption功能来保护敏感数据,确保不会有任何敏感数据进行明文存储,这样即使etcd中所有存储的数据都被盗取,也不会造成敏感数据泄露,从而有效提升了APISIX的安全性。作者刘维,API7.ai技术工程师,ApacheAPISIXContrib......
  • Apache的安装与启动
    1.Apache的安装Linux系统中一般采用Apache作为Web服务器软件,安装软件包为httpd。可以通过以下命令查询系统是否已安装了Apache软件包。[root@localhost~]#yumlistinstalled|grephttpd如果没有安装httpd软件包,则配好yum源,使用yum命令安装。[root@localhost~]#yumi......
  • 从 1 秒到 10 毫秒!在 APISIX 中减少 Prometheus 请求阻塞
    本文介绍了Prometheus插件造成长尾请求现象的原因,以及如何解决这个问题。作者屠正松,ApacheAPISIXPMCMember。原文链接现象在APISIX社区中,曾有部分用户陆续反馈一种神秘现象:部分请求延迟较长。具体表现为:当流量请求进入一个正常部署的APISIX集群时,偶尔会出现部分请......
  • 分布式计算技术(下):Impala、Apache Flink、星环Slipstream
    实时计算的发展历史只有十几年,它与基于数据库的计算模型有本质区别,实时计算是固定的计算任务加上流动的数据,而数据库大多是固定的数据和流动的计算任务,因此实时计算平台对数据抽象、延时性、容错性、数据语义等的要求与数据库明显不同,面向实时计算的数据架构也就发展起来。本篇我......
  • 多库多表场景下使用 Amazon EMR CDC 实时入湖最佳实践
    一、前言CDC(ChangeDataCapture)从广义上讲所有能够捕获变更数据的技术都可以称为CDC,但本篇文章中对CDC的定义限定为以非侵入的方式实时捕获数据库的变更数据。例如:通过解析MySQL数据库的Binlog日志捕获变更数据,而不是通过SQLQuery源表捕获变更数据。Hudi作为最热......
  • WebAssembly 助力云原生:APISIX 如何借助 Wasm 插件实现扩展功能?
    本文将介绍Wasm,以及ApacheAPISIX如何实现Wasm功能。作者朱欣欣,API7.ai技术工程师原文链接什么是WasmWasm是WebAssembly的缩写。WebAssembly/Wasm是一个基于堆栈的虚拟机设计的指令格式。在Wasm未出现之前,浏览器中只能支持运行Javascript语言。当Wasm出现......
  • 为什么 APISIX Ingress 是比 Emissary-ingress 更好的选择?
    本文从可扩展性和服务发现集成等多个维度对比了APISIXIngress与Emissary-ingress的性能。作者:容鑫,API7.ai云原生技术工程师,ApacheAPISIXCommitter。原文链接背景KubernetesIngress是一种API对象,用于定义集群外部流量如何路由到集群内部服务的规则。IngressCont......
  • 景顺长城基于 Apache APISIX 在金融云原生的生产实践
    本文介绍了景顺长城在金融云原生架构演进中选择APISIX作为网关工具的技术细节,同时分享了使用APISIX的实践细节,并对APISIX的未来展望进行了探讨。作者李奕浩,景顺长城信息技术部研发工程师,负责公司网关和业务系统上云等工作。业务背景景顺长城基金管理有限公司成立于200......
  • 全文索引:Apache Lucene(二)
    上一章我们讲述了ApacheLucene实现的核心代码,今天我们来梳理一下Lucene的相关概念以及Lucene索引。工欲善其事,必先利其器。Java常用的全文搜索引擎框架,通常是下面4个框架:  为什么是Lucene呢?原因很简单,hibernatesearch、solr、elasticsearch都是基于lucene......