Heim > Java > javaLernprogramm > Erstellen Sie eine Architektur mit hoher Parallelität und hoher Verfügbarkeit

Erstellen Sie eine Architektur mit hoher Parallelität und hoher Verfügbarkeit

巴扎黑
Freigeben: 2017-07-24 14:14:35
Original
1826 Leute haben es durchsucht




Das Architekturbüro in der E-Commerce-Plattform aus verschiedenen Blickwinkeln zusammengefasst, habe ich einen ersten Entwurf fertiggestellt, der wird ergänzt und verbessert. Herzlich willkommen, mitzumachen.

Bitte geben Sie die Quelle für den Nachdruck an:

Autor: Yang Butao

Schwerpunkt auf verteilter Architektur, Big Data, Suche, Open-Source-Technologie

QQ: 306591368

TechnologieBlog:

1. Designkonzept

1.  Raum für Zeit

1)  Multi -Level-Cache, statisch

Client-Seiten-Cache (http-Header enthält Expires/Cache of Control, letzte Änderung(304, Der Server gibt den Body nicht zurück, der Client kann weiterhin den Cache verwenden, um den Datenverkehr zu reduzieren ), ETag)

Reverse-Proxy-Cache

App-seitiger Cache(Memcache)

Speicherdatenbank

Puffer, Cache-Mechanismus (Datenbank, Middleware usw.)

2) Index

Hash, B-Baum, Inversion, Bitmap

Der Hash-Index eignet sich für umfassende Array-Adressierung und Funktionen zum Einfügen verknüpfter Listen und kann einen schnellen Zugriff auf Daten ermöglichen.

Der B-Tree-Index eignet sich für abfrageorientierte Szenarien, vermeidet mehrere IOs und verbessert die Abfrageeffizienz.

Invertierter Index ist die beste Möglichkeit, die Wort-zu-Dokument-Zuordnungsbeziehung und die effektivste Indexstruktur zu implementieren, und wird häufig im Suchfeld verwendet.

Bitmap ist eine sehr einfache und schnelle Datenstruktur, die gleichzeitig Speicherplatz und Geschwindigkeit optimieren kann (ohne Platz gegen Zeit eintauschen zu müssen) und eignet sich für Rechenszenarien mit riesige Datenmengen.

2.  Paralleles und verteiltes Rechnen

1 ) Aufgabensegmentierung, Teilen und Erobern(MR)

In großen Datenmengen weisen die Daten bestimmte lokale Merkmale auf, wobei das Prinzip verwendet wird Die Lokalität spaltet und überwindet das Problem der Massendatenberechnung.

Das MR-Modell ist eine Shared-Nothing-Architektur und der Datensatz wird auf verschiedene Knoten verteilt. Während der Verarbeitung liest jeder Knoten die lokal gespeicherten Daten zur Verarbeitung(Karte), führt die verarbeiteten Daten zusammen(kombinieren), sortiert(mischen und sortieren) und verteilt sie dann (an Knoten reduzieren), wodurch die Übertragung großer Datenmengen vermieden und die Verarbeitungseffizienz verbessert wird.

2)  Multiprozess , Multithreaded Parallel Execution(MPP)

Parallel Computing (Parallel Computing) bezieht sich auf den Prozess der Verwendung mehrerer Computerressourcen zur Lösung Rechenprobleme gleichzeitig zu lösen, ist ein wirksames Mittel, um die Rechengeschwindigkeit und Verarbeitungsleistung von Computersystemen zu verbessern. Seine Grundidee besteht darin, mehrere Prozessoren /Prozesse /Threads zu verwenden, um dasselbe Problem gemeinsam zu lösen, dh das zu lösende Problem in mehrere Teile zu zerlegen und jeden Teil von einem unabhängigen Prozessor parallel zu berechnen.

Der Unterschied zwischen

und MR besteht darin, dass es auf der Problemzerlegung und nicht auf der Datenzerlegung basiert.

3.  Mehrdimensionale Verfügbarkeit

1)  Lastausgleich, Disaster Recovery, Backup

Da die Parallelität der Plattform zunimmt, ist es notwendig, die Knotenkapazität für das Clustering zu erweitern und Lastausgleichsgeräte zu verwenden, um Anforderungen zu verteilen Bietet gleichzeitig auch eine Fehlererkennungsfunktion. Um die Verfügbarkeit zu verbessern, ist ein Disaster-Recovery-Backup erforderlich, um durch Knotenfehler verursachte Nichtverfügbarkeitsprobleme zu verhindern an unterschiedliche Ausfallanforderungen.

2) Lese- und Schreibtrennung

Die Lese- und Schreibtrennung erfolgt für die Datenbank mit Parallelität Die Erhöhung des Datenzugriffs ist ein wichtiges Mittel zur Verbesserung des Datenzugriffs. Natürlich müssen wir beim Trennen von Lese- und Schreibdaten auf die Konsistenz der Daten achten. in verteilten Systemen Bei der CAP-Quantifizierung wird mehr Wert auf die Benutzerfreundlichkeit gelegt.

3) Abhängigkeiten

Die Beziehung zwischen den verschiedenen Modulen in der Plattform sollte möglichst niedrig sein. Möglichst gekoppelt, können Sie über relevante Nachrichtenkomponenten interagieren, möglichst asynchron, und den Hauptprozess und den Sekundärprozess des Datenflusses klar unterscheiden. Die Protokollierung kann beispielsweise asynchron erfolgen, was die Verfügbarkeit erhöht des Gesamtsystems.

Natürlich ist bei der asynchronen Verarbeitung häufig ein Bestätigungsmechanismus (bestätigen, ack) erforderlich, um sicherzustellen, dass Daten empfangen oder verarbeitet werden.

In einigen Szenarien wird die Bestätigungsnachricht jedoch aus anderen Gründen nicht zurückgegeben, obwohl die Anfrage verarbeitet wurde (z. B. instabiles Netzwerk ), dann muss in diesem Fall die Anfrage erneut übertragen werden, und das Design der Anforderungsverarbeitung muss die Idempotenz aufgrund von Neuübertragungsfaktoren berücksichtigen.

4) Überwachung

Überwachung ist auch ein wichtiges Mittel zur Verbesserung der Verfügbarkeit von Die gesamte Plattform überwacht mehrere Dimensionen. Das Modul ist während der Laufzeit transparent, um während der Laufzeit Whiteboxing zu erreichen.

4.  Strecken

1) Split

Aufteilung umfasst die Aufteilung des Geschäfts und der Datenbank.

Systemressourcen sind immer begrenzt. Wenn ein relativ langes Geschäft auf einmal ausgeführt wird, kann diese Blockierungsmethode bei einer großen Anzahl gleichzeitiger Vorgänge nicht wirksam sein auszuführenden Prozesse, sodass der Systemdurchsatz nicht hoch ist.

Es ist notwendig, das Geschäft logisch zu segmentieren und eine asynchrone, nicht blockierende Methode zu verwenden, um den Durchsatz des Systems zu verbessern.

Mit zunehmender Datenmenge und zunehmender Parallelität kann die Trennung von Lesen und Schreiben die Anforderungen an die Parallelitätsleistung des Systems nicht erfüllen. Daten müssen segmentiert werden, einschließlich der Aufteilung der Daten in Datenbanken und Tabellen . Diese Methode zum Aufteilen von Datenbanken und Tabellen erfordert das Hinzufügen von Routing-Logikunterstützung für Daten.

2)  Zustandslos

Für die Skalierbarkeit des Systems ist es am besten, wenn das Modul zustandslos ist. Durch das Hinzufügen von Knoten kann der Gesamtdurchsatz verbessert werden.

5.  Ressourcennutzung optimieren

1) Systemkapazität ist begrenzt

Die Kapazität des Systems ist begrenzt, und auch die Menge an Parallelität, die es aushalten kann, ist begrenzt. Beim Entwurf der Architektur muss die Verkehrskontrolle berücksichtigt werden, um zu verhindern, dass das System aufgrund unerwarteter Angriffe oder der Auswirkungen sofortiger Parallelität abstürzt. Wenn Sie das Hinzufügen von Flusskontrollmaßnahmen planen, können Sie erwägen, Anfragen in die Warteschlange zu stellen. Wenn die Anfrage den erwarteten Bereich überschreitet, können Sie einen Alarm ausgeben oder sie verwerfen.

2) Atomare Operationen und Parallelitätskontrolle

Für den Zugriff auf gemeinsam genutzte Ressourcen, um Konflikte und Parallelität zu verhindern ist erforderlich Gleichzeitig müssen einige Transaktionen transaktional sein, um die Transaktionskonsistenz sicherzustellen. Daher müssen beim Entwurf des Transaktionssystems atomare Operationen und Parallelitätskontrolle berücksichtigt werden.

Einige häufig verwendete Hochleistungsmethoden zur Gewährleistung der Parallelitätskontrolle umfassen optimistisches Sperren, Latch, Mutex, Copy-on-Write, CAS usw. ; Mehrversions-Parallelitätskontrolle MVCC ist normalerweise ein wichtiges Mittel zur Gewährleistung der Konsistenz, das häufig beim Datenbankdesign verwendet wird.

3) Basierend auf unterschiedlichen Logiken unterschiedliche Strategien übernehmen

Es gibt verschiedene Arten von Geschäftslogiken in der Plattform, darunter solche mit komplexen Berechnungen und solche, die IO verbrauchen. Gleichzeitig verbrauchen unterschiedliche Geschäftslogiken unterschiedliche Mengen an Ressourcen für verschiedene Logiken übernommen werden.

Für den IO-Typ kann eine ereignisgesteuerte asynchrone, nicht blockierende Methode übernommen werden. Die Single-Threaded-Methode kann den durch Threadwechsel verursachten Overhead reduzieren Bei mehreren Threads wird Spin Spin verwendet, um den Thread-Wechsel zu reduzieren (z. B. Oracle-Latch-Design ); nutzen Sie für Berechnungen vollständig Multi-Threads für Operationen.

Bei derselben Art von Aufrufmethode führen verschiedene Unternehmen eine entsprechende Ressourcenzuweisung durch und legen unterschiedliche Anzahlen von Rechenknoten oder Threads fest Menge, das Geschäft wird umgeleitet und Geschäfte mit hoher Priorität werden zuerst ausgeführt.

4)  Fehlertolerante Isolierung

Wenn in einigen Geschäftsmodulen des Systems ein Fehler auftritt, der Reihe nach Um die Parallelität zu verringern, ist es im normalen System manchmal erforderlich, die Verarbeitung dieser abnormalen Anforderungen über separate Kanäle in Betracht zu ziehen oder diese abnormalen Geschäftsmodule vorübergehend automatisch zu verbieten.

Das Scheitern einiger Anfragen kann ein zufälliger vorübergehender Fehler sein (z. B. Netzwerkinstabilität ), und ein erneuter Versuch der Anfrage muss in Betracht gezogen werden.

5) Ressourcenfreigabe

Die Ressourcen des Systems sind begrenzt Ressourcen Bei der Anforderung müssen Ressourcen am Ende freigegeben werden, unabhängig davon, ob die Anforderung einen normalen oder einen abnormalen Pfad einnimmt, damit Ressourcen rechtzeitig für andere Anforderungen wiederhergestellt werden können.

Beim Entwurf der Kommunikationsarchitektur ist es oft notwendig, die Timeout-Kontrolle zu berücksichtigen.

2. Statischer Architekturentwurf

Die gesamte Architektur ist eine geschichtete und verteilte Architektur, auch vertikalCDN, Lastausgleich/Reverse-Proxy, Webanwendung, Business-Schicht, Basisdienstschicht, Datenspeicherschicht. Die horizontale Richtung umfasst Konfigurationsmanagement, Bereitstellung und Überwachung der gesamten Plattform.

3. Analysearchitektur

1. CDN

CDNDas System kann den Netzwerkverkehr und die Verbindung jedes Knotens, den Laststatus und die Entfernung zum Benutzer in Echtzeit analysieren und Antwortzeit usw. Die umfassenden Informationen leiten die Anfrage des Benutzers an den Dienstknoten weiter, der dem Benutzer am nächsten liegt. Sein Zweck besteht darin, es Benutzern zu ermöglichen, die Inhalte, die sie benötigen, in der Nähe abzurufen, Überlastungen des Internetnetzwerks zu beseitigen und die Reaktionsgeschwindigkeit von Benutzern beim Zugriff auf Websites zu verbessern.

Für große E-Commerce-Plattformen ist es im Allgemeinen notwendig, ein CDN für die Netzwerkbeschleunigung aufzubauen. Große Plattformen wie Taobao und JD.com verwenden alle Selbst entwickeltes CDN Kleine und mittlere Unternehmen können mit Drittherstellern von CDN wie Lanxun, Wangsu, Kuaiwang usw. zusammenarbeiten.

Natürlich müssen Sie bei der Auswahl eines CDN-Anbieters die Geschäftsdauer berücksichtigen und prüfen, ob dies der Fall ist skalierbare Bandbreitenressourcen, flexible Verkehrs- und Bandbreitenauswahl, stabile Knoten und Kosteneffizienz.

2. Lastausgleich, Reverse-Proxy

Eine große Plattform umfasst viele Geschäftsdomänen und verschiedene Geschäftsdomänen haben unterschiedliche Cluster, Sie können DNS Führt die Verteilung oder Abfrage von Domänennamen durch. Die DNS-Methode ist einfach zu implementieren, aufgrund des Vorhandenseins von Cache mangelt es jedoch im Allgemeinen auf kommerzieller Hardware.F5, NetScaler Oder die Open-Source-Softload lvs wird auf der Ebene 4 verteilt. Natürlich wird Redundanz ( wie lvs+keepalived) und die aktive berücksichtigt und Backup-Methoden werden übernommen.

4

Schichten Nach der Verteilung an den Geschäftscluster wird es zum Laden über Web-Server wie nginx oder HAProxy auf der 7-Ebene verteilt Balancing oder Reverse-Proxy-Verteilung an die Anwendungsknoten im Cluster.

Welche Last ausgewählt werden soll, erfordert eine umfassende Berücksichtigung verschiedener Faktoren (ob sie eine hohe Parallelität erfüllt und hohe Leistung, wie man die Sitzungsaufbewahrung löst, was der Lastausgleichsalgorithmus ist, Komprimierungsunterstützung, Cache-Speicherverbrauch); das Folgende ist eine Einführung, die auf mehreren häufig verwendeten Lastausgleichssoftware basiert.

LVS

, das auf der 4-Schicht arbeitet, ist ein leistungsstarker, hochparalleler, skalierbarer und zuverlässiger Load Balancer, der von Linux implementiert wird und a unterstützt Verschiedene Weiterleitungsmodi (NAT, DR, IP-Tunneling), wobei der DR-Modus den Lastausgleich über das WAN unterstützt. Unterstützt Dual-Machine-Hot-Standby (Keepalived oder Heartbeat) . Die Abhängigkeit von der Netzwerkumgebung ist relativ hoch.

Nginx arbeitet auf der 7-Schicht, einer ereignisgesteuerten, asynchronen und nicht blockierenden Architektur und unterstützt Multiprozess-Load-Balancer-/ Reverse-Proxy-Software mit hoher Parallelität. Sie können für http eine gewisse Umleitung vornehmen, die auf Domänennamen, Verzeichnisstrukturen und regulären Regeln basiert. Erkennen Sie interne Serverfehler wie Statuscodes, Zeitüberschreitungen usw., die vom Server zurückgegeben werden, der Webseiten verarbeitet, und senden Sie Anforderungen, die Fehler zurückgeben, erneut an einen anderen Knoten. Der Nachteil besteht jedoch darin, dass dies bei url nicht der Fall ist zum Testen unterstützt. Für Session Sticky kann es basierend auf dem Algorithmus von IP-Hash implementiert werden, und Session Sticky wird durch die Cookie-basierte Erweiterung nginx-sticky-module unterstützt .

HAProxy unterstützt 4 Schichten und 7 Schichten für den Lastausgleich, unterstützt Sitzung Sitzungserhaltung und Cookie-Anleitung; der Backend-URL-Methode; Lastausgleichsalgorithmen sind relativ umfangreich, einschließlich RR, Gewichtung usw.

Für Bilder benötigen Sie Ein separater Domänenname, ein unabhängiger oder verteilter Bildserver oder mogileFS können verwendet werden, um Varnish zum Bildserver für das Bild-Caching hinzuzufügen.

3. AppZugriff

Die Anwendungsschicht läuft auf jboss oder Der TomcatContainer repräsentiert unabhängige Systeme wie Front-End-Shopping, benutzerunabhängige Dienste, Back-End-Systeme usw.

Protokollschnittstelle, HTTP, JSON

können servlet3.0, asynchrones Servlet, verwenden, um das zu verbessern Durchsatz des gesamten Systems

http-Anfrage läuft über Nginx und wird einem Knoten von App Durch den Lastausgleichsalgorithmus ist es relativ einfach, die Kapazität Schicht für Schicht zu erweitern.

Zusätzlich zur Verwendung von

Cookie zum Speichern einer kleinen Menge an Benutzerinformationen(Cookie ist im Allgemeinen nicht möglich). 4K-Größe überschreiten), für die App-Zugriffsschicht werden benutzerbezogene Sitzungsdaten gespeichert, einige Reverse-Proxys oder Lastausgleich unterstützen dies jedoch nicht Sitzung bleibt hängenDer Support ist nicht sehr gut oder die Anforderungen an die Zugriffsverfügbarkeit sind relativ hoch(AppDer Zugriffsknoten ist ausgefallen und Sitzunggeht verloren) Dies erfordert die Berücksichtigung der zentralen Speicherung von Sitzungen, um die App-Zugriffsschicht zustandslos zu machen. Gleichzeitig können mehr Anwendungsknoten vorhanden sein, wenn die Anzahl der Systembenutzer zunimmt hinzugefügt.

Zentrale Speicherung von Sitzungen

muss die folgenden Anforderungen erfüllen:

a, effizientes Kommunikationsprotokoll

b, verteilter Cache von Sitzung, unterstützt Knotenskalierung, datenredundante Sicherung und Datenmigration

c, SitzungAblaufmanagement

4

stellen Dienstleistungen dar, die von Unternehmen in einem bestimmten Bereich bereitgestellt werden. Zu den Feldern gehören Benutzer, Waren, Bestellungen, rote Umschläge, Zahlungsdienste usw. Verschiedene Felder bieten unterschiedliche Dienstleistungen an 🎜>Diese verschiedenen Bereiche bilden Module. Generell sind die Prinzipien hoher Kohäsion und Schnittstellenkonvergenz wichtig. Natürlich können Module entsprechend der Größe der Anwendung gemeinsam bereitgestellt werden. Bei großen Anwendungen werden sie im Allgemeinen unabhängig voneinander bereitgestellt.

Hohe Parallelität:

Das externe Protokoll der Geschäftsschicht wird im

RPC

-Modus von

NIO

verfügbar gemacht, und zwar im ausgereifteren NIO kann in Kommunikationsframeworks wie netty, mina verwendet werden Verfügbarkeit:Um die Verfügbarkeit von Moduldiensten zu verbessern, wird ein Modul aus Redundanzgründen auf mehreren Knoten bereitgestellt und führt automatisch Lastweiterleitung und Failover durch

;

kann zunächst verwendet werdenVIP+Heartbeat-Methode, das aktuelle System verfügt über eine separate Komponente

HA,

verwendetZookeeper zur Implementierung( Vorteile gegenüber der Originallösung) Konsistenz, Transaktionen: Konsistenz für verteilte Systeme gewährleistet die Benutzerfreundlichkeit, und Konsistenz kann durch Korrekturlesen erreicht werden, um einen endgültigen konsistenten Zustand zu erreichen.

5. Grundlegende Service-Middleware

1) Kommunikationskomponente

Die Kommunikationskomponente wird für Anrufe zwischen internen Diensten des Geschäftssystems verwendet Plattform, müssen Anforderungen an hohe Parallelität und hohen Durchsatz erfüllen.

Die gesamte Kommunikationskomponente umfasst den Client und den Server.

Der Client und der Server unterhalten lange Verbindungen, wodurch die Kosten für den Verbindungsaufbau für jede Anfrage gesenkt werden können. Der Client definiert einen Verbindungspool für jeden Server und kann gleichzeitig eine Verbindung zum Server herstellen

rpc

Betrieb, lange Verbindungen im Verbindungspool erfordern eine Heartbeat-Wartung und legen das Anforderungszeitlimit fest.

Der Aufrechterhaltungsprozess langer Verbindungen kann in zwei Phasen unterteilt werden: Die eine ist der Prozess des Sendens der Anfrage und der andere der Prozess des Empfangens der Antwort. Wenn beim Senden der Anfrage eine IOException auftritt, wird die Verbindung als ungültig markiert. Beim Empfang einer Antwort gibt der Server eine SocketTimeoutException zurück. Wenn eine Zeitüberschreitung festgelegt ist, gibt er direkt eine Ausnahme zurück und löscht diese abgelaufenen Anforderungen in der aktuellen Verbindung. Andernfalls senden Sie weiterhin Heartbeat-Pakete

(

Da es zu Paketverlusten kommen kann, senden Sie einen PingVorgang, wenn das Intervall pingInterval überschreitet), wenn Wenn Ping fehlschlägt ( sendet IOException) , bedeutet dies, dass ein Problem mit der aktuellen Verbindung vorliegt, dann markieren Sie die aktuelle Verbindung als ungültig; ping ist erfolgreich, was anzeigt, dass die aktuelle Verbindung zuverlässig ist und der Lesevorgang fortgesetzt wird. Ungültige Verbindungen werden aus dem Verbindungspool gelöscht. Jede Verbindung läuft in einem separaten Thread zum Empfangen von Antworten. Der Client kann dies synchron (warten, benachrichtigen) oder asynchron rpc

aufrufen,

Die Serialisierung übernimmt die effizientere Hesion-Serialisierungsmethode.

Der Server verwendet das ereignisgesteuerte MINA-Framework von NIO, um Anforderungen mit hoher Parallelität und hohem Durchsatz zu unterstützen.

2) RouterRouter

in Bei den meisten Datenbank-Sharding-Lösungen werden zur Verbesserung des Datenbankdurchsatzes zunächst verschiedene Tabellen vertikal in verschiedene Datenbanken segmentiert.

Wenn eine Tabelle in der Datenbank dann eine bestimmte Größe überschreitet, muss die Tabelle aufgeteilt werden horizontal, und hier gilt das Gleiche als Beispiel:

Für Clients, die auf die Datenbank zugreifen, ist es notwendig, den Speicherort zu lokalisieren, auf den der Benutzer zugreifen muss ID-Daten;

Datensegmentierungsalgorithmus,

führt einen Hash-Vorgang basierend auf der ID des Benutzers durch Hash, diese Methode hat das Problem, ungültige Daten zu migrieren, und der Dienst ist während des Migrationszeitraums nicht verfügbar

Pflegen Sie die Routing-Tabelle. Die Zuordnungsbeziehung zwischen Benutzern und Sharding wird in der Routing-Tabelle unterteilt in Leader und Replica, die für das Schreiben bzw. Lesen verantwortlich sind

Auf diese Weise jedes Geschäft Der Client muss den gesamten Sharding Verbindungspool beibehalten. Dies hat den Nachteil, dass es zu dem Problem einer vollständigen Verbindung kommt

Eine Lösung besteht darin, die Sharding-Methode Sharding zu verwenden. Gehen Sie zur Geschäftsdienstschicht. Jeder Geschäftsknoten unterhält nur eine Shard-Verbindung.

Siehe Bild (Router)

Die Implementierung der Routing-Komponente ist wie folgt (Verfügbarkeit, hohe Leistung, hohe Parallelität)

Basierend auf Leistungsüberlegungen wird die Benutzer-IDMongoDB Die Beziehung zwischen 🎜> und Shard besteht darin, einen Replicatset-Cluster aufzubauen, um die Verfügbarkeit sicherzustellen. biz

s

Sharding und Datenbanks shardingEs handelt sich um eine Eins-zu-Eins-Korrespondenz und greift nur auf eine Datenbank zuSharding.Geschäft

Geschäft Registrierungsknoten nach

zookeepernach oben/bizs/shard/nach unten. Router

Überwachung

ZookeeperKnotenstatus auf /bizs/, Cache onlinebiz befindet sich im Router. Wenn

Client Router auffordert, biz zu erhalten, ruft Router zunächst den entsprechenden Shard des Benutzers von mongodb ab ,router erhält den biz-Knoten über den RR-Algorithmus basierend auf dem zwischengespeicherten Inhalt.

Um die Verfügbarkeits- und gleichzeitigen Durchsatzprobleme des Routers zu lösen, stellen Sie Redundanz auf dem Router her und gleichzeitig überwacht der Client Zookeepers /routers-Knoten und speichert die Liste der Online-Router-Knoten im Cache.

3) HA

Die traditionelle Art und Weise, HA zu implementieren, ist im Allgemeinen die Verwendung eines virtuellen IP-Drifts in Kombination mit Heartbeat, keepalived usw.HA,

KeepalivedVerwenden Sie denvrrp-Modus, um Datenpakete weiterzuleiten und so einen Lastausgleich von 4 Schichten zu ermöglichen. Die Umschaltung erfolgt durch Erkennung von vrrp-Datenpaketen, wodurch redundanter Hot-Standby besser für geeignet ist LVS Übereinstimmung. linux Heartbeat ist ein Hochverfügbarkeitsdienst basierend auf Netzwerk oder Host HAProxy oder Nginx kann Datenpakete basierend auf der 7-Schicht weiterleiten . Daher ist Heatbeat besser für HAProxy und Nginx geeignet, einschließlich Business-Hochverfügbarkeit.

In einem verteilten Cluster können Sie Zookeeper für die verteilte Koordination verwenden und den Cluster für die Listenpflege realisieren und Fehlerbenachrichtigung kann der Client den Hash-Algorithmus oder roudrobin wählen, um einen Lastausgleich für den Master-Master-Modus, Master-Slave zu erreichen Modus, der durch den verteilten Sperrmechanismus zookeeper unterstützt werden kann.

4) NachrichtNachricht

Die asynchrone Interaktion zwischen verschiedenen Systemen der Plattform erfolgt über die MQ-Komponente.

Beim Entwurf von Nachrichtendienstkomponenten müssen Nachrichtenkonsistenz, Persistenz, Verfügbarkeit und ein vollständiges Überwachungssystem berücksichtigt werden.

Es gibt zwei Haupt-Open-Source-Nachrichten-Middlewares in der Branche: RabbitMQ und kafka,

RabbitMQ folgt dem AMQP-Protokoll und wird von der inhärent hochparallelen erlanng-Sprache entwickelt; kafka ist Linkedin in 2010 JahrDezemberEin Open-Source-Nachrichtenveröffentlichungs- und Abonnementsystem,Es wird hauptsächlich zur Verarbeitung aktiver Streaming-Daten verwendet,Datenverarbeitung großer Mengen von Daten.

In Situationen, in denen die Anforderungen an die Nachrichtenkonsistenz relativ hoch sind, ist ein Antwortbestätigungsmechanismus erforderlich, einschließlich des Prozesses der Nachrichtenerstellung und des Nachrichtenkonsums. Das Fehlen von Antworten aufgrund von Netzwerk- und anderen Prinzipien kann jedoch zu Duplikaten von Nachrichten führen. Dies kann auf Geschäftsebene erfolgen. Die Beurteilungsfilterung erfolgt auf Basis der Idempotenz; RabbitMQ übernimmt diesen Ansatz. Es gibt auch einen Mechanismus, bei dem der Verbraucher die LSN-Nummer mitbringt, wenn er die Nachricht vom Broker abruft, und sie von einem bestimmten LSN im Broker Pull-Nachrichten, daher ist kein Antwortmechanismus erforderlich. kafka verteilte Nachrichten-Middleware ist auf diese Weise.

Die Nachricht ist im

Broker kann entsprechend den Zuverlässigkeitsanforderungen der Nachricht und der umfassenden Leistungsmessung im Speicher erfolgen oder im Speicher bestehen bleiben. Für Verfügbarkeit und hohe Durchsatzanforderungen können in tatsächlichen Szenarien sowohl der Cluster- als auch der Aktiv-Standby-Modus angewendet werden. Die

RabbitMQ

-Lösung umfasst gewöhnliche Cluster- und höherverfügbare Mirror-Queue-Methoden. kafka verwendet zookeeper, um den Broker und Verbraucher im Cluster zu verwalten. Sie können Thema bei zookeeperUp; durch den Koordinationsmechanismus von Zookeeper speichert Produzent die Makler-Informationen zum Thema, die an Broker und Produzent können Shards basierend auf der Semantik angeben, und Nachrichten werden an einen bestimmten Shard von Broker gesendet. Im Allgemeinen wird RabbitMQ verwendet in Echtzeit-Messaging, das eine relativ hohe Zuverlässigkeit erfordert. kafka wird hauptsächlich zur Verarbeitung aktiver Streaming-Daten

und

zur Datenverarbeitung großer Datenmengen verwendet. 5) Cache&Puffer

Cache

System

In einigen Szenarien mit hoher Parallelität und hoher Leistung kann die Verwendung von Cache die Belastung des Back-End-Systems verringern und den größten Teil des Lesedrucks tragen, was den Durchsatz des Systems erheblich verbessern kann. Beispielsweise wird in einer Datenbank normalerweise vor dem Speichern ein

Cache

-Cache hinzugefügt.

Allerdings wird die Einführung der Cache-Architektur unweigerlich einige Probleme mit sich bringen, wie z. B. CacheTrefferratenprobleme, durch Cachefehler verursachten Jitter, Cache und Speicherkonsistenz.

Die Daten im Cache sind im Vergleich zum Speicher begrenzt, daher ist die Situation ideal Hier können einige gängige Algorithmen LRU usw. verwendet werden, um alte Daten zu entfernen, da ein einzelner Knoten Cache die Anforderungen nicht erfüllen kann Anforderungen. Es ist notwendig, einen verteilten Cache aufzubauen. Um den durch den Ausfall eines einzelnen Knotens verursachten Jitter zu beheben, übernimmt der verteilte Cache im Allgemeinen die Lösung der Konsistenz Hash, wodurch das Risiko eines Ausfalls eines einzelnen Knotens erheblich verringert wird. Bei Szenarien mit relativ hohen Verfügbarkeitsanforderungen muss jeder Knoten gesichert werden. Die Daten verfügen sowohl im Cache als auch im Speicher über die gleiche Sicherung. Wenn die Konsistenz relativ stark ist, aktualisieren Sie gleichzeitig den Datenbank-Cache. Für Benutzer mit geringen Konsistenzanforderungen können Sie eine Cache-Ablaufzeitrichtlinie festlegen.

Memcached ist ein verteilter Hochgeschwindigkeits-Cache-Server mit einem relativ einfachen Protokoll und basiert auf dem Ereignisverarbeitungsmechanismus von libevent. Das

Cache-System wird im Client des Router-Systems in der Plattform verwendet. Die Hotspot-Daten werden auf dem Client zwischengespeichert. Wenn der Zugriff auf die Daten fehlschlägt, greifen Sie auf das Router-System zu.

Natürlich werden derzeit mehr In-Memory-Datenbanken für Cache verwendet, wie zum Beispiel Redis , mongodb; redis verfügt über umfangreichere Datenoperationen als memcacheAPI; redis und mongodb alle Daten bleiben erhalten, aber memcache verfügt nicht über diese Funktion, sodass memcache besser zum Zwischenspeichern von Daten in relationalen Datenbanken geeignet ist.

PufferSystem

wird bei Hochgeschwindigkeits-Schreibvorgängen verwendet Auf der Plattform müssen einige Daten in die Datenbank geschrieben werden, und die Daten werden in Datenbanken und Tabellen unterteilt, aber die Zuverlässigkeit der Daten ist nicht so hoch. Um den Schreibdruck auf die Datenbank zu verringern, können Stapelschreibvorgänge durchgeführt werden angenommen.

Öffnen Sie einen Speicherbereich, wenn die Daten einen bestimmten Schwellenwert des Bereichs erreichen, z. B. 80 %, und führen Sie die Sortierung der Unterbibliothek im Speicher durch (die Speichergeschwindigkeit ist immer noch relativ hoch) und leeren Sie dann den Bereich Teilbibliothek stapelweise.

6) Suche

Die Suche ist eine sehr wichtige Funktion in E-Commerce-Plattformen. Sie umfasst hauptsächlich die Navigation nach Suchbegriffen, automatische Eingabeaufforderungen und Suchsortierfunktionen.

Zu den Open-Source-Suchmaschinen auf Unternehmensebene gehören hauptsächlich Lucene und Sphinx. Ich werde hier jedoch nicht darauf eingehen, welche Grundfunktionen bei der Auswahl unterstützt werden müssen Suchmaschine, nicht-funktionale Aspekte müssen berücksichtigt werden:

A. Unterstützt die Suchmaschine die verteilte Indizierung und Suche, um mit riesigen Datenmengen umzugehen, unterstützt sie die Lese-/Schreibtrennung? Verfügbarkeit verbessern?

B. Echtzeit-Indizierung Sex

c, Leistung

Solr ist ein leistungsstarker Volltextsuchserver, der auf lucene basiert. Er bietet eine umfangreichere Abfragesprache als lucene. Er ist konfigurierbar und skalierbar und bietet externe Funktionen Dienste basierend auf der XML/JSON-Formatschnittstelle des lucene 🎜>http-Protokolls.

SolrCloudSolr4 verfügbar Version. 🎜> Methode zur Unterstützung der verteilten Indizierung, automatische Durchführung der Sharding-Datensegmentierung durch jedes Shardings Master-Slave (Leader, Replikat) Der -Modus verbessert die Suchleistung; verwenden Sie Zookeeper, um den Cluster zu verwalten, einschließlich der Leader-Auswahl usw., um die Verfügbarkeit des Clusters sicherzustellen.

Lucene indizierter Reader basiert auf indiziertem Snapshot, daher muss nach der Indizierung Commit 🎜>Snapshot ein neuer erneut geöffnet werden kann zur Suche nach neu hinzugefügten Inhalten verwendet werden; die Indizierung Commit ist sehr leistungsintensiv, daher ist die Effizienz der Echtzeit-Indexsuche relativ gering.

Für die Indexsuche in Echtzeit,

Solr4 Die bisherige Lösung von bestand darin, den vollständigen Dateiindex und die Zusammenführung des inkrementellen Speicherindex zu kombinieren, siehe Abbildung unten.

Solr4

bietet eine Lösung für NRT-Softcommit, SoftcommitSie können nach den neuesten Änderungen am Index suchen, ohne den Indexvorgang zu übernehmen. Die Änderungen am Index werden jedoch nicht synchronisiert auf den Festplattenspeicher übertragen. Dies wird nicht der Fall sein.Commit gehen verloren, daher muss der Commit-Vorgang regelmäßig durchgeführt werden. Die Indizierungs- und Speichervorgänge von Daten in der Plattform sind asynchron, was die Verfügbarkeit und den Durchsatz erheblich verbessern kann; nur Indexoperationen für bestimmte Attributfelder durchführen, den Datenidentifikations-

Schlüssel

speichern und die Größe des Indexes im verteilten Speicher Hbase reduzieren , hbase unterstützt die Sekundärindexsuche nicht gut, kann aber mit der Solr-Suchfunktion kombiniert werden, um mehrdimensionale Abrufstatistiken durchzuführen. Die Konsistenz von Indexdaten und

HBase

Datenspeicherung, also wie Um sicherzustellen, dass die in HBase gespeicherten Daten indiziert wurden, können Sie den Bestätigungsmechanismus Bestätigen verwenden, um vor der Indizierung eine Datenwarteschlange zu erstellen Die zu indizierende Datenwarteschlange wird aus der zu indizierenden Datenwarteschlange abgerufen.

7) Protokollerfassung

während der gesamten Transaktion Prozess Es wird eine große Anzahl von Protokollen generiert. Diese Protokolle müssen gesammelt und in einem verteilten Speichersystem gespeichert werden, um eine zentralisierte Abfrage- und Analyseverarbeitung zu ermöglichen.

Das Protokollsystem muss drei Grundkomponenten haben, nämlich Agent (kapselt die Datenquelle und sendet die Daten in der Datenquelle an Collector), Collector (Daten von mehreren Agenten empfangen, zusammenfassen und in den Store des Backends importieren), Store (zentrales Speichersystem, sollte skalierbar und zuverlässig sein. Es sollte unterstützen das derzeit sehr beliebte HDFS).

Open Source Die in der Branche am häufigsten verwendeten Protokollerfassungssysteme sind Clouderas Flume und Facebooks Scribe, darunter Flume Die aktuelle Version FlumeNG hat wesentliche architektonische Änderungen an Flume vorgenommen.

im Design Oder bei der technischen Auswahl eines Protokollerfassungssystems muss es normalerweise die folgenden Eigenschaften aufweisen:

a. Eine Brücke zwischen dem Anwendungssystem und dem Analysesystem, die die Beziehung zwischen ihnen entkoppelt

b, verteilt und skalierbar, mit hoher Skalierbarkeit. Wenn die Datenmenge zunimmt, kann sie durch Hinzufügen von Knoten horizontal erweitert werden.

Das Protokollerfassungssystem ist skalierbar und kann auf allen Ebenen des Systems skaliert werden Es ist kein Status erforderlich, und die Skalierbarkeit ist relativ einfach zu implementieren.

c. Nahezu in Echtzeit

In einigen Szenarien mit hohen Aktualitätsanforderungen ist es notwendig, Protokolle rechtzeitig für die Datenanalyse zu sammeln

Allgemeine Protokolldateien werden Rolling wird regelmäßig oder quantitativ durchgeführt, sodass die Generierung von Protokolldateien in Echtzeit erkannt wird, ähnliche Tail-Vorgänge an den Protokolldateien zeitnah ausgeführt werden und Batch-Versand zur Verbesserung unterstützt wird Übertragungseffizienz; Der Zeitpunkt des Stapelversands muss den Anforderungen an Nachrichtenmenge und Zeitintervall entsprechen.

d. Fehlertoleranz

ScribeDie Fehlertoleranz wird berücksichtigt, wenn das Back-End-Speichersystem abstürzt, scribe schreibt die Daten auf die lokale Festplatte. Wenn das Speichersystem wieder normal ist, lädt scribe das Protokoll neu in das Speichersystem.

FlumeNG erreicht Lastausgleich und Failover durch Sink Processor. Mehrere Senken können eine Senkengruppe bilden. Ein Sink-Prozessor ist für die Aktivierung eines Sink aus einer angegebenen Sink-Gruppe verantwortlich. Der Sink-Prozessor kann einen Lastausgleich über alle Senke in der Gruppe erreichen; er kann auch auf eine andere Senke übertragen werden, wenn er ausfällt.

e. Transaktionsunterstützung

Scribe berücksichtigt keine Transaktionsunterstützung.

Flume realisiert die Transaktionsunterstützung durch den Antwortbestätigungsmechanismus, siehe Abbildung unten,

Normalerweise werden Nachrichten extrahiert und gesendet Bei Stapelvorgängen handelt es sich bei der Nachrichtenbestätigung um die Bestätigung eines Datenstapels, wodurch die Effizienz des Datenversands erheblich verbessert werden kann.

f. Wiederherstellbarkeit

FlumeNGs Kanal kann auf Speicher- und Dateipersistenzmechanismen basierend auf unterschiedlichen Zuverlässigkeitsanforderungen basieren. Das Verkaufsvolumen der speicherbasierten Datenübertragung ist relativ hoch, aber nachdem der Knoten ausgefallen ist , die verlorenen und nicht wiederherstellbaren Daten; Ausfallzeit der Dateipersistenz kann wiederhergestellt werden.

g. Regelmäßige und quantitative Archivierung von Daten

Nachdem die Daten vom Protokollerfassungssystem erfasst wurden, werden sie im Allgemeinen in einem verteilten Dateisystem gespeichert, z Als Hadoop ist es zur Erleichterung der anschließenden Verarbeitung und Analyse von Daten erforderlich, (TimeTrigger) oder quantitative (SizeTriggers zu planen rollierendeDatei des verteilten Systems

8) Datensynchronisation

In einem Handelssystem sind normalerweise heterogene Datenquellen erforderlich. Die Synchronisierung umfasst normalerweise Datendateien mit relationalen Datenbanken, Datendateien mit verteilten Datenbanken, relationale Datenbanken mit verteilten Datenbanken usw. Die Datensynchronisierung zwischen heterogenen Quellen basiert im Allgemeinen auf Leistungs- und Geschäftsanforderungen. Dateien werden sequentiell gespeichert, sodass die Effizienz der Datensynchronisierung im Allgemeinen relativ hoch ist Abfrageanforderungen; während verteilte Datenbanken immer größere Datenmengen speichern, können relationale Datenbanken große Datenspeicher- und Abfrageanforderungen nicht erfüllen.

Beim Entwurf der Datensynchronisierung müssen Aspekte wie Durchsatz, Fehlertoleranz, Zuverlässigkeit und Konsistenz umfassend berücksichtigt werden.

Die Synchronisierung kann in inkrementelle Echtzeit-Datensynchronisierung und vollständige Offline-Datensynchronisierung unterteilt werden Das Folgende ist aus zwei Dimensionen:

Echtzeitinkremente sind im Allgemeinen

Tail Dateien, um Dateiänderungen in Echtzeit zu verfolgen und , in Batches oder Multi-Threads zur Datenbank. Die Architektur ähnelt dem Protokollsammlungs-Framework. Diese Methode erfordert einen Bestätigungsmechanismus, der zwei Aspekte umfasst.

Ein Aspekt ist, dass der Kanal

dem Agenten bestätigen muss, dass er Datensätze stapelweise empfangen und gesendet hat LSN-Nummer an Agent, sodass er, wenn Agent ausfällt und wiederhergestellt wird, Ende an diesem LSN-Punkt starten kann; Natürlich ist eine geringfügige Vervielfältigung zulässig. Aufgezeichnetes Problem ( trat auf, als Kanal dem Agent bestätigt wurde, Agent ausfiel und nicht empfangen wurde die Bestätigungsnachricht), müssen im Geschäftsszenario beurteilt werden.

Ein weiterer Aspekt besteht darin, dem

Kanal zu zu synchronisieren zu bestätigen, dass das Schreiben erfolgt ist stapelweise abgeschlossen Vorgang in der Datenbank, sodass Kanal diesen Teil der Nachricht löschen kann, der bestätigt wurde.

Basierend auf Zuverlässigkeitsanforderungen kann

Kanal Dateipersistenz verwenden.

Siehe das Bild unten

Offline-Vollvolumen folgt dem Prinzip, Zeit zwischen Räumen auszutauschen, zu teilen und zu erobern und die Zeit zu verkürzen Datensynchronisierungszeit so weit wie möglich verbessern.

Es ist notwendig, die Quelldaten wie MySQL zu segmentieren, die Quelldaten gleichzeitig mit mehreren Threads zu lesen und gleichzeitig stapelweise in eine verteilte Datenbank wie HBase zu schreiben, mit KanalAls Puffer zwischen Lesen und Schreiben, um eine bessere Entkopplung zu erreichen, kann Kanal auf Dateispeicher oder Speicher basieren. Siehe das Bild unten:

Für die Segmentierung von Quelldaten , Wenn es sich um eine Datei handelt, können Sie die Blockgröße entsprechend dem Dateinamen festlegen, um sie aufzuteilen.

Für relationale Datenbanken besteht die allgemeine Anforderung darin, Daten nur für einen bestimmten Zeitraum offline zu synchronisieren (Synchronisieren Sie beispielsweise die Bestelldaten des Tages frühzeitig mit HBase Morgen), also ist es notwendig, wenn Daten aufgeteilt werden ( wird entsprechend der Anzahl der Zeilen aufgeteilt ) , Multithreads scannen die gesamte Tabelle ( Indizes rechtzeitig erstellen und die Tabelle zurückgeben ) , bei Tabellen mit großen Datenmengen ist IO sehr hoch und die Effizienz hier sehr gering; Die Datenbank entsprechend dem Zeitfeld (nach Zeit)Partitionen erstellen und jedes Mal entsprechend den Partitionen exportieren.

9) Datenanalyse

Vom traditionellen Parallelverarbeitungscluster basierend auf relationalen Datenbanken, der für In-Memory-Computing nahezu in Echtzeit verwendet wird, bis zum aktuellen Cluster basierend auf hadoop Analyse großer Datenmengen. Die Datenanalyse wird häufig auf großen E-Commerce-Websites verwendet, einschließlich Verkehrsstatistiken, Empfehlungs-Engines, Trendanalysen, Benutzerverhaltensanalysen, Data-Mining-Klassifizierern, verteilten Indizes usw. Der Parallelverarbeitungscluster verfügt über kommerzielles

EMC Greenplum

, und die Architektur von Greenplum übernimmt MPP( Groß angelegte Parallelverarbeitung), eine verteilte Datenbank basierend auf postgresql für die Speicherung großer Datenmengen. In Sachen In-Memory-Computing gibt es

SAP

HANA, die Open-Source-nosql In-Memory-Datenbank mongodb unterstützt auch mapreduce für die Datenanalyse. Die Offline-Analyse großer Datenmengen wird derzeit häufig von Internetunternehmen eingesetzt

Hadoop

, Hadoop bietet unersetzliche Vorteile in Bezug auf Skalierbarkeit, Robustheit, Rechenleistung und Kosten. Tatsächlich ist es zur Mainstream-Big-Data-Analyseplattform für aktuelle Internetunternehmen gewordenHadoop

wird zur Verarbeitung großer Datenmengen über das verteilte Verarbeitungsframework von

MapReuce verwendet, und seine Skalierbarkeit ist ebenfalls sehr gut; das größte Manko von MapReduce Es handelt sich um ein Szenario, das Echtzeitanforderungen nicht erfüllen kann und hauptsächlich für Offline-Analysen verwendet wird.

Basierend auf der MapRduce-Modellprogrammierung für die Datenanalyse ist die Entwicklungseffizienz nicht hoch. Das Aufkommen von Hive auf Hadoop ermöglicht die Datenanalyse Ähnlich wie beim Schreiben wird sql einer Syntaxanalyse unterzogen und Ausführungspläne generiert, um schließlich MapReduce-Aufgaben für die Ausführung zu generieren erreicht das Ziel einer Ad-hoc-Methode (Berechnung der Analyse, die auf durchgeführt wird), wenn eine Abfrage auftritt. Die Analyse verteilter Daten basierend auf dem

MapReduce

-Modell ist eine reine Offline-Analyse, und die Ausführung erfolgt ausschließlich durch Brute-Force-Scannen und kann keinen indexähnlichen Mechanismus verwenden QuelleCloudera Impala basiert auf dem parallelen Programmiermodell von MPP. Die zugrunde liegende Schicht ist eine leistungsstarke Echtzeit-Analyseplattform, die in Hadoop gespeichert ist Reduzieren Sie die Verzögerung der Datenanalyse erheblich. Die aktuelle Version von

Hadoop

ist Hadoop1.0 Einerseits weist das ursprüngliche MapReduce-Framework ein Einzelpunktproblem von JobTracker auf. Andererseits übernimmt JobTracker die Ressourcenverwaltung und Aufgabenplanung Gleichzeitig gibt es mit der Zunahme der Datenmenge und der Zunahme der Job-Aufgaben offensichtliche Engpässe bei der Skalierbarkeit, dem Speicherverbrauch, dem Thread-Modell, der Zuverlässigkeit und der Leistung; Das gesamte Framework wurde neu strukturiert, Ressourcenmanagement und Aufgabenplanung wurden getrennt und dieses Problem wurde vom Architekturentwurf an gelöst. Referenzgarn Architektur

10) Echtzeit-Computing

Im Internetbereich wird Echtzeit-Computing häufig zur Echtzeitüberwachung und -analyse, Flusskontrolle und Risikokontrolle eingesetzt und anderen Bereichen. Das System oder die Anwendung der E-Commerce-Plattform muss einer Echtzeitfilterung und Analyse der großen Mengen an Protokollen und abnormalen Informationen unterzogen werden, die täglich generiert werden, um festzustellen, ob eine Frühwarnung erforderlich ist. Kontrolle, um eine Systemlähmung durch unerwarteten übermäßigen Druck auf das System zu verhindern Wenn der Datenverkehr zu groß ist, können Mechanismen wie Ablehnung oder Umleitung angewendet werden. Einige Unternehmen erfordern beispielsweise eine Risikokontrolle, die auf Echtzeitverkäufen des Systems basieren muss Situation.

Ursprünglich basierend auf der Einzelknotenberechnung, kann die Berechnung eines einzelnen Knotens aufgrund der explosionsartigen Erzeugung von Systeminformationen und der zunehmenden Berechnungskomplexität nicht mehr den Anforderungen der Echtzeitberechnung und der Verteilung mehrerer Knoten gerecht werden Berechnung erforderlich ist, entstand eine verteilte Echtzeit-Computing-Plattform.

Das hier erwähnte Echtzeit-Computing ist eigentlich Streaming-Computing. Der Vorgänger des Konzepts ist eigentlich

CEP

verwandte Open-Source-Produkte wie

Esper

In der Branche verbreitet. Unter den Stream-Computing-Produkten Yahoo S4, Twitter Storm

usw. sind die Open-Source-Produkte von Storm am weitesten verbreitet. Für eine Echtzeit-Computing-Plattform müssen die folgenden Faktoren im Hinblick auf das architektonische Design berücksichtigt werden: 1, Skalierbarkeit

Wenn das Geschäftsvolumen zunimmt und der Rechenaufwand zunimmt, kann die Verarbeitung durch Hinzufügen einer Knotenverarbeitung erfolgen.

2. Hohe Leistung und geringe Latenz

Vom Datenfluss in die Computerplattform bis zur Berechnung der Ausgabeergebnisse sind hohe Leistung und geringe Latenz erforderlich, um sicherzustellen, dass Nachrichten schnell und in Echtzeit verarbeitet werden Berechnungen werden erreicht.

3. Zuverlässigkeit

Stellen Sie sicher, dass jede Datennachricht einmal vollständig verarbeitet wird.

4. Fehlertoleranz

Das System kann Knotenausfallzeiten und -ausfälle automatisch verwalten, was für die Anwendung transparent ist.

Twitters Storm schneidet in den oben genannten Aspekten besser ab. Lassen Sie uns kurz die Architektur von Storm vorstellen.

Der gesamte Cluster wird über Zookeeper verwaltet.

Der Client übermittelt die Topologie an nimbus.

Nimbus Erstellen Sie ein lokales Verzeichnis für diese Topologie. Berechnen Sie die Aufgabe basierend auf der Konfiguration der Topologie , und ordnen Sie Aufgabe zu, richten Sie Zuweisungen KnotenspeicherAufgabe auf Zookeeper und Woker in der Maschinenknoten >Korrespondenz ein .

Erstellen Sie einen

taskbeats-Knoten auf zookeeper, um den Heartbeat von task zu überwachen; starten Sie Topologie.

Betreuer

Gehe zu Tierpfleger zu Holen Sie sich zugewiesene Aufgaben, starten Sie mehrere Woker, um fortzufahren. Jeder Woker generiert eine Aufgabe, einen Aufgaben-Thread ; Initialisieren Sie die Verbindung zwischen Task basierend auf Topologie-Informationen . Die Verbindung zwischen Task und Task erfolgt über zeroMQ verwaltet; und dann dann läuft die gesamte Topologie.

Tuple

ist die grundlegende Verarbeitungseinheit des Streams, Das heißt, eine Nachricht, Tuple, fließt in task. Der Sende- und Empfangsprozess von Tuple ist wie folgt:

sendet

Tuple, Worker stellt eine Transfer-Funktion für bereit Die aktuelle Aufgabe sendet Tupel an eine andere Aufgabe. Serialisieren Sie mit den Zweckparametern taskid und tuple die tuple-Daten und stellen Sie sie in die Übertragungswarteschlange.

Vor der Version 0.8 war diese Warteschlange LinkedBlockingQueue und nach 0.8 war sie DisruptorQueue .

bei 0,8 Nach der Version ist jeder Woker an eine Eingangsübertragungswarteschlange und Ausgangsübertragungswarteschlange gebunden, und die Eingangswarteschlange wird zum Empfangen von Nachricht, Outbond-Warteschlange wird zum Senden von Nachrichten verwendet.

Beim Senden einer Nachricht ruft ein einzelner Thread Daten aus der Transferwarteschlange ab und sendet dieses Tupel über zeroMQ 🎜> an andere Woker

Erhält

Tupel, jeweils woker hört auf den TCP-Port von zeroMQ, um Nachrichten zu empfangen. Nachdem die Nachricht in DisruptorQueue platziert wurde, wird sie dann gesendet WarteschlangeRufen Sie message(taskid,tuple) ab und leiten Sie sie zur Ausführung basierend auf dem Wert des Ziels taskid, tuple an task weiter. Jedes Tupel kann emittieren, um Dampf zu leiten, oder kann an regulären Stream in Reglular gesendet werden Auf diese Weise wird die Funktion Stream-Gruppe (Stream-ID-->Komponenten-ID -->Outbond-Aufgaben) verwendet, um die zu vervollständigen, die vom aktuellen tuple Das Ziel von Tuple. Durch die obige Analyse können wir sehen, dass Storm

in Bezug auf Skalierbarkeit, Fehlertoleranz und hohe Leistung sehr effektiv ist Die Perspektive des Architekturdesigns kann unterstützt werden. In Bezug auf die Zuverlässigkeit verwendet die

ack-Komponente von Storm den XOR-xor-Algorithmus dass jede Nachricht vollständig verarbeitet wird, ohne gleichzeitig an Leistung zu verlieren.

11) Echtzeit-Push

Real- Time-Push-Anwendung Es gibt viele Szenarien, z. B. Echtzeit-Kurvenzeichnung der Systemüberwachungsdynamik, Push-Nachrichten für Mobiltelefone,

Web

Echtzeit-Chat usw.

Es gibt viele Technologien, um Echtzeit-Push zu erreichen, einschließlich der Comet

-Methode, der

Websocket-Methode usw.

Comet „Server Push“-Technologie basierend auf einer langen Serververbindung, einschließlich zweier Arten:

Long Polling: Der Server hängt nach dem Empfang der Anfrage und wenn es ein Update gibt Die Verbindung wird nach der Rückkehr getrennt und der Client initiiert dann eine neue Verbindung

StreamMethode: Die Verbindung wird nicht jedes Mal geschlossen, wenn die Serverdaten übertragen werden. Die Verbindung wird nur kommuniziert, wenn ein Fehler auftritt oder die Verbindung wiederhergestellt wird, wird sie geschlossen (einige Firewalls sind oft so eingestellt, dass sie zu lange Verbindungen verwerfen. Der Server kann ein Timeout festlegen und den Client benachrichtigen, die Verbindung danach erneut herzustellen den Timeout und schließen Sie die ursprüngliche Verbindung).

Websocket: lange Verbindung, Vollduplex-Kommunikation

ist ein neues Protokoll von HTML5 . Es implementiert eine bidirektionale Kommunikation zwischen dem Browser und dem Server. WebSocket-API , der Browser und der Server müssen nur eine Handshake-Aktion übergeben, um einen schnellen Zwei-Wege-Kanal zwischen dem Browser und dem Client zu bilden, sodass Daten schnell in beide Richtungen übertragen werden können.

Socket.io ist eine NodeJS-Websocket-Bibliothek, einschließlich clientseitigem js und Server- Seite nodejs, die zum schnellen Erstellen von Echtzeit-Web-Anwendungen verwendet wird.

12) Empfehlungsmaschine

Wird hinzugefügt

6. Datenspeicherung

Datenbankspeicherung ist im Allgemeinen in die folgenden Kategorien unterteilt, einschließlich relationaler (Transaktions-)Datenbanken, wie z. B. Oracle, MySQL wird durch die keyvalue-Datenbank dargestellt, die durch redis und memcached db dargestellt wird, und es gibt Dokumentdatenbanken wie mongodb, die dies haben Spalten Die verteilten Datenbanken werden durch HBase, cassandra, dynamo sowie andere Diagrammdatenbanken, Objektdatenbanken, xml-Datenbanken usw. dargestellt. Die Geschäftsfelder jeder Art von Datenbankanwendung sind unterschiedlich. Im Folgenden finden Sie eine Analyse der Leistung, Verfügbarkeit und anderer Aspekte verwandter Produkte aus den drei Dimensionen Speicher, relational und verteilt.

1) In-Memory-Datenbank

In-Memory-Datenbank zielt auf hohe Parallelität und hohe Leistung ab, ist hinsichtlich der Transaktionalität nicht so streng und verwendet Open Source nosqlDatenbankmongodb, redis zum Beispiel

Ø Mongodb

Kommunikationsmethode

Multithreading-Methode, der Hauptthread überwacht neue Verbindungen und startet nach der Verbindung einen neuen Thread, um Datenoperationen durchzuführen (IO Umschalten).

Datenstruktur

Datenbank-->collection-->record

MongoDB ist in der Datenspeicherung in Namespaces unterteilt. Eine Collection ist ein Namespace, ebenso wie ein Index. Ein Namensraum.

Daten im selben Namespace sind in viele Extent unterteilt, und Extent sind über eine doppelt verknüpfte Liste verbunden.

In jedem Extent werden spezifische Daten jeder Zeile gespeichert, und diese Daten sind auch über bidirektionale Links verbunden.

Jede Zeile des Datenspeicherplatzes umfasst nicht nur den von den Daten belegten Speicherplatz, sondern kann auch einen Teil des zusätzlichen Speicherplatzes enthalten, sodass die Position nicht verschoben werden kann, nachdem die Datenaktualisierung größer geworden ist. Der Index

ist in der Struktur BTree implementiert.

Wenn Sie das Jourunaling-Protokoll aktivieren, gibt es auch einige Dateien, in denen alle Ihre Betriebsaufzeichnungen gespeichert sind.

Persistenter Speicher

MMap-Methode ordnet Dateiadressen dem Speicheradressraum zu Sie können den Speicheradressraum direkt zum Bearbeiten von Dateien verwenden, ohne Schreib- und Lesevorgänge aufzurufen. Die Leistung ist relativ hoch.

mongodb ruft mmap auf, um die Daten auf der Festplatte dem Speicher zuzuordnen, daher muss es einen Mechanismus geben, um die Daten in den Speicher zu übertragen Um die Zuverlässigkeit zu gewährleisten, hängt die Häufigkeit des Putzens vom Parameter syncdelay ab.

journal (zur Wiederherstellung) ist das Redo-Log in Mongodb und Oplog ist für das Kopieren von binlog verantwortlich. Wenn Journal eingeschaltet ist, gehen auch bei ausgeschaltetem Gerät nur 100 ms Daten verloren, was für die meisten Anwendungen tolerierbar ist. Ab 1.9.2+ aktiviert mongodb standardmäßig die Funktion Journal, um die Datensicherheit zu gewährleisten. Und die Aktualisierungszeit von Journal kann im Bereich von 2-300 ms geändert werden, verwenden Sie den Befehl --journalCommitInterval . Die Zeit für die Aktualisierung von Oplog und den Daten auf der Festplatte beträgt 60 Sekunden. Für die Replikation muss nicht darauf gewartet werden, dass oplog die Festplatte aktualisiert direkt in den Knoten kopiert werden.

Transaktionsunterstützung

Mongodb

Unterstützt nur atomare Operationen für einzeilige Datensätze

HACluster

Das am häufigsten verwendete ist

Replica Sets, das einen Wahlalgorithmus zur automatischen Erstellung verwendet PerformLeader Wahl kann starke Konsistenzanforderungen erfüllen und gleichzeitig die Verfügbarkeit sicherstellen.

Für große Datenmengen sorgt natürlich auch

mongodb Daten-Sharding-ArchitekturSharding.

Ø Redis

Reichhaltige Datenstruktur, schnelle Reaktionsgeschwindigkeit, Speicherbetrieb

Kommunikationsmethode

arbeitet im Speicher, sodass logische Operationen sehr schnell sind und den

CPU-Umschaltaufwand reduzieren, es handelt sich also um einen Single-Thread-Modus (logischer Verarbeitungsthread und ...). Hauptthread ist derselbe).

Reaktor-Modus, implementieren Sie Ihren eigenen Multiplexing-NIO-Mechanismus (epoll, select, kqueue usw.)

Single-Thread-Verarbeitung Multitasking

Datenstruktur

Hash+Bucket-Struktur: Wenn die Länge der verknüpften Liste zu lang ist, werden Migrationsmaßnahmen ergriffen (Erweitern des ursprünglichen Doppelten des HashTabelle, Daten dorthin migrieren, erweitern+aufwärmen)

persistent Speicher

a

, vollständige Persistenz RDB (Traverse redisDB, lesen Schlüssel, WertBucket 🎜>), der Befehl save blockiert den Hauptthread und der Befehl bgsave startet einen Unterprozess, um den Persistenzvorgang snapshot auszuführen und den zu generieren rdb-Datei.

Beim

Herunterfahren wird der Vorgang Speichern aufgerufen

Wie viele Sekunden werden die Daten ausgelöst? Der ausgegebene Befehl

b, inkrementelle Persistenz (aof ähnelt redolog ), schreibt zuerst in den Protokoll-Puffer, und flush dann in die Protokolldatei (die Strategie von flush

kann entweder einzeln oder in Stapeln konfiguriert werden), nur

flush in die Datei, bevor sie tatsächlich an den Client zurückgegeben wird. Achten Sie darauf, regelmäßig nachzuschauen aof-Dateien und rdb-Dateien werden zusammengeführt (während des Snapshot-Vorgangs werden die geänderten Daten zuerst in aof buf geschrieben und dann vervollständigt der untergeordnete Prozess den Snapshot<SpeicherSchnappschuss>, dann die geänderten Teile von aofbuf

und die vollständigen Bilddaten zusammenführen).

Im Modus für hohen gleichzeitigen Zugriff RDB-Modus führt zu offensichtlichen Schwankungen in den Leistungsindikatoren des Dienstes. aof ist hinsichtlich des Leistungsaufwands besser als RDB, aber das Neuladen erfordert Zeit und Datenvolumen Speicher während der Wiederherstellung. Direkt proportional.

ClusterHA

Die gängige Lösung ist die Master-Slave-Backup-Umschaltung unter Verwendung von HA-Software, sodass der ausgefallene Master-Redis schnell auf den Slave-Redis umgeschaltet werden kann. Die Master-Slave-Datensynchronisation übernimmt den Replikationsmechanismus, und in diesem Szenario können Lesen und Schreiben getrennt werden.

Derzeit besteht ein Problem bei der Replikation darin, dass, wenn das Netzwerk instabil ist, SlaveVerbindungsunterbrechung (einschließlich Flash-Verbindung) auftritt ) vom Master bewirkt, dass Master alle Daten im Speicher in einer rdb-Datei (Snapshot-Datei) neu generiert und diese dann an Slave. Nachdem Slave die vom Master übergebene rdb-Datei empfängt, löscht er seinen eigenen Speicher und lädt die rdb-Datei neu in den Speicher. Diese Methode ist relativ ineffizient. In der zukünftigen Version Redis2.8 hat der Autor die teilweise Kopierfunktion implementiert.

2) Relationale Datenbank

Die relationale Datenbank muss zwar die Parallelitätsleistung erfüllen, aber auch die Transaktionalität zu

MySQLDie Datenbank wird übernommen als Beispiel, um die Prinzipien des Architekturdesigns, Leistungsüberlegungen und die Erfüllung von Verfügbarkeitsanforderungen zu beschreiben.

Ø Die Architekturprinzipien von MySQL

(innodb)

In Bezug auf die Architektur:

MySQL Punkte Für die Server-Schicht und die Speicher-Engine-Schicht.

Die Architektur der Serverschicht

ist für verschiedene Speicher-Engines gleich, einschließlich Verbindungen/ Thread-Verarbeitung, Abfrageverarbeitung (Parser , Optimierer) und andere Systemaufgaben. Es gibt viele Speicher-Engine-Ebenen. mysql bietet eine Plug-in-Struktur von Speicher-Engines und unterstützt mehrere Speicher-Engines. Die am häufigsten verwendeten sind innodb und myisamin ;inodb ist hauptsächlich für OLTP-Anwendungen gedacht und unterstützt die Transaktionsverarbeitung. myisam unterstützt keine Transaktionen und Tabellensperren. Es funktioniert schnell auf OLAP .

Im Folgenden wird hauptsächlich die

innodb-Speicher-Engine vorgestellt.

In Bezug auf die Thread-Verarbeitung ist Mysql eine Multithread-Architektur, die aus einem Master-Thread, einem Sperrüberwachungs-Thread, einem Fehlerüberwachungs-Thread und mehreren besteht IOThread-Zusammensetzung. Und ein Thread wird geöffnet, damit eine Verbindung hergestellt werden kann. Der IO-Thread ist in Einfügepuffer unterteilt, der zufällige IO speichert und für die Transaktionssteuerung verwendet wird, ähnlich wie Oracle >Redo-Log sowie mehrere Schreib-, mehrere Lese- IO-Threads für Festplatten- und Speicheraustausch.

In Bezug auf die Speicherzuweisung, einschließlich

Innodb-Pufferpool und Protokollpuffer. Darunter umfasst Innodb-Pufferpool Einfügepuffer, Datenseite, Indexseite, Datenwörterbuch und adaptiven Hash. Protokollpuffer wird zum Zwischenspeichern von Transaktionsprotokollen verwendet, um die Leistung zu verbessern.

In Bezug auf die Datenstruktur umfasst

innodb Tabellenbereich, Segment, Bereich, Seiten-/-Block und Zeile. Die Indexstruktur ist eine B+tree-Struktur, einschließlich Sekundärindex und Primärschlüsselindex. Der Blattknoten des Sekundärindex ist der Primärschlüssel PK, und der Blattknoten ist entsprechend indiziert Der Primärschlüssel verweist auf den gespeicherten Datenblock. Diese B+-Baumspeicherstruktur kann die IO-Anforderungen von Zufallsabfragevorgängen besser erfüllen. Sie ist in Datenseiten und sekundäre Indexseiten unterteilt Um die Schreibleistung zu verbessern, verwenden Sie Einfügepuffer, um sequentielles Schreiben durchzuführen. Anschließend führt der Hintergrundthread mehrere Einfügungen mit einer bestimmten Häufigkeit in der sekundären Indexseite zusammen. Um die Konsistenz der Datenbank(Speicher- und Festplattendatendateien) sicherzustellen und die Wiederherstellungszeit der Instanz zu verkürzen, verfügt die relationale Datenbank auch über einen Prüfpunkt Funktion, verwenden Sie, um die vorherigen schmutzigen Seiten im Speicher Puffer im Verhältnis zu (alte LSN) auf die Festplatte zu schreiben, sodass das Redolog Die LSNder Datei kann während der Wiederherstellung nach einem Fehler überschrieben und recycelt werden; Sie müssen lediglich ab dem LSN-Punkt im Protokoll wiederherstellen.

In Bezug auf die Unterstützung von Transaktionsfunktionen müssen relationale Datenbanken die vier Funktionen von ACID erfüllen. Basierend auf unterschiedlichen Anforderungen an die Parallelität von Transaktionen und die Datensichtbarkeit müssen unterschiedliche Transaktionsisolationsstufen definiert werden, die untrennbar miteinander verbunden sind Der Sperrmechanismus für Ressourcenkonflikte dient zur Vermeidung von Deadlocks. mysql führt eine Parallelitätskontrolle auf der Serverebene durch, die sich hauptsächlich in Lese-/Schreibsperren widerspiegelt Es gibt Sperren auf verschiedenen Ebenen (Tabellensperre, Zeilensperre, Seitensperre, MVCC), basierend auf der Überlegung, die Parallelitätsleistung und die Parallelitätskontrolle mehrerer Versionen zu verbessern MVCC wird zur Unterstützung der Transaktionsisolation verwendet und basiert auf Rückgängigmachen. Beim Transaktions-Rollback wird auch das Segment Rückgängigmachen verwendet. mysql Verwenden Sie redolog, um die Leistung beim Schreiben von Daten und die Wiederherstellung nach Fehlern sicherzustellen. Wenn Sie Daten ändern, müssen Sie nur den Speicher ändern und die Änderung dann im Transaktionsprotokoll aufzeichnen (SequentiellIO), es besteht keine Notwendigkeit, die Datenänderung selbst jedes Mal auf der Festplatte beizubehalten(ZufälligIO), was die Leistung erheblich verbessert.

In puncto Zuverlässigkeit innodbDie Speicher-Engine bietet einen DoppelschreibmechanismusDoppelschreiber, um Fehler beim Leeren von Seiten in den Speicher zu verhindern und das Problem des Halbschreibers auf der Festplatte zu lösen.

Ø Für hohe Parallelität und hohe Leistung MySQL Im Allgemeinen kann die Leistungsoptimierung in mehreren Dimensionen durchgeführt werden.

a, Hardwareebene,

Die Speicherung von Protokollen und Daten muss nacheinander geschrieben werden und muss durchgeführt werden raid1 +0 und buffer-IO verwenden; Daten werden diskret gelesen und geschrieben. Verwenden Sie einfach direct IO, um die durch die Verwendung des Dateisystems verursachten Probleme zu vermeiden Cache des Overheads.

Speicherfähigkeit, SASDiskRAIDBetrieb ( RaidKartencache, Lese-Cache ausschalten, Festplatten-Cache ausschalten, Vorauslesen ausschalten, nur Rückschreibpuffer verwenden, aber Sie müssen das Lade- und Entladeproblem berücksichtigen. Wenn der Datenumfang nicht groß ist, können natürlich Hochgeschwindigkeitsgeräte zur Datenspeicherung verwendet werden, wie z. B. Fusion IO und SSD .

Kontrollieren Sie beim Datenschreiben die Häufigkeit der Aktualisierung schmutziger Seiten und beim Datenlesen die Cache-Trefferrate. Schätzen Sie daher die vom System benötigten IOPS und werten Sie sie aus die Anforderungen Die Anzahl der Festplatten (Fusion io bis zu IOPS beträgt mehr als 10 W , normale Festplatten 150) .

In Bezug auf

Cpu schaltet eine einzelne Instanz NUMA aus und MySQL unterstützt Multi-Core nicht sehr gut. Mehrere Instanzen können an CPU gebunden werden .

b Optimierung der Betriebssystemebene,

Kernel und Socket , Netzwerkoptimierung Bond, Dateisystem, IO Planung

innodb wird hauptsächlich in OLTP-Anwendungen sind im Allgemeinen IO-intensive Anwendungen. Aufgrund der Verbesserung der IO-Fähigkeiten nutzen sie den Cache-Mechanismus voll aus. Zu berücksichtigen sind:

Auf der Grundlage der Sicherstellung des verfügbaren Speichers des Systems, Versuchen Sie so viel wie möglich. Die Erweiterung des

innodb-Pufferpools ist im Allgemeinen auf 3/4

des physischen Speichers eingestellt wird nur zum Aufzeichnen von Transaktionsprotokollen verwendet. Versuchen Sie,

MySQL zu vermeiden, indem Sie Swap verwenden (Sie können vm.swappiness=0 um das Dateisystem freizugeben, wenn der Speicher knapp ist) Cache)IO Planungsoptimierung, Reduzierung unnötiger Blockierungen und Reduzierung der Zufälligkeit IO

Zugriffslatenz

(CFQ, Deadline, NOOP)c, Server- und Speicher-Engine-Ebene (Verbindungsverwaltung, Netzwerkverwaltung, Tabellenverwaltung

, Protokoll)

Enthält Cache/Puffer,

Verbindung

, IO d. Anwendungsebene (z. B. Indexüberlegungen, Optimierung des Schemas mit entsprechender Redundanz; Optimierung von

CPU

-Problemen und Speicherproblemen, die durch SQL Abfragen, um den Umfang von Sperren zu reduzieren, Back-Table-Scans zu reduzieren, Indizes abzudecken) Ø Im Hinblick auf die Hochverfügbarkeitspraxis , unterstützt den Modus Master-Master

,

Master-Slave

, im Modus

Master-Master ist einer als Master für das Lesen und Schreiben verantwortlich , und der andere ist für die Notfallwiederherstellung verantwortlich, da Standby einer ist, der als Master Schreibvorgänge bereitstellt, und mehrere andere Knoten dienen als Lesevorgänge und unterstützen Lese- und Schreibvorgänge Trennung. Für die Erkennung und Umschaltung von Knoten-Primär- und Backup-Ausfällen kann Natürlich kann die HA-Software auch zookeeper als Cluster-Koordinationsdienst verwenden, um eine detailliertere Anpassung zu ermöglichen.

Bei verteilten Systemen ist die Konsistenz der Datenbank-Primär- und Backup-Umschaltung immer ein Problem. Es gibt mehrere Möglichkeiten: a , Clustering-Methode, wie Oracles

Rack

, der Nachteil ist, dass es komplizierter ist

b, gemeinsame SAN Speichermethode, zugehörige Datendateien und Protokolldateien werden im gemeinsamen Speicher abgelegt. Der Vorteil besteht darin, dass die Daten während der aktiven und Backup-Umschaltung konsistent bleiben und nicht verloren gehen . Aufgrund der Sicherung kommt es jedoch zu einem kurzfristigen Nichtverfügbarkeitszustand

c und Sicherungsmethoden für die Datensynchronisierung. Die häufigste Methode ist die Protokollsynchronisierung, die eine gute Echtzeitleistung gewährleistet, aber während des Wechsels werden möglicherweise einige Daten nicht synchronisiert, was zu Problemen mit der Datenkonsistenz führt. Sie können das Betriebsprotokoll aufzeichnen, während die Hauptdatenbank in den Standby-Modus wechselt. Diese wird mit dem Betriebsprotokoll überprüft, um die nicht synchronisierten Daten auszugleichen d Eine andere Möglichkeit besteht darin, die Standby-Datenbank auf die Speicherung von regolog der Hauptdatenbank umzustellen, um sicherzustellen, dass keine Daten verloren gehen.

Die Effizienz der Datenbank-Master-Slave-Replikation ist unter MySQL nicht allzu hoch. Der Hauptgrund dafür ist, dass Transaktionen strikt die Reihenfolge beibehalten und der Index mysqlIn Bezug auf die Replikation, einschließlich Protokoll

IO

und Relog-Protokoll, handelt es sich bei beiden Prozessen um serielle Single-Thread-Operationen. Versuchen Sie, IO so viel Einfluss wie möglich. Mit der Mysql5.6-Version kann jedoch die parallele Replikation auf verschiedenen Bibliotheken unterstützt werden. Ø Zugriffsmethoden basierend auf unterschiedlichen Geschäftsanforderungen Im Plattformgeschäft haben verschiedene Unternehmen unterschiedliche Zugriffsanforderungen, wie z. B. die beiden typischen Geschäftsbenutzer und Bestellungen. Im Allgemeinen ist die Gesamtzahl der Benutzer kontrollierbar, während die Bestellungen ständig zunehmen. Für Benutzertabellen verwenden wir zunächst Sub-. Bibliothekssegmentierung, und jedes Sharding wird als Master für mehrere Lesevorgänge verwendet. Da Benutzer häufiger ihre eigenen Bestellungen abfragen müssen, muss die Bestelldatenbank auch nach Benutzern segmentiert werden. und unterstützt einen Herrn weiterlesen.

In Bezug auf die Hardwarespeicherung ist der Vorteil des Flash-Speichers nicht viel größer als der der Festplatte, da das Transaktionsprotokoll sequentiell geschrieben wird, also ein batteriegeschützter Schreibcache

Raid-Karte wird verwendet Speicher; Für Datendateien wird es eine große Anzahl zufälliger Lese- und Schreibvorgänge für Benutzer oder Bestellungen geben. Darüber hinaus ist die Erhöhung der Speicherkapazität ein Aspekt IO-Geräte-Flash-Speicher kann verwendet werden, z. B. PCIeKarte

fusion-io

. Die Verwendung von Flash-Speicher eignet sich auch für Single-Threaded-Workloads, wie z. B. Master-Slave-Replikation. Sie können die Fusion-IO-Karte auf dem Slave-Knoten konfigurieren, um die Latenz der Replikation zu reduzieren. Für das Auftragsgeschäft nimmt das Volumen stetig zu, PCIe Die Speicherkapazität der Karte ist relativ begrenzt und die wichtigsten Daten des Auftragsgeschäfts beziehen sich nur auf den letzten Zeitraum(zum Beispiel die letzten3Monate

)

, rechts Hier sind zwei Lösungen aufgeführt. Eine davon ist die Flashcache-Methode, die eine Open-Source-Hybridspeichermethode basierend auf Flash-Speicher und Festplattenspeicher verwendet, um Hotspot-Daten im Flash-Speicher zu speichern. Eine andere Methode besteht darin, alte Daten regelmäßig in die verteilte Datenbank HBase zu exportieren. Wenn Benutzer die Bestellliste abfragen, werden die aktuellen Daten von MySQL abgerufen, und die alten Daten können von HBase Das Abfragen in 🎜>HBase erfordert sicherlich ein gutes Rowkey-Design von HBase, um sich an die Abfrageanforderungen anzupassen.

3) Verteilte Datenbank

Für den Zugriff auf Daten mit hoher Parallelität bieten herkömmliche relationale Datenbanken eine Lösung zur Lese-/Schreibtrennung, die jedoch das Problem der Datenkonsistenz mit sich bringt Bei größeren Datenmengen verwenden herkömmliche Datenbanken Unterdatenbanken und Untertabellen, die komplizierter zu implementieren sind und für eine hohe Verfügbarkeit und Skalierung eine kontinuierliche Migration und Wartung erfordern. Herkömmliche Daten verwenden Main-Standby und Master-Slave. Multi-Master-Lösung, aber ihre Skalierbarkeit ist relativ schlecht. Das Hinzufügen von Knoten und Ausfallzeiten erfordern eine Datenmigration. Für die oben angesprochenen Probleme verfügt die verteilte Datenbank HBase über einen vollständigen Satz von Lösungen, die für den Bedarf an massivem Datenzugriff mit hoher Parallelität geeignet sind.

Ø HBase

Spaltenbasierte effiziente Speicherung reduziert IO
Übliche Abfragen erfordern nicht alle Felder in einer Zeile . Die meisten erfordern nur wenige Felder.
Im Vergleich zu zeilenorientierten Speichersystemen werden alle Daten für jede Abfrage abgerufen und dann werden die erforderlichen Felder daraus ausgewählt.
Spaltenorientierte Speichersysteme können eine Spalte separat abfragen. Dadurch stark reduzierenIO
Komprimierungseffizienz verbessern
Daten in derselben Spalte haben eine hohe Ähnlichkeit, was die Komprimierungseffizienz erhöht
Viele Funktionen von Hbasewerden durch die Spaltenspeicherung bestimmt

Hohe Leistung

LSM-Baum

Geeignet für Hochgeschwindigkeits-Schreibszenarien

Stark konsistenter Datenzugriff

MVCC

HBases konsistenter Datenzugriff erfolgt über MVCC erreichen.

HBase muss im Prozess des Schreibens von Daten, des Schreibens von HLog, des Schreibens von memstore mehrere Phasen durchlaufen. Aktualisieren Sie MVCC; Das Schreiben ist erfolgreich und die Isolation von Transaktionen muss durch mvcc gesteuert werden. Beim Lesen von Daten können beispielsweise keine Daten abgerufen werden, die nicht von anderen Threads übermittelt wurden.

Hohe ZuverlässigkeitHBases Datenspeicherung basiert auf HDFS bietet einen Redundanzmechanismus.

Region Knotenausfallzeiten bieten einen zuverlässigen Wiederherstellungsmechanismus für die Daten im Speicher, die nicht in die Datei geleert

wurden.

Skalierbar, automatische Segmentierung, Migration

Suchen Sie den Ziel-

Regionsserver über

Zookeeper

und suchen Sie schließlich die

Region

.

Region Server wird erweitert, indem es sich selbst als Master, Master Evenly veröffentlicht verteilt.

VerfügbarkeitEs gibt einen einzigen Fehlerpunkt, Regionsserver Nach der Ausfallzeit ist die vom Server verwaltete

Region

für kurze Zeit nicht zugänglich und wartet auf den

Failover

Wirkung.

verwaltet den Gesundheitsstatus jedes Regionsservers bis Master und Region Verteilung.

Mehrere Master, Master ist ausgefallen und es gibt den Paxos-Abstimmungsmechanismus von Zookeeper, um den nächsten Master auszuwählen . Selbst wenn Master vollständig ausgefallen ist, wird das Lesen und Schreiben von Region nicht beeinträchtigt. Master fungiert nur als automatische Betriebs- und Wartungsrolle.

HDFS ist eine verteilte Speicher-Engine mit einem Backup und drei Backups, hoher Zuverlässigkeit und 0 Datenverlust. Der Namenode von

HDFS ist ein SPOF.

Um zu häufigen Zugriff auf eine einzelne Region und übermäßigen Druck auf eine einzelne Maschine zu vermeiden, wurde ein Split-Mechanismus eingesetzt wird bereitgestellt

HBase ist in der Architektur von LSM-TREE geschrieben. Da die Daten anhängen sind, HFileImmer mehr stellt HBase HFile-Dateien für compact bereit, um abgelaufene Daten zu löschen und die Abfrageleistung zu verbessern. Schemafrei HBase hat kein striktes Schema wie eine relationale Datenbank, und Sie können Felder im Schema frei hinzufügen und löschen.

HBase

Verteilte Datenbank unterstützt den Sekundärindex nicht sehr gut, unterstützt derzeit nur rowkey

, daher ist das Design von rowkey sehr entscheidend für die Leistung der Abfrage. 7. Verwaltungs- und Bereitstellungskonfiguration

Einheitliche Konfigurationsbibliothek

Bereitstellungsplattform

8. Überwachung und Statistik Große verteilte Systeme umfassen verschiedene Geräte, wie z. B. Netzwerk-Switches, gewöhnliche PCs

Maschinen, verschiedene Arten von Netzwerkkarten, Festplatten, Speichern usw. sowie die Überwachung auf Unternehmensebene. Wenn die Anzahl sehr groß ist, steigt auch die Fehlerwahrscheinlichkeit, und einige Überwachungsanforderungen sind relativ hoch einige haben die zweite Ebene erreicht; abnormale Daten müssen aus einer großen Menge an Datenströmen gefiltert werden, und manchmal werden komplexe kontextbezogene Berechnungen an den Daten durchgeführt, um festzustellen, ob ein Alarm erforderlich ist. Daher sind Leistung, Durchsatz und Verfügbarkeit der Überwachungsplattform wichtiger. Es ist notwendig, eine einheitliche und integrierte Überwachungsplattform zu planen, um das System auf allen Ebenen zu überwachen.

Datenklassifizierung der Plattform

Anwendungsgeschäftsebene: Anwendungsereignisse, Geschäftsprotokolle, Prüfprotokolle, Anforderungsprotokolle , Ausnahmen, Anforderungsgeschäft

Metriken

, Leistungsmetriken

Systemebene: CPU, Speicher, Netzwerk, IO

Anforderungen an die AktualitätSchwellenwert, Alarm:

Echtzeitberechnung:

Minutenberechnung nahezu in EchtzeitOffline-Analyse nach Stunde und TagEchtzeitabfrage

Architektur

Der

Agent

-Agent im Knoten kann Protokolle und Anwendungsereignisse empfangen und Daten über Sonden sammeln. Ein Prinzip der Datenerfassung durch den

Agent

besteht darin, asynchron vom Unternehmen isoliert zu sein Der Bewerbungsprozess hat keinen Einfluss auf den Transaktionsprozess.

Daten werden einheitlich über den Kollektor-Cluster gesammelt und zur Verarbeitung nach verschiedenen Datentypen verteilt. Einige Daten sind nicht aktuell, z. B. stündliche Statistiken, und werden in abgelegt hadoop-Cluster; einige Daten verfolgen Daten des Anforderungsflusses und müssen abgefragt werden, dann können sie zur Indizierung in den solr-Cluster gestellt werden; einige Daten müssen in Echtzeit berechnet und dann benachrichtigt werden , es muss in storm gestellt und im Cluster verarbeitet werden.

Nachdem die Daten vom Rechencluster verarbeitet wurden, werden die Ergebnisse in Mysql oder HBaseIn.

Die Überwachungs-

Web-Anwendung kann die Echtzeit-Überwachungsergebnisse an den Browser übertragen und kann auch eine API Zur Anzeige und Suche von Ergebnissen.

Das obige ist der detaillierte Inhalt vonErstellen Sie eine Architektur mit hoher Parallelität und hoher Verfügbarkeit. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage