近日,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 也在适应中。
原文链接:
评论