Before applying rollback strategies, the microservice runs a buggy version without a way to revert quickly. After applying rollback, the service keeps multiple versions and can switch the active version back to a stable one instantly, minimizing downtime.
### Before rollback strategy (naive deployment)
class Microservice:
def __init__(self):
self.version = 'v2.0'
def handle_request(self, request):
if self.version == 'v2.0':
# buggy code
return 'error'
else:
return 'ok'
service = Microservice()
print(service.handle_request('request')) # returns 'error'
### After rollback strategy applied
class Microservice:
def __init__(self):
self.active_version = 'v2.0'
self.versions = {
'v1.0': self.v1_0_handler,
'v2.0': self.v2_0_handler
}
def v1_0_handler(self, request):
return 'ok'
def v2_0_handler(self, request):
# buggy code
return 'error'
def handle_request(self, request):
return self.versions[self.active_version](request)
def rollback(self):
self.active_version = 'v1.0'
service = Microservice()
print(service.handle_request('request')) # returns 'error'
service.rollback()
print(service.handle_request('request')) # returns 'ok'