- doag.org · “a collection of technologies and companies who leverage users and developers in a...

34

Upload: duongphuc

Post on 02-Feb-2019

215 views

Category:

Documents


0 download

TRANSCRIPT

<Insert Picture Here>

Web-2.0-Anwendungen mit MySQL

Ralf GebhardtPrincipal Sales Consultant MySQL

<Insert Picture Here>

Agenda

• Die Definition von Web-2.0 • Web-2.0-Architektur• MySQL als Datenbankschicht Teil 1

– MySQL Replikation

• Memcached und MySQL• MySQL als Datenbankschicht Teil 2

– MySQL Cluster

• Q&A

<Insert Picture Here>

“A collection of technologies and companies who leverage users and

developers in a collaborative manner in order to rapidly create

data and develop applications with a high level of integration across

platforms, data sources and other web-enabled services”

Die Definition von Web-2.0

Tim O’Reilly & Dale Dougherty 2004

Die Definition von Web-2.0

• Das Web als Plattform• Daten als die treibende Kraft• Zusammenarbeit im Netzwerk durch Architektur der

Mitwirkung• Innovation durch Zusammenfassung von Systemen

und Sites durch das Zusammenführen von Funktionen verteilt arbeitender unabhängiger Entwickler

• Geschäftsmodelle ohne Overhead, die durch die Syndikatbildung von Inhalten und Services ermöglicht werden

• Das Ende des Software-Entwicklungszyklus - BETA

Die Plattform ist das Web

• Das Web als grundlegende Programmier-Plattform• Einfach alles findet über das Web statt• Mainframe zu Client/Server – PC zu Web• Migration vom Desktop zum Browser und Browser-

fähigen Geräten

Feeds Blogs Social Networking Wikis Mashups Tags…

<Insert Picture Here>

Web-2.0-Architektur

Web-2.0-Architektur

Der Web-2.0-Stack

Web-2.0-Komponenten

Browser

Internet

Lastverteilung

App.-Server

Lese-Cache

Datenbank

Herausforderungen für Web-2.0-Anwendungen

• Ständige Veränderungen• Diverse Schnittstellen und Quellen• Verfügbarkeitsanforderungen steigen mit dem Erfolg• Last-Abschätzungen kaum möglich

Das bedeutet für die Datenbank-Komponente:• Standard-Schnittstellen müssen vorhanden sein• Verschiedenste Anforderungen seitens

– Last, Verfügbarkeit, Persistenz

• Skalierung über mehrere Server, oft Online

<Insert Picture Here>

MySQL als Datenbankschicht – Teil 1

MySQL Replikation

MySQL 5.1 Speicher-Engine-Architektur

MySQL Replikation

• Die Kernfunktionalität Basis für Lese-Skalierung

• Asynchrone Implementierung sorgt für Entkopplung zwischen Master und Slave

• Auf dem Master geschriebene Daten werden zusätzlich im Binary Log protokolliert

• Der I/O Thread des Slave liest Einträge des Binary Log und protokolliert diese im Relay Log des Slaves

• Der SQL Thread des Slaves liest das Relay Log und übernimmt die Daten in den Slave

• Die geschriebenen Daten können optional wiederum im Binary Log des Slaves protokolliert werden

Varianten mit MySQL Replikation

Master-Slave Kette Master-Master

Slave-Farm Multi-Master Ring

Multi-Source nicht möglich!

Lese-Skalierung mit MySQL

Leseintensive Anwendungen

Schreibintensive AnwendungenAllgemeine Nutzung

• Verwaltung mehrerer Verbindungen für:– Authentifizierung– Session Management– Logging/Click Stream– Management und Administration– Anwendungsdaten– Trennen von „Low Persistency“ und High Persistency“-Daten

Schreibintensive AnwendungenAllgemeine Nutzung

• Low Persistency– Warenkörbe und temp. Listen– Queues wie Bestellungen, Dokumente mit

Statusänderungen, ...– Kurze Nachrichten

• High Persistency– Kataloge– Wunschlisten– Vorschlagslisten– Foren, Nachrichten, Kommentare etc.

Sharding mit MySQL

Erweiterte Web-2.0-Architektur

<Insert Picture Here>

Memcached und MySQL

Leseperformance durch Memcached

• Entwickelt von Danga Interactive für LiveJournal• Allgemeiner, verteilerter Cache-Mechanismus

– Verfügbar für Linux, FreeBSD, Solaris, Windows, OS X– Einfaches UDP Protokoll, Libevent basiert– Integration mit MySQL, PostgreSQL, Apache, lighthttpd,

Drupal ...• PhP, Perl, Python, Ruby, C/C++, Java, LUA etc.

• Verwendet (unter anderem) von LiveJournal, Fotolog, Facebook, Amazon, Yahoo, YouTube, Wikipedia

Memcached ist ein hochperformantes Objekt-Caching-System auf Basis von verteiltem Speicher. Ziel ist der schnellere

Zugriff auf dynamische Web-Anwendungen durch Reduzierung von Datenbanklast,

aber auch eine Nutzung ohne Datenbank ist möglich.

MySQL und memcached BereitstellungMemcached und MySQL Replikation

MySQL & memcached BereitstellungMemcached, MySQL Replikation und Sharding

Memcached – die Fakten

• Größe Key: 250 Bytes• Größe Daten: bis zu 1 MB• Maximale Größe hängt vom 32/64 Bit Betriebssystem ab• LRU (Least Recently Used) basiert – Die am längsten

nicht verwendeten Elemente werden freigegeben (Datengröße spielt hier auch eine Rolle)

• Threads arbeiten effektiv mit großen Instanzen• Speicher wird permanent zugewiesen

– Der „Slab Allocator“ teilt den Speicher in Daten-Container

– Verbesserte Performance zum Preis von Fragmentierung und verschwendetem Speicher

Memcached – Was es NICHT ist

• Ein zuverlässiger Speicher– Daten können verloren gehen

• Hochverfügbar– Keine Redundanz, kein Failover

• Sicher– Kein Mechanismus zur Authentifizierung

• Eine schnelle Datenbank– keine Atomarität, keine Konsistenz, keine Isoliertheit,

keine Dauerhaftigkeit

• Ein reiner Datenbank-Cache– Kein Konzept, Daten als ungültig zu deklarieren

• Reine Nutzung aus der Anwendung heraus

<Insert Picture Here>

MySQL als Datenbankschicht – Teil 2

MySQL Cluster

MySQL Cluster

• Höchste Verfügbarkeit– Automatisches Fail-Over in

Sekundenbruchteilen– Online Skalierung– Online Upgrades

• Nutzung von Standard-Hardware

• Kein „Single Point of Failure“• Daten wird über 2 Nodes

synchron gehalten• Automatische Partitionierung• Hoch-Performant

Anwendung

MySQL Server Nodes

Data Nodes

Management Nodes

On-Line Skalierung & Wartung

1. Hinzufügen einer Node Group

2. Daten re-partitionieren

3. Redundante Daten löschen

4. Verteilung der Last auf beide Node Groups

• Online Schemata ändern• Hardware & Software-

Upgrade ohne Downtime• Online Backup

Vergleich Memcached & MySQL Cluster

Memcached• Verteilt• Praktisch unlimitierte Größe• Generisch (kann jedes Objekt

speichern)• Keine direkte Invalidation• Max 1MByte pro Element

MySQL Cluster• Verteilt• Nicht unlimitiert aber sehr groß• Speichert jede Art von Daten als

DB• Keine Invalidation (aber DELETE)• Hochverfügbar und redundant• Random/Multikey Suche• SQL oder natives Interface