Recommender: Unterschied zwischen den Versionen

Aus Callooh Wiki
Zur Navigation springen Zur Suche springen
Zeile 61: Zeile 61:
== Kommunikation ==
== Kommunikation ==
=== Messaging ===
=== Messaging ===
==== Qeues ====
 
==== Qeues und Topics ====
 
 
=== Statusmap ===
Jeder Knoten ist als Graph-Node in der Statusmap vertreten.
Jeder Knoten aktualisiert in regelmässigen Abständen die ''Heartbeat'' Property seines entsprechenden Nodes in der Statusmap.
Dieser Schreibvorgang bewirkt eine synchronisation mit dem Master, wodurch die Statusmap unmittelbar nach jedem Schreibvorgang konsistent ist.
 
Je nach Rolle erfolgt zusätzlich zum Update der Statusmap ein zusätzlicher Schritt:
* der Koordinator prüft ob eine ''Heartbeat'' Property eines Kontens nicht aktualisiert wurde. In diesem Fall gilt der Knoten als ausgefallen, und wird aus der Statusmap entfernt. Zugeordnete Mandanten und Jobs werden neu verteilt.
* jeder Knoten prüft ob der Koordinator dessen ''Heartbeat'' Property aktualisiert hat. Ist dies nicht der Fall, gilt der Koordinator als ausgefallen, und der Knoten startet eine [[#Election]].


=== Koordinator ===
=== Koordinator ===
Der Koordinator hat mehrere Aufgaben.
==== Verwaltung der Statusmap ====
Der Koordinator weist jedem Knoten in der Statusmap eine eindeutige numerische ID zu.
=== Election ===
Eine Election findet statt, sobald ein Knoten feststellt dass der Koordinator ausgefallen ist.
Dies erfolgt indem jeder Konten prüft ob er derjenige mit der niedrigsten ID ist. In diesem Fall wird eine Kanten vom ''Koordinator''-Node zum entsprechenden Member-Knoten gesetzt wird.






[[Kategorie:FH]]
[[Kategorie:FH]]

Version vom 26. Oktober 2011, 16:09 Uhr

Architektur

Server

Server Dienste werden in Form eines Clusters zur Verfügung gestellt. Auf jedem Knoten des Clusters läuft ein Applikationsserver, die Kommunikation zwischen den Knoten erfolgt mit Messaging.

Auf genau einem der Knoten läuft eine Koordinator Komponente.

Jeder Knoten aktualisiert in regelmässigen Abständen die #Statusmap

Applikationsserver

Als Applikationsserver kommt JBoss AS7 in der aktuellen Version zum Einsatz.

JBoss' integrierte Cluster-Fähigkeit wird nicht verwendet. Ein Grund hierfür ist, dass derzeit noch keine Dokumentation für die aktuelle Version vorliegt. Ausserdem ist die Applikation dadruch nicht an JBoss als Applikationsserver gebunden, es ist lediglich ein Messaging Provider erforderlich.

Als Messaging System kommt HornetQ zum Einsatz. HornetQ lässt sich nahtlos in JBoss integrieren, bzw. ist bereits in manchen Versionen integriert. HornetQ Server werden im Cluster Modus betrieben, somit wird einerseits Ausfallsicherheit, andererseits Skalierbarkeit gewährleistet.

Datenbank

Als Datenbank kommt neo4j in der Enterprise Edition zum Einsatz. Diese Version ermöglicht es, neo4j Instanzen als Cluster zu betreiben. Neo4j benötigt dafür laufende Zookeeper Instanzen.

Datenstruktur

Eine Datenbank in neo4j kann 32 Milliarden Nodes, 32 Milliarden Relations und 64 Milliarden Properties umfassen.

Das bedeutet für den Fall dass jedes Item mit jedem Item in einer similar_to Beziehung steht eine maximale Obergrenze von ca. 250.000 Items.

Partitionierung der Daten (Sharding) wäre daher erforderlich, wird aber von den meisten Graphdatenbanken nicht unterstützt.

Daten der unterschiedlichen Domänen werden daher in jeweils eigenen Datenbanken gespeichert.

Nachteil dabei ist dass es nicht mehr ohne weiteres möglich ist, Domän-Übergreifende Beziehungen festzustellen.


Pro Datenbank werden die Graphen eines oder mehrerer Mandanten gespeichert, wobei der Knoten, welcher den Mandaten bezeichnet, die Quelle ist.

Client

Clients dienen dazu, mit dem Recommender System zu interagieren.

Wie Clients mit dem jeweiligen Zielsystemen zusammenspielen bleibt der Implementierung des Clients überlassen.

Auch der Umgang mit anonymen Usern obliegt dem Client, so kann beispielsweise einen anonymen User pro Session ein eigener User kreiert werden.


Aktionen

Folgende Aktionen können von Clients ausgeführt werden:

  • Rate: Ein Rating eines Users für ein Item wird übermittelt
  • User hinzufügen: Ein neuer User wird angelegt
  • User-Merkmal hinzufügen: Eine Merkmal, z.B. ein Schlagwort oder eine Eigenschaft, wie Alter, Gender, etc. wird hinzugefügt.
  • Item hinzufügen: Ein neues Item wird angelegt
  • Item-Merkmal hinzufügen: Ein Merkmal, z.B. ein Schlagwort oder ein Wortvektor wird hinzugefügt
  • Recommendations für User abfragen: Das Recommender System liefert dem Client eine Liste mit Namen oder IDs von Items

Design

Kommunikation

Messaging

Qeues und Topics

Statusmap

Jeder Knoten ist als Graph-Node in der Statusmap vertreten. Jeder Knoten aktualisiert in regelmässigen Abständen die Heartbeat Property seines entsprechenden Nodes in der Statusmap. Dieser Schreibvorgang bewirkt eine synchronisation mit dem Master, wodurch die Statusmap unmittelbar nach jedem Schreibvorgang konsistent ist.

Je nach Rolle erfolgt zusätzlich zum Update der Statusmap ein zusätzlicher Schritt:

  • der Koordinator prüft ob eine Heartbeat Property eines Kontens nicht aktualisiert wurde. In diesem Fall gilt der Knoten als ausgefallen, und wird aus der Statusmap entfernt. Zugeordnete Mandanten und Jobs werden neu verteilt.
  • jeder Knoten prüft ob der Koordinator dessen Heartbeat Property aktualisiert hat. Ist dies nicht der Fall, gilt der Koordinator als ausgefallen, und der Knoten startet eine #Election.

Koordinator

Der Koordinator hat mehrere Aufgaben.

Verwaltung der Statusmap

Der Koordinator weist jedem Knoten in der Statusmap eine eindeutige numerische ID zu.

Election

Eine Election findet statt, sobald ein Knoten feststellt dass der Koordinator ausgefallen ist. Dies erfolgt indem jeder Konten prüft ob er derjenige mit der niedrigsten ID ist. In diesem Fall wird eine Kanten vom Koordinator-Node zum entsprechenden Member-Knoten gesetzt wird.