Advertisement
Advertisement

More Related Content

Slideshows for you(20)

Similar to QEWD.js, JSON Web Tokens & MicroServices(20)

Advertisement
Advertisement

QEWD.js, JSON Web Tokens & MicroServices

  1. Copyright © 2017 M/Gateway Developments Ltd QEWD.js, JSON Web Tokens & MicroServices Rob Tweed M/Gateway Developments Ltd Twitter: @rtweed http://www.mgateway.com
  2. Copyright © 2017 M/Gateway Developments Ltd QEWD.js
  3. Copyright © 2017 M/Gateway Developments Ltd Read all about it on the Node.js Foundation's Collection Site
  4. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Architecture Node.js
  5. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Architecture ewd-qoper8 queue Express Node.js socket.io Master Process •Outward-facing interfaces •Queue
  6. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Architecture ewd-qoper8 queue Express Node.js socket.io HTTP / HTTPS
  7. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Architecture ewd-qoper8 queue Express Node.js socket.io HTTP / HTTPS REST
  8. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Architecture ewd-qoper8 queue Express Node.js socket.io WebSockets
  9. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Architecture ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Pool of Worker Processes •Do the work •Connect to databases
  10. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Architecture Database, abstracted as: •Persistent JavaScript Objects •Fine-grained Document Database Node.js Worker Process
  11. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Architecture Database, abstracted as: •Persistent JavaScript Objects •Fine-grained Document Database Node.js Worker Process • Cache • GT.M • YottaDB • Redis "Global Storage" Databases
  12. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Architecture Database, abstracted as: •Persistent JavaScript Objects •Fine-grained Document Database Node.js Worker Process Closely-coupled In-process connection •Cache •GT.M •YottaDB
  13. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Architecture Database, abstracted as: •Persistent JavaScript Objects •Fine-grained Document Database Node.js Worker Process Loosely-coupled Networked connection •Cache •GT.M •YottaDB •Redis
  14. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Architecture Database, abstracted as: •Persistent JavaScript Objects •Fine-grained Document Database Node.js Worker Process Used by QEWD.js itself As Session Storage Database uuid-formatted token used for session Identification Built-in to QEWD.js
  15. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Architecture ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Browser Or Client HTTP / HTTPS REST
  16. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Architecture ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Browser Or Client WebSockets
  17. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Architecture ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Browser Or Client
  18. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Architecture ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Browser Or Client
  19. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Architecture ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Browser Or Client
  20. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Architecture ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Browser Or Client HTTP / HTTPS
  21. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Architecture ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Browser Or Client WebSocket
  22. Copyright © 2017 M/Gateway Developments Ltd Master Node.js Process Queue Queue processor/ dispatcher Incoming Request QEWD Architecture Every incoming request is passed from Express or socket.io and placed in a queue No further processing of requests occurs in the master process
  23. Copyright © 2017 M/Gateway Developments Ltd QEWD Architecture Master Node.js Process Queue Queue processor/ dispatcher Queue dispatcher is invoked whenever a request is added to the queue
  24. Copyright © 2017 M/Gateway Developments Ltd QEWD Architecture Node.js Worker Process Master Node.js Process Queue Queue processor/ dispatcher Worker process started if none available
  25. Copyright © 2017 M/Gateway Developments Ltd QEWD Architecture Node.js Worker Process Master Node.js Process Queue Queue processor/ dispatcher application Handler module Database QEWD & application-specific Modules loaded and connected to database: Cache, GT.M YottaDB or Redis
  26. Copyright © 2017 M/Gateway Developments Ltd QEWD Architecture Node.js Worker Process Master Node.js Process Queue Queue processor/ dispatcher Node.js Worker Process Request passed to worker application Handler module Database
  27. Copyright © 2017 M/Gateway Developments Ltd QEWD Architecture Node.js Worker Process Master Node.js Process Queue Queue processor/ dispatcher Worker flagged as Unavailable Node.js Worker Process Begin processing message application Handler module Database
  28. Copyright © 2017 M/Gateway Developments Ltd QEWD Architecture Master Node.js Process Queue Queue processor/ dispatcher Unavailable / processing Another incoming request Node.js Worker ProcessNode.js Worker Process application Handler module Database
  29. Copyright © 2017 M/Gateway Developments Ltd QEWD Architecture Node.js Worker Process Master Node.js Process Queue Queue processor/ dispatcher Unavailable / processing Node.js Worker ProcessNode.js Worker Process Node.js Worker Process If worker pool size not exceeded, another worker is started and request passed to it application Handler module Database application Handler module Database
  30. Copyright © 2017 M/Gateway Developments Ltd QEWD Architecture Master Node.js Process Queue Queue processor/ dispatcher Unavailable / processing Node.js Worker ProcessNode.js Worker Process If entire Worker Pool is busy: Unavailable / processing Node.js Worker ProcessNode.js Worker Process Unavailable / processing Node.js Worker ProcessNode.js Worker Process application Handler module Database application Handler module Database application Handler module Database
  31. Copyright © 2017 M/Gateway Developments Ltd QEWD Architecture Master Node.js Process Queue Queue processor/ dispatcher Unavailable / processing Node.js Worker ProcessNode.js Worker Process If entire Worker Pool is busy: Unavailable / processing Node.js Worker ProcessNode.js Worker Process Unavailable / processing Node.js Worker ProcessNode.js Worker Process New requests remain in queue application Handler module Database application Handler module Database application Handler module Database
  32. Copyright © 2017 M/Gateway Developments Ltd QEWD Architecture Master Node.js Process Queue Queue processor/ dispatcher Unavailable / processing Node.js Worker ProcessNode.js Worker Process As soon as a worker is available again, a queued message can be passed to it Unavailable / processing Node.js Worker ProcessNode.js Worker Process Available Node.js Worker Process application Handler module Database application Handler module Database application Handler module Database
  33. Copyright © 2017 M/Gateway Developments Ltd QEWD Architecture Master Node.js Process Queue Queue processor/ dispatcher Finished Node.js Worker ProcessNode.js Worker ProcessNode.js Worker Process A user's handler function signals completion using the function: finished(responseObject); This returns the response object to the master process application Handler module Database
  34. Copyright © 2017 M/Gateway Developments Ltd QEWD Architecture Master Node.js Process Queue Queue processor/ dispatcher Finished Node.js Worker ProcessNode.js Worker ProcessNode.js Worker Process And the response is passed to Express or socket.io, which returns it to the client that sent the original request application Handler module Database
  35. Copyright © 2017 M/Gateway Developments Ltd QEWD Architecture Master Node.js Process Queue Queue processor/ dispatcher Available Node.js Worker Process The finished() function also automatically returns the worker process back to the available pool So it can now handle the next queued request application Handler module Database
  36. Copyright © 2017 M/Gateway Developments Ltd QEWD Architecture Master Node.js Process Queue Queue processor/ dispatcher Available Node.js Worker Process Worker processes, once started, are persistent No start-up / tear-down cost Workers will automatically close themselves down if they are inactive for more than a pre-set threshold time period application Handler module Database
  37. Copyright © 2017 M/Gateway Developments Ltd QEWD Architecture Master Node.js Process Queue Queue processor/ dispatcher Available Node.js Worker Process Worker processes only handle a single request at a time application Handler module Database
  38. Copyright © 2017 M/Gateway Developments Ltd QEWD Architecture Master Node.js Process Queue Queue processor/ dispatcher Available Node.js Worker Process Worker processes only handle a single request at a time Completely isolated run-time environment for handler functions No need for concerns about Node.js concurrency, so synchronous APIs can be used application Handler module Database
  39. Copyright © 2017 M/Gateway Developments Ltd QEWD Architecture Master Node.js Process Queue Queue processor/ dispatcher Available Node.js Worker Process Long-running or CPU-intensive logic has no direct impact on other worker processes or the master process application Handler module Database
  40. Copyright © 2017 M/Gateway Developments Ltd QEWD Architecture Master Node.js Process Queue Queue processor/ dispatcher Node.js concurrency is handled by the master process. 100% asynchronous logic The master process does almost nothing No CPU-intensive or long- running tasks, so very high-performance All the work happens in the isolated worker processes Multiple Concurrent Incoming requests
  41. Copyright © 2017 M/Gateway Developments Ltd Scaling out QEWD.js
  42. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Architecture ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Allows all available CPU cores to be fully utilised, eg •One for master process •One for each worker process
  43. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Architecture ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Beyond a single instance?
  44. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Architecture ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Load Balancer Or Proxy (eg nginx)
  45. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Architecture ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Load Balancer Or Proxy (eg nginx) Database Database Database
  46. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Architecture ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Load Balancer Or Proxy (eg nginx) Database Database Database Session resides on a specific QEWD instance Session
  47. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Architecture ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Database
  48. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Architecture ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Database Eg shared access to QEWD Sessions Session
  49. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Architecture ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Database eg Cache ECP Database Actual Session Mapped Session Database Mapped Session Database Mapped Session
  50. Copyright © 2017 M/Gateway Developments Ltd Beyond a single site/LAN?
  51. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Distributed Architecture? ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Sharing the same database becomes a problem Performance? Scalability? Database
  52. Copyright © 2017 M/Gateway Developments Ltd JSON Web Tokens
  53. Copyright © 2017 M/Gateway Developments Ltd JSON Web Tokens • an open, industry standard RFC 7519 method for representing claims securely between two parties. • https://jwt.io/
  54. Copyright © 2017 M/Gateway Developments Ltd JSON Web Tokens Three Base64-encoded parts, separated by "."
  55. Copyright © 2017 M/Gateway Developments Ltd JSON Web Tokens
  56. Copyright © 2017 M/Gateway Developments Ltd JSON Web Tokens
  57. Copyright © 2017 M/Gateway Developments Ltd JSON Web Tokens
  58. Copyright © 2017 M/Gateway Developments Ltd Basic use of JWTs Server Client Secret key
  59. Copyright © 2017 M/Gateway Developments Ltd Basic use of JWTs Server Client Initial request to server Secret key
  60. Copyright © 2017 M/Gateway Developments Ltd Basic use of JWTs Server Client Create initial JWT using secret key
  61. Copyright © 2017 M/Gateway Developments Ltd Basic use of JWTs Server Client Return JWT with response
  62. Copyright © 2017 M/Gateway Developments Ltd Basic use of JWTs Server Client Save JWT in client •Cookie •Local storage
  63. Copyright © 2017 M/Gateway Developments Ltd Basic use of JWTs Server Client JWT sent with every subsequent request
  64. Copyright © 2017 M/Gateway Developments Ltd Basic use of JWTs Server Client Verify JWT's signature using secret key
  65. Copyright © 2017 M/Gateway Developments Ltd Basic use of JWTs Server Client Error if JWT is invalid
  66. Copyright © 2017 M/Gateway Developments Ltd Basic use of JWTs Server Client Response if JWT is OK ✔️
  67. Copyright © 2017 M/Gateway Developments Ltd Basic use of JWTs Server Client And optionally include updated JWT ✔️ • Updated values • New claims
  68. Copyright © 2017 M/Gateway Developments Ltd Basic use of JWTs Server Client Replace JWT in client •Cookie •Local storage
  69. Copyright © 2017 M/Gateway Developments Ltd JWT security Server Client Server has secret key
  70. Copyright © 2017 M/Gateway Developments Ltd JWT security Server Client Client doesn't
  71. Copyright © 2017 M/Gateway Developments Ltd JWT security Server Client Server can verify JWT Server can read JWT Server can modify JWT
  72. Copyright © 2017 M/Gateway Developments Ltd JWT security Server Client Client can only read JWT's contents Can't change them – signature would no longer match
  73. Copyright © 2017 M/Gateway Developments Ltd JWT Purposes • Authentication • Holding session data
  74. Copyright © 2017 M/Gateway Developments Ltd JSON Web Tokens
  75. Copyright © 2017 M/Gateway Developments Ltd JWT Purposes • Authentication • Holding session data – But in client (eg browser) – Not on server
  76. Copyright © 2017 M/Gateway Developments Ltd JWT Purposes • Authentication • Holding session data – But in client (eg browser) – Not on server • Allows for very long session retention – That would otherwise result in huge amounts of session data in database
  77. Copyright © 2017 M/Gateway Developments Ltd JWT Purposes • Authentication • Holding session data – But in client (eg browser) – Not on server • Allows a completely stateless architecture – Server only needs a secret key
  78. Copyright © 2017 M/Gateway Developments Ltd JWT Purposes • Authentication • Holding session data – But in client (eg browser) – Not on server • Allows a distributed architecture – Servers need only share a common secret
  79. Copyright © 2017 M/Gateway Developments Ltd JWT security Server Client Both servers share same secret key Server
  80. Copyright © 2017 M/Gateway Developments Ltd JWT security Server Client Server Create initial JWT
  81. Copyright © 2017 M/Gateway Developments Ltd JWT security Server Client Server Validate and use JWT
  82. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Architecture ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Load Balancer Or Proxy (eg nginx)
  83. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Distributed Architecture ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Client
  84. Copyright © 2017 M/Gateway Developments Ltd Monolithic QEWD Applications ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process All aspects of the application's functionality is handled by the one suite of software •User authentication •Demographics •Clinical data •Pharmacy data •etc
  85. Copyright © 2017 M/Gateway Developments Ltd MicroServices
  86. Copyright © 2017 M/Gateway Developments Ltd MicroService Architecture ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process User authentication Demographics Pharmacy
  87. Copyright © 2017 M/Gateway Developments Ltd MicroService Architecture ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process User authentication Demographics Pharmacy ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Client Orchestration
  88. Copyright © 2017 M/Gateway Developments Ltd MicroService QEWD Architecture ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process User authentication Demographics Pharmacy ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Client Master server •Integration •Orchestration
  89. Copyright © 2017 M/Gateway Developments Ltd MicroService Overhead ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process User authentication Demographics Pharmacy ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Client Orchestration HTTP
  90. Copyright © 2017 M/Gateway Developments Ltd MicroService Overhead ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process User authentication Demographics Pharmacy ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Client Orchestration HTTPS
  91. Copyright © 2017 M/Gateway Developments Ltd HTTPS Handshake Overhead Server Client
  92. Copyright © 2017 M/Gateway Developments Ltd HTTPS Handshake Overhead Server Client Request sent over secured connection
  93. Copyright © 2017 M/Gateway Developments Ltd HTTPS Handshake Overhead Server Client Response returned over secured connection
  94. Copyright © 2017 M/Gateway Developments Ltd HTTPS Handshake Overhead Server Client Connection torn down
  95. Copyright © 2017 M/Gateway Developments Ltd HTTPS Handshake Overhead Server Client Repeat all over again for next request
  96. Copyright © 2017 M/Gateway Developments Ltd MicroService Overhead ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process User authentication Demographics Pharmacy ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Client Orchestration HTTPS
  97. Copyright © 2017 M/Gateway Developments Ltd MicroService Chain ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process User authentication Demographics Pharmacy ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Client Orchestration HTTPS
  98. Copyright © 2017 M/Gateway Developments Ltd MicroService Chain ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process User authentication Demographics Pharmacy ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Client Orchestration HTTPS Latency can build up
  99. Copyright © 2017 M/Gateway Developments Ltd Industry Solutions, eg nginx
  100. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Solution ewd-qoper8 queue Express Node.js socket.io WebSockets
  101. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Solution ewd-qoper8 queue Express Node.js socket.io WebSockets Browser ewd-client socket.io-client
  102. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Solution ewd-qoper8 queue Express Node.js socket.io Persistent Bi-directional WebSocket connection Browser ewd-client socket.io-client Secured over HTTPS
  103. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Solution ewd-qoper8 queue Express Node.js socket.io Browser ewd-client socket.io-client
  104. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Solution ewd-qoper8 queue Express Node.js socket.io Browser ewd-client socket.io-client socket.io will automatically re-connect
  105. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Solution ewd-qoper8 queue Express Node.js socket.io Browser ewd-client socket.io-client QEWD automatically re-registers application
  106. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Solution ewd-qoper8 queue Express Node.js socket.io Equivalent to ewd-client socket.io-client What if we added into QEWD's master process the equivalent to ewd-client?
  107. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Solution ewd-qoper8 queue Express Node.js socket.io Persistent Bi-directional WebSocket connection Secured over HTTPS ewd-qoper8 queue Express Node.js socket.io Equivalent to ewd-client socket.io-client
  108. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Solution ewd-qoper8 queue Express Node.js socket.io Persistent Bi-directional WebSocket connection Secured over HTTPS ewd-qoper8 queue Express Node.js socket.io Equivalent to ewd-client socket.io-client No difference to requests from browser
  109. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Solution ewd-qoper8 queue Express Node.js socket.io Same Re-connection and re- registration mechanism ewd-qoper8 queue Express Node.js socket.io Equivalent to ewd-client socket.io-client No difference to requests from browser
  110. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Solution ewd-qoper8 queue Express Node.js socket.io Equivalent to ewd-client socket.io-client Incoming REST request
  111. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Solution ewd-qoper8 queue Express Node.js socket.io Equivalent to ewd-client socket.io-client Incoming WebSocket request
  112. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Solution ewd-qoper8 queue Express Node.js socket.io Equivalent to ewd-client socket.io-client Incoming WebSocket request Process Locally?
  113. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Solution ewd-qoper8 queue Express Node.js socket.io Equivalent to ewd-client socket.io-client Incoming WebSocket request Handled by remote MicroService?
  114. Copyright © 2017 M/Gateway Developments Ltd QEWD.js Solution ewd-qoper8 queue Express Node.js socket.io Persistent Bi-directional WebSocket connection Secured over HTTPS ewd-qoper8 queue Express Node.js socket.io Equivalent to ewd-client socket.io-client Remote QEWD MicroService
  115. Copyright © 2017 M/Gateway Developments Ltd QEWD MicroService Fabric ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process User authentication Demographics Pharmacy ewd-qoper8 queue Express Node.js socket.io Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Cache GT.M, YottaDB Redis Node.js Worker Process Client Orchestration HTTPS WebSocket Connections
  116. Copyright © 2017 M/Gateway Developments Ltd QEWD JWT & MicroService Support • JWT & MicroService support already released for QEWD WebSocket applications • Support for REST-based QEWD MicroServices currently in development – Includes template-based routing definitions – Includes integration of federation functionality • cf ewd-feder8
  117. Copyright © 2017 M/Gateway Developments Ltd How to find out more? • http://qewdjs.com • https://github.com/robtweed/qewd • https://github.com/robtweed/ewd-qoper8 • https://medium.com/the-node-js-collection/hav
Advertisement