硬核干货——《中小企业 AI 实战指南》免费下载! 了解详情
写点什么

逃离 AWS 后,我们将服务器的年开支省下了 80%

  • 2022-10-08
    北京
  • 本文字数:2245 字

    阅读完需:约 7 分钟

逃离AWS后,我们将服务器的年开支省下了80%

近日,skilled.dev 和 gitconnected.com 网站的创始人 Trey Huffine 采访了 Prerender.io 的首席工程师兼经理 Zsot Varga。Zsot 告诉大家,Prerender 设法摆脱了对 AWS 的依赖,并构建了内部基础设施来处理流量和缓存数据,这一做法为他们节约了 80 万美元的年开支。

 

“目标是降低成本,同时保持相同的渲染速度和服务质量。像这样的迁移工作需要周密的计划和认真的执行,因为不正确的配置或执行不力会让客户网页和社交媒体按钮挂掉,影响他们的搜索排名,并可能增加我们的流失率。”

Pretender 公司简介


Prerender 提供的服务是缓存和预渲染客户的JavaScript页面,给搜索引擎提供一个纯 HTML 文件来抓取和索引。客户只需在自己的网站上安装一个中间件就能搞定了。这个服务需要云端处理数据,所以 Pretender 选择了 AWS,之前每分钟能处理 7 万个页面,存储了 5.6 亿个页面数据,每年的 AWS 费用超过一百万美元。而三个多月的迁移工作完成后,总成本下降了 80%。

迁移计划


Pretender 在AWS的开销主要分为两部分:

 

  • 数据缓存。预渲染的页面都得存在 AWS 服务器上,然后搜索引擎爬取的时候提供静态页面,网站用户点击时提供动态 JS 页面。存储、维护费用是很高的。

  • 流量成本。把数据导入 AWS 是免费的,问题是实践中这些数据还要被经常读取,这个费用也不容小觑。

 

所以他们的解决方案也很简单,将缓存的页面和流量迁移到 Prerender 自有的内部服务器上,尽量摆脱对 AWS 的依赖。一开始 Pretender 估计成本能砍掉 40%,但除了降本,渲染速度和服务质量是不能打折的。

 

谨慎起见,Pretender 规划了三阶段的迁移计划,可以随时在客户无感知情况下回滚。不过系统性测试需要持续跑几周甚至几个月。

分阶段迁移

第 1 阶段:测试(4 到 6 周)


第 1 阶段的主要工作是设置裸金属服务器,先在容易管理的小规模集群上测试,然后再扩展上去。这个阶段需要的软件适配工作是最少的,所以团队决定跑在 Linux 上的 KVM 虚拟化环境里。

 

5 月初,第一批服务器上线,1%的 Prerender 流量被定向到新服务器。迁移两周后,日成本就已经下降了 800 美元。到月底,大部分流量负载都从AWS迁移走了,每日 chrome 渲染负载成本降低了 45%。

 

当时的服务端成本是每月 13,000 美元,综合来算开支削减了 22%。


测试阶段对后面的工作非常重要。团队在已有监控板之外还做了一个新的渲染监控仪表板来加强可观测性。之后一切顺利,第二阶段启动。


第 2 阶段:技术设置(4 周)


第二阶段时间是 6 月至 7 月初。主要工作是将缓存移动到裸金属服务器上。

 

6 月中旬,Pretender 自有的 300 台服务器缓存页面总数达到了 2 亿。注意这些服务器上都使用了 Apache Cassandra节点,这种节点是和 AWS S3 兼容的,确保平滑迁移。

 

线上迁移分为四步,每两步之间相隔一两周。团队首先测试了 Prerender 页面是否可以同时缓存在 S3 和 minio 对象存储中,显然没什么问题。之后流量逐渐从 AWS S3 转移到 minio 上。迁移完成后又节省了每天 200 美元的 S3 API 费用,缓存在 Cassandra 集群中的数据也准备删掉了。现在服务器成本从 AWS 上的 3.5 万美元每月降到了自有服务器的 1.4 万美元每月。

 

AWS 上还剩下一点数据,每天开销大约 60 美元,但过几星期这些数据就自然过时不用了。之所以不选择一次性把这些数据都迁走,是因为数据迁移出 AWS 时还要一次性浪费 5000 美元的转出流量费用。所以这里就是一个坑:数据导入 AWS 不收钱,提取出来可就不一样了。另外不同地区的流量费用可能还有差异,比如说亚太的流量费用就比北美的要高不少。很多公司都对这方面的成本稀里糊涂,莫名其妙就花了冤枉钱。还好 Pretender 算好了这部分支出,没有一激动就把数据迁走而是等它自己过期。第二阶段结束后,总成本下降幅度从第一阶段的 22%来到了 41.2%。


第 3 阶段:实施和扩展(4 到 6 周)


剩下的工作就是把其他数据都迁到自有服务器上。这一步需要迁移所有 Amazon RDS 实例,而且得一个切片(shard)一个切片移动。这一步最容易出错,不过因为剩下的数据也不多了,所以就算出问题也没什么大影响。具体的步骤是:

 

  • 在 Cassandra 集群中存储 cached_urls 表的 PostgreSQL 分片镜像;

  • 将 service.prerender.io 切换到 Cloudflare 负载均衡器,提供动态流量分配;

  • 启动新的私有重缓存服务器,位于欧洲;

  • 持续压测,解决各种性能问题。

 

最终迁移圆满成功。所有缓存页面都被重定向后,每月的服务器费用下降了 80%,远超之前 40%的预测。

迁移经验和总结


大规模迁移过程中一旦出现问题或者进度落后,都可能造成巨大风险。所以 Pretender 在每个迁移阶段都有故障安全措施,一旦出问题就会回退。另外迁移之前要先在小集群上做好测试。迁移的计划都要精心制定,每一步扩展到大规模之前都要做测试,这样风险就是可控的。

 

Zsot 还谈到了关于 Pretender 公司与他个人的一些事情。

 

  • Pretender 提供的服务能让客户把关注的焦点从网站 SEO 转移到用户体验上。这样客户想用 JS,想用 React,想用什么动态页面都不用担心影响 SEO 排名了。

  • 公司使用的技术栈就是 JS,毕竟业务就是针对 JS 页面的。针对全球部署,公司选择的是 CloudFlare;公司还选择了 DigitalOcean 来保证可用性,以及其他很多 SaaS 服务来提升效率。

  • Zsot 自己家里放了 8 台服务器,不过平时的工作都是用 Macbook 完成的。玩游戏的时候就找 Windows 笔记本,平板自然也不缺。

  • Zsot 日常主要用 VSCode,最近还在尝试新出的 Copilot。代码仓库主要用 GitHub,GitLab 也会用。消息应用主要是 Slack,这些天 Zsot 还发现了 Spike 这个电子邮件客户端很好用。主力容器工具是 Docker,K8s 也在适应中。

 

原文链接


https://levelup.gitconnected.com/how-we-reduced-our-annual-server-costs-by-80-from-1m-to-200k-by-moving-away-from-aws-2b98cbd21b46


2022-10-08 18:116367
用户头像
李冬梅 加V:busulishang4668

发布了 1175 篇内容, 共 794.1 次阅读, 收获喜欢 1296 次。

关注

评论

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

勤勤恳恳做到30岁,3名百度 ,京东,完爆面试官

android 程序员 移动开发

十大Intellij IDEA快捷键,android开发计算器界面

android 程序员 移动开发

又有MVP新写法了,这次我认为挺不错的。,深入分析

android 程序员 移动开发

【并发编程技术】「技术辩证分析」在并发编程模式下进行线程安全以及活跃性问题简析

码界西柚

Java 并发编程 线程安全 11月日更

宝藏级学习图谱React、Vue、Angular、Ember、Node

devpoint

Vue angular React 11月日更

分享一个RecyclerView中定点刷新的小技巧,android音频框架

android 程序员 移动开发

利用Android Studio 上传项目到 github,三年老Android经验面经

android 程序员 移动开发

原来Span可以这样加载网络图(下),安卓面试题

android 程序员 移动开发

单例模式详解,flutter跳转

android 程序员 移动开发

历经一年准备我终于进大厂了!(学习总结-&-BAT面试分享

android 程序员 移动开发

原来面试讲究方法!终于从【小公司一面就挂(1),实战android应用开发百度下载

android 程序员 移动开发

凭借这938页Android面试题合集,拿下了字节,滴滴,Android架构师必备框架技能核心笔记

android 程序员 移动开发

出身最奇葩的程序员:360行,行行转IT,细节爆炸

android 程序员 移动开发

加拿大程序员趣闻系列 1_N,kotlin线程锁

android 程序员 移动开发

原来一个App是这样启动起来的,一看就懂,剖析Android开发未来的出路在哪里

android 程序员 移动开发

原来学Flutter的人,现在后悔了吗?,我离职后面试收割小米等大厂offer

android 程序员 移动开发

厉害了,这竟然是毕业一年萌新的Android大厂面筋,赶紧来看看

android 程序员 移动开发

冲呀!Kotlin-Jetpack-实战之Kotlin-高阶函数!,android初级面试题2018

android 程序员 移动开发

分享一些重要的Android面试题,已拿offer附真题解析

android 程序员 移动开发

分享学妹提前谋划两年成功入职腾讯面经,Android面试吃透这套资料面试成功率直线飙升!

android 程序员 移动开发

模块二作业

lxz

初冬太冷?圣诞无处可去?那跟我一起来学Android吧,android嵌入式应用开发

android 程序员 移动开发

原来面试讲究方法!终于从【小公司一面就挂,下血本买的

android 程序员 移动开发

去抖音面试被问到硬编码与软编码区别,如何选取硬编与软编?

android 程序员 移动开发

刚刚面试完字节跳动,华为,阿里均拿到Offer,安卓开发面试题自定义view

android 程序员 移动开发

十年未见,当初的Android大佬已经不再牛逼,生活让他承受了太多无奈

android 程序员 移动开发

十年辗转4厂,百场校、社招面试后,移动端app开发框架

android 程序员 移动开发

十月的Android面试之旅,惨败在字节三面,幸斩获小米Offer

android 程序员 移动开发

02 K8S之基础知识

穿过生命散发芬芳

k8s 11月日更

最近爆火的互动播客,要解决哪些技术难题?

声网

RTC 互动博客

分析Android未来几年的发展前景,制定一份属于你的移动开发职业规划!

android 程序员 移动开发

逃离AWS后,我们将服务器的年开支省下了80%_数据库_Trey Huffine_InfoQ精选文章