内容简介:Knative的一个扩展Knative由以下主要组件构建:在本文中,我们将重点介绍Eventing组件。它为无服务器事件驱动架构提供基础架构,在触发事件时运行容器。Knative Eventing支持不同的事件源(例如GitHub事件,Pub / Sub等),您甚至可以编写自己的自定义
Knative的一个扩展 Kubernetes ,它提供了一套 工具 来部署无服务器的工作量。
Knative由以下主要组件构建:
在本文中,我们将重点介绍Eventing组件。它为无服务器事件驱动架构提供基础架构,在触发事件时运行容器。Knative Eventing支持不同的事件源(例如GitHub事件,Pub / Sub等),您甚至可以编写自己的自定义 事件源 。
我们之所以选择Knative而不是其他传统的无服务器平台(Functions,Lambda等),原因如下:
- 它由容器驱动,这意味着您可以在每种语言或框架中编写您喜欢的代码,只要您可以从中创建容器。通常,其他无服务器平台将您限制为它们支持的特定运行时环境。
- 资源是完全可定制的(CPU,GPU,网络等),只要您的Kubernetes集群配备了您可以使用的相关资源。就像每个Kubernetes部署一样,您必须说明您需要哪些资源。其他无服务器解决方案限制了资源,这些限制对我们来说通常是不行的。
- 没有超时限制,因此您可以部署长时间运行的进程(数据分析,图像处理等等)。使用其他无服务器平台无法实现这一点,因为它们通常具有超时限制。
- 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这样的托管无服务器平台也可能适合您。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 领域驱动设计,构建简单的新闻系统,20分钟够吗?
- 基于 Laravel + Vue 构建 API 驱动的 LBS 应用系列教程(九) —— 构建 Vuex 模块
- 基于 Laravel + Vue 构建 API 驱动的 LBS 应用系列教程(八) —— 通过 Axios 库构建 API 请求
- [译] 在 STICORP 使用 Apache Pulsar 构建数据驱动的应用程序
- Spring Cloud构建微服务架构:消息驱动的微服务(核心概念)【Dalston版】
- Spring Cloud构建微服务架构:消息驱动的微服务(消费组)【Dalston版】
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。