ResilienceBench: Um Ambiente para Avaliação Experimental de Padrões de Resiliência para Microsserviços
Abstract
Microservice developers increasingly use resiliency patterns, such as Retry and Circuit Breaker, to cope with potential failures during the invocation of remote services. However, there is still little work on the impact of those resiliency patterns on application performance. This paper introduces ResilienceBench, a language-agnostic environment to support microservice developers in experimentally evaluating the performance impact of resilience patterns. The paper describes ResilienceBench’s motivation, architecture, and core functionalities, and illustrates its use by presenting an experimental evaluation of the performance impact of the Retry pattern implemented by two popular open source resilience libraries: Polly, for C#, and Resilience4j, for Java.
References
App vNext (2022). Polly. https://github.com/App-vNext/Polly. [Último acesso em 17 de Maio de 2022].
Aquino, G. et al. (2019). The circuit breaker pattern targeted to future IoT applications. In Int. Conf. Service Oriented Computing (ICSOC), pages 390–396. Springer.
Beyer, B. et al. (2016). Site Reliability Engineering: How Google Runs Production Systems. O’Reilly.
Calcote, L. (2018). The Enterprise Path to Service Mesh Architectures. O’Reilly.
Costa, T. M. et al. (2022). Avaliação de Desempenho de Dois Padrões de Resiliência para Microsserviços: Retry e Circuit Breaker. In XL Simpósio Brasileiro de Redes de Computadores e Sistemas Distribuídos (SBRC). Aceito para publicação.
Docker (2021). Overview of Docker Compose. [link]. [Último acesso em 17 de Maio de 2022].
Envoy (2022). Envoy Proxy. https://www.envoyproxy.io. [Último acesso em 17 de Maio de 2022].
HashiCorp (2022). Vagrant: Development Environments Made Easy. https://www.vagrantup.com/. [Último acesso em 17 de Maio de 2022].
Jagadeesan, L. J. and Mendiratta, V. B. (2020). When failure is (not) an option: Reliability models for microservices architectures. In IEEE Int. Symp. Software Reliability Engineering Workshops (ISSREW), pages 19–24.
Jamshidi, P. et al. (2018). Microservices: The journey so far and challenges ahead. IEEE Software, 35(3):24–35.
Mendonca, N. C. et al. (2020). Model-based analysis of microservice resiliency patterns. In IEEE Int. Conf. Software Architecture (ICSA), pages 114–124.
Merkel, D. (2014). Docker: lightweight linux containers for consistent development and deployment. Linux journal, 2014(239):2.
Microsoft Azure (2017). Resiliency patterns. [link]. [Último acesso em 17 de Maio de 2022].
Nygard, M. (2007). Release It!: Design and Deploy Production-Ready Software. Pragmatic Bookshelf.
Postman (2017). httpbin(1): HTTP Request & Response Service. https://github.com/postmanlabs/httpbin. [Último acesso em 17 de Maio de 2022].
Preuveneers, D. and Joosen, W. (2017). QoC2 Breaker: intelligent software circuit breakers for fault-tolerant distributed context-aware applications. Journal of Reliable Intelligent Environments, 3(1):5–20.
Resilience4j (2021). Fault tolerance library designed for functional programming. https://github.com/resilience4j/resilience4j. [Último acesso em 17 de Maio de 2022].
Saleh Sedghpour, M. R., Klein, C., and Tordsson, J. (2022). An Empirical Study of Service Mesh Traffic Management Policies for Microservices. In ACM/SPEC Int. Conf. Performance Engineering (ICPE), pages 17–27.
