Open Sourcing Daytona: A Framework For Automated and Application-agnostic Performance Analysis
<p>By Sapan Panigrahi and Deepesh Mittal<b><br/></b></p><p>Today, we are pleased to offer <a href="https://github.com/yahoo/daytona">Daytona</a>, an open-source framework for automated performance testing and analysis, to the community. Daytona is an application-agnostic framework to conduct integrated performance testing and analysis with repeatable test execution, standardized reporting, and built-in profiling support.</p><p>Daytona gives you the capability to build a customized test harness in a single, unified framework to test and analyze the performance of any application. You’ll get easy repeatability, consistent reporting, and the ability to capture trends. Daytona’s UI accepts a performance testing script that can run on a command line. This includes websites, databases, networks, or any workload you need to test and tune for performance. You can submit tests to the scheduler queue from the Daytona UI or from your CI/CD tool. You can deploy Daytona as a hosted service in your on-prem environment or on the public cloud of your choice. In fact, you can even host test harnesses for multiple applications with a single centralized service so that developers, architects, and systems engineers from different parts of your organization can work together on a unified view and manage your performance analysis on a continuous basis. </p><p>Daytona’s differentiation lies in its ability to aggregate and present essential aspects of application, system, and hardware performance metrics with <b>a simple and unified user interface</b>. This helps you maintain your focus on performance analysis without changing context across various sources and formats of data. The overall goal of performance analysis is to find ways of maximizing application throughput with minimum hardware resource and the best user experience. Metrics and insights from Daytona help achieve this objective.</p><p>Prior to Daytona, we created multiple, heterogenous performance tools to meet the specific needs of various applications. This meant that we often stored test results inconsistently, making it harder to analyze performance in a comprehensive manner. We had a difficult time sharing results and analyzing differences in test runs in a standard manner, which could lead to confusion. </p><p>With Daytona, we are now able to integrate all our load testing tools under a single framework and aggregate test results in one common central repository. We are gaining insight into the performance characteristics of many of our applications on a continuous basis. These insights help us optimize our applications which results in better utilization of our hardware resources and helps improve user experience by reducing the latency to serve end-user requests. Ultimately, Daytona helps us reduce capital expenditure on our large-scale infrastructure and makes our applications more robust under load. Sharing performance results in a common format encourages the use of common optimization techniques that we can leverage across many different applications.</p><p>Daytona was built knowing that we would want to publish it as open source and share the technology with the community for validation and improvement of the framework. We hope the community can help extend its use cases and make it suitable for an even broader set of applications and workloads. </p><p><b>Architecture</b></p><p>Daytona is comprised of a centralized scheduler, a distributed set of agents running on SUTs (systems under test), a MySQL database to store all metadata for tests, and a PHP-based UI. A test harness can be customized by answering a simple set of questions about the application/workload. A test can be submitted to Daytona’s queue through the UI or through a CLI (Command Line Interface) from the CI/CD system. The scheduler process polls the database for a test to be run and sends all the actions associated with the execution of the test to the agent running on a SUT. An agent process executes the test, collects application and system performance metrics, and sends the metrics back as a package to the scheduler. The scheduler saves the test metadata in the database and test results in the local file system. Tests from multiple harnesses proceed concurrently.<br/></p><p><a href="https://s.yimg.com/ge/yahooeng/Daytona.png"></a></p><a href="https://s.yimg.com/ge/yahooeng/Daytona.png"><figure class="tmblr-full" data-orig-height="389" data-orig-width="891" data-orig-src="https://s.yimg.com/ge/yahooeng/Daytona.png"><img src="https://66.media.tumblr.com/a3e1a520bdd3dd74053b6514a5d6f622/tumblr_inline_pek5dnnWsr1rgj0aw_540.png" alt="image" data-orig-height="389" data-orig-width="891" data-orig-src="https://s.yimg.com/ge/yahooeng/Daytona.png"/></figure></a><p></p><center>Architecture and Life Cycle Of A Test</center><p><b>Looking Forward</b></p><p>Our goal is to integrate Daytona with popular open source CI/CD tools and we welcome contributions from the community to make that happen. It is available under Apache License Version 2.0. To evaluate Daytona, we provide simple instructions to deploy it on your in-house bare metal, VM, or public cloud infrastructure. We also provide instructions so you can quickly have a test and development environment up and running on your laptop with Docker. Please join us on the path of making application performance analysis an enjoyable and insightful experience. Visit the <a href="https://github.com/yahoo/daytona">Daytona Yahoo repo</a> to get started!<br/></p>