乐趣区

关于apache:译文|借助-Pulsar-Functions-迁移到无服务应用程序

本文作者是 Axel Sirota,译者为 StreamNative 的刘昱、Jennifer、Sijia。

原文链接 https://streamnative.io/en/bl…。

对于 Apache Pulsar

Apache Pulsar 是 Apache 软件基金会顶级我的项目,是下一代云原生分布式音讯流平台,集音讯、存储、轻量化函数式计算为一体,采纳计算与存储拆散架构设计,反对多租户、长久化存储、多机房跨区域数据复制,具备强一致性、高吞吐、低延时及高可扩展性等流数据存储个性。
GitHub 地址:http://github.com/apache/pulsar/

Pulsar 2.0 版本引入 Pulsar Functions。Pulsar Functions 反对用户轻松地平滑迁徙到无服务应用程序。本文次要介绍 Pulsar Functions 的根本信息以及如何开发 Pulsar Functions。此外,本文还列举了将应用程序迁徙到 Pulsar Functions 时的一些注意事项。

简略场景

假如有这样一个应用场景:咱们经营一家电子商务公司,公司次要业务是解决领取发票。在 Pulsar 中,这一业务蕴含以下三步:

  • 将发票导入到订单 topic;
  • 执行代码,以逗号分隔发票值;
  • 将发票值写入 PostgreSQL。

本文次要介绍第二步。一般来说,咱们执行的代码可能是在 AWS Lambda 中创立的无服务 function,也可能是成熟的微服务。这种办法有很多毛病。

首先,咱们为一段简短代码开发全面服务。因为开发工作比较复杂,所以齐全实现可能须要两周工夫。

其次,因为源数据 schema 始终在变,保护工作也会越来越难。咱们须要对服务和根底 PostgreSQL 表进行残缺的版本控制和重新部署,而这一项工作可能须要至多一天工夫。

此外,在连贯或断开 Pulsar 时,AWS Lambda function 须要进行身份验证。Pulsar 先调用 Lambda function,而后由 Lambda function 本身向 Pulsar 验证身份。因为 Lambda function 引入了非必要的音讯双向传递,因而会影响性能。

引入 Pulsar Functions

Pulsar Functions 是轻量级计算框架,用于解决 topic 之间的数据。Pulsar Functions 在 Pulsar 中运行,因而无需独自部署微服务,节省时间,简化排错。

Pulsar Functions 的复杂性比拟灵便。Pulsar Functions 不仅反对从一个 topic 转换 / 挪动数据到另一个 topic,还反对发送数据到多个 topic、进行简单的路由抉择和批处理申请等。

Pulsar Functions 易于调试,反对在调试模式下部署 function,即能够在连贯到代码并实时执行时进行调试。

开发 Pulsar Functions

应用相熟的编程语言创立 Pulsar Function 和实现 Pulsar Functions 子类一样简略。上面的代码应用 Java 语言编写,Pulsar 也反对 Python 和 Go 语言。

public class SplitFunction implements Function<String, List<String>> {
   @Override
   public List<String> apply(String input) {return Arrays.asList(input.split(","));
   }
}

编译并打包代码后,通过 functions create 命令将 function 部署到 Pulsar 实例中。这一命令的参数为打包的代码和 function 的 input/output topic。

bin/pulsar-admin functions create --jar target/split.jar --classname demo.SplitFunction --input input-topic --output output-topic

开发和部署自定义 Pulsar Function 最多须要两天工夫。部署实现后,Pulsar Functions 能够为用户极大简化工作量,缩短产品公布工夫。Pulsar 反对用户部署任意数量的 Pulsar Function,用于从 topic 获取数据并发送到其余 topic,还能够轻松地将状态音讯写入 Pulsar 日志。Pulsar Functions 不仅简化了 Pulsar 的部署流程,加强了 Pulsar 的灵活性,还拓展了 Pulsar 的性能。

开发残缺的 Pulsar Functions

如何充分利用 Pulsar Functions 丰盛的个性?

开发残缺的 Pulsar Function 和在类中实现 Function 接口一样简略。首先实现 process() 办法,process() 办法提供的语义对象即为连贯到 Pulsar 的网关。通过语义对象,咱们能够拜访记录器、追踪输入、向 topic 发送音讯等。

应用 Pulsar Functions 获取输出数据并提取发票价格的示例代码如下。咱们能够应用语义对象发送这些数据到另一个 output topic(如想在部署 Function 时发送数据到指定的 output topic,只需将其作为 Function 的返回值返回。本示例通过发送数据到另一个 topic 展现如何应用 Pulsar Functions 进行路由,并从 Function 返回 null。)

import org.apache.pulsar.functions.api.Function;
public class RoutingFunction implements Function<String, Void> {
   @Override
   public Void process(String input, Context context) throws Exception {Logger LOG = context.getLogger();
       LOG.info(String.format("Got this input: %s", input));
       Price inputPrice  = new Price(input);
       String topic = String.format("year-%s", inputPrice.getYear());
       context.newOutputMessage(topic, Schema.STRING).value(inputPrice.getPrice()).send();
       // We could also return some object here and it would be sent to the
       // output topic set during function submission
       return null;   
   }
}

比 AWS Lambda 成本低

既然 AWS Lambda 能够实现咱们的需要,为什么咱们决定改用 Pulsar Functions?相比于 AWS Lambda,Pulsar Functions 具备一系列劣势,易于调试、移除了 Pulsar 和 Lambda 之间的双向身份验证等。

上面咱们通过一个常见的应用场景来比照一下应用 AWS Lambda 和 Pulsar Functions 的老本。假如某在线拍卖的实时竞价零碎中,每秒竞价 1 万次(每月 260 亿申请),仅思考申请费用,不思考计算工夫,老本为 5000 美元。假如每个申请须要 100 毫秒和 2048 GB 的虚拟机,则计算成本为 8.6 万美元。这还不包含 AWS 传输数据的费用!

AWS Lambda 是用于无服务 functions 的极佳抉择,但只适宜用于小规模应用场景。应用 Lambda 解决数十亿笔交易的数据管道开销昂扬。

应用 Pulsar Functions 能够极大地节省成本。我刚退出 JAMPP 时,JAMPP 团队只应用 Lambda,一小部分数据管道的老本为每月 3 万余美元。当咱们从 AWS Lambda 迁徙到 Pulsar Functions 后,老本降落到每月几百美元,而这部分收入次要用于在 Amazon EC2 实例上托管 Pulsar。

迁徙到 Pulsar Functions

首先看一下应用 Pulsar Functions 的架构。在示例应用场景中,咱们在 AWS Lambda 中编写了一个 Java function 来解决 topic 之间的数据。Pulsar Functions 在这一架构中取代了 Lambda,简化了开发和部署。

部署 Pulsar Functions 后,咱们须要为数据创立导入和转存脚本。通过 Pulsar IO,用户能够在 Pulsar 内轻松定义内部数据 source/sink,简化了这一过程。Pulsar IO source/sink 自身也是作为 Pulsar Functions 实现的,也就是说,用户能够在 Pulsar 中创立自定义 source/sink,简化调试操作。

迁徙到 Pulsar Functions 共需三步:

  • 迁徙所有解决逻辑到一个或多个 Pulsar Functions
  • 转换 IO 逻辑(应用 Pulsar IO source/sink)
  • 应用日志 topic 解决日志数据

仅需三步就能够齐全迁徙到在 Pulsar 中运行的无服务应用程序。

如果用户目前应用的音讯零碎是 Kafka,该怎么办?不用放心,无需编写代码,应用 Kafka-on-Pulsar 即可从 Kafka 平滑迁徙到 Pulsar。

结语

本文简要介绍了如何应用 Pulsar Functions。除了文中探讨的个性以外,Pulsar Functions 正在新增更多令人眼前一亮的个性。比方,StreamNative 最近发表公布 Pulsar Function Mesh,反对以协调形式部署 Pulsar Function 服务集群。

本文次要介绍了如何开发 Pulsar Functions,如何将应用程序迁徙到在 Pulsar 上运行的无服务应用程序,以及 Pulsar Functions 的易用性与灵活性。

预祝迁徙顺利!

相干浏览

  • 译文 | 深度分析 Pulsar Functions
  • 译文 | 应用 Apache Pulsar Functions 进行简略事件处理
  • 译文 | Pulsar Functions 简要指南:原理、指标与布局

点击“ 浏览原文 ”,获取 Apache Pulsar 硬核干货材料!

退出移动版