Performance benchmarking using Meshery and Nighthawk
What is performance benchmarking and Why should I care?
Many of you may remember that the HBO streaming service crashed when the final season of the popular sitcom, Game of Thrones went live on the service. Unable to engage all the user requests, the streaming service and the website broke down and ultimately resulted in DoS (Denial of Service). There are numerous examples of service crashes across different platforms, which has forced developers to take a closer look at performance benchmarking and pre-launch performance checks.
There are several advantages of preliminary service benchmarking, which may extensively enhance the response time, resolve glitches, enhance the application’s robustness, and bring together several other commendable factors, including but not limited to stability and dependability within an application.
There are several tools for performance benchmarking. A major one is the interconnected relationship between load generators and benchmarks. Some of the well-known load generators in the cloud-native realm are:
- Vegeta and then there is Nighthawk
The conclusion can be encapsulated as following, Meshery, the service mesh management plane possesses the ability to generate load and benchmark services in/out of your service mesh using Fortio, Wrk2 and now, Nighthawk too.
Meshery + Nighthawk = Robust Distributed and Scalable Services
Nighthawk, written and maintained by the Envoy Community, is a L7 (HTTP/HTTPS/HTTP2) performance characterization tool that supports performance benchmarking using HTTP or gRPC services.
Nighthawk is built using open-source builds and test tool Bazel and supports output formatting to well-known formats, allowing integration with other systems and dashboards. To add more to the list, it will soon support distributed performance benchmarking which is currently under an active development stage.
On the other hand, Meshery, written and maintainer by Layer5 Community is the multi-service mesh management plane offering lifecycle, configuration and performance management of service meshes and their workloads. With Meshery, you can both, manage your service mesh’s lifecycle, and benchmark them with industry-grade tools to let you know how much under or over-utilized your services are.
Soon, Meshery is going to be a canonical implementation for Service Mesh Performance which is a common and standardised format to describe :
- Performance test configuration
- Service mesh configuration
- Environment configuration
- Workload configuration
- Performance test results
How did we achieve it ?
The following project was proposed as a Google Summer of Code Idea, I was selected as a student mentee to draft the design, architecture and code my way from scratch. On my journey, I received guidance from some amazing mentors, colleagues and open-source stake holders. I discussed the design proposal with Envoy Team as well as Layer5 Team and from suggestions from both, I was able to complete my project.
In the course of the project, I came up with the idea of invoking Nighthawk as a separate container with which Meshery will communicate using a go-lang based middleware.
To my elation, the project was a huge success and Nighthawk is now invoked as a load-generator in Meshery. Soon, the public release for the new version will be made and users will be able to utilize Nighthawk as a performance-benchamark tool alongside with Fortio and Wrk2.
This is just the first relay, in the long run, there are many more milestones to come. The following is a list of projects which will be completed in upcoming months:
- Invoke Nighthawk as an gRPC Service and support gRPC connection between Nighthawk & Meshery.
- Implement user-profiles for performance benchmarking which may store some preset preferred values according to users.
- Enhance Nighthawk to support distributed load generation and performance benchmarking.
- NATS & gRPC Performance Benchmarking for gRPC and NATS services invoked in Meshery.
and many more awesome and bleeding-edge ideas.
I am a senior at the Indian Institute of Technology (IIT), Jodhpur from Indore, India. In addition to my obligations as an Undergraduate in Computer Science, I have been involved in a plethora of open-source projects and have contributed to various OSS organizations like Cloud Native Computing Foundation (CNCF), FOSSAsia, OpenRefine and Layer5, have had the opportunity to intern at CNCF (via the Google Summer of Code – GSoC program). My recent industry experience was at GoJek as a product engineering intern, and have held a previous internship position at FOSSAsia as well. I also had the privilege to mentored pre-university students during Google Code-In 2019 for TensorFlow & FOSSAsia.
How can I get involved?
If any of this sounds remotely exciting, I implore you to give this a chance. You won’t regret it. Head over to our Slack Channel and join the #performance channel where everything related to performance testing is discussed. We would love to hear your feedback. Stay tuned for more blogs related to Performance Benchmarking, SMI Conformance and all things meshy!!!