公司 Ygrene 所在地 加利福尼亚州佩塔卢马 行业 清洁能源融资

挑战

作为一家 PACE(房产评估清洁能源)融资公司,Ygrene 自2010年以来已融资超过10亿美元贷款。Ygrene 开发经理 Austin Adams 说:“为了批准和处理这些贷款,我们需要聚合大量数据源,还需要许多系统来实时处理这些数据。” 公司过去使用大型服务器,“我们已经达到了纵向扩展的极限。我们的系统非常不稳定,仅处理实时后台数据就会因请求过多而崩溃。用户看到的性能非常差。我们需要一个不需要对代码库进行大规模重构的解决方案。” 作为一家金融公司,Ygrene还需要确保其应用程序的安全交付。

解决方案

从 Engine Yard 平台和 Amazon Elastic Beanstalk 迁移后,Ygrene 团队采用了云原生技术和实践:Kubernetes 帮助纵向扩展和分发工作负载,Notary 在构建时进行控制,并对使用第三方依赖项的 Docker 镜像建立信任,以及 Fluentd 用于“观测我们技术栈的每个部分”,所有这些都运行在 Amazon EC2 Spot 实例上。

影响

之前,部署通常需要三到四个小时,通常是每隔一周或两周在低流量时段部署两三个月的工作成果。现在,Kubernetes 部署只需五分钟,加上冒烟测试,整个部署过程需要一个小时。Adams 说:“而且我们能够每周部署三四次,每次只部署一周或两天的工作成果。” “我们可以在工作日的白天进行部署,并且没有任何停机时间。以前即使在深夜,我们也必须获得业务批准才能使系统停机30分钟到一个小时,因为客户可能正在申请贷款。现在,我们可以在不中断系统的情况下进行部署、发布代码和迁移数据库。公司可以在不担心业务丢失或延迟的情况下获得新功能。” 此外,通过使用 kops 项目,Ygrene 现在可以将 Kubernetes 集群运行在 AWS EC2 Spot 实例上,成本是之前的十分之一。Adams 说,这些云原生技术“改变了可伸缩性、可观测性和安全性——我们正在添加非常安全的新数据源”。“如果没有 Kubernetes、Notary 和 Fluentd,我们就无法告诉投资者和团队成员我们掌握了系统的运行情况。”

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

“我们利用住宅或商业建筑的产权净值,为任何能节约用电、产生电力、节约用水或减少碳排放的房产改进项目提供融资。” 开发经理 Austin Adams 在介绍 PACE(房产评估清洁能源)融资公司时说。

为了批准这些贷款,公司需要处理大量的贷款审批数据。Adams 说:“我们需要验证房产、公司或个人的许多不同信息点。因此,我们需要聚合大量数据源,还需要许多系统来实时处理这些数据。”

到2017年,部署和可伸缩性已成为痛点。他说,公司过去使用大型服务器,并且“我们已经达到了纵向扩展的极限。” 迁移到 AWS Elastic Beanstalk 并未解决问题:“Scala 服务需要从主要的 Ruby on Rails 服务以及不同供应商那里获取大量数据,它们向我们的 Ruby 服务请求数据的速率超出了这些服务所能处理的能力。我们在 Elastic Beanststalk 上也有许多配置问题。问题集中爆发,我们意识到系统非常不稳定。”

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 部署只需五分钟,加上冒烟测试,整个部署过程需要一个小时。Adams 说:“而且我们能够每周部署三四次,每次只部署一周或两天的工作成果。” “我们可以在工作日的白天进行部署,并且没有任何停机时间。以前即使在深夜,我们也必须获得业务批准才能使系统停机30分钟到一个小时,因为客户可能正在申请贷款。现在,我们可以在不中断系统的情况下进行部署、发布代码和迁移数据库。公司可以在不担心业务丢失或延迟的情况下获得新功能。”

云原生也影响了 Ygrene 50 多名开发者和承包商的工作方式。Arnold 说,Adams 和 Arnold 花费了大量时间“教人们开箱即用地进行分布式思考”。最终我们总结出了我们称之为“交付四要素”(Four S's of Shipping):安全(Safely)、可靠(Securely)、稳定(Stably)和快速(Speedily)。(有关其安全性部分的更多信息,请参阅他们关于“持续渗透测试”策略的文章。)至于工程师们,Adams 说:“随着他们的软件进步,他们也得以进步。我认为归根结底,开发者对他们所做的工作感觉更好了,而且他们也觉得与现代软件开发社区的联系更紧密了。”

展望未来,Adams 对探索更多 CNCF 项目充满期待,包括 SPIFFE 和 SPIRE。他说:“CNCF 一直是许多项目的出色孵化器。现在,我们定期查看其网页,看看是否有任何新的、很棒的、高质量的项目可以集成到我们的技术栈中。它实际上已成为我们的一个中心,指导我们应该关注哪些软件来提高系统的安全性或可伸缩性。”