Node Service Version Routing for Zero Downtime Deployment
Find Innovative SolutionsGenerate Solutions
Solution Overview
Problem
In micro-service based systems, updating service versions without suspending request handling is challenging due to the need to pause or shut down nodes for deployment, leading to downtime and delays, especially when handling a high volume of requests.
Innovation Solution
A method where an updated service version is deployed alongside the existing version, allowing the system to continue processing requests while the new version 'warms up', with a local discovery service managing the transition and routing requests to the appropriate service object based on its availability.
Engineering Contradictions & Design Principles
Engineering Contradiction Analysis
1Reliability
If the service is updated by pausing or shutting down the node, then the new version can be deployed, but request handling is suspended causing downtime and delays
Solution Approach 1:
The system performs preliminary actions by starting the updated service version in advance while the existing version is still running. The updated version is initialized, loaded, and prepared to handle requests before the switch occurs, enabling seamless version transition without service interruption.
Solution Approach 2:
The system maintains continuous service availability by ensuring that request handling continues uninterrupted during the version transition. While the updated version is being prepared, incoming requests are still routed to the existing version, and once the updated version is ready, routing is switched without any gap in service delivery.
2Ease of manufacture
If the node is paused for service deployment, then version update can be completed, but request processing speed decreases
Solution Approach 1:
The updated service version is initialized and prepared in advance during a preliminary action phase. This includes loading the service code, configuring dependencies, and performing any necessary warm-up operations before the updated version begins handling requests, ensuring a smooth transition without productivity loss.
Solution Approach 2:
The system dynamically manages multiple service versions concurrently, allowing the updated version to be loaded and prepared while the existing version continues to handle requests. The routing mechanism dynamically switches between versions based on readiness status, maintaining optimal request processing throughput throughout the transition.
3Reliability
If multiple service versions are maintained, then continuous request handling is enabled, but system complexity increases
Solution Approach 1:
The system introduces a service gateway as an intermediary component that manages the complexity of multiple service versions. The gateway handles version detection, routing decisions, and coordination between different versions, isolating the complexity from the rest of the system and simplifying version management.
Solution Approach 2:
The service gateway performs multiple functions including request routing, version management, load balancing, and health checking. This multi-functional approach consolidates the complexity of managing multiple service versions into a single universal component that handles all aspects of version coordination.
Data Source
AI summary
One or more embodiments provide techniques for processing a request entering a node cluster managed by a control plane executing on a computing service. A first node of the node cluster receives a request for a service. The first node determines to which service object in the first node to route the request. The first node identifies an existing version of the service executing thereon. The first node determines whether there exists an updated version of the service executing thereon. Upon determining that the updated version of the service does exist, the first node sets the existing version of the service as the current version of the services. The node routes the request to a first service object associated with the current version of the service using a handler of the first service object.


