
一、Serverless Components 实现原理
1. Serverless CLI 工具

2. 什么是 Serverless Framework

3. Serverless Framework CLI
Serverless Framework CLI 是一个开源命令行工具,它使用基于事件触发的计算资源,例如腾讯云云函数,AWS Lambda,阿里云函数计算等。Serverless Framework 为开发和部署 Serverless 架构提供脚手架,自动化工作流以及最佳实践。并且它支持通过丰富的插件进行功能扩展。 Serverless Framework 在 Github 有将近 4 万的 Star,在国外比较受欢迎。我们团队最开始也维护了一个自己的 CLI,但是维护成本比较高,想做体验好操作流畅的 CLI 需要投入大量人力精力,Serverless Framework 的 CLI 开发者接受程度比较高,它的协议也开放,所以按照规范接入即可。我们也有用户原来用 Serverless Framework 的命令行工具,从 AWS 迁移到腾讯云云函数环境时候提出了这样的要求。对用户而言底层的云资源操作是屏蔽的,只需要跟Serverless Framework打交道就可以了,希望我们也可以提供对接 Serverless Framework 的方式,这样迁移到腾讯云上比较方便。通过和 Serverless Framework 团队的沟通,他们正好也有意愿打入国内市场,双方的合作也就水到渠成了。Serverless Framework 强于 CLI 整体的体验,但是对腾讯云本身的了解比较少,于是就有了基本的合作模式,北美团队负责 CLI 的开发和整体体验,腾讯云团队负责具体落地到腾讯云的 components 的开发和维护。双方合力,打造 Serverless Framework 在国内的实际落地方案。4. 什么是 Serverless Components
Serverless Components 是 Serverless Framework 的一个解决方案,本身具备快速部署、灵活配置、模板共享的理念。公有云对接 Serverless Framework 后具有了公有云基本的操作能力,但是落地到具体的应用场景就会变得复杂。外部应用不是单纯靠计算资源,也会涉及到静态资源,比如图片、CSS、JS 文件的托管和域名的管理,涉及到底层数据库的管理,也有一些更复杂的应用会涉及到更多的云上的资源。如果开发者要想实现一个应用的管理,则需要通过一系列的操作才能完成一个应用管理和部署,而 Serverless Components 是为了适配各种具体化的应用场景而开发的模板能力。Serverless Components 是 Serverless Framework 推出的最新解决方案,具有基础设施编排能力,开发者通过使用 Serverless Components,可以灵活构建、组合和部署 Serverless 应用。

二 、Serverless Components 全生命流程
Serverless Component 部署流程

三、Components生态建设
1. Serverless Components 生态

2. Serverless Next.js


四、跨国合作:挑战和收获
1. 跨国合作:挑战
从开始合作到现在已经有一年多了,还在不断的磨合中。下面是我总结下来的,我们在一年多的合作里面具体的挑战,与大家一起分享交流。(1)沟通效率
由于时差,语言表达,以及东西方思考方式的差异,导致整体的沟通效率比较低 。(2)开发模式
他们那边是游击队的开发模式,有一些研发发布比较随意,导致了一些线上的问题。而我们其实是有比较严格的开发流程,发布前的验证,发布后的确认,监控告警的体系等等,都有严格的要求。慢慢把我们这一套严格的规范灌输给他们,并要求他们能够按照我们的要求执行。(3)问题定位
由于整套体系比较庞大,大家在前面也看到了,一个完整的 component 的生命流程比较长,步骤比较多,之前也没有统一的日志收集体系和系统,导致出现了用户问题定位花费比较长的时间。(4)目标
两个团队的目标导向不完全一样,我们更注重用户云上资源的安全,对于密钥的使用及权限控制比较严格,而他们更多的考虑的是使用上的便利。(5)人才招聘
整套体系采用 nodejs 开发,涉及到后端、存储、数据库等方方面面,对于开发的要求比较高。另外,需要开发和产品有技术运营的理念,有开放的心态。对于英语也有一定的要求,最好能和北美的开发团队直接对话。(6)运营理念的问题
国内外开发者习惯是有差别的,国外比较多的开发者更容易接受命令行工具,而国内开发者对这套东西不熟悉,需要有一个接受的过程。我们也会做一些妥协,比如后面可以考虑提供界面化的配置方式等。其实对于 Serverless Framework 与 Serverless Components,腾讯云本地化的运营方式和引导上跟国外会有所差别,我们会针对国内开发者做一些贴合开发者习惯的尝试。其实在跨国合作中涉及 CLI 的时候,我们一直很迷惑。虽然我们很想把事情做好,但是对命令行工具的设计和交互设计方面受限于腾讯云的产品,无法突破自己的框架。通过跟北美团队的交流合作,对我们的思路也有很大的开拓,我们跟他们学习到了他们的产品设计理念,在产品设计方面,AWS 和周围的生态确实对于我们是很好的借鉴意义。进行大型开源项目的实现,合作过程中对协作方式也学习到了不少,对于整个后期的开源项目推进,后面再去参加别的开源项目,对于我们而言都是非常宝贵的经验。同时,我们也把严格的软件开发经验输出给北美,并获得了他们的认可,对于我们而言也是比较自豪的一件事。以前软件开发方面北美领先于我们,所有方面我们向他们学习。现在并不完全是这样了,我们比较严格的软件开发规范比他们走得更靠前,把我们的规范输出给他们的同时也得到了北美团队的认可。2. 跨国合作:收获
学习先进的交互设计以及产品设计理念;
以AWS的理念要求我们自己的产品;
大型开源项目的协作方式;
输出严格的软件开发规范,获得认可;
- 同类型开源项目的借鉴和学习,开阔视野。
Q&A
Q:Serverless现阶段适用和适用的场景,腾讯内部有哪些业务在用?A:所有的场景都是可以的。小程序云开发底层云函数的能力就是用我们 Serverless 的实现,腾讯内部还有比如微信支付、微信读书、腾讯视频、腾讯课堂有不少场景在用 Serverless 的服务。Q:部署而言Serverless相对TKE有什么优势和劣势?A:TKE 本身是需要自己管理的,但是 Serverless 在计算资源方面完全不需要自己去管理,我们有一个完全的动态弹性伸缩能力,会根据访问的请求量去做自动的伸缩,基本上省去了运营的需要。Q:监控方面有什么成熟组件的接入?A:正常的外部应用都是可以接入的,和虚拟机、容器等计算资源使用的方式相同。我们平台也提供了一些基础的监控和日志能力,另一方面,也在联合腾讯云的监控团队做了自定义监控组件上报能力的接入,可以在代码里面自定义的上报到腾讯云监控,自定义监控平台可以看到监控的数据。Q:Serverless对业务较复杂的大型项目是否适合?A:肯定适合,比如微信支付、微信读书、腾讯视频、腾讯课堂都有不少场景在用Serverless的服务。Q:稳定性保障的情况如何?A:Serverless 是基于腾讯云整套体系来建设的,稳定性方面也是经过了大规模的压测,有可靠的保障。比较大型的项目提前跟架构师沟通,来做资源的预留或者是资源等级的提升Q:学习路线是什么?A:部署自己的业务到 Serverless 服务上面来,可以在实践中不断的熟悉。还可以加入我们的微信或者qq群,和大量的开发者一起学习和探讨,这样在不断的讨论和学习过程中可以得到不断的成长。有使用上的疑问或者问题也可以直接和我们的开发或者架构师沟通。Q:冷启动支持需要有低延时的应用吗?A:如果对冷启动比较敏感的业务,可以通过预置并发来应对冷启动的问题,设置了预置并发后,服务保留一定的最小资源量,这些资源量长时间存在,更大的并发到来时再通过自动伸缩去拉起,就可以保证服务既可以解决低延时的问题也可以应对大请求的流量Q:如果部署在腾讯云的Serverless服务受到DDoS攻击怎么收费?A:用户可以设置并发的上限,更多的请求自动帮着挡住,不会把这些流量放进来,实际消费用到消耗的 Serverless 请求才会收费,其他的挡在控制并发外的请求我们不会收费。Q:平台具体实施中如何避开Serverless的劣势?A:关于 Serverless 的劣势,一是冷启动,二是开发习惯的一些改变,这些劣势可以通过一些手段避开。冷启动的问题可以通过预置并发等高阶能力解决,web 场景用 Serverless Components 的能力就可以帮助抹平中间的差异Q:企业应该如何设置Serverless Components?A:要看具体的应用场景,腾讯内部的团队在使用上也有各种差别,主要还是依赖具体的应用场景和需求。Q:Java这种启动慢的语言,未来可以在Serverless上应用吗?A:其实国内 java 开发者比较多,我觉得这是非常有潜力的发展方向,我们也在考虑启动比较慢的 java 应用如何部署到 SCF 上面,这是我们努力的一个方向。
讲师简介

文章推荐
重构实践:基于腾讯云Elasticsearch搭建QQ邮箱全文检索
