adding real-time features to php applications

78
Adding Real-time Features to PHP Applications

Upload: ronny-lopez

Post on 16-Apr-2017

213 views

Category:

Software


1 download

TRANSCRIPT

Page 1: Adding Real-time Features to PHP Applications

Adding Real-time Features to PHP

Applications

Page 2: Adding Real-time Features to PHP Applications

About me

@ronnylt

Ronny López

Technical Lead

Opinions are my own

Page 3: Adding Real-time Features to PHP Applications

Agenda

• Concepts and foundations

• Real-time communication patterns

• Implementations

• Examples

Page 4: Adding Real-time Features to PHP Applications

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

Page 5: Adding Real-time Features to PHP Applications

Real-time

Applications must guarantee response within specified time constraints, often referred to as “deadlines”

Page 6: Adding Real-time Features to PHP Applications

Real-time

Applications in which the computer must respond as rapidly as required by the user

Page 7: Adding Real-time Features to PHP Applications

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

Page 8: Adding Real-time Features to PHP Applications

Real-timeSoft real-time

Page 9: Adding Real-time Features to PHP Applications

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

Page 10: Adding Real-time Features to PHP Applications

Soft real-time use cases

• Live audio-video systems

• Users collaboration

• Messaging applications, etc…

• Real-time analytics

• Gaming

• Etc…

Page 11: Adding Real-time Features to PHP Applications

The road to 500 million Symfony downloads

https://symfony.com/500million

Page 12: Adding Real-time Features to PHP Applications

Why adding a soft real-time feature?

• To improve end-user experience

• Due to insufficient scaling capacity

Page 13: Adding Real-time Features to PHP Applications

Real-time Communication on the

Web

Page 14: Adding Real-time Features to PHP Applications

A Bit of History

• Flash

• Ajax (XMLHttpRequest)

• Comet (reverse Ajax)

• WebSocket

• Polyfills

Page 15: Adding Real-time Features to PHP Applications

The Modern Web

• WebSockets

• HTTP/2

Page 16: Adding Real-time Features to PHP Applications

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

Page 17: Adding Real-time Features to PHP Applications

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

Page 18: Adding Real-time Features to PHP Applications

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

Page 19: Adding Real-time Features to PHP Applications

What Every Web Developer Should Know About Networking and Browser Performance

Page 20: Adding Real-time Features to PHP Applications

Real-time Communication

Patterns

Page 21: Adding Real-time Features to PHP Applications

The “actors”

Client Server

Peer Peer

Page 22: Adding Real-time Features to PHP Applications

Basic Patterns

• Remote Procedure Call (RPC)

• PUB/SUB

Page 23: Adding Real-time Features to PHP Applications

RPC

• Allows to call a procedure (function) remotely

• Involves peers of these three roles

Caller CalleeDealer

Page 24: Adding Real-time Features to PHP Applications

RPC – Example 1Something you usually do with Ajax

Browser Server

GetConference(123)

{name:deSymfony,where: Madrid}

Page 25: Adding Real-time Features to PHP Applications

RPC – Example 2Push data to the browser

BrowserServerDisplayOffer(offer)

Page 26: Adding Real-time Features to PHP Applications

RPC – Example 3Communication between micro-services

Auth

Server

login(user)

Analytics Payments

track(user) process(order)

Page 27: Adding Real-time Features to PHP Applications

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

Page 28: Adding Real-time Features to PHP Applications

PUB/SUB – Example 1Notifications

Browser

Server

updateStats(stats)

Browser Browser

Subscribed To: StatsUpdate

Page 29: Adding Real-time Features to PHP Applications

PUB/SUB – Example 2Micro-services Synchronization

Auth

Admin Service

updateSettings(freshSettings)

Encoding Payments

Subscribed To: SettingsChanges

Analytics

Page 30: Adding Real-time Features to PHP Applications

Web Application Messaging Protocol

http://wamp-proto.org/

Page 31: Adding Real-time Features to PHP Applications

Not to be confused with WAMP: ”Windows + Apache + MySQL + PHP"

Page 32: Adding Real-time Features to PHP Applications

WAMP

• Open standard WebSocket subprotocol

• Provides two application messaging patterns in one unified protocol

• Remote Procedure Calls

• Publish & Subscribe

Page 33: Adding Real-time Features to PHP Applications

WAMP Features

• Enables different technologies, processes, machines, etc… to communicate with each other, in soft real-time

Page 34: Adding Real-time Features to PHP Applications

WAMP Features

• Based on modern Web standards: WebSocket, JSON and URIs

• Designed with first-class support for different languages in mind (Polyglot)

Page 35: Adding Real-time Features to PHP Applications

Unified Application Routing

Routing of events (for PUB/SUB) and routing of calls (for RPC) in one unified protocol

Caller CalleeDealer

Publisher SubscriberBroker

Page 36: Adding Real-time Features to PHP Applications

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 CalleeDealer

Page 37: Adding Real-time Features to PHP Applications

Broker

• Keeps a book of subscriptions

• Forward the events (messages) to all subscribers

• Publisher are subscribers are loosely coupled

Publisher SubscriberBroker

Page 38: Adding Real-time Features to PHP Applications

Unified Protocol

• When you combine a Broker and a Dealer you get what WAMP calls a Router

Router Broker Dealer= +

Page 39: Adding Real-time Features to PHP Applications

The Big Picture

WAMP Router(Dealer + Broker)

BrowserBrowserBrowserBrowser

Mobile Clients

Services

Page 40: Adding Real-time Features to PHP Applications

Do we really need another wheel?

How does WAMMP compare to other technologies

Page 41: Adding Real-time Features to PHP Applications

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

Page 42: Adding Real-time Features to PHP Applications

Tech PubSub RPC RoutedRPC Web native Cross

LanguageOpen

Standard

WAMP ✔ ✔ ✔ ✔ ✔ ✔

Ajax ✔ ✔ ✔

Comet ✔ ✔

JSON-RPC ✔ ✔ ✔ ✔

socket.io ✔ ✔

ZMQ ✔ ✔

XMPP ✔ ✔ ✔ ✔

Page 43: Adding Real-time Features to PHP Applications

Implementations

• Client libraries for most popular languages

• Full featured router implementations in several languages

Page 44: Adding Real-time Features to PHP Applications

WAMP Routers

• crossbar.io – Advanced, open-source, full featured, supported by the creators of WAMP

• Your own… It’s an open protocol

Page 45: Adding Real-time Features to PHP Applications

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

Page 46: Adding Real-time Features to PHP Applications

Choosing an implementation

Let’s talk about trade-offs

Page 47: Adding Real-time Features to PHP Applications

Is PHP suitable for soft real-time applications?

Page 48: Adding Real-time Features to PHP Applications

Is PHP the right tool for the job?

Page 49: Adding Real-time Features to PHP Applications

No.

Page 50: Adding Real-time Features to PHP Applications

No?

Page 51: Adding Real-time Features to PHP Applications

Why not?

Page 52: Adding Real-time Features to PHP Applications

Let’s use Node.js ! It’s an opportunity to

deploy Erlang or Golang, or …

Page 53: Adding Real-time Features to PHP Applications

Languages War

Page 54: Adding Real-time Features to PHP Applications

Conflicts Everywhere

Page 55: Adding Real-time Features to PHP Applications

Conflicts everywhereTrade-offs everywhere

Page 56: Adding Real-time Features to PHP Applications

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

Page 57: Adding Real-time Features to PHP Applications

Is PHP the right tool for the job?There is not simple answer

Page 58: Adding Real-time Features to PHP Applications

The simpler answer I know is:“I don’t care”

Page 59: Adding Real-time Features to PHP Applications

PHP Codebase(Symfony, Silex, Laravel, Drupal, etc…)

ClientsWeb, Mobile, etc…

Request/Response

Page 60: Adding Real-time Features to PHP Applications

Request/Response

Real-time API Pub/Sub, RPC, etc..

RPC

Page 61: Adding Real-time Features to PHP Applications

• A big ecosystem of thousands of useful libraries and components easily installable thanks to Composer

• Very powerful template engines, ORMs, etc…

Page 62: Adding Real-time Features to PHP Applications

• 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

Page 63: Adding Real-time Features to PHP Applications

It’s here to stay

Page 64: Adding Real-time Features to PHP Applications
Page 65: Adding Real-time Features to PHP Applications

RememberFull comprehension of both the upsides and downsides

of a particular choice

Page 66: Adding Real-time Features to PHP Applications

Downsides

• We have to introduce a new stack to provide real-time features

Page 67: Adding Real-time Features to PHP Applications

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

Page 68: Adding Real-time Features to PHP Applications

Upsides cont…

• Opens the door to write reactive, event-based, distributed architectures

• Scalability is easier to achieve by distributing messages to multiple systems

Page 69: Adding Real-time Features to PHP Applications

Examples

Page 70: Adding Real-time Features to PHP Applications

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

Page 71: Adding Real-time Features to PHP Applications

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

Page 72: Adding Real-time Features to PHP Applications
Page 73: Adding Real-time Features to PHP Applications

Tips and Tricks

• WSS

• Deadlines

• Timeouts

• Retries with back-off, etc…

• Idempotency

Page 74: Adding Real-time Features to PHP Applications

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…

Page 75: Adding Real-time Features to PHP Applications

Don’t Stop Here

• gRPC – A high performance, open-source universal RPC framework from Googlehttp://www.grpc.io/

• IoT, WoT, etc… – real world objects connected to the wider internet

Page 76: Adding Real-time Features to PHP Applications

References

• WAMP Proto – http://wamp-proto.org/

• https://github.com/voryx/ThruwayBundle

• https://www.infoq.com/articles/websocket-and-http2-coexist

Page 77: Adding Real-time Features to PHP Applications

Questions

• What about React PHP?

• Multi-Threading in PHP with pthreads? https://gist.github.com/krakjoe/6437782/

• Micro-services what?

Page 78: Adding Real-time Features to PHP Applications

Gracias!

@ronnylt

Work with us!