Founded in 1996 to help 401(k) participants manage their retirement accounts, Edelman Financial Engines is the largest independent investment advisor in the United States in terms of assets under management. It offers financial help to more than nine million people across 743 companies (including 150 of the Fortune 500) and represents $1.18 trillion in retirement assets. The company also manages more than one million individual investment accounts worth more than $160 billion.
Unlike traditional investment advisors, Edelman Financial Engines scales its business by using computational “engines” to automate portfolio management combined with access to human advisors. “Using technology, we can manage over one million clients with fewer than 500 financial advisors—a ratio significantly better than traditional financial-services companies,” says Paul Gibson, principal system architect at Edelman Financial Engines.
As demand for its services grew, Edelman Financial Engines wanted to improve the scalability of its core engine component—the integer programming optimizer (IPO). Integer programming is a type of linear programming used to compute mathematical optimization or feasibility. The IPO server uses a native, third-party solver library to perform the calculations used to evaluate and optimize investment portfolios.
“The IPO server consumes more than 30 percent of our total CPU capacity,” says Alex Yavorskiy, chief technology officer at Edelman Financial Engines. “We wanted a solution that would alleviate the need for capacity planning during marketing campaigns that produce large traffic spikes.”
Edelman Financial Engines also wanted a solution that would provide system resilience—the ability to quickly recover from a potential major disruption. “For certain events, like managing exotic portfolios, having more stability would mean not having to devote time to monitoring the system, analyzing the event, and stabilizing the IPO server farm,” says Yavorskiy. The company also wanted to break up its monolithic architecture into microservices for greater agility. “Our code base had grown to more than four million lines of code,” says Yavorskiy. “But we didn’t want to grow our in-house server farms because we would need to expand operations to support them.”
Edelman Financial Engines chose the Amazon Web Services (AWS) serverless computing platform to run its IPO engine. Serverless computing enables Edelman Financial Engines to run the IPO engine without provisioning or managing any servers.
During the process of migrating its IPO engine to AWS, the company decided AWS Lambda would be a better fit than Amazon Elastic Compute Cloud (Amazon EC2) for its IPO-compute workload because Lambda scales precisely with the workload. “We don’t need to overprovision to handle tenfold spikes in traffic that can last hours or days,” says Allen Aubuchon, chief architect at Edelman Financial Engines. “With AWS Lambda, we don’t need to worry about spikes or growing or shrinking the farm.”
With AWS Lambda, the company found it was still able to use third-party libraries. The company was initially unsure of how to package the IPO server’s native, third-party library in order for Lambda to find it at runtime. Access to the library is typically configured through a Java virtual-machine parameter, java.library.path, at runtime. “We were not sure how to specify it,” says Yavorskiy. “But we found the AWS Lambda Java environment already included the java.library.path parameter, and we were able to include the library in the standard resource folder.”
By running Java on AWS Lambda, Edelman Financial Engines also reduces its administrative burden. “We don’t need to worry about OS patches or upgrades to Apache Tomcat and the Java Development Kit,” says Yavorskiy. “All those concerns are taken care of.”
The company replaced 50 IPO servers running in 21 different environments with four Lambda endpoints that handle all the traffic. Each time an IPO request is received, a Lambda function is triggered and runs the IPO code. Since the functions are stateless, AWS Lambda can run as many copies of the function as needed in parallel, dynamically allocating compute capacity to match the rate of incoming requests. “We see spikes of up to 1,000 requests per second, with an average duration of 100 milliseconds—which is about 100 concurrent executors,” says Gibson.
To monitor Lambda processes, the company uses Amazon CloudWatch (CloudWatch) and ingests the CloudWatch logs into Splunk for analysis. “The performance of AWS Lambda is more predictable and stable than running the IPO server on premises,” says Yavorskiy.
By using AWS Lambda instead of Amazon EC2 instances for its IPO workload, Edelman Financial Engines is realizing an ongoing cost savings. “We project 94 percent savings in hard costs, or about $110,000 annually,” says Yavorskiy. “That’s not including the cost savings in operational maintenance—security patches and library upgrades—which AWS Lambda takes care of automatically.”
Since rolling out AWS Lambda, Edelman Financial Engines has experienced near-zero downtime and near-zero performance degradation while serving 200–300 million IPO requests per month at rates of 60,000 per minute during heaviest traffic, which can reach 10 times normal traffic. “AWS has increased our system’s resilience,” says Yavorskiy. “If there are crashes due to bad requests, there is no lasting effect on service stability because new executors are instantiated right away to handle incoming traffic.”
The AWS Lambda function model makes it a natural fit for building microservices. Running the IPO as a microservice on AWS Lambda with its own continuous integration/continuous delivery (CI/CD) pipeline is a major step toward breaking up the company’s monolithic architecture. Edelman Financial Engines has 15 additional microservices in production that it expects to build on AWS.
Edelman Financial Engines is excited to consider how it might use Lambda and serverless computing to grow its business. “In addition to the one million clients whose accounts we currently manage, we have access to millions of other users who are prospective clients,” says Gibson. “Using AWS Lambda will enable us to scale to serve millions more who need financial help.”
Learn more about serverless computing on AWS.