Serverless是近年来云计算领域最热门的方向之一,它让开发者不需要管理服务器,只需要写函数代码就能部署应用。我从2019年开始学习Serverless,踩了很多坑,也总结了一些经验。本文是我的Serverless学习路线分享,包括学习的阶段划分、每个阶段需要掌握的知识点、推荐的学习资源、以及实战项目建议。如果你也想学习Serverless,但是不知道从哪里开始,希望这篇文章能帮你理清思路,少走弯路。
一、我为什么学Serverless
先说说我为什么要学Serverless吧。
我是一个后端开发,平时主要用Java和Python写服务。传统的后端开发流程是这样的:写代码、打包、部署到服务器、配置Nginx、监控运维。这个流程很繁琐,尤其是部署和运维,要花很多时间。而且服务器是一直运行的,即使没有请求也要花钱,资源利用率不高。
2019年的时候,Serverless开始火起来。我了解到Serverless的核心理念是"无服务器",开发者只需要写函数代码,上传到平台,平台会自动处理部署、扩容、运维等事情。而且是按实际使用量付费,没有请求的时候不花钱。这听起来太美好了,于是我就开始学习Serverless。
刚开始学习的时候,我走了很多弯路。一会儿看这个云厂商的文档,一会儿看那个框架的教程,东一榔头西一棒子,学了很久还是云里雾里。后来我慢慢理清了思路,制定了一个系统的学习路线,按照这个路线一步步学习,才真正入门了Serverless。
下面我就把我的学习路线分享给大家,希望能帮想学习Serverless的朋友少走一些弯路。
二、第一阶段:理解概念,建立认知
学习任何新技术,第一步都是理解基本概念,建立认知。Serverless也不例外。
1. 什么是Serverless
首先要搞清楚什么是Serverless。Serverless不是没有服务器,而是开发者不需要关心服务器。服务器还是存在的,只是由云厂商来管理。
Serverless有两个核心概念:FaaS(Function as a Service,函数即服务)和BaaS(Backend as a Service,后端即服务)。
FaaS就是把代码写成函数,上传到云平台,平台会根据请求自动调用函数,自动扩容和缩容。常见的FaaS平台有AWS Lambda、阿里云函数计算、腾讯云SCF、Azure Functions等。
BaaS就是把后端的各种能力做成服务,直接调用就行,不需要自己开发和运维。比如数据库服务、存储服务、消息队列服务、认证服务等。常见的BaaS有Firebase、LeanCloud等。
Serverless = FaaS + BaaS,这是目前比较公认的定义。
2. Serverless的优势和劣势
学习Serverless之前,要搞清楚它的优势和劣势,知道它适合什么场景,不适合什么场景。
优势主要有:
- 免运维:不需要管理服务器,云厂商帮你搞定
- 自动扩缩容:根据请求量自动扩容和缩容,不用担心流量高峰
- 按需付费:按实际调用次数和执行时间付费,没有请求不花钱
- 开发效率高:只需要写业务逻辑,不需要关心基础设施
- 高可用:云厂商提供高可用的基础设施,不需要自己做容灾
劣势主要有:
- 冷启动:函数长时间没有调用之后,再次调用会有冷启动延迟
- 调试困难:本地调试和云端调试都不如传统应用方便
- 厂商绑定:不同云厂商的Serverless平台不兼容,迁移成本高
- 执行时间限制:函数有最大执行时间限制,不适合长任务
- 状态管理困难:函数是无状态的,状态管理比较复杂
了解了这些优势和劣势,你就知道Serverless适合什么场景了。它适合事件驱动、流量波动大、无状态的短任务,比如API接口、数据处理、定时任务、Webhook处理等。不适合长连接、长任务、高并发低延迟的场景。
3. 主流的Serverless平台
目前主流的Serverless平台有:
- AWS Lambda:最早也是最成熟的FaaS平台,生态最完善
- 阿里云函数计算:国内用户最多,文档和教程比较丰富
- 腾讯云SCF:和微信生态结合紧密,做小程序开发很方便
- Azure Functions:微软的Serverless平台,和Azure生态结合好
- Google Cloud Functions:谷歌的Serverless平台
- 开源方案:OpenFaaS、Knative、Kubeless等,可以自己部署
初学者建议选一个国内的云平台,比如阿里云或者腾讯云,因为访问速度快,文档是中文的,社区也比较活跃。等入门之后再了解其他平台。
4. 推荐学习资源
这个阶段推荐的学习资源:
- 各云厂商的官方文档:最权威、最全面的学习资料
- 《Serverless架构》这本书:系统介绍Serverless的概念和架构
- Serverless社区的文章和教程:比如Serverless中文社区、云栖社区等
这个阶段不需要写代码,重点是理解概念,建立对Serverless的整体认知。花一两周时间,把基本概念搞清楚就可以了。
三、第二阶段:动手实践,掌握基础
理解了基本概念之后,就要开始动手实践了。这个阶段的目标是掌握Serverless的基本用法,能独立开发简单的函数。
1. 注册账号,开通服务
首先选一个云平台,注册账号,开通函数计算服务。国内的云平台一般都有免费额度,初学者用免费额度就够了,不需要花钱。
开通服务之后,熟悉一下控制台的界面,看看有哪些功能,怎么创建函数,怎么查看日志,怎么配置触发器。
2. 写第一个Hello World函数
然后写第一个函数,就是经典的Hello World。在控制台创建一个函数,选择运行时(比如Python、Node.js、Java等),写最简单的代码,返回"Hello World"。然后测试调用,看看能不能正常返回。
这一步虽然简单,但是能让你熟悉函数的创建、测试、调用的基本流程。
3. 学习触发器
触发器是Serverless的核心概念之一。函数本身是被动的,需要通过触发器来调用。常见的触发器有:
- HTTP触发器:通过HTTP请求调用函数,可以用来做API接口
- 定时触发器:按照时间规则定时调用函数,可以用来做定时任务
- 对象存储触发器:文件上传到对象存储时触发函数,可以用来做数据处理
- 消息队列触发器:消息队列收到消息时触发函数,可以用来做异步处理
- 数据库触发器:数据库发生变更时触发函数
每种触发器都要试一下,了解它们的用法和适用场景。尤其是HTTP触发器和定时触发器,是最常用的,一定要熟练掌握。
4. 学习函数的配置
函数有很多配置项,比如内存大小、超时时间、环境变量、并发度等。这些配置会影响函数的性能和费用,要了解每个配置的作用和设置方法。
比如内存大小,函数的CPU性能和内存大小是挂钩的,内存越大CPU越强,但是费用也越高。要根据函数的实际需求选择合适的内存大小。
比如超时时间,函数有最大执行时间限制,超过这个时间函数会被强制终止。要根据函数的执行时间设置合适的超时时间。
5. 学习日志和监控
Serverless的调试比较困难,所以日志和监控就非常重要。要学会查看函数的执行日志,通过日志来排查问题。也要学会看监控指标,比如调用次数、执行时间、错误率、并发度等,通过监控来了解函数的运行状况。
云平台一般都提供了日志查询和监控告警的功能,要熟悉这些功能的使用。
6. 推荐学习资源
这个阶段推荐的学习资源:
- 云厂商的快速入门教程:跟着教程一步步做,快速上手
- 官方的最佳实践文档:学习官方推荐的用法和架构
- GitHub上的示例项目:看别人是怎么写的,模仿学习
这个阶段要多动手,不要只看教程。每个功能都要自己试一下,写一些简单的函数,熟悉整个开发流程。花两三周时间,把基本功能都掌握了。
四、第三阶段:深入学习,掌握进阶技能
掌握了基础之后,就要深入学习,掌握一些进阶技能。这个阶段的目标是能开发复杂的Serverless应用。
1. 学习Serverless应用开发框架
直接在控制台写函数只适合简单的场景,复杂的应用需要用开发框架来管理。常见的Serverless开发框架有:
- Serverless Framework:最流行的开源Serverless框架,支持多个云厂商
- 阿里云Funcraft:阿里云的Serverless开发工具
- 腾讯云Serverless Framework:腾讯云的开发工具
- AWS SAM:AWS的Serverless应用模型
用开发框架可以在本地写代码,然后一键部署到云端,还能管理多个函数和相关资源,比在控制台操作方便很多。
选一个你用的云平台对应的框架,学习它的安装、配置、部署、调试等用法。
2. 学习本地调试
Serverless的本地调试是一个难点,但是必须掌握。每次改完代码都部署到云端测试,效率太低了。
开发框架一般都支持本地运行和调试函数,要学会在本地调试函数。可以在本地模拟各种触发器,测试函数的逻辑,确认没问题之后再部署到云端。
对于HTTP触发器的函数,可以在本地启动一个HTTP服务,直接用浏览器或者Postman测试。对于其他触发器的函数,可以用框架提供的本地调用功能来测试。
3. 学习数据库和存储的使用
Serverless函数是无状态的,数据需要存在外部的数据库或者存储中。要学习如何在函数中使用数据库和对象存储。
常见的组合是:函数计算 + 云数据库 + 对象存储。函数处理业务逻辑,数据库存结构化数据,对象存储存文件和图片等非结构化数据。
要学习如何在函数中连接数据库,如何进行CRUD操作,如何管理数据库连接(因为函数是无状态的,数据库连接的管理和传统应用不一样)。也要学习如何上传、下载、删除对象存储中的文件。
4. 学习Serverless的架构设计
Serverless的架构设计和传统应用不一样。传统应用是一个单体服务或者几个微服务,而Serverless应用是由很多个函数组成的,每个函数负责一个小功能。
要学习如何把一个应用拆分成多个函数,如何设计函数之间的调用关系,如何用事件驱动的方式来组织函数。也要学习如何用BaaS服务来减少自己开发的工作量。
常见的Serverless架构模式有:
- 函数组合模式:多个函数组合起来完成一个复杂的业务流程
- 事件驱动模式:通过事件来触发函数,实现解耦
- 后端服务模式:用函数做API后端,前端直接调用
- 数据处理模式:用函数做ETL、数据清洗、数据分析等
5. 学习性能优化
Serverless的性能优化也是一个重要的课题。主要优化方向有:
- 冷启动优化:减少冷启动时间,比如用更小的部署包、选择合适的运行时、保持函数热度等
- 执行时间优化:优化函数代码,减少执行时间,因为执行时间直接影响费用
- 内存优化:选择合适的内存大小,在性能和费用之间找到平衡
- 并发优化:合理设置并发度,避免被限流
这些优化技巧需要在实践中慢慢积累,但是基本的原理要了解。
6. 学习成本优化
Serverless虽然按需付费,看起来很便宜,但是用不好也会花很多钱。要学习如何优化成本。
成本优化的方法有:
- 合理设置内存和超时时间,避免不必要的费用
- 优化代码,减少执行时间
- 用对象存储和CDN来处理静态资源,减少函数的调用次数
- 设置并发限制,防止异常流量导致费用暴增
- 利用云厂商的免费额度和优惠活动
7. 推荐学习资源
这个阶段推荐的学习资源:
- 开发框架的官方文档
- 云厂商的最佳实践和架构白皮书
- Serverless相关的技术博客和公众号
- GitHub上的开源Serverless项目
这个阶段要做一些比较复杂的实战项目,比如用Serverless做一个博客系统、一个待办事项应用、一个图片处理服务等。通过实战来掌握进阶技能。花一两个月时间,基本就能熟练使用Serverless了。
五、第四阶段:工程化和生产级应用
掌握了进阶技能之后,就要学习工程化的东西,能开发和维护生产级的Serverless应用。
1. CI/CD流水线
生产级的应用需要有CI/CD流水线,实现代码提交之后自动测试、自动部署。要学习如何把Serverless应用集成到CI/CD流水线中,比如用Jenkins、GitLab CI、GitHub Actions等。
2. 监控和告警
生产级的应用需要完善的监控和告警。要学习如何监控Serverless应用的各项指标,如何设置告警规则,出了问题能及时发现和处理。
除了云平台自带的监控,还可以用第三方的APM工具来做更详细的监控,比如阿里云的ARMS、Datadog等。
3. 安全
Serverless的安全也很重要。要学习如何保护函数的安全,比如权限控制、输入校验、防止注入攻击、密钥管理等。
Serverless的权限模型和传统应用不一样,要了解如何给函数分配最小权限,如何管理访问密钥,如何防止未授权的调用。
4. 灰度发布和版本管理
生产级的应用需要支持灰度发布和版本管理,出了问题可以快速回滚。要学习如何管理函数的版本和别名,如何做灰度发布,如何平滑地升级应用。
5. 容灾和高可用
虽然云厂商提供了高可用的基础设施,但是应用层面也要做容灾设计。要学习如何做多可用区部署,如何处理云厂商的故障,如何保证应用的高可用。
6. 推荐学习资源
这个阶段推荐的学习资源:
- 云厂商的企业级最佳实践文档
- Serverless相关的技术大会分享
- 大型互联网公司的Serverless实践文章
这个阶段需要在实际项目中积累经验,处理各种生产环境的问题。经过几个生产级项目的历练,你就成为Serverless专家了。
六、我的实战项目建议
学习Serverless,实战非常重要。光看不练是学不会的。下面推荐几个适合初学者的实战项目,由易到难。
项目1:天气查询API
用HTTP触发器做一个天气查询的API。调用第三方的天气API,把结果返回给用户。这个项目很简单,但是能让你熟悉HTTP触发器的用法、如何在函数中调用外部API、如何处理请求和响应。
项目2:定时备份服务
用定时触发器做一个定时备份服务。每天定时把数据库的数据备份到对象存储中。这个项目能让你熟悉定时触发器的用法、如何操作数据库和对象存储、如何处理异常和重试。
项目3:图片处理服务
用对象存储触发器做一个图片处理服务。用户上传图片到对象存储,自动触发函数,对图片进行压缩、加水印、生成缩略图等处理。这个项目能让你熟悉对象存储触发器、图片处理库的用法、异步处理的模式。
项目4:个人博客系统
用Serverless做一个完整的个人博客系统。前端用静态页面存在对象存储上,后端用函数做API,数据存在数据库里。支持文章的增删改查、评论、分类标签等功能。这个项目比较复杂,能让你综合运用Serverless的各种技能,学习Serverless应用的架构设计。
项目5:小程序后端
用Serverless做一个微信小程序的后端。微信小程序和腾讯云SCF结合很紧密,可以很方便地开发。做一个简单的小程序,比如待办事项、记账本、打卡应用等,后端用Serverless实现。这个项目能让你学习Serverless在实际产品中的应用。
七、学习中的常见坑
最后分享一些我在学习Serverless过程中踩过的坑,希望大家能避免。
坑1:以为Serverless能解决所有问题
Serverless不是银弹,它有自己的适用场景。不要什么应用都想用Serverless来做。长连接、长任务、高并发低延迟的场景,Serverless可能并不适合。要根据实际需求选择合适的技术方案。
坑2:忽视冷启动的影响
冷启动是Serverless的一大痛点,尤其是对延迟敏感的应用。在设计应用的时候就要考虑冷启动的影响,采取一些优化措施。不要等上线之后才发现延迟太高,那时候再优化就麻烦了。
坑3:不注意成本控制
Serverless按需付费,看起来很便宜,但是如果代码写得不好,或者遇到异常流量,费用可能会很高。一定要设置预算告警和并发限制,防止费用暴增。也要优化代码,减少不必要的调用和执行时间。
坑4:调试全靠打日志
Serverless的调试确实比较困难,但是也不能全靠打日志。要学会用本地调试工具,在本地把逻辑调通了再部署到云端。打日志只是辅助手段,不是唯一的调试方式。
坑5:厂商绑定太严重
不同云厂商的Serverless平台不兼容,如果深度绑定某个厂商,以后想迁移就很困难。在设计应用的时候,可以适当做一些抽象,把平台相关的代码封装起来,这样以后迁移的时候成本会低一些。当然,完全避免厂商绑定是不可能的,但是可以尽量降低影响。
八、写在最后
Serverless是云计算的未来趋势之一,它代表了一种新的软件开发和部署模式。虽然现在还有一些不足,比如冷启动、调试困难、厂商绑定等,但是这些问题都在逐步解决。Serverless的生态也在越来越完善。
学习Serverless,不仅是学习一项新技术,更是学习一种新的架构思想和开发模式。掌握了Serverless,你会对云计算和分布式系统有更深的理解,也能在未来的技术竞争中占据优势。
我的学习路线不一定适合所有人,但是基本的思路是相通的:先理解概念,再动手实践,然后深入学习,最后在实战中成长。按照这个路线一步步来,你也能掌握Serverless。
希望这篇文章能帮到正在学习或者准备学习Serverless的你。如果有什么问题,欢迎在评论区交流。
用一句话结束本文:"Serverless不是让开发者失业,而是让开发者从繁琐的运维中解放出来,专注于创造价值。"愿每一个开发者都能在Serverless的浪潮中找到自己的位置。
评论(0)
暂无评论,快来抢沙发~
评论功能仅对会员开放,请先登录
登录