公司 Ygrene 地点 加州佩塔卢马 行业 清洁能源融资

挑战

Ygrene 是一家 PACE(财产评估清洁能源)融资公司,自 2010 年以来已发放了超过 10 亿美元的贷款。为了批准和处理这些贷款,“我们有许多数据源需要汇总,而且我们还有许多系统需要处理这些数据,”Ygrene 开发经理 Austin Adams 说。该公司之前使用的是大型服务器,“我们已经达到了垂直扩展的极限。我们有一个非常不稳定的系统,仅仅是实时处理后台数据就让它不堪重负。用户看到的性能非常差。我们需要一个不需要我们对代码库进行大量重构的解决方案。” 作为一家金融公司,Ygrene 还需要确保其应用程序的安全性。

解决方案

Ygrene 团队放弃了 Engine Yard 平台和 Amazon Elastic Beanstalk,转而采用云原生技术和实践:使用 Kubernetes 来帮助垂直扩展和分配工作负载,使用 Notary 来进行构建时控制并信任与第三方依赖项一起使用的 Docker 镜像,以及使用 Fluentd 来“观察我们堆栈的每个部分”,所有这些都在 Amazon EC2 Spot 上运行。

影响

以前,部署通常需要三到四个小时,并且每隔一两周就会在低流量时间部署两到三个月的工作量。现在,Kubernetes 只需要 5 分钟,而整个部署(包括冒烟测试)只需要一个小时。Adams 说:“我们现在能够每周部署三到四次,每次只需要一两天的工作量。我们可以在工作日白天进行部署,而且没有任何停机时间。我们以前必须申请业务批准才能关闭系统,即使是在半夜,因为人们可能正在办理贷款。现在,我们可以在不关闭系统的情况下进行部署、发布代码和迁移数据库。公司可以在不担心业务损失或延迟的情况下获得新功能。” 此外,通过使用 kops 项目,Ygrene 现在可以使用 AWS EC2 Spot 运行其 Kubernetes 集群,成本仅为之前的十分之一。这些云原生技术“改变了可扩展性、可观察性和安全性的游戏规则——我们正在添加非常安全的新数据源,”Adams 说。“如果没有 Kubernetes、Notary 和 Fluentd,我们就无法告诉我们的投资者和团队成员我们知道发生了什么。”

在不到十年的时间里,Ygrene 已经为可再生能源项目提供了超过 10 亿美元的贷款。

作为一家 PACE(财产评估清洁能源)融资公司,“我们利用住宅或商业建筑的权益,为任何能够节约电力、生产电力、节约水资源或减少碳排放的财产改善项目提供资金,”开发经理 Austin Adams 说。

为了批准这些贷款,该公司需要处理大量的承保数据。Adams 说:“我们有许多关于房产、公司或个人需要验证的信息。因此,我们有许多数据源需要汇总,而且我们还有许多系统需要实时处理这些数据。”

到 2017 年,部署和可扩展性已经成为痛点。该公司之前使用的是大型服务器,Adams 说:“我们已经达到了垂直扩展的极限。” 迁移到 AWS Elastic Beanstalk 并没有解决问题:“Scala 服务需要从主要的 Ruby on Rails 服务和不同的供应商那里获取大量数据,因此它们请求 Ruby 服务提供信息的速率是这些服务无法处理的。我们还遇到了很多 Elastic Beanstalk 的配置错误。问题最终爆发了,我们意识到我们有一个非常不稳定的系统。”

Adams 和团队的其他成员开始寻找一个能够带来变革的解决方案,但“不需要我们对代码库进行大量重构,”他说。作为一家金融公司,Ygrene 既需要可扩展性,也需要安全性。他们通过采用云原生技术找到了答案:使用 Kubernetes 来帮助垂直扩展和分配工作负载,使用 Notary 来实现各个级别的可靠安全性,以及使用 Fluentd 来实现可观察性。Adams 说:“Kubernetes 是社区的发展方向,我们希望能够面向未来。”

借助 Kubernetes,该团队能够使用 Docker 快速将 Ygrene 应用程序容器化。Adams 说:“我们必须改变一些实践、代码和构建方式,但我们能够在一个月左右的时间内将我们的主要系统迁移到 Kubernetes 上,并在两个月内投入生产。对于一家金融公司来说,这已经非常快了。”

怎么做到的?云原生技术“改变了可扩展性、可观察性和安全性的游戏规则——我们正在添加非常安全的新数据源,”Adams 说。“如果没有 Kubernetes、Notary 和 Fluentd,我们就无法告诉我们的投资者和团队成员我们知道发生了什么。”

Adams 说,Notary “尤其是一个福音”。“我们需要知道我们在第三方依赖项上的攻击面很小,或者至少是可控的。我们将其用作信任系统,也将其用作隔离机制,因此生产镜像由 Notary 签名,但一些开发镜像我们不签名。这是为了确保它们无法进入生产集群。我们一直在测试集群中使用它,以便对我们的构建更有信心。”

通过使用 kops 项目,Ygrene 能够从 Elastic Beanstalk 迁移到在 AWS EC2 Spot 上运行其 Kubernetes 集群,成本仅为之前的十分之一。Adams 说:“以前为了扩展,我们需要增加实例大小,这会导致成本高昂,但价值却很低。现在有了 Kubernetes 和 kops,我们能够使用多个实例组在 Spot 上进行水平扩展。”

这也帮助他们降低了在公共云中运行的风险。领导 Kubernetes 迁移的软件工程师 Zach Arnold 说:“我们发现,如果我们能够使用 EC2 Spot 选择中断可能性极低且没有中断历史记录的实例类,并且我们愿意支付足够高的价格,那么我们就可以使用 Kubernetes 获得几乎相同的保证,因为我们有足够的节点。现在,我们已经重新设计了应用程序的这些部分,使其不再驻留在同一台服务器上,我们可以将它们推送到许多不同的服务器上,从而获得更稳定的部署。”

因此,该团队现在可以在一天中的任何时间发布代码。Arnold 说:“这在以前是有风险的,因为它可能会导致整个贷款管理软件崩溃。但现在,我们可以在白天安全可靠地进行部署。”

以前,部署通常需要三到四个小时,并且每隔一两周就会在低流量时间部署两到三个月的工作量。现在,Kubernetes 只需要 5 分钟,而整个部署(包括冒烟测试)只需要一个小时。Adams 说:“我们现在能够每周部署三到四次,每次只需要一两天的工作量。我们可以在工作日白天进行部署,而且没有任何停机时间。我们以前必须申请业务批准才能关闭系统 30 分钟到一个小时,即使是在半夜,因为人们可能正在办理贷款。现在,我们可以在不关闭系统的情况下进行部署、发布代码和迁移数据库。公司可以在不担心业务损失或延迟的情况下获得新功能。”

云原生技术也影响了 Ygrene 50 多名开发人员和承包商的工作方式。Arnold 说,他和 Adams 花了大量时间“教会人们从一开始就以分布式的方式思考”。“我们最终选择了我们所说的交付的四个 S:安全(safely)、可靠(securely)、稳定(stably)和快速(speedily)。”(有关安全性的更多信息,请参阅他们关于“持续攻击”策略的 文章。)Adams 说,对于工程师来说,“他们能够随着软件的发展而进步。我认为,最终,开发人员对自己的工作感到更加满意,并且他们也感觉与现代软件开发社区的联系更加紧密。”

展望未来,Adams 激动地想要探索更多 CNCF 项目,包括 SPIFFE 和 SPIRE。他表示:“CNCF 已经成为众多项目的绝佳孵化器。现在,我们会定期浏览其网页,看看是否有任何新的、出色的、高质量的项目可以实施到我们的技术栈中。它实际上已经成为我们了解需要关注哪些软件来提高系统安全性和可扩展性的中心。”