本周我们采访了 Prerender.io 的首席工程师兼经理 Zsot Varga。他分享了 Prerender 如何通过消除对 AWS 的依赖并构建内部基础设施来处理流量和缓存数据而节省了 80 万美元。
“我们的目标是降低成本,同时保持相同的渲染速度和服务质量。像这样的迁移需要仔细计划和执行,因为不正确的配置或执行不力会导致客户网页和社交媒体点击停机,并使他们的搜索排名受到影响,并可能增加我们的客户流失率。”
=> 在 Level Up Coding 中接受采访 ➡️填写此表格
=> 正在寻找一份很棒的工作?➡️访问Level Up招聘平台
你能描述一下 Prerender 和你正在解决的最有趣的技术问题吗
预渲染,简单来说就是缓存和预渲染你的 JavaScript 页面,这样搜索引擎就可以有一个纯 HTML 文件来抓取和索引,它所需要的只是在站点上安装适当的中间件,避免用户遭受昂贵而冗长的 JavaScript 的痛苦解决方法。
但是,所有这些数据和流程都需要在服务器上进行,当然,我们为此使用了 AWS。经过几年的发展,我们每分钟处理超过 70,000 页,存储大约 5.6 亿页,并且每年支付超过 1,000,000 美元。
或者至少,如果我们继续使用 AWS,我们会付出那么多的代价。相反,我们能够通过一些开箱即用的思维和清晰的计划,在三个月多一点的时间里将成本削减 80%。您也可以这样做。
规划迁移:我们的分步指南
直到最近,Prerender 使用托管在 Amazon Web Services (AWS) 上的服务器和服务存储它为客户缓存和呈现的页面——AWS 是最大的云提供商之一,提供虚拟服务器和托管服务。
迄今为止,Prerender 一直使用 AWS 来存储它缓存的页面,直到它们准备好被谷歌、Facebook 或任何其他寻找要索引内容的机器人/蜘蛛程序拾取。这提供了 Prerender 的大部分功能——向 Google 和其他搜索引擎提供静态 HTML,向人类用户提供动态的交互式 JavaScript。
问题?以这种方式在第 3 方服务器上存储数 TB 的预呈现网页内容非常昂贵。以这种方式存储缓存页面仅在维护和托管费用方面就花费了 Prerender 天文数字。
但还有一个问题,没有多少初创企业考虑到,也没有太多关于它的讨论:流量成本。
将数据导入 AWS 在技术上是免费的,但是静态数据对大多数软件有什么好处呢?当四处移动数据时,它成为 Prerender 的巨大成本,我们开始注意到阻碍我们前进的瓶颈。
解决方案?将缓存的页面和流量迁移到 Prerender 自己的内部服务器上,并尽快减少我们对 AWS 的依赖。
当我们进行成本预测时,我们估计我们可以将托管费用降低 40%,并决定服务器迁移将节省 Prerender 和我们客户的钱。
目标是降低成本,同时保持相同的渲染速度和服务质量。像这样的迁移需要仔细计划和执行,因为不正确的配置或执行不力会导致客户网页和社交媒体点击停机,并使他们的搜索排名受到影响,并可能增加我们的客户流失率。
为了减轻潜在后果,我们计划了一个三阶段过程,如果出现任何问题,我们可以通过该过程轻松恢复到上一步。如果由于某种原因新服务器无法运行,我们可以轻松地回滚我们的更改,而不会引起客户明显的停机或服务降级。
持续和系统测试的警告是它需要数周和数月的时间。
让 Prerender 远离 AWS:每周概览
第一阶段——测试(4 到 6 周)
第 1 阶段主要涉及设置裸机服务器并在扩展之前在一个较小且更易于管理的设置上测试迁移。这个阶段需要最少的软件调整,我们决定在 Linux 上的 KVM 虚拟化上运行。
5 月初,第一批服务器运行,1% 的 Prerender 流量被引导到新服务器。迁移两周后,我们每天已经节省了 800 美元。到月底,我们已将大部分流量工作负载从 AWS 迁移出去,将每日 chrome 渲染工作负载成本降低了 45%。
在服务器端,我们的成本目前为每月 13,000 美元。结合 AWS,我们已经将开支削减了 22%。
测试阶段对于确保以下流程顺利运行至关重要。我们致力于通过更多监控和更好的错误处理来提高系统的稳健性。除了我们已有的服务器监控仪表板外,我们还设置了一个新的渲染监控仪表板,以便能够发现发生的任何错误或性能问题。
由于我们持续的监控和清晰的沟通,测试取得了成功,超出了我们的节省预测,一切都准备就绪,可以开始迁移的第 2 阶段。
第 2 阶段 — 技术设置(4 周)
6 月至 7 月初的迁移期主要是在迁移的第一阶段作为概念验证之后的技术设置。第二阶段的实施主要涉及将缓存存储移动到裸机服务器。
迁移到 6 月中旬时,我们有 300 台服务器运行非常顺利,总共有 2 亿个缓存页面。我们在每台与 AWS S3 兼容的服务器上使用 Apache Cassandra 节点。
我们将在线迁移分为四个步骤,每个步骤间隔一到两周。在测试了 Prerender 页面是否可以缓存在 S3 和 minio 中之后,我们慢慢地将流量从 AWS S3 转移到 minio。当对 S3 的写入完全停止时,Prerender 每天节省 200 美元的 S3 API 成本,并发出信号表明我们已准备好开始删除已缓存在 Cassandra 集群中的数据。
然而,重大消息是在 6 月 24 日左右这一阶段结束时揭晓的。在过去的四个星期里,我们将大部分缓存工作负载从 AWS S3 转移到我们自己的 Cassandra 集群。AWS 的日常成本降至每天 1.1 千美元,预计每月 3.5 万美元,新服务器的每月经常性成本估计约为 1.4 万美元。
此时,S3 上还有一些剩余物,每天花费约 60 美元,并且会在几周内完全自然消亡。虽然我们可以将所有数据移出以立即将其削减为零,但将数据移出 AWS 会给我们留下 5000 美元的一次性“金钱浪费”。
移动数据是您开始遇到巨大瓶颈的地方。用我们的新 CTO (Zsolt Varga) 的话来说:
“AWS 的真正隐藏价格是来自于流量成本,他们卖的是价格合理的存储,甚至上传都是免费的。但是当你把它拿出来的时候,你付出了巨大的代价。
小型创业公司通常不会计算流量成本,即使它可能占他们账单的 90%”
例如,如果您在美国西部(俄勒冈)地区,则必须支付 0.080 美元/GB,而在亚太地区(首尔)地区,则最高可达 0.135 美元/GB。
在我们的例子中,每月 3 万美元到 5 万美元很容易。到第二阶段结束时,我们每月的服务器总成本降低了 41.2%。
第 3 阶段 – 实施和扩展(4 到 6 周)
在这个阶段,迁移正在顺利进行,并且已经为 Prerender 节省了大量资金。剩下要做的唯一一件事就是将所有其他数据迁移到本机服务器上。
此步骤涉及逐个分片移动所有 Amazon RDS 实例。这是整个过程中最容易出错的部分,但由于已经迁移了相当数量的数据,因此任何问题或瓶颈都不会导致整个迁移崩溃。
这是迁移过程最后阶段的全景视图:
我们镜像了在 Cassandra 中存储 cached_urls 表的 PostgreSQL 分片
我们将 service.prerender.io 切换到 Cloudflare 负载均衡器以允许动态流量分配
我们设置了新的欧盟私有缓存服务器
我们不断进行压力测试以解决任何性能问题
事实证明,迁移最终取得了巨大的成功。当所有缓存页面都被重定向时,我们每月的服务器费用下降到 80%,低于我们最初估计的 40%。
我们学到了什么
如果出现问题或落后于计划,服务器迁移会有很多风险。这就是为什么我们确保在迁移的每个阶段都实施故障保护,以确保在出现问题时我们可以回退。这也是我们在继续进行其余迁移之前进行小规模测试的原因。
我们通过仔细规划迁移的每个阶段、在扩展之前测试每个实施阶段并在出现任何问题时轻松纠正任何错误来避免危险。这样,我们既可以节省服务器费用,又可以将任何潜在风险降至最低。
是什么促使您致力于 Prerender 解决的问题?
我对在一个有助于推动网络发展的平台上工作的想法感到兴奋。
你看,通过 Prerender,我们的客户正在推出以用户体验为中心的网站,而不是专注于 SEO,他们为客户提供最好的服务。在过去的几年里,每当我们构建一个新的登陆页面时,我们总是使用 WordPress 只是为了从中获得最好的 SEO,并且只为非索引页面(如管理部分)保留 SPA 的功能。但现在,我与一家公司合作,帮助解决过去阻碍我的问题^.^
你使用什么技术栈,为什么选择这个栈?
我们到处都使用 Javascript,因为我们解决了由 Javascript 渲染引起的“问题”,我们希望在该领域积累尽可能多的专业知识。但对于其他部分,我们正在利用 CloudFlare 的分布式系统来实现快速响应和全球可扩展性。而我们的正常运行时间保证由 Digital Ocean 的云平台提供支持。我们还使用无数其他 SaaS 提供商来最大限度地提高我们的效率。
贵公司实现愿景后,世界会是什么样子?
当问题出现时“我们可以在我们的新网站上使用 React 吗?” 答案将是“当然!”,因为现在营销部门总是否决任何可能降低 SEO 排名的事情。我会说,理所当然。至于我们的客户,即使他们失去 1% 的效果,他们也需要用数十万美元来增加他们的广告预算。
对你来说典型的一天是什么样的?
哈哈,很多客户电话!由于我们的目标是让我们敬业的团队保持小而高效,因此我经常与他们一起参加入职电话。但这对我来说很有趣!我一直喜欢和客户交谈,了解他们的情况,并讨论解决方案。这让我的工作轻松多了,因为我们不必想出点子,我们的客户会告诉我们我们需要知道的一切。我相信这是最好的情况,以客户为导向,我的 KPI 是满意客户的数量。
描述您的计算机硬件设置
哦,天哪,这本身就值得一篇文章。我有点像极客,家里有 8 台专用服务器,而为了方便起见,我主要在 macbook 上工作。但是当我有时间进行编程时,我会启动运行 Manjaro 的“工作站”。但是很少有空闲时间,我会偷偷打开我的 Windows PC 来玩游戏。在撰写本文时,我周围还有笔记本电脑、覆盆子和平板电脑。
建造机器和运行缩小规模的测试是我深夜的爱好。
描述您的计算机软件设置
VSCode 对我来说是一个决定性的解决方案,我并不真正喜欢任何编程语言,它让我可以自由地安装扩展并在几秒钟内编写 IDE 支持的代码。此外,我有幸加入了 CoPilot 的测试组,它是一个决定性的游戏规则改变者。
对于源代码管理,GitHub 很棒,但我也绝不会打折其他解决方案。近年来,GitLab 已成为一个非常棒的工具。
消息,我认为 Slack 仍然是最广泛的专业选择,而且既然它能发挥作用,就没有理由放弃它。但最近我发现了一个非常有趣的软件,叫做 Spike,在过去的 3 个月里,我一直在使用它作为我事实上的电子邮件客户端,因为它使电子邮件对话变得更加容易。
必备工具:Docker,没有别的办法,它改变了这个行业最好的。我仍然记得我们必须安装依赖项并解决包冲突的黑暗过去……
但是,是的,Kubernetes 慢慢地处于相同的适应水平。
您对刚起步的软件工程师有什么建议吗?
不要害怕与客户交谈。在我的整个职业生涯中,最好的软件工程师都是那些与客户一起解决问题的人。有时,仅仅通过了解您可以用一行代码解决客户的问题,您就可以节省半年的开发时间。我认为最好的工程师正在为现实世界的问题创造解决方案。