6. Go Functions 的设计与实现-冉小龙

展开查看详情

1.Go Functions 的设计与实现 冉小龙 2019.06.29

2.目录 Pulsar Function 介绍 Go Function 的设计 Go Function 的实现 Go Function 使用示例 Go Function Debug Pulsar Function Runtime Pulsar Function Worker

3.What is Next? Interactive Queries Multi language clients Pr ng Pulsar IO oc gi Stream & Batch es sa Processing sin s Me g Change Data Capture what is next? Stream Storage Low Latency Cloud Native Storage Storage

4.Pulsar Function protobuf Function Worker

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

6.Pulsar Function 图一 图二

7.Pulsar Function 执行流程 Setup producer 1 Setup consumer Setup LogHandler 2 Handler Message Process Result 3 Close Resource

8.Pulsar Function 实现 plugi 反射 n

9.Go Function 实现 反射 Go 是一门静态类型的语言 反射支持的相对较弱 plugi n 如果注入了一些非法模块,会带来一定的安全隐患,如何防范它们 ? 给系统带来一些不稳定因素。如果模块出现问题,则会导致服务崩溃。 给版本管理带来了一定的困难,特别是在微服务场景下,相同的服务加载 了不同的插件,如何做版本的管理? 社区不成熟

10.Go Function example

11.Go Function example

12.Go Function User Ruler 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)

13.Go Function User Ruler Start() 函数的入参必须是函数类型 用户函数的输入参数可以是 0-2 个 如果有两个参数,第一个必须是 context.Context 如果只有一个输入参数,必须是 context.Context 用户函数的输出参数可以是 0-2 个 如果返回两个参数,第二个参数必须是 error 如果只返回一个参数,必须是 error

14.Go Function Context Logger State Metrics Security / Secrets Schema …

15.Context - Use Case

16.Context - Logger

17.Go Function - Close channel 没有简单易行的方法去检查管道是否没有通过改变它的状态来关闭。 关闭一个已经关闭的管道会触发 panic ,所以,关闭者不知道管道是否关闭仍去 关闭它,这是一个危险的行为。 发送数据到一个关闭的管道会触发 panic, 所以,发送者不知道管道是否关闭仍 去发送消息给它,这是一个危险的行为。 原则:要在 producer 端关闭 channel

18.Pulsar Function CLI

19.CLI - Get

20.CLI - trigger

21.CLI - stats

22.CLI - status

23.Pulsar Function 使用场景 ETL Data Enrichment Data Filtering Dynamic Routing Alerts and Threholds

24.Flexible Runtime Colocate with Broker - Thread & Process Managed Function Workers - Thread & Process External Schedulers - Container Kubernetes

25.Colocate with Brokers

26.Manager Function Workers

27.External Schedulers - Kubernetes

28.Auto load balancing Pulsar Functions use Pulsar’s auto-balancing mechanism on consumer Shared Subscription Load is distributed among function instances (consumers) evenly More function instances provides more processing capability Failover Subscription Load is distributed among function instances (consumers) by partitions The number of function instances is limited by the number of partitions

29.Pulsar Function worker