learn-tech/专栏/Serverless进阶实战课/22私有云:赛马时代的Serverless核心引擎谁能胜出?.md
2024-10-16 06:37:41 +08:00

187 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

因收到Google相关通知网站将会择期关闭。相关通知内容
22 私有云赛马时代的Serverless核心引擎谁能胜出
你好,我是静远。
Serverless平台的实现分为两个流派分别为公有云和私有化。前面的几节实战课我们主要基于公有云的Serverless平台来展开从这节课开始我将带你一起了解私有化部署领域的知识。
为什么要做私有化部署呢?相信你回答这个问题的时候一定是有些犹豫的。
我们知道Serverless由云厂商运维并提供服务带来高效率开发的同时也大大降低了成本。但就如我上一节课给你讲到的那样我们享受这种“好处”的同时也失去了对平台的掌控力面临着数据的安全问题。
我的很多私有化客户也是基于这两个核心因素找到我们来共建企业内的Serverless平台。这对于企业的业务团队来说可以同样的享受Serverless带来的价值只是这一层的维护工作由原来的云厂商交到了企业内部的基础平台运维团队。
那么私有化的部署通常是怎么实现的部署的方式都有哪些呢希望这节课能够让你对私有化部署的方法开源引擎的发展现状以及选取一个开源引擎作为Serverless平台底座的方法有一个通盘的了解。
私有化部署的方法有哪些?
当前绝大多数的Serverless平台底座都是基于容器技术来实现的而容器技术在近几年的日趋成熟和盛行也使得云厂商自研的Serverless平台、开源的Serverless引擎在私有化企业的数据中心部署变得相对容易了。
不同的企业,在私有化这里一般有两种做法。
自研一些基础设施团队能力很强的企业一般会选择自己研发。有的企业会基于开源的Serverless引擎做二次开发有的直接基于已有的IAAS和PAAS资源自己研发并配备专业的团队进行升级和维护。
购买还有一些企业会选择ToB的云厂商合作共建基于云厂商售卖的Serverless标品来适配和升级。比如金融银行领域你可以通过一些公布的文稿发现类似中国工商银行、光大银行等公布的招标网站上采用了百度智能云的Serverless FaaS产品来进行私有化部署升级。
目前来看选择“购买”的企业是占大多数的。传统企业和ToB云厂商合作共建传统企业有上云Serverless化的诉求ToB云厂商有丰富的实战经验和技术两者形成合力。
但这并不代表购买方可以一劳永逸不需要掌握Serverless的技术。
一方面你需要提前了解云厂商是基于什么样的Serverless引擎开发的这个是核心。因为云厂商除了自研平台外基本上都是基于开源的Serverless引擎Self-hosted Frameworks来进一步打造和适配的。另一方面你还需要了解整套解决方案是如何围绕这个核心构建起来的。这节课我们先说Serverless引擎的部分。
你可以从CNCF Serverless LandScape了解到引擎和平台的发展情况。左侧的“Hosted Platform托管平台”包括我们提及的AWS、阿里云FC、百度智能云CFC、华为FunctionStage、Azure Functions、腾讯云SCF等企业的Serverless托管平台。而右侧“Installable Platform可安装平台”包括我们平时关注度比较高的Knative、OpenWisk、Fission、OpenFaaS等开源框架。
那么它们具体有什么特点,我们又该如何选择使用呢?
开源引擎现状与选择
我们先来看2020年CNCF的报告感受一下开源Serverless的使用情况
我们可以发现35%的调查对象有使用“installable software”在使用“installable software”中有27%使用Knative、10%使用OpenFaaS、5%使用Kubeless。随着时间的推移现在已经有一些开源平台没能经受得住时间的考验比如Fn、Iron Functions已经逐步退出历史舞台了图中的Kubeless在今年年初也宣布停止维护了。
这里我参考CNCF Serverless LandScape和CNCF调研报告并基于受欢迎程度、稳定贡献、工具和易用性等方面选取了Knative、OpenFaaS、OpenWhisk、Fission这四款开源的平台来跟你介绍。需要说明的是Nuclio也是不错的开源框架但它是专注于数据、I/O和计算密集型的业务处理场景的且自身不考虑缩容至零的问题。所以暂时不去探讨。
OpenWhisk也算元老级的开源Serverless框架了目前代码库也有一定的commit提交但发展速度并不如其他几款在调研图中显示仅有3%的Serverless 用户选择了该款产品远低于Knative和OpenFaaS而且自2020年1月以来到现在它还没有发布过一个新版本。
Knative虽然是2018年发布的开源Serverless产品但发展迅速依托谷歌和Kubernetes的紧密结合短短几年间Github 上Star的总量已经接近1万图中显示已经有27%的Serverless 用户选择了它。目前Knative也成为了CNCF的孵化项目。
OpenFaaS可以说是发展最稳定的一款了到目前仍然有稳定的commit提交并且Star数是所有开源Serverless平台中最高的总量接近3万。调研图显示有10%的用户支持。
Fission在调研报告中虽然仅有2%的用户支持,但它目前仍有稳定的贡献者和版本发布,依然很活跃。
这四个Serverless开源平台我从实现语言、支持的编程语言、贡献人数等12个方面做了概览对比方便你进一步查阅。
开源引擎的不同
从CNCF报告、各个开源Serverless平台的官方总结这些对比项之后你可能很快就能抉择一个开源平台作为自己研究和构建的对象了。但这些数据终究是纸上谈兵我们还可以再深入一点我会从Serverless的核心特征“扩缩容机制”和相关使用限制上给你几点参考建议。
Fission的扩缩容机制及限制
Fission有Pool-based和New Deploy两种执行模式能够支持资源池以及从0到1两种扩容模式官方更是宣称冷启动速度控制在了百毫秒以内这对于一些延迟敏感型场景显然是不错的选择。而它的限制就在于只支持通过CPU指标来控制实例数量这就导致很多Web场景下并不能很好地感知实际的资源用量。
OpenWhisk的扩缩容机制及限制
不同于FissionOpenWhisk的扩缩容更加简单。每次请求到来后会由invoker创建一个业务容器然后进行代码注入执行执行完毕后退出并销毁容器。整个流程并不会产生冗余的资源但如果应对一些高并发场景效果可能并不会那么理想。
正如上面的表格所示它的局限性在于依赖的组件较多不管你是开发者还是使用者都需要有这些工具的储备知识如果你希望做二次开发那要先想一想是不是熟悉Scala否则的话可以考虑其他三个以Go语言为主的开源框架。
Knative的扩缩容机制以及限制
我们之前在扩缩容这节课介绍过Knative KPA。Knative本身的KPA扩缩容逻辑比较复杂除了AutoScaler和Activator这两个Serving组件外还需要向用户Pod注入一个queue-proxy容器以此来进行实时的请求量统计。基于这些组件除了能够实现从0到1、1到N、N到0的扩缩容还能支持在Stable稳定模式和Panic恐慌模式两种模式下的扩缩容算法。
那么它有什么不足呢Knative完全依赖Kubernetes由于发版很快高一点的版本就需要1.22以上的Kubernetes版本但有的企业升级没那么快需要配套支持。除此之外可扩展的网络组件也是一把双刃剑带来便利的同时也需要运维人员提前具备这一方面的知识比如Istio。可以发现它对于企业、技术人员的要求都不低。
OpenFaaS的扩缩容机制以及限制
OpenFaaS Pro完全将扩缩容的发起交给了Prometheus。OpenFaaS通过Prometheus获取到监控的指标再由AlertManager根据配置参数进行扩缩容请求最终让资源达到预期的值。目前OpenFaaS支持rps、capacity和cpu三种扩缩容模式并且可以通过com.openfaas.scale.zero来控制是否可以缩容到0。
然而OpenFaaS依赖Promethues和配置参数控制扩缩容到0的这两个特性也可以算是它的限制。这两个特性导致它完全依赖Promethues的稳定性和负载也默认关闭了缩容至0的功能当然你也可以打开不过会带来一定的冷启动时间。
总得来说目前Knative、OpenWhisk以及OpenFaaS都能够基于请求数量进行动态伸缩而Fission目前只支持通过CPU指标来控制实例数量。相比于Fission和OpenWhiskOpenFaaS与Knative的扩缩容模式就丰富了许多。
如果你的场景比较简单可以快速体验一下OpenWisk如果对性能要求比较高Fission和Knaitve都是不错的选择。它们之间的界限并不是不可逾越的我们在选择的时候可以更灵活机动一些。
你的选择
有了上面这些分析,相信你选择的大方向已经有了,下面我再给你几点技术以外的经验参考:
考虑你公司或者团队的技术栈,如语言、现有的服务治理体系、中间件等;
考虑你的业务性质是专门做数据计算、还是Web服务还是都要兼顾等等
考虑未来趋势结合目前开源框架的成熟度和产品力来衡量看产品的潜力。比如Knative背靠Google和CNCF和Kubernetes紧密结合随着时间的推移未来可期。
购买Serverless产品需要注意什么
最后,我们还可以说说在“购买”这个方式中,作为“甲方”或者“乙方”的你,应该分别具备哪些知识储备。
如果你是甲方一定要有基础技术方面的储备比如一定的云原生技术基础储备包括Docker、Kubernetes、Service Mesh、可观测等具备云原生的思维在Serverless方面了解竞标厂商的产品功能、成功案例和落地规模知道在POC的环节需要验收哪些要点最后也要具备架构思维明确哪些功能点在一期进行哪些在二期进行在合理的架构范围内有节奏地迭代。
具备上面的必要储备后,和产品方交流沟通起来就不会磕磕碰碰了。当然,积极上进的你如果能掌握招标、合同、损益评估和入场等注意事项,就能真正称得上这方面的“老手”了。
如果你是乙方还记得我在思维构建这节课跟你提到的“升级打怪”的路径么你必须达到“王者”阶段达到产品和组件输出的能力并且能够在POC环节胜出。我列了几个要点方便你对照着来看。
技术知识如我之前所说“加入一个云原生Serverless团队在里面打磨一万小时以上扎扎实实搞清楚每个点”只有这样你才有可能解决掉在产品交付过程中遇到的问题。假如你有部署私有化产品的经历你一定理解这句话的含义甲方的环境有时确实不会那么“如你所愿”。
产品思维对于基础服务类产品闭门造车肯定是不行的。你必须要基于一个“标品”来打造一个Serverless产品方案然后基于和甲方的交流找到可适配的架构产品方案。比如在IAM的适配上完全可以独立一个模块单独构建认证鉴权的服务通过配置化的方式来适配不同的企业。通过“独立标品”+“插拔适配”的方式构建产品,才更适合私有化部署。
软技能:甲方通常在尝试新技术落地的时候,自己也没有太多的经验,你需要有足够的耐心来帮助和引导他们交付和落地场景,这样才有后续的“二期”“三期”“周边产品”等再次合作。
其实不管是自研还是二次开发不少企业也借鉴了这些Serverless开源引擎的思想所以研究一款开源产品就相当于研究一个云厂商的服务不同的是云厂商还融入了一些自己专业的技术特性和底座服务。
希望这些我和私有化打交道的心得,能够帮助作为甲方或者乙方的你,也欢迎你在留言区进一步与我探讨。
小结
最后我来小结下今天的内容。私有化部署的选择主要是出于数据安全和平台掌控力两方面的考量。考虑到私有化部署的Serverless平台本身的门槛一般会有“自研”和“购买”两种部署方式。一些基础设施团队能力很强的企业会选择前者一些企业会选择较为方便的后者。
目前来看选择“购买”的企业占比较大。那么假如你是甲方就需要储备适当的云原生知识掌握Serverless的核心要点和架构思维这会让你在沟通和选择合作厂商的时候更加游刃有余。假如你是乙方就要在技术、产品和软技能上面都要过关才有可能获得甲方的认可拿到这一笔单子。
而我们了解私有化部署最关键的途径就是去学习开源的Serverless平台并基于此来构建和实操。因此我们综合了CNCF的调研、热度、贡献度稳定性等多个指标选取了四个开源框架OpenWhisk、OpenFaaS、Fission、Knative来做深入对比。Knative作为后起之秀依托谷歌和CNCF和Kubernetes的紧密结合有“跨平台的函数计算平台”的响亮称号可以说是未来可期。
一直以来,在了解一款产品特性的方面,我的建议都是多多动手实操,再回头看看官网最新的特性。如果再结合课程中的一些思路,找到一条自己学习新框架和新技能的道路,就说明你已经迈入一个新的台阶了。
下节课我们就进入到动手实操的环节以Knative为例看看如何从0到1部署Serverless核心引擎。
思考题
好了,这节课到这里也就结束了,最后我给你留了一个思考题。
针对上述提到的Serverless引擎框架你在研究过程中最关心哪个点呢你有什么新的发现吗
感谢你的阅读,也欢迎你把这节课分享给更多的朋友一起阅读。
补充阅读
链接1OpenWhisk
链接2knative
链接3Fission
链接4OpenFaaS
链接55.8k stars
链接64.6k stars
链接77.2k stars
链接822.1k stars
链接9Serverless Framework
链接10JavaScript、Python、PHP、.NET、Go、Java、Ruby、Swift、二进制
链接11NodeJs、Python3、Ruby、PHP7、Java、Go、.NET、Perl、二进制
链接12支持Go、NodeJs、PHP、Python、Ruby、Java、C#等语言的模板并打包成Docker镜像
链接13https://openwhisk.apache.org/
链接14https://knative.dev/docs/
链接15https://fission.io/
链接16https://www.openfaas.com/