Anup Bishnoi

Title: Implementing versioned service discovery in 100 Lines Of Code


Service discovery has been made too complex by "complexing" it with orchestration. There are too many beasts-of-a-tool out there that do too much, and yet don't service versioning in service discovery. This talk will walk you through 100 lines of Node.js code with no dependencies other than redis, and implement a service discovery service with the following features:
Semantic versioning of services
Services depend on specific versions of other services, so v1.2.3 & v1.3.0 can be both live, and you kill off old services that have no users.
Live health checks with inversion of responsibility
Don't ping a service under high load with status & health checks, instead let it ping back when it can. If it can't ping back because it's near-capacity, then don't route any more traffic to it!
Mocking services during testing & development
Should not have to bring up the entire microservices stack do develop one of them.
Randomized scheduling
So you don't starve any one service, instead pick one at random from the ones available & healthy.
No highly-available service discovery service
Solving the chicken & egg requirement of a highly available service discovery service, in order to enable other highly available services. Only the service discovery database (redis) needs to distributed (redis cluster).
A surprising number of tools out there simply fail to provide these features, and yet come with too many other things they want to do. This talk does the above in easy-to-understand 100 LOC that you can use & modify with confidence!