Practical End-to-end Performance Evaluation of Backend Software Applications


Book Description

This dissertation makes contributions to four areas of performance testing - the test process itself, monitoring, automation and end-to-end performance evaluation of backend applications. The first contribution deals with the testing process. Performance testing is a key element of industrial software development, but we still encountered the following two problems. (1) While testing textbooks prescribe writing tests against performance goals, we find that it is impractical to gather from business analysts performance goals that are detailed enough for finding subtle performance bugs. (2) Once performance tests are conducted, we were asked questions such as - how do you make sure that the results collected during testing are a good indication of how the code will function in production? To enable practitioners to address these problems, we introduce two additional performance testing process components, which we call release certification and test data correlation. Our key idea to address problem (1) is to run two different versions of the same subject application side-by-side in the same test environment and (2) is to correlate the performance measurements of the test and production environments. Running individual soak, load and stress tests to assess different aspects of an application is a tedious process. So we introduce a new test - impulse test that not only combines the characteristics of multiple existing tests but also enables testing for engineering aspects such throttles, alerts and timeouts. The second contribution is in the area of instrumentation. Monitoring the performance of distributed applications is an important task in practical software engineering. Current monitoring tools are often limited in the range of computing platforms they support, which limits their utility in several business monitoring scenarios. Current monitoring tools can also impose a significant performance overhead. We describe our in house built EI Enterprise Instrumentation monitoring tool that addresses these issues. We compare EI with a state-of-the-art monitoring tool on a real online shopping application and describe our experience with EI as well as feedback we received from EI users. The third component of the study deals with test automation and scripting. Scarcity of commercially available testing tools that could support all native or application specific message formats as well as those that cater to non GUI or non-web based backend applications led to creating our own customized traffic generator and scripts. This study provides (1) the general design principles for a test script that can be used to generate traffic for any request format as well as (2) specific factors to keep in mind when creating a script that will work in a test environment that uses a mock. It will also address the (3) design and properties of a test harness. It provides a simple framework that can be easily used to complete an end-to-end testing process: pre test, traffic generation and post test activities. Last but not the least the dissertation proposes a solution to assess performance for backend applications. State space models specifically Markov models are used extensively to predict anomalies, capacity and throughput in computer systems. In most cases existing solutions depend on underlying architecture and historical data to create the models and then detect states that differ from the created profile. In this study we will use Markov models to proactively predict the performance of a software system by using client side input parameters and application attributes without the need to know the underlying architecture. The goal is to find pressure points/bottlenecks for the application when it interacts with other components. Pressure points are any application resource that can become exhausted thereby restricting or degrading service level performance such as CPU, memory, disk, network and so on. All solutions proposed in this study have been implemented on real world travel applications, in most cases an airline shopping application. The data gathered and all measurements/plots in this study are from travel related pieces of code that are live and used by customers today.




System Performance Evaluation


Book Description

Throughout successive generations of information technology, the importance of the performance evaluation of software, computer architectures, and computer networks endures. For example, the performance issues of transaction processing systems and redundant arrays of independent disks replace the virtual memory and input-output problems of the 70s.




Handbook of Research on End-to-End Cloud Computing Architecture Design


Book Description

Cloud computing has become integrated into all sectors, from business to quotidian life. Since it has revolutionized modern computing, there is a need for updated research related to the architecture and frameworks necessary to maintain its efficiency. The Handbook of Research on End-to-End Cloud Computing Architecture Design provides architectural design and implementation studies on cloud computing from an end-to-end approach, including the latest industrial works and extensive research studies of cloud computing. This handbook enumerates deep dive and systemic studies of cloud computing from architecture to implementation. This book is a comprehensive publication ideal for programmers, IT professionals, students, researchers, and engineers.




Front-End Analysis and Return on Investment Toolkit


Book Description

Front-End Analysis and Return on Investment Toolkit is a comprehensive collection of guidelines, job aids, rich examples and tips that give you the information needed to create performance interventions that will deliver the desired results. By using this vital resource you will be able to analyze training requests on the front end, measure worth and ROI in learning, and performance on the back end, and Identify the business need underlying the request. Clarify the desired performance outcomes. Systematically investigate and describe the current performance state. Characterize the gap between current and desired performance in terms of magnitude, value, and urgency. Identify the array of factors affecting the gap. Select appropriate, economical, feasible, and acceptable performance interventions that deliver desired results.




High Performance Computing


Book Description

This book constitutes the refereed proceedings of the 36th International Conference on High Performance Computing, ISC High Performance 2021, held virtually in June/July 2021. The 24 full papers presented were carefully reviewed and selected from 74 submissions. The papers cover a broad range of topics such as architecture, networks, and storage; machine learning, AI, and emerging technologies; HPC algorithms and applications; performance modeling, evaluation, and analysis; and programming environments and systems software.




Practical C++ Backend Programming


Book Description

"Practical C++ Backend Programming" is a comprehensive walkthrough that provides readers with the necessary tools and knowledge to become proficient C++ backend developers. With a strong focus on real-world application and practical implementation, this book takes readers on a journey through the multifaceted landscape of backend development, making it an essential resource for any aspiring or current backend developer. Starting with the basics, the book introduces C++, providing a solid foundation in the language, its structure, and core concepts with regards to backend programming. From there, readers dive into the more complex elements of backend development. Through our engaging sections, use-cases and sample examples, readers are introduced to advanced topics such as concurrent programming, exploring threading and multiprocessing to handle intensive computational tasks, thus laying the groundwork for scalable applications. This book offers an in-depth look into APIs, specifically gRPC, along with caching strategies, and database management, using MongoDB as a NoSQL database of choice. All the while, readers will learn to implement these technologies in a practical context, building a blog application from scratch, thereby bridging the gap between theory and practical implementation. An entire section is dedicated to securing applications, wherein the book teaches authentication, authorization, and database security, and demonstrates how to implement these measures in the blog application. Another utmost important part of this book is to cover testing strategies, teaching the reader how to employ Google Test (gtest) to create robust and fail-proof backend solutions. Finally, the journey culminates in a step-by-step walkthrough to deploying applications on AWS, ensuring the reader is equipped with the necessary skills to take their applications live. Key Learnings Detailed overview of C++ programming, catering to both beginners and experienced coders. Practical exploration of concurrent programming for scalable and efficient application design. Comprehensive understanding of API usage, specifically using the gRPC framework. Deep dive into MongoDB for effective NoSQL database management and operations. Thorough walkthrough to implementing caching strategies for performance optimization. Strategic use of Nginx for handling web server needs including load balancing. Hands-on guide to implementing security measures for databases, APIs, and web servers. Instruction on employing Google Test for robust application testing and debugging. Step-by-step guidance for deploying applications on AWS, ensuring real-world readiness. Practical application of concepts via building and refining a blog application. Table of Content Introduction to Backend Development C++ Refresher and Essentials Deep Dive into Algorithms Mastering Version Control - Git and GitHub Managing Database Operations with MongoDB Crafting Rest APIs with gRPC Dealing with Client-side and Server-side Caching Managing Web Servers with Nginx Testing Your C++ Backend Securing Your C++ Backend Deploying Your Application Audience This book is appropriate for readers with some background in C++ and nothing about back-end development. It's great for those just getting their feet wet in back-end development, as well as seasoned pros looking to hone their craft and learn something new. Whether you're a student, a professional, or a hobbyist, this book will teach you everything you need to know to master the art of C++ back-end development.




Proceedings of the 3rd International Conference on Management Science and Software Engineering (ICMSSE 2023)


Book Description

This is an open access book.The 3rd International Conference on Management Science and Software Engineering (ICMSSE 2023) is to be held on July 21-23, 2023 at Qingdao, China. ICMSSE is China's annual conference since 2021. It was held in Chengdu, Chongqing from 2021 to 2022. Every year, there are many attendees from Asia, Europe, America, etc., and quite a few well-known experts give plenary speeches. Management science and engineering is a discipline that comprehensively uses systems science, management science, mathematics, economics and behavioral science and engineering methods, combined with information technology to study and solve management problems in society, economy, engineering and other aspects. In addition to the current situation of management science at home and abroad discussed in the first two sessions, this session realized that with the development of science and technology, the intersection of disciplines, coupled with the continuous expansion of the field of management science and engineering research, for online risk management (ERB, BRP system) and virtual organizations, virtual enterprises, etc., will become the focus of management science and engineering research in the future. This conference will also conduct in-depth research on these aspects, hoping to further promote the economic development of enterprises and provide them for their development. more clear direction and guidance.




Practical Rust 1.x Cookbook, Second Edition


Book Description

If you want to learn how to program in Rust and create strong, reliable apps with the most recent version Rust 1.68, then you need the "Practical Rust 1.x Cookbook (Second Edition)"—a book full of real-world solutions. An extensive collection of practical recipes covering a wide range of topics, this edition expands upon the first and guarantees that you will be well-versed in the complexities of Rust. You will learn the fundamentals of programming, how to set up a development environment, and the syntax of Rust in the first few chapters. Data structures, pattern matching, error handling, and concurrency are all covered in the recipes, which will set you up for success with more complex topics.As you go through the book, you'll learn how to write efficient and secure code by managing memory, using Rust's ownership model, and borrowing rules. You will gain an understanding of how to make use of robust Rust features such as traits, generics, and lifetimes to build code that is both flexible and reusable. The testing and debugging chapters provide the necessary tools and techniques to guarantee that your applications are dependable and free of bugs. Using profiling tools like valgrind and perf, the cookbook teaches you how to find and fix performance bottlenecks, which is a major focus of performance optimization. By learning about SIMD instructions, compiler optimization flags, and parallel processing with libraries like rayon, you can greatly improve the efficiency of your code. In the more advanced chapters, you will learn how to use static and dynamic analysis, fuzz testing, and external high-performance libraries to make your applications even better. In no time at all, you will be able to build robust, high-performance Rust applications by following these potent recipes and becoming an expert Rust programmer. Key Learnings Learn the ins and outs of Rust's ownership model to avoid data races and make sure memory is safe. Develop your skills in pattern matching and advanced error handling to create code that is both strong and easy to maintain. Use the robust primitives and rayon library in Rust to implement parallelism and concurrency. Use the perf, valgrind, and SIMD instructions to optimize performance for efficient execution. Carry out thorough fuzz testing and static analysis with clippy and cargo-fuzz. Enable efficient memory management by studying high-performance libraries such as hashbrown and jemalloc. With diesel and sqlx, you can manage databases and make queries and integrations a breeze. Optimize the deployment of Rust applications and establish CI/CD pipelines. Table of Content Setting up and Configuring Rust Environment Hands-on Traits, Enums and Struct Pattern Matching, Concurrency, Pointers and Modules Using Declarative and Procedural Macros Implementing Concurrency and Multithreading Asynchronous Programming Developing REST and SOAP APIs Building Microservices & Architectures Working around CI/CD Working around Kubernetes Fuzz Testing and Static Analysis Code Performance Optimization




A Philosophy of Software Design


Book Description