Microservice architectures allow for short deployment cycles and immediate effects, but offer no safety mechanisms for service contracts when they need to be changed. Maintaining the soundness of microservice architectures is an error-prone task that is only accessible to the most disciplined development teams. The strategy to evolve a producer service without disrupting its consumers is often to maintain multiple versions of the same interface and dealing with an explicitly managed handoff period and its inherent disadvantages.We present a microservice management system that statically verifies service interface signatures against their references and supports the seamless evolution of compatible interfaces. We define a compatibility rela-tion�on types that captures real evolution patterns and embodies known good practices on the evolution of interfaces. Namely, we allow for addition, removal, and renaming of data fields of a producer module without breaking or needing to upgrade consumer services. The evolution of interfaces is supported by runtime generated proxy components that dynamically adapt data exchanged between services to match with the statically checked service code.The model proposed in this paper is instantiated in a core programming language whose semantics is defined by a labelled transition system and a type system that prevents breaking changes from being deployed. Standard soundness results for the core language entail the existence of adapters, and hence ensure the absence of adaptation errors and the correctness of the management model. This adaptive approach allows for gradual deployment of modules, without halting the whole system and avoiding losing or misinterpreting data exchanged between system nodes. Experimental data shows that an average of 57% of deployments that would require adaptation and recompilation are safe under our approach. ACM CCS 2012Software and its engineering → Development frameworks and environments; Software creation and management; Software evolution; Applied computing → Service-oriented architectures; Theory of computation → Semantics and reasoning; Development Environment (Module + Signature) Development Environment (Module + Signature) Development Environment (Module + Signature) Local Deployment Manager Local Deployment Manager Local Deployment Manager Local Deployment Manager Definitions Product k1 : {Id k2 : int, Name k3 : string, Amount k4 : int, Discount k5 : int} Get k6 : (id : int) → Product = {Id k2 = 1, Name k3 = "H DD", Amount k4 = 99, Discount k5 = 0} Save k7 : (p : Product) → string = "OK" Catalog V 1 Definitions Promote k8 : (p : Product) → Product = p {Name k3 = p.Name + "(Sale)", Discount k5 = 5} Reference to Catalog Product k1 : {Id k2 : int, Name k3 : string, Amount k4 : int, Discount k5 : int} Marketing V 1 Definitions Improve k9 : (id : int) → string = Save(Promote(Get(id))) Reference to Catalog Product k1 : {Id k2 : int, Name k3 : string, Amount k4 : int, Discount k5 : int} Get k6 : int → Product Save k7 : Product → string Reference to Mark...
scite is a Brooklyn-based organization that helps researchers better discover and understand research articles through Smart Citations–citations that display the context of the citation and describe whether the article provides supporting or contrasting evidence. scite is used by students and researchers from around the world and is funded in part by the National Science Foundation and the National Institute on Drug Abuse of the National Institutes of Health.
customersupport@researchsolutions.com
10624 S. Eastern Ave., Ste. A-614
Henderson, NV 89052, USA
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.
Copyright © 2024 scite LLC. All rights reserved.
Made with 💙 for researchers
Part of the Research Solutions Family.