AWS Database Blog
How RocketReach stabilized Amazon Aurora costs and improved performance with Amazon Aurora I/O-Optimized
Over 16 million users around the world, including 95% of the S&P Fortune 500, use RocketReach to power their sales, recruitment, and marketing teams. RocketReach connects professionals to new people and opportunities, powered by the most comprehensive, accurate contact information database with easy-to-use tools to simplify their customer’s workflow. High-quality data is the North Star of their product offerings.
RocketReach’s Advanced Search and Create Lead Lists products make it straightforward for their users to curate and target prospective contacts based on specific or broad criteria. AI-powered recommendations help unlock new possibilities, and saved searches automatically update when contact information changes occur, reducing the time required to prospect and digitally network. Their lightweight and intuitive REST API enables their customers to automate lead generation, contact discovery, people search, company information search, and profile enrichment, along with a myriad of other use cases. Furthermore, RocketReach’s Chrome extensions and powerful integrations with customer relations management platforms (CRMs), applicant tracking systems (ATSs), and engagement platforms enable users to do more from the comfort of their favorite applications.
In this post, we share how and why RocketReach turned to Amazon Aurora for increased scalability, performance improvements, and how Amazon Aurora I/O-Optimized provided cost savings and price predictability for their contact database.
Aurora storage configurations
Numerous organizations use Aurora to run critical, transactional database workloads since its launch in 2014. With Aurora, you can now choose between two storage configurations: Aurora Standard or Aurora I/O-Optimized. For applications with low to moderate I/O, Aurora Standard is a cost-effective option with its pay-as-you-go model for I/O operations. For I/O intensive applications, Aurora I/O-Optimized is a new configuration that provides predictable pricing for all applications and improved price-performance. You pay a predictable price based on the consumption of your Aurora database instances and storage. This makes it straightforward for independent software vendors (ISVs) running multi-tenant software as a service (SaaS) applications to estimate their database spend up front.
This price predictability is especially relevant for independent software vendors like RocketReach, since with I/O-Optimized, there are zero charges for read and write I/O operations. You only pay for your database instances and storage usage, making it effortless to predict your database spend up front. Taking advantage of cost saving options such as Reserved Instances, will help you further reduce spend. To learn more, refer to Amazon Aurora Pricing or Amazon Aurora storage and reliability.
Performance and cost implications of heavy I/O usage
RocketReach has been working on scaling and optimizing their database architecture for the last 2 years. In June 2022, RocketReach was using Amazon Relational Database Service (Amazon RDS) for PostgreSQL. During large-scale data ingestion, they wanted to decrease the amount of time it took to ingest large volumes of data, while maintaining a consistent cost. Testing on standard benchmarks has shown an increase in throughput of Aurora PostgreSQL of up to 3x over stock PostgreSQL on similar hardware. Aurora uses a variety of software and hardware techniques to ensure the database engine is able to fully use available compute, memory, and networking. I/O operations use distributed systems techniques, such as quorums to improve performance consistency. This prompted RocketReach to transition from Amazon RDS for PostgreSQL to Amazon Aurora PostgreSQL-Compatible Edition in July 2022. The move stabilized their traffic and helped them reliably complete large-scale jobs in less time. However, due to their heavy I/O usage, from the large batch data ingestions, costs increased overall and were less predictable, resulting in a need to move to Aurora I/O-Optimized to lower and steady out costs.
By April 2023, RocketReach had about half of their database costs coming from Aurora I/O requests. In the same month, RocketReach had just completed a cost-optimization exercise and was looking for additional ways to save. They had already gone through a right-sizing exercise and were taking advantage of cost saving programs such as using reserved instances. They were also actively monitoring Amazon CloudWatch metrics, using Performance Insights, and Enhanced Monitoring to monitor the performance and resource utilization. RocketReach was still trying to optimize their database query performance as well as reduce the I/O costs. Aurora I/O-Optimized seemed to be a great fit and the RocketReach team was excited to enable it and start saving on their I/O usage.
RocketReach architecture with Aurora
The following architecture diagram depicts 3 different Aurora database clusters. Traffic to the 3 Aurora databases originates from customers using RocketReach’s web application, API, landing pages, and browser extension.
The first Aurora database includes transactions for all customers who use RocketReach to retrieve company and profile data. This database includes a real-time log of customer transactions and is used to ensure RocketReach customers receive the most up-to-date data.
The second Aurora database contains source data for company and profile information that is consumed via RocketReach’s Lookup Service across all platforms. RocketReach data is consumed from multiple channels at varying intervals and ingested into this database.
In the final Aurora database, some of this data is served directly to customers, whereas other models are aggregated, processed, and stored to create compiled records that include metadata information like organizational charts, popular employees, and email format summaries. These aggregations allow customers to consume historical company trends and gain insights that allow them to connect to the right people faster.
Aurora I/O Optimized testing and success criteria defined
Before RocketReach decided to adopt I/O Optimized they had two main concerns, how much they could save, and what would be the performance impact, if any. To address these, RocketReach used CloudWatch to calculate the savings associated with switching to Aurora I/O-Optimized. Once RocketReach understood the savings, the AWS and RocketReach teams began analyzing the workloads before making the change to assure that there would not be any performance impacts. After gaining confidence in making the change, RocketReach tested the Aurora I/O-Optimized feature, gained confidence in making the change, and then enabled it on their production workloads. With Aurora I/O-Optimized, customers can disable it at any time, to revert back to Aurora Standard. There is also no downtime when switching from Aurora Standard to Aurora I/O-Optimized, further adding to RocketReach’s confidence in making this change.
Analyzing the results
After switching to I/O Optimized RocketReach immediately saw their bill become more predictable. Previously, there were large cost spikes when they were ingesting new batches of data. These often caused organizational reprioritizations and prevented RocketReach from consistently running their ingestion workloads. Following the usage of Aurora I/O-Optimized, the RocketReach team has been able to run their data ingestion workloads efficiently, which has kept their data fresh while maintaining predictable database costs. The following graphs show how they were able to more predictably run their workloads.
The first graph illustrates how Aurora I/O-Optimized allows RocketReach to run workers more consistently and put greater load on their database without having to worry about the storage cost implications.
The following graph shows how Amazon I/O-Optimized allows RocketReach to run data ingestion processes more often at a lower overall cost for their database workloads. As shown, RocketReach doesn’t need to pay for Storage I/O (metric USW2-Aurora:StorageIOUsage) costs once Aurora I/O-Optimized is enabled.
The benefits of switching to Aurora I/O-Optimized
With Aurora I/O-Optimized, RocketReach didn’t have to choose between performance and predictable database costs. After turning the feature on, they immediately saw the cost savings in their heavy I/O-intensive applications. The power of Aurora’s ability to handle substantial traffic, along with the cost reductions, led to significant success for RocketReach. The company was able to maintain their stable database performance while reducing and standardizing costs. The move reduced RocketReach’s total monthly Aurora costs by 60%. Additionally, the move made their AWS spend management easier to track and enabled their CTO to stay within budget for the year.
“Aurora I/O-Optimized was a critical addition for our team at RocketReach,” says Jeremy Livingston, CTO of RocketReach. “Not only did it allow us to leverage the advantages of Aurora more economically, it also helped prevent unplanned work across our teams.”
“Our team enjoyed the scalability benefits of Aurora, which allowed us to quickly ingest significant amounts of data without negatively impacting customers. Prior to the I/O-Optimized feature, our team found ourselves frequently triaging I/O increases, since they had a direct negative impact on our AWS costs. Since our platform was built years ago before I/O optimizations were a concern, it became a substantial effort to reengineer parts of our system to reduce costs.”
“The addition of the I/O-Optimized feature has stabilized our daily costs at RocketReach and allowed our team to focus on our business priorities rather than cost management efforts. We are now able to reap the scalability benefits of Aurora without having to worry about cost increases as our traffic scales.”
“We will absolutely continue to leverage Aurora I/O-Optimized when the use case aligns with its capabilities. At RocketReach, we have many workloads that require substantial amounts of data to be processed efficiently while maintaining performance for our customers. For these use cases, Aurora I/O-Optimized allows us to balance cost and performance, while rapidly delivering value to our customers.”
Conclusion
In this post, we discussed how RocketReach benefited from Aurora I/O-Optimized. RocketReach was able to save 60% without performance degradation of their I/O-intensive workloads. Aurora I/O-Optimized also enabled price predictability for RocketReach, allowing them to more easily budget IT expenses and forecast future workload costs.
If you have questions or comments, leave them in the comments section.
About the Authors
Sam Farber is an AWS Solutions Architect working with startup companies. His role involves coming up with practical solutions to problems that startups face. He is a former Software Engineer and Technical Trainer with hobbies that include snowboarding, golf, and traveling.
Anna Evanoff is a Startup Account Manager at AWS. She partners with customer’s leadership teams to align on strategic business goals and drive value beyond infrastructure.
Jeremy Livingston is the Chief Technology Officer at RocketReach. He is responsible for the development and execution of the company’s technology strategy, ensuring that the RocketReach platform continually evolves to meet the needs of its customers.
Pete Mikhail is a Database Sales Specialist at AWS who works with startup companies in the US. He works with customers to help them achieve their database goals and strategies while aiding in the internal and external processes.
Sarabjeet Singh is a Database Specialist Solutions Architect at AWS. He works with customers to provide guidance and technical assistance on database projects, helping them improve the value of their solutions when using AWS.