使用Knative和Python的构建无服务器事件驱动的应用 - Ron Nagar

栏目: Python · 发布时间: 5年前

内容简介:Knative的一个扩展Knative由以下主要组件构建:在本文中,我们将重点介绍Eventing组件。它为无服务器事件驱动架构提供基础架构,在触发事件时运行容器。Knative Eventing支持不同的事件源(例如GitHub事件,Pub / Sub等),您甚至可以编写自己的自定义

Knative的一个扩展 Kubernetes ,它提供了一套 工具 来部署无服务器的工作量。

Knative由以下主要组件构建:

  1. 构建   - 源到容器的构建编排。
  2. 事件 Eventing  - 管理和交付事件。
  3. 服务   - 请求驱动的计算,可以扩展到零。

在本文中,我们将重点介绍Eventing组件。它为无服务器事件驱动架构提供基础架构,在触发事件时运行容器。Knative Eventing支持不同的事件源(例如GitHub事件,Pub / Sub等),您甚至可以编写自己的自定义 事件源

我们之所以选择Knative而不是其他传统的无服务器平台(Functions,Lambda等),原因如下:

  1. 它由容器驱动,这意味着您可以在每种语言或框架中编写您喜欢的代码,只要您可以从中创建容器。通常,其他无服务器平台将您限制为它们支持的特定运行时环境。
  2. 资源是完全可定制的(CPU,GPU,网络等),只要您的Kubernetes集群配备了您可以使用的相关资源。就像每个Kubernetes部署一样,您必须说明您需要哪些资源。其他无服务器解决方案限制了资源,这些限制对我们来说通常是不行的。
  3. 没有超时限制,因此您可以部署长时间运行的进程(数据分析,图像处理等等)。使用其他无服务器平台无法实现这一点,因为它们通常具有超时限制。
  4. Eventing组件使用 cloudevents 作为发布事件的规范。基本上,它可以帮助我们编写事件源无关的代码。我们只需要了解事件的有效负载,但不必直接与事件源集成或以不同方式解析事件。

然而,它不是所有的玫瑰和蝴蝶,我们还必须提到缺点。Knative仍处于非常早期阶段(截至今日最新版本为0.6),这意味着API可能会在此过程中发生变化,升级可能会破坏您的部署。与其他无服务器解决方案相比,编写所有这些Kubernetes YAML并安装所有内容更加麻烦。

这就是为什么我们将Knative与其自己的集群隔离,并且不要将我们的日常集群与Knative集群混合。我们将相关服务与VPC和负载均衡器连接起来。

Knative Eventing和Python

我们使用Knative的主要用例是在新数据到达系统时运行长CPU限制数据分析过程。作为大多数数据分析任务,我们的数据科学团队使用 Python 编写。不幸的是,Knative Eventing示例是 Go 编写,其中唯一可用于轻松引导Knative Eventing项目的库也是Go。

我们知道我们必须为Python创建一个类似的开源库,以便其他人也可以使用它。经过一些研究并深入研究Go库代码,我们意识到我们需要实现的只是一个HTTP服务器,它监听POST请求并解析cloudevents有效负载。在幕后,Knative Eventing使用Knative Serving,并在一个事件中向Knative Eventing容器发出POST请求。我们很高兴分享我们的开源项目, python-kncloudevents ,用于轻松集成Python和Knative Eventing 

python-kncloudevents的用法非常简单,你需要做的就是编写一个接收cloudevents作为参数的函数。要访问事件数据,您只需调用cloudevent的Data函数即可。现在要在事件触发时运行您的函数,您只需要创建CloudeventsServer实例并运行接受您的函数的start_receiver函数。

<b>import</b> sys
from kncloudevents <b>import</b> CloudeventsServer
<b>import</b> logging

logging.basicConfig(stream=sys.stdout, level=logging.INFO)


def run_event(event):
    <b>try</b>:
        logging.info(event.Data())
    except Exception as e:
        logging.error(f<font>"Unexpected error: {e}"</font><font>)
        raise


client = CloudeventsServer()
</font>

结论

Knative非常适合构建无需资源的工作负载,这需要资源,运行时和持续时间的灵活性。Knative允许构建与依赖项和环境无关的事件驱动架构。

如果您需要运行需要定制环境的基于事件的流程,Knative是您的正确选择。如果您想构建快速简单的功能,那么像Functional或Lambda这样的托管无服务器平台也可能适合您。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Domain-Driven Design

Domain-Driven Design

Eric Evans / Addison-Wesley Professional / 2003-8-30 / USD 74.99

"Eric Evans has written a fantastic book on how you can make the design of your software match your mental model of the problem domain you are addressing. "His book is very compatible with XP. It is n......一起来看看 《Domain-Driven Design》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试