Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Service communication made easy

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Brian de Heus Brian de Heus
February 01, 2018
73

Service communication made easy

Using NATS to facilicate communication between services in a SOA.

Avatar for Brian de Heus

Brian de Heus

February 01, 2018
Tweet

Transcript

  1. About me Brian de Heus - Lead Engineer @ Adgorithmics

    Twitter: @briandotjp Website: brian.jp
  2. What are microservices? • A service that handles a small

    part of a problem domain • Everything else (including the above) is still debated
  3. Who does microservices • We’ve all heard of it •

    Most of us have thought about it • Very few are practicing it • Less than 10% of last Kubernetes JP meet-up
  4. Netflixs’ Microservice Shopping List • Eureka (service discovery) • Archaius

    (service configuration) • Ribbon (IPC) • Hystrix (Provides fault tolerance) • Karyon (JVM service provider) • Governator (JVM service provider) • Ribbon (service provider) • Zuul (Edge proxy) • Fenzo (Scheduler)
  5. Our experience with microservices • Increased our developer velocity •

    Decreased our deployment time • Added some management overhead • Allows us to say “Yeah we do microservices” • Was difficult to get started with
  6. Good ‘ol Service Discovery Model Service A Some Queue Name:

    service_a IP: 10.0.0.1 Port: 8001 Service B Service C Service D
  7. Pros • Least amount of communication over network ◦ Only

    communicate when services goes up or down • Tried and true
  8. Cons • Relies heavily on client-side implementation ◦ Each service

    will need to implement a registry ◦ Each service will need to perform round-robin • If service crashes unexpectedly registry is out of sync ◦ Can mitigate by pinging a health end-point every N seconds ◦ Which increases network traffic
  9. Pros • Automatic round robin • Won’t reach crashed services

    • Little client-side implementation • Service discovery not (really) necessary
  10. Cons • Single Point of Failure (but we’ll get back

    to that) • More network traffic
  11. NATS • Messaging system written in Go • Developed by

    Apcera, maintained by Synadia • PUBSUB on crack • At-most-once delivery guarantee • Simple text protocol • NATS can easily handle 10,000k messages a second on single core machine • Persistent messaging through NATS Streaming
  12. Talking using JSONRPC Service A Some Queue NATS Topic: Service

    Name (e.g “analytics”) JSONRPC method: campaigns/all params: {“userId”: 1234} id: “aaaa-bbbb-cccc-dddd” Service B Service C Service D
  13. Talking to the services from outside Gateway (just another microservice)

    Service NATS https://hostname/api/:namespace/:method JSONRPC method: service_name/:method params: {“userId”: 1234} id: “aaaa-bbbb-cccc-dddd”
  14. In reality Gateway (just another microservice) Service Consul KV store

    • Path mapping (e.g api/campaign/12345/ads => campaign/get) • Service Health Checks • Schema checking • Automatic Authentication and API tooling NATS
  15. Last points • Don’t know how long this will work.

    But real-world simulations are promising • What works for us may not work for you. • Always try to keep it simple.