September 21, 2024
企业应用软件需要满足快速变化的业务需求,有很高的设计复杂度。 面对海量用户和性能高要求,逐步使用了微服务、容器化运行环境。
随着软件架构设计不断演进,微服务响应式访问方式被广泛采用,提升了组件间协作效率。 同时,基于领域驱动,面向事件的设计方法也越来越流行。
很多企业的业务各个部门间是通过流程(工单)的方式来协作的,和事件驱动设计理念一致。 在云原生环境中,可以运用serverless无服务器,配合服务组件,很好的承载业务功能。 目前相关技术已经完善成熟,利用主流技术编写业务功能函数,通过容器平台进行部署运维,也可以通过适配器无障碍的部署在公有云中。
下面罗列演讲提纲,如果有需要进一步了解技术细节和案例,请和我们联系。
Serverless市场容量和增长估算
云原生Serverless优势
- 各种主流语言实现
- 启动快,可0实例化
- 采用K8s+容器,价格低廉(和虚拟机+操作系统+开发平台+应用组合相比)
公有云Serverless
主流公有云特点矩阵
- AWS Lambda
- Azure Functions
- GCP Functions
AWS Lambda特性
- 重点特性
- 执行环境
- SnapStart快速启动
- 两种Deployment方式
- zip
- 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
- 通过Annotation定义路由,将访问请求导入对应方法中
- Route/Function描述方式
Java 函数能力
- Predicate test
- Supplier get
- Consumer accept
- Function apply
CompletableFuture 异步执行
- thenRun, thenApply, thenCompose, runAsync
- Excutor ForkJoin线程池
Reactive
- 迭代方式
- Java Iterable
- RxJava Observable
- 返回值,异步响应处理
- RxJava/React/Mutiny
- 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
业务执行
- Java虚拟机,单体应用,内部逻辑模块化
- Executor线程池,进行调度
- 虚拟线程提升效率
- 微服务
- SpringBoot或Vertx
- 服务治理
- Serverless
- 在容器中执行业务,通过K8s等进行任务管理,多节点进行调度
- 云计算中业务环境可以根据业务场景进行优化
Pipeline & Workflow
串接业务函数
- 业务流BPM(BPMN)
- 集成流ESB(EIP, Camel DSL)
- 流式数据处理(Flink)
- 批式数据处理(Spark)
- 构建流CICD(Jenkins Pipleline DSL)
架构逻辑统一
- 部署方式:单体、微服务、云原生
- 思维统一
- 效率性能考虑
- 跨进程可以为经典同步操作
- 设计原则,考虑状态信息存放方式,数据流不断向前端推送
大型企业案例
同样的业务逻辑代码,经过封装后运行在
- 单体,应用服务器部署
- 微服务,SpringCloud管理
- 容器,K8S开发部署
演讲内容摘要和PPT见CSDI Summit网站链接。