Twitter: Publisher-subscriber in volle glorie

 
01 februari 2011

Twitteren is leuk. Je kunt ten eerste boeiende mensen volgen. En andersom mensen jouw boeiend persoontje laten volgen. Of kijken hoe populair je bent: tel het aantal followers. Kijken hoe meelevend je bent: tel het aantal following. Waarom Twitter mij voornamelijk boeit is dat het één groot PubSub (publish/subscribe)-pattern is. Het is een gigantisch “hello world” als het gaat om dit pattern. En het leuke is, je hoeft niets te bouwen om het te ontdekken. Je kunt direct meedoen.

Want denk maar mee. In het PubSub pattern hebben we een observer en een subject. Een subject is een object dat geobserveerd kan worden. De observer kan zich registreren bij het subject via een RegisterObserver(Observer) methode. Een subject houdt een lijstje bij met alle geregistreerde observers. Als het subject iets te melden heeft zorgt hij dat zijn observers dit komen te weten. Meestal gaat deze dan zijn lijstje af en roept op ieder observer de Notify() methode aan.

Zo ook Twitter. In Twitter kennen we twee type Twitteraars: followers en following. Als follower kun je jezelf registreren bij een Twitteraar door de methode Follow op deze persoon uit te voeren. Je komt dan in zijn lijstje van geregistreerde followers Als deze persoon wat te melden heeft, d.w.z. een tweet laat, dan zorgt Twitter ervoor dat zijn followers dit te weten komen.

Om grote ruzies te voorkomen hebben ze bij Twitter het volgende bedacht: je mag het allebei zijn. Zowel follower als following, lees: subject als observer. Je bent in wezen een dubbelganger en dat maakt Twitter zo leuk. Ik schat in dat er maar weinig applicaties zijn die dit pattern op deze manier hebben geïmplementeerd. Daarvoor leggen we onze objecten toch altijd een iets te sterke hiërarchie op.

Twitter gaat zelfs een stap verder. Je kunt als follower Retweeten. Event-propagatie dus. Stel je eens voor. Een observer die een event zo boeiend vindt (niet het systeem maar de observer bepaalt!) dat hij die doorslingert naar al zijn subjects, eh observers. Ja, wacht dat kan helemaal niet. Daarvoor heb je beide petten nodig. Als observer (om genotificeerd te worden) en als subject (om anderen te notificeren). Wat je met gelijkwaardige objecten al niet zou kunnen bereiken.

Zo kunnen we van Twitter weer leren dat een pattern nooit te oud is om er weer nieuw leven in te blazen. Daarnaast lijkt me dat je in Twitter nog wel meer kunt ontdekken. Wat te denken van de schaalbaarheid van het message-based systeem. Dat moet toch schalen als een tierelier. Of de ‘@’-directive waarmee je loose-coupled toch een specifiek observer/subject kunt aanspreken. Genoeg te observeren dus.

Happy observing, happy tweeting.

#twexit,

Werken met ?
Kijk dan bij onze mogelijkheden voor starters en/of ervaren IT'ers.


Categorieën: Architectuur, Development

Tags:


Reactie

  • Jasper Stein schreef:

    “Een tweet laten”… voor een niet-Twitteraar als ik (ja, ze bestaan echt!) klinkt dat wel dubieus…

    Maar je doet net alsof een object ofwel een observer ofwel een observable is maar (bijna) nooit beide. Maar als je het Goed Doet(tm) dan zijn beide een interface; en kan je klasse dus beide implementeren. Dus zo heeeeel vreemd is het welbeschouwd niet.

    Die specifieke variatie op het Standaard(tm) PubSub-patroon dat de observer zelf bepaalt of hij een event ‘doorvuurt’ is natuurlijk wel weer interessant :-)

    Geplaatst op 02 februari 2011 om 19:36 Permalink