挑战
Ygrene 是一家 PACE(物业评估清洁能源)融资公司,自 2010 年以来已资助了超过 10 亿美元的贷款。“为了批准和处理这些贷款,我们有大量的数据源需要聚合,而且我们还有许多系统需要处理这些数据,”Ygrene 开发经理 Austin Adams 说。该公司一直在使用大型服务器,“我们只是达到了垂直扩展它们的极限。我们的系统非常不稳定,仅仅进行实时的后台数据处理就会被请求淹没。用户看到的性能非常差。我们需要一种解决方案,而不需要对代码库进行大规模的重构。”作为一家金融公司,Ygrene 还需要确保他们的应用程序安全地发布。
解决方案
Ygrene 团队从 Engine Yard 平台和 Amazon Elastic Beanstalk 迁移,采用了云原生技术和实践:Kubernetes 来帮助垂直扩展和分配工作负载,Notary 来进行构建时控制并信任与第三方依赖项一起使用的 Docker 镜像,以及 Fluentd 来“观察我们堆栈的每个部分”,所有这些都在 Amazon EC2 Spot 上运行。
影响
以前,部署通常需要三到四个小时,每周或每两周在低流量时部署两到三个月的工作量。现在,Kubernetes 的部署需要五分钟,整个部署(包括冒烟测试)需要一个小时。Adams 说:“我们现在每周能够部署三到四次,只需要一周或两天的工作量。我们可以在工作日、白天进行部署,并且没有任何停机时间。我们以前必须请求业务部门批准才能关闭系统,即使在半夜,因为那时可能有人在办理贷款。现在,我们可以部署、发布代码和迁移数据库,而无需关闭系统。公司可以在不担心损失或延迟业务的情况下获得新功能。”此外,通过使用 kops 项目,Ygrene 现在可以使用 AWS EC2 Spot 运行其 Kubernetes 集群,成本仅为以前的十分之一。这些云原生技术“改变了可扩展性、可观察性和安全性的游戏规则——我们正在添加非常安全的新数据源,”Adams 说。“如果没有 Kubernetes、Notary 和 Fluentd,我们无法告诉我们的投资者和团队成员我们知道发生了什么。”
作为一家 PACE(物业评估清洁能源)融资公司,“我们利用房屋或商业建筑中的股权,为任何节省电力、产生电力、节约用水或减少碳排放的物业改进提供资金,”开发经理 Austin Adams 说。
为了批准这些贷款,该公司需要处理大量的承保数据。“我们有很多不同的点需要验证,关于物业、公司或个人,”Adams 说。“所以我们有大量的数据源需要聚合,而且我们还有许多系统需要实时处理这些数据。”
到 2017 年,部署和可扩展性已成为痛点。该公司一直在使用大型服务器,“我们只是达到了垂直扩展它们的极限,”他说。迁移到 AWS Elastic Beanstalk 并没有解决问题:“Scala 服务需要来自主 Ruby on Rails 服务和不同供应商的大量数据,因此它们以 Ruby 服务无法处理的速度向我们的 Ruby 服务请求信息。我们在 Elastic Beanstalk 上也有许多配置错误。最终,情况变得非常糟糕,我们意识到我们的系统非常不稳定。”
Adams 和团队的其他成员开始寻找一种具有变革性的解决方案,但“不需要我们对代码库进行大规模的重构,”他说。作为一家金融公司,Ygrene 需要安全性和可扩展性。他们通过采用云原生技术找到了答案:Kubernetes 用于帮助垂直扩展和分配工作负载,Notary 用于在每个级别实现可靠的安全性,Fluentd 用于可观察性。“Kubernetes 是社区的发展方向,我们希望面向未来,”Adams 说。
借助 Kubernetes,该团队能够使用 Docker 快速容器化 Ygrene 应用程序。“我们必须改变一些实践和代码,以及事物的构建方式,”Adams 说,“但我们能够在 1 个月左右的时间内将我们的主要系统迁移到 Kubernetes 上,然后在两个月内投入生产。对于一家金融公司来说,这非常快。”
为什么?云原生“改变了可扩展性、可观察性和安全性的游戏规则——我们正在添加非常安全的新数据源,”Adams 说。“如果没有 Kubernetes、Notary 和 Fluentd,我们无法告诉我们的投资者和团队成员我们知道发生了什么。”
特别是 Notary,“简直是天赐之物,”Adams 说。“我们需要知道我们在第三方依赖项上的攻击面很小,或者至少是受管理的。我们将其用作信任系统,也将其用作隔离,因此生产镜像由 Notary 签名,但我们不签名某些开发镜像。这是为了确保它们无法进入生产集群。我们一直在测试集群中使用它,以便对我们的构建感到更加安全。”
通过使用 kops 项目,Ygrene 能够从 Elastic Beanstalk 迁移到在 AWS EC2 Spot 上运行其 Kubernetes 集群,成本仅为以前的十分之一。“为了以前进行扩展,我们需要增加实例大小,从而以低价值产生高成本,”Adams 说。“现在,借助 Kubernetes 和 kops,我们能够在 Spot 上使用多个实例组进行水平扩展。”
这也帮助他们减轻了在公共云中运行所带来的风险。“我们基本上发现,如果我们能够使用 EC2 Spot 选择中断可能性极低且没有任何中断历史的实例类型,并且我们愿意支付足够高的价格,那么我们实际上可以使用 Kubernetes 获得相同的保证,因为我们有足够的节点,”领导迁移到 Kubernetes 的软件工程师 Zach Arnold 说。“现在,我们已经重新设计了应用程序的这些部分,使其不在同一台服务器上运行,我们可以将其推送到许多不同的服务器,并获得更稳定的部署。”
因此,该团队现在可以随时发布代码。“这很冒险,因为它可能会导致整个贷款管理软件瘫痪,”Arnold 说。“但是我们现在可以在白天安全可靠地进行部署。”
以前,部署通常需要三到四个小时,每周或每两周在低流量时部署两到三个月的工作量。现在,Kubernetes 的部署需要五分钟,整个部署(包括冒烟测试)需要一个小时。Adams 说:“我们现在每周能够部署三到四次,只需要一周或两天的工作量。我们可以在工作日、白天进行部署,并且没有任何停机时间。我们以前必须请求业务部门批准才能关闭系统 30 分钟到 1 小时,即使在半夜,因为那时可能有人在办理贷款。现在,我们可以部署、发布代码和迁移数据库,而无需关闭系统。公司可以在不担心损失或延迟业务的情况下获得新功能。”
云原生还影响了 Ygrene 50 多名开发人员和承包商的工作方式。Adams 和 Arnold 花费了大量时间“教人们进行分布式思考,”Arnold 说。“我们最终选择了我们称之为发布的四个 S:安全地 (safely)、可靠地 (securely)、稳定地 (stably) 和快速地 (speedily)。”(有关其安全性的更多信息,请参阅他们关于“持续黑客攻击”策略的文章。)至于工程师,Adams 说,“他们的软件不断进步,他们也随之进步。我认为最终,开发人员对他们所做的事情感觉更好,并且他们也觉得与现代软件开发社区的联系更加紧密。”
展望未来,Adams 很高兴探索更多的 CNCF 项目,包括 SPIFFE 和 SPIRE。“CNCF 一直是众多项目的绝佳孵化器,”他说。“现在,我们会定期查看其网页,以了解是否有任何新的、很棒的、高质量的项目可以实施到我们的堆栈中。它实际上已成为我们了解需要查看哪些软件以使我们的系统更安全或更具可扩展性的中心。”