本文是从项目工程角度来讲解的,技术角度请参看另一个文章《真实项目代码教你四步扔了传统服务器,让你优雅使用 Serverless 做全栈开发》(https://zhuanlan.zhihu.com/p/493447018)
本文汇总了我的多个 Serverless 的全栈项目实际开发的经验,主要针对中小型项目。可以直接使用我的经验,或者根据实际情况再做调整。
项目管理的艺术体现在如何在限定条件下发挥优势、规避劣势,因此我们需要先确定中小项目里 Serverless 的优劣势是什么。
Serverless 的优势:
函数的独占配额设置页面
WEB 函数:在我看来“WEB 函数”是为了扩展云函数的市场占有率而硬搞出来东西,甚至在开始的时候,云函数根本就没有这个“WEB 函数”,是最近一两年才有的。
厦门量潮科技有限公司的创始人兼 CEO 张果(知乎iGuo)也提到“WEB函数”其实就是一种妥协。
WEB 函数是将整个项目集合在一个云函数里面进行部署, 这会让我们无法发挥 Serverless 的“接口级管理”和“安全”两大优势,丧失了 Serverless 最大的特性,而仅得到了“框架支持”这个功能,是非常不划算的。其实框架支持在 Serverless 中其实对中小项目来说并不重要,甚至是可有可无,详见下面说明。
部署方式的选择:
代码部署就是直接将代码部署到云上。镜像部署是将项目在本地制作成镜像后上传到腾讯云的“容器镜像服务”,再推送到云函数中。
其实腾讯云内置的各项扩展已经满足大部分的项目技术需求了,部分没有直接内置的也可以自己通过第三方包直接实现,除了要求很复杂的项目外,代码部署已经满足大多数项目的需求了。
“代码部署”的方式让云上和本地保持了高度一致性,甚至云上问题本地可以快速、简单的还原,同时部署操作简单、维护便捷、速度快、性能好、本地或云上调试方便。
因此建议:尽量在“代码部署”确实不能满足项目需求的时候才使用“镜像部署”。
我认为:Serverless应用的极致体验是本地 hello world 式开发,就等同于项目开发。
以 PHP 为例,中小项目使用 Serverless,传统的框架很可能是拖后腿的,是不是觉得很怪异?项目采用框架的目的是为了在工程角度上,更高效、更便捷、更高性能地对项目进行开发和维护。之所以需要框架是因为相对于服务器开发而言,本地程序的开发考虑事情比较少,比如不太需要顾虑性能、不需要考虑大并发等。框架帮我们做了很多这方面工作,以帮助我们解决线上项目的需求。但是在 Serverless 中,对于普通项目来说,框架已经失去了大部分的价值和意义。
Serverless 技术框架说明:
要想充分发挥 Serverless 的优势则必须采用多函数部署,即微服务架构模式。Serverless 最终、最好的归宿一定是微服务架构模式,现在的各传统框架只是没有原生框架前的临时过渡。
传统微服务框架一般是针对大项目,有着很高的学习和入手成本。中小项目的微服务其实异常简单,我们并不真的采用微服务框架,而是像写本地 hello world 一样开发项目,部署时一个API 接口一个云函数。
我们要微服务的好处,不要他的麻烦。因此我们应该采用的模式是:传统架构+传统开发+微服务式部署。
最简单的方式就是采用简单的框架,然后将每个和客户端交互的 API 部署成单独的函数。一个高效的 Serverless 开发框架,必须要支持本地单元测试,并且单元测试的效果必须等同于部署后的执行效果。因为不方便测试的框架会让开发者偷懒,等待功能部署后再测试,这容易造成很大的返工问题。单元测试的实现逻辑可以参考我上个文章。
因此在我看来,对于中小项目来说,当不用框架不影响团队协作和效率的时候,就不需要上框架了(传统框架对云函数并不太匹配),或者自己写个简单的共性项目结构或框架即可。以 API 接口为单位进行部署,部署完毕后直接就形成了微服务。
开发时只需要特别注意全项目不存在 session,各个 API 接口执行时是互相物理隔离,数据不互通的。
我的项目采用的框架是针对 Serverless 的自研框架,已经使用了多个项目。该框架较好的利用了云函数的各项特性的同时,不但没有增加开发难度,反而降低了,低到我都感觉有点 LOW。如图:
项目非敏感部分的截图
第四步:项目分工进度安排
Serverless 的项目管理中,任务的分工不能简单的按照传统的功能模块来分工,而是以 API 为单位指定责任人,并进行工作量评估,测试也以 API 为单位。
若项目涉及协作,完整的流程建议:
当前 Serverless 的部署基本就是三种:管理后台、Serverless Framework CLI 和 SDK。
管理后台:你得打开网页,你得给成员账号密码,你得登陆,可能多个人都同时需要,就是两个字“麻烦”。 Serverless Framework CLI:需要 yaml 配置文件,需要你自己修改配置,配置错了可能把你的项目就冲了,需要你给 key,要不搞那种什么二维码扫码,这真的是中国特色,很是想吐槽。我一个重度使用者偶尔也会配错,还会把已有配置给冲了,为此我差点砸了桌子。 SDK:别想啦,你为了部署会自己研究 SDK 吗?一个触发器可能需要 2 个产品的 SDK 配合才可以。因为我是腾讯云云函数的 devops 开发者,所以我是 SDK 重度使用者,但是我不认为一个单独的项目开发人员会搞这东西!浪费的时间还不够雇个人专门给你部署呢!
项目中使用微服务模式部署,可能会有上百个 API ,也就是上百个云函数,最多的时候我一个项目部署了近 300 个云函数,如果 CLI 来部署,是不是得折腾 300 个 yaml,如果中间要更新某个函数代码,我还得配置更新代码的 yaml,如果要同时更新多个函数代码呢?这三百个你还不能出错,这么一想,CLI 对我们小项目还是很尴尬的。
那么CLI 的优势是什么呢?他可以跟 CI 进行完美整合,通过 CI 来实现项目的自动部署,因此大型项目用这个用的很嗨,但是小项目来说,单元测试都不写,你还跟我说 CI ?
所以整体下来,是不是感觉中小项目在部署这个工作上会碰到很大的问题。
我的解决方案是自己搞了一个 GUI 部署工具,一键更新(秒级部署、更新函数代码),还隐式做了项目管理工作的引导功能。差不多2个月后,工具会开源给大家免费用。这个是我使用 Serverless 做全栈开发的效率超过传统模式的一个屠龙刀。
秒级部署、更新一个云函数
作者:Sheldor,知乎账号:小助君,欢迎关注,了解更多关于 Serverless 的实践经验。
了解更多解决方案欢迎扫描下方二维码咨询
如您对产品有任何疑问 🤔️ 或建议📃 ,欢迎下方留言交流。
本文分享自 ServerlessCloudNative 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!