挑战
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,我们就无法告诉我们的投资者和团队成员我们知道发生了什么。”
Ygrene 是一家 PACE(物业评估清洁能源)融资公司。开发经理 Austin Adams 说:“我们利用房屋或商业建筑的资产净值来为任何节电、发电、节水或减少碳排放的物业改进项目提供融资。”
为了批准这些贷款,公司处理了大量的承保数据。Adams 说:“我们需要验证房产、公司或个人的大量不同信息点。因此,我们有大量的聚合数据源,还有大量的系统需要实时处理这些数据。”
到 2017 年,部署和可扩展性已成为痛点。他说,公司曾使用大型服务器,“我们已经达到了垂直扩展的极限。”迁移到 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 上使用多个实例组进行水平扩展。”
这也有助于他们降低在公共云中运行所带来的风险。软件工程师 Zach Arnold 领导了向 Kubernetes 的迁移,他说:“我们基本上发现,如果能够使用 EC2 Spot 选择中断可能性极低且没有中断历史的实例类型,并且我们愿意支付足够高的价格,那么我们几乎可以获得与使用 Kubernetes 相同的保证,因为我们有足够的节点。”“现在我们已经重新架构了这些应用程序组件,使其不再驻留在同一服务器上,我们可以将其推送到许多不同的服务器上,从而实现更稳定的部署。”
因此,团队现在可以在一天中的任何时间交付代码。Arnold 说:“这很危险,因为它可能会导致整个贷款管理软件崩溃。”“但我们现在可以在白天安全可靠地部署。”
以前,部署通常需要三到四个小时,并且每周或每两周在低流量时段部署两三个月的工作量。现在,Kubernetes 的部署需要五分钟,整个部署(包括冒烟测试)需要一小时。Adams 说:“我们能够每周部署三到四次,只需一周或两天的工作量。”“我们在工作日、白天进行部署,并且没有任何停机时间。即使在半夜,我们也不得不请求业务批准才能停机 30 分钟到一小时,因为人们可能正在进行贷款。现在我们可以部署、交付代码和迁移数据库,所有这些都无需停机。公司可以获得新功能,而无需担心业务丢失或延迟。”
云原生也影响了 Ygrene 的 50 多名开发人员和承包商的工作方式。Adams 和 Arnold 花费了大量时间“教人们开箱即用地进行分布式思考,”Arnold 说。“我们最终选择了我们称之为‘交付四 S’:安全(safely)、可靠(securely)、稳定(stably)和快速(speedily)。”(有关其安全方面的更多信息,请参阅他们关于“持续入侵”策略的文章。)Adams 说,至于工程师,“他们已经能够随着软件的进步而进步。我认为最终,开发人员对他们所做的工作感觉更好,而且他们也感觉与现代软件开发社区的联系更紧密。”
展望未来,Adams 很高兴能探索更多的 CNCF 项目,包括 SPIFFE 和 SPIRE。他说:“CNCF 已成为众多项目的出色孵化器。现在我们定期查看其网页,以了解是否有任何新的、出色的、高质量的项目可以集成到我们的堆栈中。它实际上已成为我们了解需要关注哪些软件以使我们的系统更安全或更具可扩展性的中心。”