通常情况下,PaaS托管的大部分负载都是无状态应用。但是对于一些依赖数据的特殊应用(比如分布式文件系统、zk、mysql),PaaS也应当提供相应的扩展能力,支持这些应用的托管。本质上讲,PaaS支持不同类型的工作负载托管的核心在策略,类似K8S的controller,这些策略适配了不同工作负载的工作方式。对于有状态应用托管,有两种方式。
Operator
基于K8S的CRD,工作负载的策略以一个Operator的形式实现。这种方式策略的所有逻辑完全实现在PaaS内部,对于不同的有状态应用,PaaS可能需要实现不同的Operator。
回调
策略由业务自身实现,以Server回调接口的形式暴露给PaaS,PaaS实现删除容器时的回调逻辑,负责通知业务当前容器的状态,由业务的策略Server负责自身业务状态的处理(比如数据搬迁),给PaaS返回成功后,PaaS才真正删除容器。这种方式的好处是,回调机制对于有状态应用是完全通用的,且对于大公司来说,内部大部分有状态应用(比如文件系统、数据库)都已经有了自己的管控系统,只需要实现一个旁路的策略Server即可,成本不高。
当然,基于回调的业务逻辑Server如果由PaaS来实现,其实就很类似Operator了。