欢迎加入 Spring cloud 交流群: 617143034
简介
本博客站点已全量迁移至 DevDengChao 的博客 https://blog.dengchao.fun , 后续的新内容将优先在自建博客站进行发布, 欢迎大家访问.
大约在 2020 年年初, 公司后台接入了一个第三方服务, 在稳定运行了一段时间后, 己方服务突然出现大规模的不可用, 客户端访问超时.
基于 ECS 上挂载的监控 Agent 提供的信息推断, 可能是由于用户激增造成的, 于是便手动采购 ECS 实例, 部署应用以应对压力.
起初能有效的缓解服务器压力, 但后来异常越发频繁, 于是开始考虑弹性伸缩与 Serverless 方案.
在一番对比后, 决定采纳操作简单的应用引擎 SAE 紧急应对此次事故.
在简单的调试后, 顺利的将原本部署在 ECS 上的 Spring 应用迁移到了 SAE 中.
相比之前手动采购 ECS, 配置密钥, 安装 JRE, 推送 Jar 包, 命令行启动应用, SAE 操作之简单让我仿佛从石器时代一步跨进电气时代.
后来基于 SAE 的监控发现, 原来是由于第三方服务响应时间不稳定导致的此次故障, 最长 10s 的响应时长占用了 ECS 上大量的资源, 后台应用控制好超时时间后故障解除.
服务稳定后, 我开始深入的了解 Serverless, 并在了解的过程中向阿里云提出了一些建议与缺陷反馈.
在充分的了解 SAE 与 FC 后, 总结了如下对比项.
以下内容为个人观点, 仅作参考, 也为各位想尝鲜的同学简单的指个路.
对比
对比项 | SAE | FC | SAE优劣 | FC 优劣 |
---|---|---|---|---|
最低规格 | 0.5core 1g | 0.0625core 128mb | 优势: 支持更低的实例规格 | |
最高规格 | 32core 128g | 8core 16g | 优势: 支持更高的实例规格 | |
部署方式 | JAR/WAR/镜像 | 文件夹/压缩包 | 优势: 构建工具产物可直接用于部署 | 优势: 支持直接部署当前文件夹到云端 |
运行方式 | 部署完成后即可长时间运行 | 需要客户端访问才进入冷启动 | 优势: 可以完成长时间的拉取式消息处理. 可以用于完成批处理任务. 劣势: 长时间占用数据库链接, 有耗尽数据库链接数的风险. | 优势: 短时间占用数据库链接, 随同实例一起释放. 支持多种触发方式. 劣势: 最后一次调用 5 分钟后实例被销毁, 无法长时间拉取消息进行处理, 需要通过消息队列推送才行. 官方推荐的 MNS 队列暂不支持内网消息推送. |
最低规格按量使用一个月价格 | CPU: 0.0030864 x 60 x 24 x 30 x 0.5 = 66.67 元/月 Mem: 0.0007716 x 60 x 24 x 30 x 1 = 33.33 元/月 CPU + Mem = 100 元/月 (SAE的按量付费6折优惠持续至2020年9月30日,2020年9月30日之后将恢复7折价格. ) | 预留实例CU: 0.00011108 x (128 / 1024) x 60 x 60 x 24 x 30 = 35.99 元/月 | 最低规格的实例原价相对较高, 但结合目前的优惠策略以及资源包, 最低可以拿到到54折. | 优势: 每个自然月有 100 万次免费调用以及 400 万免费CU. 劣势: 最低规格实例在业务高峰期可能因为冷启动超时导致客户端大规模异常. |
0.5core 1g 按量使用一个月价格 | 同上 | 预留实例CU: 0.00011108 x (512 / 1024) x 60 x 60 x 24 x 30 = 143.96 元/月 | 优势: 与同等规格的预留实例相比便宜约 30 % | 优势: 每个自然月有 100 万次免费调用以及 400 万免费CU. |
版本控制 | 发布版本时强制开发者输入不重复的版本号. | 针对服务层面进行版本控制. | 优势: 支持一键回退至最近的 10 个版本. | 劣势: 无法针对单个函数进行版本控制. 必要时可以在函数更新时对整个服务进行一次版本快照, 勉强能实现单个函数的版本控制功能. |
监控 | 优势: 基于 ARMS 提供强大的全面监控 | 劣势: 目前仅提供内存占用, 调用次数, 响应时长, 错误率监控 | ||
编程语言友好程度 | JAVA, 以及其他可以制作成镜像的任何语言. | Python, Javasctipt 等解释型语言 | 劣势: JAVA 应用在启动时需要消耗大量 CPU, 因此需要规划较大的内存规格, 即便运行时只占用一小部分内存. |
对于想把 Spring boot 应用部署到函数计算的同学, 可以试试我写插件: [Fc] 阿里云函数计算自定义运行时Gradle自动打包插件, 它能够自动将产物打包成符合规格的压缩包, 并支持多 profile 启动.
参考
- 什么是 Serverless 应用引擎? @Aliyun
- SAE 产品定价: 按量付费 @Aliyun
- SAE 使用限制 @Aliyun
- 什么是应用实时监控服务 ARMS? @Aliyun
- 什么是函数计算? @Aliyun
- FC 产品定价: 计费方式 @Aliyun
- FC 使用限制 @Aliyun
- [Fc] 阿里云函数计算自定义运行时Gradle自动打包插件 @CSDN
推广
欢迎加入 Spring cloud 交流群: 617143034
欢迎大家使用 阿里云优惠券, 新购续费更优惠: