MicroservicesComboStyle

From CitconWiki
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
  • What do we think micro services are..
  • We want to be able to rewrite services and remove legacy code
    • Make all "objects" separate processes that can run on different machines
    • Rather than single process tight binding between classes
    • We could run two of them on the same box to scale
    • Ability to rewrite each object even using different languages if required
    • Could communicate using direct RPC, e.g. as a fully meshed graph
      • Would require agreement on contracts between objects
      • Not favoured approach
      • "Orchestrated style"
    • Combo Model
      • Tuple Spaces - Immutable data store
      • Objects publish immutable facts to central store
      • Objects can publish requests to store
      • Other objects can publish responses to requests to store
      • Objects interested in responses can take those and relay to end users/devices
      • Basically it's pub/sub
      • Can add other subscribers after the fact and consume existing events
      • Promotes loose coupling
      • "Combo Style"
      • What about large messages, too large to pass round
        • Upload the large payload to a repository e.g. via webservice
        • Publish a "pointer" to the data
      • Why not just do RPC to request data directly
      • How do you handle errors
        • If you don’t get a response in a given time frame there is a problem
        • The client only needs to care the other service wsa unavailable and timed out, it should not concern itself with the specific error
      • How do you handle say an order fulfilment scenario where the micro service handling fulfilment was down when the fulfilment request was sent
        • In our case, each subscriber e.g the OrderProcessingService has its own unique persistent queue of messages it will resume processing when it starts up again
      • How do you "fix" data
        • E.g. order sent with wrong email
        • We want to correct the email without double fullfiilling the order
        • The order fulfilment step needs to be idempotent
        • The email sending service would not be, it would send the confirmation email again regardless
        • Each service will still hold its own state, or have its own database
      • When would you switch a service to use queues/RabbitMQ
  • Prediction: 20/09/14 DS: Formal verification of microservices system proof, using COQ? <- fix me