使用 AWS Lambda 将使我们能够进行扩展,为数百万需要财务帮助的人提供服务。
Paul Gibson 首席系统架构师
  • 关于该公司

    Financial Engines 是美国最大的独立投资咨询公司,为全国数百万人提供技术支持的投资组合管理服务、财务规划和投资建议。

  • 使用的服务

  • AWS 的优势

    • 无需预置或管理服务器即可扩展。
    • 每月处理 2-3 亿个服务器请求,每分钟高达 60000 个
    • 动态分配计算能力以匹配传入请求的速率
    • 代码并行运行并分别处理每个请求
    • 将基础设施成本降低了 90% 以上
    • 零服务器停机时间

Financial Engines 成立于 1996 年,旨在帮助 401000 名参与者管理其退休账户,是美国资产管理领域最大的独立投资咨询公司。它为 743 家公司(包括财富 500 强中的 150 家)的 900 万人提供了财务帮助,其退休资产达 1.18 万亿美元。该公司还管理着超过 100 万个个人投资账户,价值超过 1600 亿美元。

与传统的投资咨询公司不同,Financial Engines 通过使用计算“引擎”实现投资组合管理的自动化,同时结合人工顾问来对其业务进行扩展。“利用技术,我们可以用不到 500 名财务顾问来管理超过 100 万个客户,这一比率大大优于传统的金融服务公司,”Financial Engines 的首席系统架构师 Paul Gibson 说。

随着对其服务需求的增长,Financial Engines 希望提高其核心引擎组件的可扩展性,即整数规划优化器 (IPO)。整数规划是一种线性规划,用于计算数学优化或可行性。IPO 服务器使用原生的第三方求解器库来执行用于评估和优化投资组合的计算。

“IPO 服务器消耗了我们总 CPU 容量的 30% 以上,”Financial Engines 首席技术官 Alex Yavorskiy 说。“我们需要一种解决方案,以减轻在营销活动中产生大量流量高峰的容量规划需求。”

Financial Engines 还需要一种能够提供系统弹性的解决方案,即能够从潜在的重大中断中快速恢复的能力。“对于某些事件,例如管理异国投资组合,拥有更高的稳定性意味着不必花费时间来监控系统、分析事件和稳定 IPO 服务器群组,”Yavorskiy 说。该公司还希望将其整体架构分解为微服务,以提高敏捷性。“我们的代码库已发展到超过四百万行,”Yavorskiy 说。“但是我们不想扩大内部服务器群组,因为我们需要扩展运营来支持它们。”

Financial Engines 选择使用 Amazon Web Services (AWS) 无服务器计算平台来运行其 IPO 引擎。借助无服务器计算,Financial Engines 无需预置或管理任何服务器即可运行 IPO 引擎。

在将其 IPO 引擎迁移到 AWS 的过程中,该公司认为 AWS Lambda 将比 Amazon Elastic Compute Cloud (Amazon EC2) 更适合其 IPO 计算工作量,因为 Lambda 可以根据工作量进行精确扩展。“我们无需过度预置即可处理可能持续数小时或数天的十倍流量高峰,”Financial Engines 的首席架构师 Allen Aubuchon 表示。“借助 AWS Lambda,我们无需担心峰值或者扩大或缩小服务器群组。”

借助 AWS Lambda,该公司发现它仍然能够使用第三方库。该公司最初不确定如何打包 IPO 服务器的原生第三方库,以便 Lambda 在运行时找到它。通常在运行时通过 Java 虚拟机参数 java.library.path 配置对库的访问。“我们不确定如何指定它,”Yavorskiy 说。“但是我们发现 AWS Lambda Java 环境已经包含了 java.library.path 参数,并且能够将库包含在标准资源文件夹中。”

通过在 AWS Lambda 上运行 Java,Financial Engines 还可以减轻其管理负担。“我们不必担心操作系统补丁或针对 Apache Tomcat 和 Java 开发工具包的升级,”Yavorskiy 说。“所有这些问题都得到了解决。”

该公司用四个负责处理所有流量的 Lambda 终端节点替换了在 21 种不同环境中运行的 50 台 IPO 服务器。每次收到 IPO 请求时,都会触发 Lambda 函数并运行 IPO 代码。由于函数是无状态的,因此 AWS Lambda 可以并行运行所需数量的函数副本,从而动态分配计算能力以匹配传入请求的速率。“我们看到每秒有高达 1000 个请求的峰值,平均持续时间为 100 毫秒,大约是 100 个并发执行器,”Gibson 说。

为了监控 Lambda 流程,该公司使用 Amazon CloudWatch (CloudWatch) 并将 CloudWatch 日志提取到 Splunk 中进行分析。“与在本地运行 IPO 服务器相比,AWS Lambda 的性能更具可预测性和稳定性,”Yavorskiy 说。 

IPO Lambda Diagram

通过使用 AWS Lambda 而不是 Amazon EC2 实例来运行 IPO 工作负载,Financial Engines 实现了持续的成本节省。“我们预计可节省 94% 的硬成本,每年节省约 110000 美元,”Yavorskiy 表示。“这不包括运营维护(安全补丁和库升级)方面节省的成本,而 AWS Lambda 会自动进行这些维护。”

自推出 AWS Lambda 以来,Financial Engines 经历了近乎零的停机时间和近乎零的性能下降,同时在流量最大的情况下每月以每分钟 60000 的速率处理 2-3 亿个 IPO 请求,可以达到正常流量的 10 倍。“AWS 提高了我们系统的弹性,”Yavorskiy 说。“如果由于坏的请求而导致崩溃,则不会对服务稳定性产生持久影响,因为新的执行程序会立即实例化以处理传入的流量。”

AWS Lambda 函数模型使其特别适合构建微服务。通过其自身的持续集成/持续交付 (CI/CD) 管道在 AWS Lambda 上将 IPO 作为微服务运行,这是分解公司整体架构的重要一步。Financial Engines 预计将在 AWS 上构建 15 种额外的微服务。

Financial Engines 很高兴考虑如何使用 Lambda 和无服务器计算来发展业务。“除了我们目前管理的一百万个客户外,我们还可以访问数百万个潜在客户,”Gibson 表示。“使用 AWS Lambda 将使我们能够进行扩展,为数百万需要财务帮助的人提供服务。”