CSDI Summit技术大会 Serverless 主题演讲

September 21, 2024

企业应用软件需要满足快速变化的业务需求,有很高的设计复杂度。 面对海量用户和性能高要求,逐步使用了微服务、容器化运行环境。

随着软件架构设计不断演进,微服务响应式访问方式被广泛采用,提升了组件间协作效率。 同时,基于领域驱动,面向事件的设计方法也越来越流行。

很多企业的业务各个部门间是通过流程(工单)的方式来协作的,和事件驱动设计理念一致。 在云原生环境中,可以运用serverless无服务器,配合服务组件,很好的承载业务功能。 目前相关技术已经完善成熟,利用主流技术编写业务功能函数,通过容器平台进行部署运维,也可以通过适配器无障碍的部署在公有云中。

下面罗列演讲提纲,如果有需要进一步了解技术细节和案例,请和我们联系。

Serverless市场容量和增长估算

Serverless市场份额

云原生Serverless优势

  • 各种主流语言实现
  • 启动快,可0实例化
  • 采用K8s+容器,价格低廉(和虚拟机+操作系统+开发平台+应用组合相比)

公有云Serverless

主流公有云特点矩阵

  • AWS Lambda
  • Azure Functions
  • GCP Functions

AWS Lambda特性

  • 重点特性
  1. 执行环境
  2. SnapStart快速启动
  • 两种Deployment方式
  1. zip
  2. container image

Knative

K8s 推荐的Serverless方案

三大功能:

  • Serving
  • Eventing
  • Function

Knative Function

  • Function templates
  • Python / Node.js / TypeScript / Go / Rust
  • SpringBoot / Quarkus

Java开发Serverless

  • SpringCloudFuncton - Function
  • Quarkus - Funqy

函数编程思考

  • C 方法/函数
  • Java 方法 / Java8 以后函数
  • 线程,当前线程 / 另起线程
  • 内存,参数传引用,压栈,函数体内不可更改
  • 返回值,大量数据

OOP,函数语言级别管理函数

  • 多个函数通过对象封装,成员变量共享
  • 接口,虚拟指针机制,利用语言能力调用实例的相应方法
  • JaxRS/SpringMVC
  1. 通过Annotation定义路由,将访问请求导入对应方法中
  2. Route/Function描述方式

Java 函数能力

  • Predicate test
  • Supplier get
  • Consumer accept
  • Function apply

CompletableFuture 异步执行

  • thenRun, thenApply, thenCompose, runAsync
  • Excutor ForkJoin线程池

Reactive

  • 迭代方式
  1. Java Iterable
  2. RxJava Observable
  • 返回值,异步响应处理
  1. RxJava/React/Mutiny
  2. Single/Multi

函数自主性

  • 具有自主线程可以执行操作
  • 运行在独立进程及远程节点上
  • 方法调用,发消息到收件箱,命令式或者事件

架构思考

  • 同步,跨进程,阻塞和效率低下
  • 不分布对象(PEAA)
  • 异步响应式,进程内、外、远程节点,几种调用方式统一

分布式计算

远程服务,独立运行完成后通过Socket陆续返回结果

  • RPC,Idl定义接口,二进制数据传输
  • Rest微服务,通过HTTP协议,执行资源的处理操作。目前最常见的信息获取方式。另外有Graphql
  • 消息发送,处理,返回。有生产者,消费者,Broker等角色
  • Serverless,云原生运行环境,实例可缩放至0个,各种语言编程实现

EDA编程模式

  • 进程内,Spring/CDI等都支持Event接收处理
  • 微服务消息处理机制,SpringCloudStream,MP Reactive Messaging
  • Serverless,Eventing,路由机制,Trigger

DDD 落地方式

  • 聚合根,微服务内对象内聚,跨进程数据复制
  • 领域事件,服务接收事件并进行响应,业务处理
  • 事件Store,仓库存放事件,可进行重放
  • 事件Bus,传输事件信息

请求响应实现

  • Java DOP编程方式,Switch和Instance语句强化,Record包装数据
  • 面向对象方法处理请求,SpringMVC路由方式
  • SpringGateway
  • Knative Eventing

业务执行

  1. Java虚拟机,单体应用,内部逻辑模块化
  • Executor线程池,进行调度
  • 虚拟线程提升效率
  1. 微服务
  • SpringBoot或Vertx
  • 服务治理
  1. Serverless
  • 在容器中执行业务,通过K8s等进行任务管理,多节点进行调度
  • 云计算中业务环境可以根据业务场景进行优化

Pipeline & Workflow

串接业务函数

  • 业务流BPM(BPMN)
  • 集成流ESB(EIP, Camel DSL)
  • 流式数据处理(Flink)
  • 批式数据处理(Spark)
  • 构建流CICD(Jenkins Pipleline DSL)

架构逻辑统一

  • 部署方式:单体、微服务、云原生
  • 思维统一
  • 效率性能考虑
  • 跨进程可以为经典同步操作
  • 设计原则,考虑状态信息存放方式,数据流不断向前端推送

大型企业案例

同样的业务逻辑代码,经过封装后运行在

  • 单体,应用服务器部署
  • 微服务,SpringCloud管理
  • 容器,K8S开发部署

演讲内容摘要和PPT见CSDI Summit网站链接