Skip to content

Instantly share code, notes, and snippets.

@kushthedude
Last active August 28, 2020 08:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kushthedude/3233ee0422ad1471aae097c305ebda23 to your computer and use it in GitHub Desktop.
Save kushthedude/3233ee0422ad1471aae097c305ebda23 to your computer and use it in GitHub Desktop.
GSoC Work Product | Kush Trivedi | CNCF

Kush Trivedi | @kushthedude | CNCF

Overview

During this summer period, I worked with Envoy & Layer5 community to enable distributed load testing of service meshes and envoy data planes, Envoy's performance benchmarking tool Nighthawk and Layer5's multimesh benchmarking tool Meshery were used to accomplish the project. Nighthawk is a L7 (HTTP/HTTPS/HTTP2) performance characterization tool which supports load testing with HTTP/1.1 and HTTP/2 over HTTP and HTTPS. Meshery is the multi-service mesh management plane offering lifecycle, configuration and performance management of service meshes and their workloads.

My main goal of this project was to focus on Nighthawk architecture and how it can be invoked in Meshery which currently supports load generation over fortio & wrk2, moreover I worked on SMI conformance tool, service mesh performance specification, architectural design & more.

With the onset of community bonding period, I started off by laying the groundwork required for the successful completion of project. On my journey ahead during the GSoC period I embraced with many new bleeding edge technologies like gRPC, Service Mesh Interface, Service Mesh Performance Specification, Performance Benchmarking, Open Service Mesh and more.

Although my work was primarily based on distributed services in Golang, I didn't restricted myself and explored the UI factor and CI pipelines of the services. By enabling cache store, parallelisation between jobs, and interdependency for workflows I was able to reduce the time taken by CI pipelines by around 12-15 times.

Major Milestones

Community Bonding Period

  • Laid the base for upcoming refactors and features by enhancing existing server routes, focused on minor bug fixes in the server, refactored UI dependencies, reduced the production bundle package and drafting the design document for distributed performance benchmarking.

Phase I

  • Introduced ES-Lint for UI code and established standard code quality guidelines for the community.
  • Implemented Build & Release for the repository artifacts using Goreleaser, automated the continuous delivery of the tool for brew, scoop & OS package files.
  • Implemented Load-Test defaults per user for performance benchmarking.

Screenshot 2020-08-27 at 6 04 14 PM

Phase II

  • Introduced Traffic Specification and Application Metadata Specification for Service Mesh Performance.
  • Sanitised the client-side code & removed the dead code from the server to increase application performance.
  • Compared different performance benchmarking tools to have an architectural comparision among Nighthawk, Fortio & Wrk2.
  • Created an interface using common methods for all the load generators termed as Load Generator Inteface, defined aliases and constants for different parameters in load generator.

nighthawk-ui

Phase III

  • Following the design document for the Nighthawk integration, initiated a Golang based API for Nighthawk.
  • Worked on design mockup & UI for the SMI Conformance tool invoked within the Meshery, service mesh management plane.
  • Created a Golang package named nighthawk-go which will serve as a middleware layer between meshery & nighthawk to enable performance benchmarking.
  • Migrated CI pipelines to introduce a cache store, parallelisation between jobs, and interdependency for workflows.
  • Invoked Open Service Mesh Adapter in Meshery to expose its functionality to end-users.

smi-conformance-with-meshery

Code Contributions

Here is the design document invoking distributed load generation & performance benchmarking using nighthawk.

Community Outreach

Being associated with such fluorishing community has been a boon to me, I not only made code contributions but also guided new contributors to get started with service-meshes. I reviewed more than 150 Pull Requests of my colleagues and new contributors during my work period. I published blog posts and articles about my journey with CNCF as a GSoC mentee, and my work was also presented at KubeCon+CloudNativeCon-2020 EU.

Work Remaining

I will be active in community even after my GSoC Period, there is still few work remaining in the nighthawk api:

  • Addition of e2e and behaviour driven tests using ginkgo for the API & command.
  • Update the nighthawk-api to follow the upstream nighthawk client as soon as stable release with distributed performance architecture is made.
  • Revamp the UI to expose more details about the capability of each load-generator and letting the end-users choose which one is suited for there use-case.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment