IMWeb 团队隶属腾讯公司,是国内最专业的前端团队之一。前端
IMWeb 团队专一前端领域多年,负责过 QQ 资料、QQ 注册、QQ 群等亿级业务。目前聚焦于在线教育领域,精心打磨 腾讯课堂、企鹅辅导及 ABCmouse 三大产品。node
学习成就梦想,咱们但愿能用技术改变教育,改变世界。nginx
前言:现在的 Serverless 能够说是一大有潜力的新技术方向,尤为在当下上云的热潮中,Serverless 因其免运维、自动扩容、支持多种编程语言等优点,对前端来讲,是一大提高服务开发、维护效率的利器也是可尝试全栈发展的方向,但也由于其新,对落地到团队开发中,结合团队开发流也是遇到了一些挑战,本文将分享 IMWEB 团队对 Serverless 的实践方案git
在过去1、两年,咱们团队在多个服务项目中尝试使用 serverless,腾讯云 Serverless 提供了一站式服务,经过使用该服务,前端可独立完成接口服务开发,对前端我的而言可往全栈发展,也所以可缓解团队后台人力紧张问题web
在开发 Serverless 云函数的过程当中,咱们也遇到了对比传统服务,云函数开发的一些挑战点编程
前端传统项目的开发流模式相对已经比较成熟,经过 git 协同管理代码, 再经过 CI 来规范项目的部署流程,整个工做流能够查看、回滚代码,部署也作到了自动化安全
再来看云函数的开发特色:less
以上是最基础的开发云函数三个基础运维
而云函数的建立、更新有两种方式:编程语言
考虑团队的协做,第二种方式经过调用 SDK 的方式因其灵活更适合定制为团队规范
总结下来能够看到云函数开发的三个特性:
在初期团队探索尝试云函数开发时,对比传统项目的开发流,云函数的开发步骤更多,也暴露出了一些缺点:
首先有不小的学习成本,像云函数配置文件,云函数官网界面操做学习成本,实际使用时,因为云函数网关 API 连接过长、域名限制等,须要配置 nginx,用特定域名访问云函数网关 API,由于多数前端对 nginx 部署,致使有了 nginx 学习成本
由于云函数是部署在云端的,Serverless 有其独特的环境,context、event 等,有别于 NODE 服务的请求体等,本地要彻底模拟 serverless 请求比较困难,致使开发想要调试定位问题时,只能先将代码部署到 serverless 上,这里就须要等待部署了,因为 serverless 是外网的,部署时间就更长了
因云函数独立的帐号管理,没有 git 进行管理,致使没法追踪代码记录,甚至任何有权限的人建立同名函数进行部署都会致使函数莫名被覆盖,同理云函数网关 API 也能够随意更改指向其它云函数
总结下来,在团队协做 SCF 开发的时候,遇到的挑战点以下:
总结上面的云函数在团队协做中遇到的一些问题,对应地提出解决方案:
对于独立云函数帐号,每一个开发在上手开发前都须要单独申请,同时还有开通各类权限,快点半天,慢点一两天,针对这个问题,考虑使用团队公共帐号进行统一云函数管理,工具使用公共帐号进行云函数部署、更新,免去开发的学习成本、帐号上手成本
对于云函数独立的管理方式,为了能惟一追踪云函数,保留了原有的 git 管理项目代码,制定一系列规范,将 git 项目与云函数惟一关联,保证云函数惟一不可覆盖
为提供云函数的开发流,针对云函数的特色,使用云函数命名空间的概念来隔离云函数,同时限制测试环境的网关服务只容许内网访问,保证业务安全
制定云函数名、对应网关服务 API 名、环境命名空间的命名规范,以达到命名空间、函数名、网关服务 API 能一一对应,可经过其一推导其二,如知道函数名,可知其访问 API 是什么,对应环境命名空间是什么
在第一项制定了规范以后,要让规范落地,就须要使用工具来辅助,IMWEB 团队自研了 CLI 工具 -- IMFLOW, 提供 SCF 团队开发流实践方案,经过工具的方式提高 SCF 研发效率; 诸如建立帐号、申请权限、建立云函数、开发云函数调试、云函数网关 API 关联、函数隔离等等,经过 CLI 工具, 输入命令便可完成。
使用了 CLI 工具来辅助以后,对比团队过往的开发模式,经过 CLI 可达到 2 分钟上手进入开发
经过同构 + 构建的方式,保留传统服务开发体验,工具封装屏蔽了云函数文件,开发者开发时可同以往同样
云函数的真实运行环境相对复杂,如果遇到了涉及云函数环境调试的问题,须要真实调试云函数,此时本地便可完成调试,工具封装了一系列操做,如实时调试、监听文件变动等,实时部署,实现一键定位调试云函数
云函数的部署是走的外网部署,而云函数的部署时间影响到了云函数的发布时间,甚至在作本地实时调试云函数时,影响了云函数的调试效率,为了极致优化云函数部署时间,利用了云函数的 layer 功能、项目的 node_module 变更概率较小、同时代码包大小会影响部署时间这些特色,对云函数项目部署进行了拆分,当 node_modules 没有变更时无需部署 node_modules,进而减小了了部署时间
在作了部署优化后,查看项目的部署时间,大部分时间 35s 便可完成函数部署
在质量保证方面,主要是经过 CI | CD 规范部署流程,制定网关服务规范来隔离云函数和下降网关配置成本。
限制测试环境网关服务为内网可访问。
另外,为了保证云函数的运行稳定,避免由于云函数的冷启动致使云函数访问失败,即对云函数的容灾处理,作了一层 STKE 的容灾,经过代码同构的方式,利用工具构建打包,完成一套代码实现既可部署 serverless ,也能够部署 STKE, 配合网关的处理,完成云函数的降级容灾
至此,感谢阅读。在探索云函数的开发之路中,感谢腾讯云 Serverless 团队的支持,但愿 Serverless 能够越作越好!
当即体验腾讯云 Serverless Demo,领取 Serverless 新用户礼包 👉 serverless/start
欢迎访问:Serverless 中文网!