云原生银行(二)Serverless技术
一、概述
Serverless是Function as a Service的又名,其实并不是代表没有服务器存在,而是开发者不需要关心服务器。Serverless是Amazon AWS早在2014年推出的,随后有了微软的Azure Function,Google GKE Function等。国内的主流云厂商都有类似的产品,例如阿里云的Function Computing、腾讯云函数、华为云函数等。FaaS, 如其名,开发者只需要把自己的代码逻辑封装到一个Java方法或者NodeJS、Python函数里,提供Serverless服务的平台就会给用户部署的函数提供基于http调用的入口。这样用户只需要写业务逻辑,不需要担心服务器的规格、技术、运维,甚至不用考虑网络层就可以提供服务以备使用者调用,用户调用函数再“按次”收费,这对于初创团队来说,尤其是接口在低频调用的时期,可以不选择“按月”租用昂贵的公有云服务器资源。
二、Serverless对于银行的意义
Serverless的主要优势之一:节省服务器成本
比如一个中小银行,用户量20万,日活不到5000,一个均数中度活跃的业务:比如“理财的购买”,因为从“手机银行——查看理财产品——最终购买转化”,经过一系列的漏斗筛选,最终转化不到20%,所以一天的调用量才1000次,平均到每个小时,每秒的TPS可能不会超过50;所以为了每秒50的访问量,如果是非微服务的,很多银行会买4台、十几万一台,大概50万的服务器;如果是微服务的成本可能更高。如果同时有几十、上百个服务在跑,服务器的总体成本会很高;但是如果换成Serverless, 同一个服务器可以混补多个业务,一秒钟可以达到1000TPS, 一台服务器可以支撑10-20个业务,成本节约可见一斑。
但是我认为,Serverless对于银行的价值不在于节省服务器成本,而是在于专注。
如果能把中台、核心抽象到90%不怎么变化,大部分开发工作都在上层开发业务函数,就能极大的提升研发效率。如果底层接口和函数都抽象好,再复杂的Function也只是一个流程,一大堆 if else , 无非是把分布式事务做好。一个简单函数开发一天可以写4-5个;复杂的函数一套一天也可以写2-3个;一个小型的信贷业务也就是20-30个接口,可在10天左右完成开发自测,15天完成上线。
Serverless还可以支持很多的编程语言和框架
主流的Serverless框架都支持但不限于:
1.Java
2.Kotlin
3.Scala
4.Clojure
5.NodeJs
6.Deno
7.CPython
8.PyPy
9.GraalPython
10.C++/C
11.Rust
12.Golang
13.Haskell
14.Dart
15.Ruby
16.Elixir
17.Ballerina
Serverless还可以支持动态的扩容缩容
自动弹性伸缩。如果遇到组织营销活动,提前预测好峰值,提前做好全链路压测,确保Serverless的扩容指标和效率即可。基于GraalVM的Spring Native函数可以做到最低90ms冷启动。
三、Serverless架构简析
上图是Knative的基础架构,源头是基于事件驱动K8s调用,基于K8s eventing,发送到KNative的Broker。Knative在部署的函数里加了Trigger,然后根据订阅关系,推动服务执行。这个过程服务的开发者是无感的,函数的发布、注册是通过KNative存储在etcd的,函数被调用的过程中,KNative根据配置的扩容监控指标,比如是TPS,负载,然后驱动K8s的调度器,动态的去启动更多的函数容器或者动态的进行回收。
四、主流的Serverless开源框架介绍
KNative
KNative 是Kubernetes团队基于K8s的核心能力构建的Serverless框架,对K8s的支持比较好,基于Golang实现,支持多种编程语言,是一个Serverless的建议之选;基于K8s原生的接口和理念实现,成熟度高,而且更方便集成CNCF协会的各种开源组件。
Kubeless
基于K8s实现,比KNative小众,基于K8s原生的接口和理念实现,成熟度中等。
Dapr
Dapr是微软基于Azure Function孵化的Serverless框架,是基于C#实现,支持OAM(Open Application Model),阿里云也在用Dapr,他的原理和Service Mesh的Sidecar类似,在多个高并发量场景有实际用例,成熟度高。
Fission
另一个开源Serverless实现,支持K8s,成熟度中等。
OpenFaaS
另一个开源FaaS项目,支持K8s, Vert.x,成熟度中等。
OpenWisk
Apache OpenWhisk由IBM开源的项目,诞生于K8s大行其道之前,基于Akka作为基于事件驱动的通信,每个函数是被一个Akka Actor进行执行和调度,成熟度中等。
五、Serverless相关技术
GraalVM
Oracle的原生,JIT 虚拟机,性能优于JVM,可以支持更多的语法例如Python, JS, C++等;但是Python等语法和库的支持还不成熟,可以让其他语言拥有近似于JVM的性能。
轻量级容器/VM
对于Serverless来说,越轻量,启动快速的容器或虚机技术,越能提升Serverless的弹性能力和冷启动的函数容器储备量。例如:runC, lightVM和阿里自研的只有一个systemd进程的容器。
Serverless Mesh
基于函数的网格,方便集成函数,提供Serverless的网格化管理能力,例如:Uber就提供了类似的技术。
金融科技知识 周周学