Serverless Event Streaming With Pulsar Functions by Xiaolong

Google DevFest 2019 BJ

展开查看详情

1.Serverless Event Streaming With Pulsar Functions Xiaolong Ran @wolfstudy 2019/12/08

2.Who am I • 开源项⽬爱好者,Go 语⾔爱好者 • TiDB -> BitMain -> StreamNative • Apache Pulsar committer • Go Functions • pulsar-client-go • pulsarctl • … • https://github.com/wolfstudy

3. ⽬录 Apache Pulsar 简介 Apache Pulsar 架构 Go Function 的设计 Go Function 的实现 Go Function 使⽤示例 Pulsar Function Runtime Pulsar Function Worker

4.What is Apache Pulsar

5. 为什么要“造轮⼦” • 没有系统能够解决遇到的问题和规模 • 多租户 - 百万 Topics - 低延时 - 持久化 - 跨地域复制 • 已有的系统存在的问题 • 分区模型紧耦合(存储和计算)- 不是云原⽣的设计 • 存储模型过于简单,强依赖⽂件系统 • I/O 不隔离:消费者在清除 backlog 的时候会影响其它⽣产者和消费者 • 运维太痛苦 - 替换机器、服务扩容需要强制 reblance 导致服务对外不可⽤ • 可能出现消息丢失的情况

6.Flexible Messaging

7. Flexible Messaging • One data, different ways to consume • Queuing (aka stateless messaging) • Shared (* RabbitMQ) • Streaming (aka stateful messaging) • Exclusive • Failover (* Kafka) • Key_Shared

8.Multi Tenancy

9.Geo-Replication

10.Cloud-native Architecture 计算存储分离 • 独⽴扩展 • 瞬时失效恢复 • 扩容⽆需数据均衡

11.Pulsar View - Topic

12.Pulsar View - Partition

13.Pulsar View - Segment

14.Event Stream is the right foundation for your data

15.Apache pulsar ⽣态

16.When Event Streaming Meets Serverless

17.Introduce Pulsar Functions

18.Pulsar Functions • A serverless event streaming framework • Lightweight computation • Event - first, Stream - first • Multi languages • Multi runtimes • SDK - less && SDK

19.Pulsar Functions

20.Pulsar Functions

21.Pulsar Functions

22.Pulsar Functions 反射 Plugin

23.Pulsar Functions • Go 是⼀⻔静态类型的语⾔ 反射 • 反射⽀持的相对较弱 • 注⼊⾮法模块,会带来⼀定安全隐患 Plugin • 如果模块出现问题,会导致服务奔溃 • 给版本管理带来了困难 • 社区不成熟

24.Go functions User Rule func () func () error func (input) error func () (output, error) func (input) (output, error) func (context.Context) error func (context.Context, input) error func (context.Context) (output, error) func (context.Context, input) (output, error)

25.Go functions User Rule Start() 函数的⼊参必须是函数类型 ⽤户函数的输⼊参数可以是 0-2 个 如果有两个参数,第⼀个必须是 context.Context 如果只有⼀个输⼊参数,必须是 context.Context ⽤户函数的输出参数可以是 0-2 个 如果返回两个参数,第⼆个参数必须是 error 如果只返回⼀个参数,必须是 error

26.Go functions Context

27.Go functions - Use Case

28.Go functions - Use Case

29.Pulsar Functions - CLI

StreamNative 是一家围绕 Apache Pulsar 和 Apache BookKeeper 打造下一代流数据平台的开源基础软件公司。秉承 Event Streaming 是大数据的未来基石、开源是基础软件的未来这两个理念,专注于开源生态和社区的构建,致力于前沿技术。
关注他