使用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这样的托管无服务器平台也可能适合您。


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

查看所有标签

猜你喜欢:

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

数据结构与算法

数据结构与算法

卓滋德克 / 陈曙晖 / 清华大学出版社 / 2003-4-1 / 69.00

本书是一本介绍数据结构与算法的优秀书籍。 本书系统介绍了C++面向对象程序设计、算法复杂度、链表、栈、队列、递归、树、图、排序和查找算法、散列技术、数据压缩算法、内存管理等内容;尤其对递归算法进行了深入剖析。在附录中详细介绍了大O符号与标准模板库:在大多数章中提供了相应的实例分析和程序设计作业。 本书适合作为计算机软件专业或其他相关专业的教科书。对于需要参加计算机考试,......一起来看看 《数据结构与算法》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

URL 编码/解码
URL 编码/解码

URL 编码/解码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具