Scale-Oriented Architecture with Microservices

54b75f6fbf4434162bfcda6b0cb9b86b?s=47 John Sheehan
February 10, 2015

Scale-Oriented Architecture with Microservices

A look into how we've built Runscope using a microservice architecture.

54b75f6fbf4434162bfcda6b0cb9b86b?s=128

John Sheehan

February 10, 2015
Tweet

Transcript

  1. Scale-oriented Architecture with APIs John Sheehan Co-founder, CEO @Runscope

  2. Scale-oriented Architecture with APIs MICROSERVICES

  3. API DEBUGGING API MONITORING FOR TEAMS

  4. 30,000+ developers use Runscope

  5. MICROSERVICES at Runscope

  6. MICROSERVICES = SOA + DevOps

  7. If you don't invest in INFRASTRUCTURE don't invest in MICROSERVICES

  8. In the beginning...

  9. runscope.com Runscope URLs Identity Request Vault api.runscope.com Eventador Calculon Courier

    Mission Control Passageway go-proxy Warp Pipe go-radar Events Auth Service File Cabinet Script Processor Atlas Archivist Prometheus Billing Scorekeeper
  10. Today 40+ internal services 9 engineers

  11. How micro should services be?

  12. MICROSERVICES GOALS

  13. Scaling the Stack GOAL #1

  14. Independent Deployability

  15. None
  16. None
  17. None
  18. None
  19. 7,789 Deployments in 2014 31+ Per work day

  20. Service-level Isolation

  21. Independent Scalability

  22. Network Resiliency

  23. Scaling the Team GOAL #2

  24. Network Mindset

  25. Isolate Breakage

  26. Human Modularity

  27. Uniform Interface

  28. Developer Experience

  29. Smart Client

  30. • Service discovery • service://identity/... • Retry failed GETs •

    Run HTTP requests asynchronously • Log with Runscope Traffic Inspector Smart Client
  31. url = "https://ec2-23-212-199-23.us-west-2.amazonaws.com" resp = requests.get(url) if resp.ok: return resp.json()

    else: # retry? return None def get_user(id): def main(): user = get_user(id) print user["name"]
  32. class Identity def get_user(id): url = "service://identity/users/" + id resp

    = smart_client.get(url) if resp.ok: return User(resp.json()) return AnonymousUser() from Identity import get_user def main(): user = get_user(id) print user.name Auto-locate service Smart retries
  33. Smart Service

  34. • Built-in healthcheck/heartbeat endpoints • Automatic, realm-aware service registry •

    Common logging and metrics framework • Simplified dependency management Smart Service
  35. Testing & Monitoring

  36. API Testing API Monitoring Functionality Availability Performance Correctness In Development

    In Production "Transactions" "Endpoints"
  37. Runscope Radar Functionality Availability Performance Correctness Any Environment API Testing

    & Monitoring Transactions & Endpoints
  38. Try Runscope, free. runscope.com Stop by our table for your

    free t-shirt!