Skip to main content

Τι είναι το proxysql και πως μπορεί να χρησιμοποιηθεί

Το ProxySQL είναι ένα high-performance proxy για MySQL και MariaDB. Στην ουσία λειτουργεί ως ενδιάμεσος μεταξύ των εφαρμογών σου και των βάσεων δεδομένων σου και προσφέρει αρκετά πλεονεκτήματα. Ας το εξηγήσουμε αναλυτικά:


1️⃣ Τι κάνει

  • Δέχεται SQL queries από την εφαρμογή σου και τα προωθεί στους κατάλληλους MySQL servers.

  • Μπορεί να λειτουργήσει ως load balancer, δηλαδή να μοιράζει τα queries ανάμεσα σε πολλαπλούς servers για καλύτερη απόδοση.

  • Υποστηρίζει replication-aware routing, δηλαδή μπορεί να στείλει τα read queries στους replicas και τα write queries στον master.

  • Παρέχει caching, connection pooling, και query routing για καλύτερη απόδοση και λιγότερα connections στη βάση.


2️⃣ Κύρια χαρακτηριστικά

  • Load balancing: Μοιράζει τα queries σε πολλούς servers για υψηλή διαθεσιμότητα και απόδοση.

  • Query routing: Καθορίζει σε ποιο server θα πάει κάθε query (π.χ., writes στον master, reads στους replicas).

  • Connection pooling: Κρατάει ανοιχτές συνδέσεις για να μην ανοίγουν/κλείνουν συνεχώς.

  • Query caching: Αποθηκεύει προσωρινά αποτελέσματα queries για να μειώσει το load στη βάση.

  • Failover & High Availability: Αν πέσει ένας server, τα queries μπορούν να συνεχίσουν να εκτελούνται στους υπόλοιπους.


3️⃣ Πού χρησιμοποιείται

  • Σε συστήματα με πολλούς MySQL servers (master + replicas).

  • Όταν θέλεις απλή κλιμάκωση (scale reads) χωρίς να αλλάζεις την εφαρμογή.

  • Για monitoring και statistics των queries, καθώς μπορεί να καταγράφει ποιες queries πάνε που.

==============
Στα συστήματα μας το χρησιμοποιούμε κυρίως για να έχουμε λιγότερα max connections στη βάση δεδομένων. Αυτό που κάνει είναι αντί να ανοίγει νέο connection για κάθε νέο αρχείο PHP που ανοίγει κρατάει ενα ζωντανό connection και το διατηρεί μεταξύ κλήσεων επιταχύνωντας πολύ τη διαδικασία σύνδεσης και δεν χρειάζεται επιπλέον connections (tcp ktlp)
Γιατί δε το χρησιμοποιούμε για load balancing?
Εμείς στα πρότζεκτ μας τώρα δεν κάνουμε transactions για τα CRUD actions αλλά τα κάνουμε απευθείας. Το proxysql για να μπορεί να διανείμει σωστά τα select και τα writes θα πρέπει να έχουμε transactions. Αν σε κάποιο προτζεκτ μελλοντικά τρέξουμε με transactions (που πρέπει) θα μπορούμε με proxysql να δηλώσουμε 2+ servers και με μία σύνδεση να αναλαμβάνει το proxysql το load balancing