Four-Project Series

A Load Test CLI with Async Rust you own this product

prerequisites
intermediate Rust
skills learned
asynchronous Rust • building CLI applications • concurrent programming • network programming • Rust performance analysis • profiling • use Rust with Docker • collect and expose metrics
Marco Amann
4 weeks · 4-6 hours per week average · BEGINNER

pro $24.99 per month

  • access to all Manning books, MEAPs, liveVideos, liveProjects, and audiobooks!
  • choose one free eBook per month to keep
  • exclusive 50% discount on all purchases

lite $19.99 per month

  • access to all Manning books, including MEAPs!

team

5, 10 or 20 seats+ for your team - learn more


Play the role of a Rust programmer for Svalbard Inc., an online retailer whose Scandinavian furniture is growing in popularity. To mitigate the cost of scaling up its online store, the company is moving from on-premises installations to a cloud-native solution. It’s your job to provide Svalbard’s operators and developers with a tailor-made, production-ready, load-testing command-line interface (CLI) that simulates a variety of real-world scenarios. This allows them to safely test improvements to the infrastructure or updates to the application’s code.

You’ll use async-supporting tools including hyper, Tokio, clap, Prometheus, and Docker to write a basic asynchronous HTTP load generator that can handle multiple concurrent connections. You’ll add configurability, gather and display immediate feedback, and present statistics in multiple formats, providing the best useability to the operators. You’ll track down potential performance bottlenecks and implement solutions to tackle them. Then, you’ll scale up your application to support a wide range of use cases and prepare it for production. Throughout this series of liveProjects, you’ll solve common concurrency challenges as you create and deploy a robust, asynchronous CLI application in Rust.

These projects are designed for learning purposes and are not complete, production-ready applications or solutions.

I gave the project a 5-star rating as it was an exciting project with real-world applications. It was fun to build and test the app.

Sayan Mallick, student

liveProject mentor and Manning author Claus Matzinger shares what he likes about the Manning liveProject platform.

here's what's included

Project 1 Create an HTTP Load Generator

Svalbard Inc.’s Scandinavian furniture is quickly becoming a living room staple in homes across the globe. To tame the cost of its success, the company has decided to migrate from expensive-to-scale legacy mainframes to a more flexible, modern deployment model. Your task is to implement continuous load testing and reporting. Using hyper and Tokio, you’ll send HTTP requests as you create a proof of concept. You’ll drive multiple concurrent connections using Tokio, gather and improve metrics from these connections by designing an asynchronous execution flow, and add robust error handling. When you’re finished, you’ll have a fully functioning, scalable HTTP load-test application.

Project 2 Configurable CLI Application

Svalbard is quickly becoming a household name as customers all over the world bring the online store’s furniture into their homes. But Svalbard’s backend applications run on legacy mainframes that are increasingly expensive to scale. That’s why the store has adopted a more flexible modern deployment model. As a Rust programmer, your task is to provide its developers and operators with a load-testing CLI tool that simulates a multitude of real-world scenarios.

Using Tokio, Serde, and clap, you’ll add functionality for users to configure the number of connections and requests, as well as other parameters. You’ll gather and display immediate feedback, empowering users to spot and correct misconfiguration early on. You’ll calculate statistics on latencies in your application and display them in human- and machine-readable output, providing the maximum benefit from the gathered data. When you’re done, you’ll have a CLI that delivers users high configurability, reliable signal handling, and a means of providing immediate feedback for more nimble, cost-effective results.

Project 3 Performance Improvements

Svalbard Inc.’s customers are reveling in the comfort of the global online store’s Scandinavian furniture. But, for Svalbard, the cost to scale its backend applications is less than comfortable. To ease its pain, the store has begun migrating its legacy mainframes to a more flexible, modern deployment model. Svalbard has already implemented a CLI tool that internal developers and operators can easily configure to their needs. As a Rust programmer, it’s up to you to improve this tool. You’ll track down potential performance bottlenecks with the help of flame graphs, then implement solutions to tackle them using hyper. You’ll verify the performance improvements, then create a tool for guarding against regressions with the Criterion suite. When you’re done, you’ll be comfortable evaluating and improving an asynchronous Rust application.

Project 4 Production-Ready Application

Svalbard’s Scandinavian furniture is quickly becoming a living room staple in homes across the globe. But the cost of scaling up the online store’s application is growing as fast as its customer base. As a Rust programmer, you’ve been helping Svalbard migrate its legacy mainframes to a more flexible, modern deployment model to manage the cost. Your application is fast and reliable, but you’re not done yet! As more people use your tool, the number of use cases it needs to support is increasing, too.

Your task is to refactor your application from a locally executed CLI tool to an always-on service. You’ll scale up observability by adding logging and metrics collection using industry-standard tools, including Prometheus, and you’ll deploy your application as a Docker container alongside a reference service. When you’re done, you’ll have built a production-ready application that supports a wide range of real-world scenarios.

book resources

When you start each of the projects in this series, you'll get full access to the following book for 90 days.

choose your plan

team

monthly
annual
$49.99
$499.99
only $41.67 per month
  • five seats for your team
  • access to all Manning books, MEAPs, liveVideos, liveProjects, and audiobooks!
  • choose another free product every time you renew
  • choose twelve free products per year
  • exclusive 50% discount on all purchases
  • A Load Test CLI with Async Rust project for free

The instructions in the presentation of each project were good.

Eder Andrés Ávila Niño, junior programmer

I learnt what I expected to and can apply the knowledge elsewhere.

Richard Vaughan, CTO, Purple Monkey Collective

project author

Marco Amann

Marco Amann is a software engineer at AxonIQ where he develops robust distributed systems. He has leveraged Rust in both professional and personal endeavors to build applications spanning a wide range of areas. He has co-authored a German language book about Rust, and spoken at workshops and conferences on topics such as embedded Rust on an STM32 and making APIs safer by adhering to rules about borrowing. Visit his blog at amann.dev.

Prerequisites

These liveProjects are for Rust programmers who are familiar with Rust syntax and its ownership system and who want to write reliable, efficient code. To begin these liveProjects you’ll need to be familiar with the following:

TOOLS
  • Intermediate Rust
  • Basic Docker
TECHNIQUES
  • Concurrent programming experience (in any language)

features

Self-paced
You choose the schedule and decide how much time to invest as you build your project.
Project roadmap
Each project is divided into several achievable steps.
Get Help
While within the liveProject platform, get help from other participants and our expert mentors.
Compare with others
For each step, compare your deliverable to the solutions by the author and other participants.
book resources
Get full access to select books for 90 days. Permanent access to excerpts from Manning products are also included, as well as references to other resources.