写点什么

Serverless:慢 15%,贵 8 倍?

  • 2019-10-12
  • 本文字数:2433 字

    阅读完需:约 8 分钟

Serverless:慢15%,贵8倍?

Serverless 是一种构建和管理基于微服务架构的完整流程,其中应用开发不使用常规的服务进程,仅依赖于第三方服务(如 AWS Lambda 服务)、客户端逻辑和服务托管远程过程调用的组合,可以帮助开发者更快速地开发软件。Serverless 意味无维护,有了 Serverless,我们几乎无需 DevOps 了。本文作者讲述了他学习 Serverless,尝试托管 API 的经历。


最近,我想更改 CardGames.io 上的 API,同时尝试一下Serverless框架。因为在过去的几年中,Serverless 一直是技术界的热门话题,而我喜欢靠尝新来保持自己的技术水平不过时,所以我决定花几个小时来学习 Serverless,看看用它来托管我们的 API 是否可行。

原有设置

CardGames.io 托管在 AWS 上。我们使用 S3 来存储 HTML 页面、CSS、JavaScript 和图像。我们有一个使用 C#编写的 API,该 API 托管在 Elastic Beanstalk 上,使用运行 .NET Core 和 Docker 的 Linux 服务器。最后,我们在 S3 的静态文件和 API 上都部署了 CloudFront CDN。


下图是我们今年 8 月的 EC2 账单。我们还有其他一些实例,但对于 API,我们使用 m1.small 实例(是的,我们可能应该使用 t2.small)和经典负载平衡。把图中红框部分加起来可以得出该月的费用为 164.21 美元,我甚至包括了整个 EBS 的部分,主要是因为我不确定它的哪一部分属于我们运行的其他 EC2 内容。



Elastic Beanstalk 的 AWS 账单


我们有两个环境,每个环境都有 1-3 个实例,一个处于活动状态,剩下的则是非活动状态。之所以有两个环境,是因为在 AWS 的 Docker 中部署 .NET Core 需要几分钟,因此我们部署到非活动环境,然后切换 CNAME 记录以切换到新部署的环境。部署缓慢是我想尝试新事物的原因之一。我们还有其他一些服务器在 Beanstalk 上运行 node.js 应用程序,这些服务器可以在几秒钟内部署,我也希望将其用于我们的 API。

走向 Serverless

我浏览了一个关于使用 Serverless 框架托管 ASP .NET Web API 的优秀教程。我发现,只需在现有的 API 项目中添加一个简单的配置文件、一个依赖项和一个小小的启动类即可。然后我就部署了,大概花了 20 秒,比部署到 Beanstalk 快得多。我猜这是因为 Lambda 内置了对 .NET Core 的支持(尽管只有 2.2 版本),而在 Beanstalk 中,仅当你使用 Docker 并自行管理时才能支持。不管怎样,到目前为止我还是很高兴,还没有考虑自动扩展组、最大实例数之类的东西。

测试性能

AWS 上的 Serverless 是 Lambda,它实际是函数的宿主,而 API 网关是一个前端,它允许用户添加速率限制和 API 密钥等内容。我在 us-west-2 区域设置了 Lambda 函数,该区域就是我们托管 Beanstalk 服务器的那一个。然后,我设置 CloudFront 实例,将一个游戏的请求路由到新的 Serverless 设置,同时将另一个游戏路由到旧的 Beanstalk 设置。后来,我对两个 URL(Serverless 和 Beanstalk)进行了简单测试。两个网址在我们的 API 中指向了完全相同的代码,将一个事件保存到数据库中。我为每次测试运行了 100 个请求,结果是:



性能对比


我发现,Serverless 设置的速度始终慢 15%(如果你认为总体运行速度也很慢,那是因为我是在冰岛运行的,可能会有些延迟)。这个结果令人失望,但也足够快了。我知道在 API 之前运行 API 网关会有一些开销,它提供了很多东西,有些我们可能用不上,所以结果虽然令人失望,但还不算糟糕!

价格

老实说,我之前根本没有考虑过价格。我觉得“为你所用的内容付费”听起来比为 24/7 运行的实例付费要便宜,因此我让新的 Serverless 设置运行了几天,然后检查我的账单。天啊!Lambda+API 网关账单已经超过了一百美元!我先鼓捣了一通 Lambda 设置,减少了 lambda 函数使用的内存以减少费用。当我真正开始研究到底发生了什么事时才发现,罪魁祸首明显是 API 网关。以下是它的费用:



API 网关定价


我们的 API 每天接受大约一千万个请求。光是 API 网关,每天就要花费大约 35 美元。除此之外,Lambda 每天要花费大约 10 美元,尽管可以通过减少内存使用来降低一些。二者合计约为每天 45 美元,也就是每月 1350 美元,而 Elastic Beanstalk 大约是每月 164 美元,高出整整 8 倍!我喜欢新技术,入门也很快,但我不会为它每月额外支付约 1200 美元。所以,回到 Beanstalk!

结论

好吧,我应该先好好看看 AWS 定价并做出一些计算,再考虑更改。但这样的话,我就只好去干正经事,而没法学到宝贵的技能了!我知道在某些情况下,API 网关和 Lambda 优于 Elastic Beanstalk,但我想我们的情况不在其中。也许你使用的是 API 密钥和速率限制之类由 API 网关提供的内容,那么就有必要为每一百万个请求支付 3.5 美元。对我们来说,只要可以在 Lambda 前面放一个普通的负载平衡器就更好了。据我所知,API 网关对 Lambda 的 http 访问是必需的。


即使我们只为 Lambda 付费,以每天 10 美元的价格,我们每月仍需支付 300 美元,而不是 164 美元。我们有很多请求,但每个请求的内容很少,基本是一个数据库调用。以下是一个请求的报告,你可以看到我们的计算时间只有 3.5 毫秒,而要为 100 毫秒计费似乎是一个很大的浪费。



一个请求的 Lambda 报告


最后,我并不打算抨击 API 网关、Lambda 或 Serverless,只是想说明对于某些工作负载,它们比无聊的旧 EC2 和 Elastic Beanstalk 要昂贵得多。这就是我们坚持老路子的原因🙂。或许也有更好或更有效的设置方式,如果你看出了一些明显的错误,请务必在评论中指出来。


2019.9.26 更新:这篇文章在 3 天内获得了超过 10 万的浏览量,并成为了Hacker Newsreddit.com/r/programming的头条。我的确学到了一些东西。我应该在 Lambda 之前使用应用程序负载均衡器而非 API 网关;我应该将古老的 m1.small 实例升级为新的实例类型;使用运行时 .NET Core docker 镜像而非 SDK 镜像;我能够将 Beanstalk 的部署时间降低到合理的 30—40 秒。


虽然,Serverless 仍不适合我的用例,但这绝对是一次有趣的实验!


原文链接:


https://einaregilsson.com/serverless-15-percent-slower-and-eight-times-more-expensive/


2019-10-12 18:055820

评论

发布
暂无评论
发现更多内容

2022年中国重卡智能化升级专题研究

易观分析

智能汽车

视频爆炸时代,谁在支撑视频生态网高速运行?

郑州埃文科技

flow IP地址 NetFlow

万字攻略,详解腾讯面试(T1-T9)核心技术点,面试题整理

C++后台开发

后台开发 面试题 Linux服务器开发 C++后台开发 腾讯面试

学习 | 写论文看这一篇就够了~

写程序的小王叔叔

学习笔记 论文阅读 论文写作 6月月更

如何为政企移动办公加上一道“安全锁”?

BeeWorks

洞见科技牵头的全球「首个」IEEE隐私计算「互联互通」国际标准正式启动

洞见科技

隐私计算 IEEE 互联互通

企业级软件开发新模式:低代码

力软低代码开发平台

华为云招募工业智能领域合作伙伴,强力扶持+商业变现

华为云开发者联盟

云计算 华为云 工业数据智能

预约直播|机器学习PAI:AI加速计划

阿里云大数据AI技术

AI 模型开发训练

再读凤凰架构-分布式架构更清晰

AiDaddy

分布式 凤凰架构

博睿数据出席阿里云可观测技术峰会,数字体验管理驱动可持续发展

博睿数据

可观测性 智能运维 博睿数据 数字体验管理

数字经济加速落地,能为中小企业带来什么?

脑极体

VHEDT业务发展框架

凌晞

框架 构架

活动预约|阿里云如何搭建云服务 SRE 与可观测体系

阿里巴巴云原生

阿里云 云原生 可观测 峰会

如何做好研发效能度量及指标选取

思码逸研发效能

研发效能

5分钟快速上线Web应用和API(Vercel)

Liam

前端 前端开发 开发 Postman API

年中大促 | 集成无忧,超值套餐 6 折起

融云 RongCloud

短视频源码开发,优质的短视频源码需要做好哪几点?

开源直播系统源码

软件开发 短视频源码

[译]关于 Python 中的数字你可能不知道的 3 件事

宇宙之一粟

Python 6月月更

机器学习实践:基于支持向量机算法对鸢尾花进行分类

华为云开发者联盟

人工智能 模型 华为云

DAP事实表加工汇总功能应用说明

agileai

数据分析 数据集成 数仓建设 基础事实表 汇总事实表

如何给研发团队分钱?

菜根老谭

研发体系 绩效管理 激励体系

51万奖池邀你参战!第二届阿里云ECS CloudBuild开发者大赛来袭

阿里云弹性计算

阿里云 分布式缓存 开发者大赛 加密计算 大数据加速

什么是RESTful,REST api设计时应该遵守什么样的规则?

wljslmz

RESTful 6月月更

网页制作存在的一些难点

源字节1号

web技术分享| 【高德地图】实现自定义的轨迹回放

anyRTC开发者

前端 Web 音视频 地图 轨迹回放

详解openGauss多线程架构启动过程

华为云开发者联盟

数据库 后端

关河因果将机器学习融合逻辑规则,突破黑盒壁垒

6979阿强

数据分析 大数据分析 关河因果 关河智图 因果分析

物联网开源开发平台 Shifu 开放内测!第一版技术文档发布

亚马逊云科技 (Amazon Web Services)

物联网 Tech 专栏

如何低成本快速搭建企业知识库?

小炮

支持在 Kubernetes 运行,添加多种连接器,SeaTunnel 2.1.2 版本正式发布!

Apache SeaTunnel

Apache 大数据 开源 workflow

Serverless:慢15%,贵8倍?_DevOps & 平台工程_Einar Egilsson_InfoQ精选文章