
Show HN: Implementing Microservice Discovery in 100 lines of Node.js [pdf] - asyncanup
https://github.com/asyncanup/vasco/raw/master/vasco-talk.pdf
======
asyncanup
Author here. Here's a link to the Github repo if you want to try this out in
code: [https://github.com/asyncanup/vasco](https://github.com/asyncanup/vasco)

Also, [https://github.com/asyncanup/vasco-
frontend](https://github.com/asyncanup/vasco-frontend) lets you hook up a
real-time UI on top of the service registry to show a dashboard of all the
live (and dead) services

This was the first major conference talk I gave at DeveloperWeek 2018 in SF,
and am mainly looking for some healthy feedback.

~~~
asyncanup
Motivation for writing this tool will hopefully be made clear by the following
abstract:

\--------

Service discovery has been made too complex by combining it with
orchestration. There are too many beasts-of-a-tool out there that do too much,
and yet can't do versioned microservice deployments. This talk will walk you
through 100 lines of Node.js code with no dependencies other than redis, and
implement a discovery service with the following features:

1\. Semantic versioning of services:

Services depend on specific versions of other services, so v1.2.3 & v1.3.0 can
both be live, and you kill off old services that have no users.

2\. 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!

3\. Mocking services during testing & development: Should not have to bring up
the entire microservices stack to develop one of them.

4\. Randomized scheduling: So you don't starve any one service, instead pick
one at random from the ones available & healthy.

5\. 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 be distributed.

A surprising number of tools out there simply fail to provide these set of
features together, and yet pack in too many other things they want to do. This
talk does the above in easy-to-understand 100 lines of Node.js code that you
can use & modify with confidence!

------
brudgers
Linking to the project might make for a better submission,
[https://github.com/asyncanup/vasco](https://github.com/asyncanup/vasco),
because the RAW PDF just downloads, and it's slides rather than something that
people can try out.

~~~
asyncanup
Thanks! Added some more context in a comment. Did you have any feedback for
the slides and/or code?

~~~
brudgers
Though I find microservices intellectually interesting, the project is not
something I am likely to use. I am more of a "general reader." As a general
reader, I find slides without the accompanying presentation rarely hold my
attention. I would rather have a good README.MD.

