13.3 Neue Realisierungsanforderungen

13.3.3 Lastverteilung

Ziel der Lastverteilung ist die Allokation von Transaktionsaufträgen zu Verarbeitungsrechnern (Transaktions-Routing), so daß eine effiziente Transaktionsbearbeitung erreicht wird. Diese Aufgabe sollte unter Berücksichtigung des aktuellen Systemzustandes durchgeführt werden, insbesondere der Verfügbarkeit und Auslastung der einzelnen Verarbeitungsrechner[57]. Denn nur so kann eine effektive Lastbalancierung zur Reduzierung von Überlastsituationen erreicht werden.

Neben der Lastbalancierung sollte die Lastverteilung jedoch auch eine Transaktionsverarbeitung mit einem Minimum an Kommunikations-, E/A- und Synchronisationsverzögerungen unterstützen. Ein allgemeiner Ansatz hierzu ist ein sogenanntes affinitätsbasiertes Transaktions-Routing [YCDI87, Ra92b]. Dabei wird eine Lastverteilung angestrebt, so daß Transaktionen verschiedener Rechner möglichst unterschiedliche DB-Bereiche referenzieren. Hierzu gilt es, Transaktionstypen mit einer Affinität zu denselben DB-Bereichen möglichst denselben Verarbeitungsrechnern zuzuweisen, wodurch eine hohe rechnerspezifische Lokalität im Referenzverhalten erreicht wird. Das für solche Entscheidungen benötigte Wissen über das Referenzverhalten ist zumindest für häufig ausgeführte Online-Transaktionen bekannt bzw. kann über Monitoring ermittelt werden.

Lastverteilungverfahren wie die wahlfreie Auswahl der Verarbeitungsrechner (random routing), welche das Referenzverhalten nicht berücksichtigen, sind wesentlich einfacher zu realisieren als ein affinitätsbasierter Ansatz. Dafür bringt die Unterstützung rechnerspezifischer Lokalität gewichtige Vorteile für das Leistungsverhalten eines Shared-Disk-Systems, die im Rahmen mehrerer Leistungsanalysen nachgewiesen wurden [YCDI87, Ra93d]:

Inwieweit Lastbalancierung und hohe rechnerspezifische Lokalität erreicht werden können, hängt stark von den Referenzmerkmalen der zu bearbeitenden Transaktionslast ab. Im Idealfall, der in Abb. 13-4a skizziert ist, kann die Last für N Rechner in N Lastgruppen (Transaktionstypen) partitioniert werden, die (weitgehend) disjunkte DB-Bereiche berühren. Durch Zuweisung jeder Lastgruppe zu einem anderen Verarbeitungsrechner wird dann ein Optimum an rechnerspezifischer Lokalität erzielt. Eine günstige Lastbalancierung würde darüber hinaus erfordern, daß jede Lastgruppe etwa den gleichen Bearbeitungsaufwand erfordert.

Vielfach liegen jedoch weniger günstige Verhältnisse vor, wie sie beispielhaft in Abb. 13-4b gezeigt sind. In solchen Fällen existieren Transaktionstypen, die nahezu alle DB-Bereiche referenzieren, sowie DB-Bereiche, die von fast allen (wichtigen) Transaktionstypen referenziert werden. Eine affinitätsbasierte Lastverteilung ist hier zwar auch möglich, jedoch läßt sich nicht verhindern, daß verschiedene Rechner dieselben DB-Bereiche referenzieren. Die Situation verschärft sich noch für dominierende Transaktionstypen, deren Verarbeitung auf nur einem Rechner aufgrund hoher Ausführungsrate bzw. hohen Ressourcen-Bedarfs dessen Überlastung zur Folge hätte. Die notwendige Aufteilung solcher Transaktionstypen auf mehrere Rechner führt jedoch nahezu zwangsweise zu Lokalitätseinbußen. Dies kann höchstens (etwa unter Berücksichtigung von Eingabeparametern) durch eine Aufteilung in mehrere Sub-Transaktionstypen, die unterschiedliche DB-Teile berühren, vermieden werden. In Bankanwendungen könnten so Konto-Transaktionen (Einzahlung, Abhebung etc.) über die Kontonummer aufgeteilt werden, so daß jeder Rechner Transaktionen/Konten eines anderen Wertebereiches für die Kontonummern bearbeitet.

Abb. 13-4: Referenzverteilung von Transaktionslasten

Zur Implementierung einer Routing-Strategie bestehen vielzählige Alternativen, die in [Ra92b] klassifiziert und beschrieben werden. Aus Effizienzgründen empfiehlt sich für Online-Transaktionen ein tabellengesteuerter Ansatz, bei dem für einen Transaktionstyp aus einer Routing-Tabelle der bevorzugte Verarbeitungsrechner ermittelt wird. Bei der Bestimmung der Routing-Tabelle sind Referenzierungsmerkmale sowie geschätzter Betriebsmittelbedarf von Transaktionstypen zu berücksichtigen. Eine Neubestimmung der Routing-Tabelle kann in bestimmten Situationen vorgenommen werden, insbesondere bei veränderter Rechneranzahl (Rechnerausfall, neuer Rechner) oder stark geändertem Lastprofil.

Allerdings zeigten empirische Untersuchungen bereits, daß mit einem tabellengesteuerten Ansatz allein meist keine effektive Lastbalancierung erreicht werden kann [Ra88b]. Denn die Berechnung der Routing-Tabelle basiert auf Erwartungswerten über mittlere Ankunftsraten und Instruktionsbedarf pro Transaktionstyp, während die tatsächliche Lastsituation von den Mittelwerten meist signifikant abweicht. Zudem sind die durch Kommunikations-, E/A-, und Sperrverzögerungen bedingten Auswirkungen i.a. in jedem Rechner verschieden und bei der Berechnung der Routing-Tabelle kaum vorhersehbar. Aus diesen Gründen empfiehlt sich ein gemischter Ansatz zum Transaktions-Routing, bei dem aus einer vorbestimmten Tabelle der unter Lokalitätsaspekten bevorzugte Rechner bestimmt wird, daneben jedoch auch die aktuelle Lastsituation berücksichtigt wird. Ist z.B. der bevorzugte Rechner zum Zuweisungszeitpunkt bereits völlig überlastet, kann eine Zuteilung zu einem weniger belasteten Rechner erfolgen, der auch teilweise Lokalität unterstützt.


[57] Die Freiheitsgrade der Lastverteilung sind natürlich eingeschränkt, wenn bestimmte Transaktionsprogramme nur an einer Teilmenge der Rechner vorliegen. Wir unterstellen daher die Verfügbarkeit jedes Transaktionsprogramms an allen Rechnern. Für Shared-Disk-Systeme ist dies ohne replizierte Speicherung der Programme möglich, indem diese auf den gemeinsamen Platten gehalten werden. Einzelne DB-Operationen können ohnehin von jeder DBVS-Instanz bearbeitet werden.