Django und Mysql db cluster

Django, Flask, Bottle, WSGI, CGI…
Antworten
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

Hi,

ich habe eine Django-App und mal angenommen ich möchte meine entsprechende Mysql DB in ein Cluster packen, sodass mehr Anfragen gehandelt werden können. Wie macht man das am Besten?

while halbwissen == True:

Ich würde mir jetzt eine Clustersoftware aussuchen. Sowas wie Percona oder Galera oder was es noch so gibt. Dann würde ich bspw. 3 Instanzen meiner DB hochfahren und diese im Cluster als Node definieren.
Jetzt muss Django das aber auch verstehen. Ich habe gesehen, dass es Module für Django gibt (wie django-galera) die man dann in der settings.py in den DATABASES{} konfiguriert. Das war es dann schon?
Was passiert, wenn ein Knoten ausfällt? Woher weiß die Applikation dann, dass dieser Node nicht mehr beschrieben/gelesen werden kann?

Was ich dabei jetzt nicht ganz verstehe ist, wie der ORM, bzw Migrationen dann funktionieren. Wird dann eine Migration auf einer DB ausgeführt und die Clustersoftware gleicht dann die anderen nodes an, oder wie funktioniert das?


Außerdem habe ich gelesen, dass oft zwischen Cluster und App noch ein DB-Proxy gestellt wird. Sowas wie ein HAProxy. Warum macht man das?
Und damit verstehe ich dann die Funktionsweise vom ORM noch weniger.

LG
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

ich habe eine Django-App und mal angenommen ich möchte meine entsprechende Mysql DB in ein Cluster packen, sodass mehr Anfragen gehandelt werden können. Wie macht man das am Besten?
Erstmal stellt sich die Frage was für Anfragen du überhaupt skalieren möchtest, geht es da nur um reads oder auch um writes? Welches ist dein aktuelles Bottleneck? Sind alle andere Optionen schon ausgeschöpft?
Was passiert, wenn ein Knoten ausfällt?
Wenn dir dass nicht bis ins letzte Detail klar ist, wäre es ein massiver Fehler solche Software zu benutzen.
Woher weiß die Applikation dann, dass dieser Node nicht mehr beschrieben/gelesen werden kann?
Die Applikation merkt es daran dass schreiben/lesen schief geht.
Außerdem habe ich gelesen, dass oft zwischen Cluster und App noch ein DB-Proxy gestellt wird. Sowas wie ein HAProxy. Warum macht man das?
Datenbankverbindungen benötigen Resourcen und auch dass erstellen von solchen Verbindungen ist nicht ganz ohne. Deswegen hat man auf Client Seite i.d.R. einen Connection Pool. Der hilft aber nur eingeschränkt wenn man viele Clients hat, z.B. weil man die Applikation horizontal skaliert. In dem Fall kann es Sinn machen einen externen Connection Pooler zwischen Clients und Datenbank zu haben.

Wann genau sowas Sinn macht hängt von der konkreten Datenbank und der Hardware ab. Bei Django macht dies allerdings schon recht früh Sinn weil Django keinen brauchbaren Connection Pool hat, das Problem hätte man mit SQLAlchemy nicht.
Antworten