Real-time Services with Silex and Symfony – deSymfony 2016

38f85d28d9dd5c53323a6d92b63b16e0?s=47 Ronny López
September 16, 2016

Real-time Services with Silex and Symfony – deSymfony 2016

En los micro-servicios modernos, los cuales se basan en eventos, comunicación bidireccional, stream multiplexing y otras formas de sincronización de los datos, la arquitectura clásica basada en HTTP/REST no siempre es la mejor opción.

Algunas veces las aplicaciones requieren servicios donde es necesario mantener una comunicación asíncrona de eventos fluyendo en ambas direcciones, por ejemplo, un cliente conectado por Websocket.

¿Qué hacer en estos casos si tenemos la gran mayoría de nuestros servicios implementados con Symfony o Silex y queremos tener comunicación en real time con un cliente? ¿Qué opciones tenemos, qué soluciones podemos aplicar y con qué trade-offs?

El objetivo de la charla es dar respuestas a estas preguntas, basándonos en casos de usos reales en producción, comparar las distintas alternativas existentes y ver ejemplos prácticos de integración Silex/Symfony.

38f85d28d9dd5c53323a6d92b63b16e0?s=128

Ronny López

September 16, 2016
Tweet

Transcript

  1. 5.

    Real-time A system is said to be real-time if the

    total correctness of an operation depends not only upon its logical correctness, but also upon the time in which it is performed
  2. 8.

    Criteria for real-time • Hard – missing a deadline is

    a total system failure
 • Firm – infrequent deadline misses are tolerable, but may degrade the system's QoS. Results are NOT usefulness after its deadline
 • Soft – the usefulness of a result degrades after its deadline, thereby degrading the system’s QoS
  3. 10.

    Soft real-time Typically used to solve issues of concurrent access

    and the need to keep a number of connected systems up-to-date through changing situations
  4. 11.

    Soft real-time use cases • Live audio-video systems • Users

    collaboration • Messaging applications, etc… • Real-time analytics • Gaming • Etc…
  5. 13.

    Why adding a soft
 real-time feature? • To improve end-user

    experience • Due to insufficient scaling capacity
  6. 15.

    A Bit of History • Flash • Ajax (XMLHttpRequest) •

    Comet (reverse Ajax) • WebSocket • Polyfills
  7. 17.

    WebSockets • Full-duplex communication channels over a single TCP connection

    • Currently supported in most major browsers • Can be used by any client or server application
  8. 18.

    HTTP/2 • Major revision of the HTTP • Replacement for

    how HTTP is expressed “on the wire” • Focus on performance, end-user perceived latency, network and server resource usage
  9. 19.

    The Mobile Internet • Inestable connections • HTTP & TCP

    slow-start are usually not a good match for constantly dropped connections • Network interface kills battery • Large responses + periodic polling = bad
  10. 24.

    RPC • Allows to call a procedure (function) remotely •

    Involves peers of these three roles Caller Callee Dealer
  11. 25.

    RPC – Example 1 Something you usually do with Ajax

    Browser Server GetConference(123) {name:deSymfony,where: Madrid}
  12. 27.
  13. 28.

    Publisher/Subscriber • A peer subscribe to a topic • Another

    peer publish a message about this topic • All publishers interested in the topic receives the message
  14. 33.

    WAMP • Open standard WebSocket subprotocol • Provides two application

    messaging patterns in one unified protocol • Remote Procedure Calls • Publish & Subscribe
  15. 35.

    WAMP Features • Based on modern Web standards: WebSocket, JSON

    and URIs • Designed with first-class support for different languages in mind (Polyglot)
  16. 36.

    Unified Application Routing Routing of events (for PUB/SUB) and routing

    of calls (for RPC) in one unified protocol Caller Callee Dealer Publisher Subscriber Broker
  17. 37.

    Dealer • Routes calls from the caller to the callee

    and routes back results or errors • Callers and callee don’t know about each other • Applications using RPC benefit from these loose coupling Caller Callee Dealer
  18. 38.

    Broker • Keeps a book of subscriptions • Forward the

    events (messages) to all subscribers • Publisher are subscribers are loosely coupled Publisher Subscriber Broker
  19. 39.

    Unified Protocol • When you combine a Broker and a

    Dealer you get what WAMP calls a Router Router Broker Dealer = +
  20. 40.

    The Big Picture WAMP Router (Dealer + Broker) Browser Browser

    Browser Browser Mobile Clients Services
  21. 42.

    Criteria • Pub/Sub • RPC • Routed RPC (not only

    point-to-point) • Web native: run natively on the Web (without tunneling or bridging) • Cross Language • Open Standard
  22. 43.

    Tech PubSub RPC Routed RPC Web native Cross Language Open

    Standard WAMP ✔ ✔ ✔ ✔ ✔ ✔ Ajax ✔ ✔ ✔ Comet ✔ ✔ JSON-RPC ✔ ✔ ✔ ✔ socket.io ✔ ✔ ZMQ ✔ ✔ XMPP ✔ ✔ ✔ ✔
  23. 44.

    Implementations • Client libraries for most popular languages • Full

    featured router implementations in several languages
  24. 45.

    WAMP Routers • crossbar.io – Advanced, open-source, full featured, supported

    by the creators of WAMP
 • Your own… It’s an open protocol
  25. 46.

    WAMP Ecosystem • Thruway – library built in PHP that

    provides both a client and a router • Turnpike – router implemented in Go
 • wamp.rt – router for NodeJS
 • Erwa – router implemented in Erlang

  26. 50.

    No.

  27. 51.

    No?

  28. 52.
  29. 57.

    Trade-off • Situation that involves losing one quality or aspect

    of something in return for gaining another quality or aspect
 • It often implies a decision to be made with full comprehension of both the upside and downside of a particular choice
  30. 62.

    • A big ecosystem of thousands of useful libraries and

    components easily installable thanks to Composer • Very powerful template engines, ORMs, etc…
  31. 63.

    • We have implemented very powerful design patters in PHP

    coming from Java and other languages • We have several thousands of high quality code running on production • We have invested multiple hours testing, refactoring and improving the codebase
  32. 65.
  33. 67.
  34. 68.

    Upsides • Possibility to introduce real-time features without deep modifications

    in the current codebase • No need to learn a whole new language/ stack, with the implications it has • Loosely coupled systems
  35. 69.

    Upsides cont… • Opens the door to write reactive, event-

    based, distributed architectures • Scalability is easier to achieve by distributing messages to multiple systems
  36. 70.
  37. 71.

    The Stack • crossbar.io used as the router (dealer+broker) •

    PHP client gathers and publish events • Silex/Symfony backend serve the data and contains the biz logic
  38. 72.

    crossbar.io • Networking platform for distributed and micro-services applications •

    Full implementation of the WAMP protocol • Feature rich, scalable, robust and secure • It takes care of the hard parts of messaging so you can focus on your app's features
  39. 73.
  40. 74.

    Tips and Tricks • WSS • Deadlines • Timeouts •

    Retries with back-off, etc… • Idempotency
  41. 75.

    Opinionated Conclusion • Understand core concepts and patterns, technology is

    volatile • Question everything: Why?, why not? • Decide based on several factors: user experience, scalability, feasibility, developer experience, maintenance costs/debt, etc…
  42. 76.

    Don’t Stop Here • gRPC – A high performance, open-source

    universal RPC framework from Google
 
 http://www.grpc.io/
 • IoT, WoT, etc… – real world objects connected to the wider internet
  43. 78.

    Questions • What about React PHP? • Multi-Threading in PHP

    with pthreads?
 https://gist.github.com/krakjoe/6437782/ • Micro-services what?