Grüße an alle Leser von Habr! Mein Name ist Igor Rybakov und ich bin der technische Direktor des kasachischen IT-Unternehmens DAR. Heute werde ich mit Ihnen das Verständnis und die Anwendung der Prinzipien des Parallel Computing in modernen Informationssystemen teilen. Um dies besser zu verstehen, möchte ich Argumente für das Studium und die praktische Anwendung der Konzepte des parallelen und verteilten Rechnens bei der Entwicklung moderner Informationssysteme vorbringen.
Paralleles Rechnen oder was macht der Gründer von Intel
Zunächst ein wenig Geschichte. 1965 entdeckte Gordon Moore, einer der Gründer von Intel, ein Muster: Das Auftreten neuer Modelle von Mikroschaltungen wurde etwa ein Jahr nach den Vorgängern beobachtet, während sich die Anzahl der darin enthaltenen Transistoren jedes Mal fast verdoppelte. Es stellt sich heraus, dass sich die Anzahl der auf dem Chip für integrierte Schaltkreise platzierten Transistoren alle 24 Monate verdoppelt hat. Diese Beobachtung wurde Moores Gesetz genannt. Der Gründer von Intel sagte voraus, dass die Anzahl der Elemente im Chip von 2 ^ 6 (ungefähr 60) im Jahr 1965 auf 2 ^ 16 (65 Tausend) bis 1975 steigen würde.
Um diese von Moore vorhergesagte zusätzliche Rechenleistung in die Praxis umsetzen zu können, wurde es nun erforderlich, paralleles Rechnen zu verwenden. Seit mehreren Jahrzehnten haben Prozessorhersteller die Taktrate und Parallelität auf Befehlsebene ständig erhöht, sodass auf neuen Prozessoren die alten Single-Thread-Anwendungen schneller laufen, ohne dass der Programmcode geändert wird.
Seit etwa Mitte der 2000er Jahre bevorzugen Prozessorhersteller eine Multi-Core-Architektur. Um jedoch die Leistungssteigerung des Zentralprozessors voll ausnutzen zu können, müssen Programme in geeigneter Weise neu geschrieben werden. Hier tritt ein Problem auf, weil nach dem Amdahlschen Gesetz nicht jeder Algorithmus parallelisiert werden kann, wodurch die grundlegende Grenze für die Effizienz der Lösung eines Rechenproblems auf Supercomputern bestimmt wird.
Um diese Grenze zu überwinden, werden verteilte Computeransätze verwendet. Auf diese Weise können arbeitsintensive Computerprobleme mit mehreren Computern gelöst werden, die meistens zu einem parallelen Computersystem kombiniert werden. Sequentielle Berechnungen in verteilten Informationssystemen werden unter Berücksichtigung der gleichzeitigen Lösung vieler Rechenprobleme durchgeführt. Ein Merkmal verteilter Multiprozessor-Computersysteme ist im Gegensatz zu lokalen Supercomputern die Möglichkeit einer unbegrenzten Leistungssteigerung aufgrund von Skalierung .
Um die Mitte des Jahres 2005 sind Computer massiv mit Mehrkernprozessoren ausgestattet, die paralleles Rechnen ermöglichen. Mit modernen Netzwerktechnologien können Sie Hunderte und Tausende von Computern kombinieren. Was zur Entstehung des sogenannten "Cloud Computing" führte.
Die Verwendung von Parallel Computing
Aktuelle Informationssysteme wie E-Commerce benötigen dringend hochwertige Dienstleistungen für ihre Kunden. Unternehmen konkurrieren und erfinden immer neue Dienstleistungen und Informationsprodukte. Dienste sollten für hohe Last und hohe Fehlertoleranz ausgelegt sein, da Benutzer von Diensten nicht ein Büro, nicht ein Land, sondern die ganze Welt.
Gleichzeitig ist es wichtig, die wirtschaftliche Machbarkeit von Projekten zu bewahren und keine unnötigen Mittel für teure Servergeräte auszugeben, wenn alte Software, die nur einen Teil der Rechenleistung verbraucht, darauf funktioniert.
Die Entwickler von Anwendungssystemen standen vor einem neuen Problem: der Notwendigkeit, Informationssysteme neu zu schreiben, um den Anforderungen moderner Unternehmen gerecht zu werden, und der Notwendigkeit, Serverressourcen besser zu nutzen, um die Gesamtbetriebskosten zu senken. Die Aufgaben, die moderne Informationssysteme erfüllen müssen, sind vielfältig.
Ausgehend von maschinellem Lernen und Big-Data-Analyse, um einen stabilen Betrieb der vorhandenen grundlegenden Systemfunktionen in Spitzenzeiten sicherzustellen. Hier können Sie beispielsweise Massenverkäufe im Online-Shop zitieren. All diese Aufgaben können mithilfe einer Kombination aus parallelem und verteiltem Computing gelöst werden, beispielsweise durch Implementierung einer Mikrodienstarchitektur.
Servicequalitätskontrolle
Um die tatsächliche Qualität der Dienste für einen Kunden zu messen, wird das Konzept der Service Level Agreement (SLA) verwendet, dh einige statistische Metriken der Systemleistung.
Entwickler können sich beispielsweise die Aufgabe stellen, dass 95% aller Benutzeranforderungen mit einer Antwortzeit von nicht mehr als 200 ms bedient werden. Übrigens handelt es sich um echte nicht funktionale Anforderungen, da Benutzer nicht gerne warten.
Um die Zufriedenheit der Benutzer mit dem Dienst zu beurteilen, können Sie den Apdex-Indikator verwenden, der das Verhältnis von erfolgreichen (zufriedenen) Antworten zu unbefriedigenden (unbefriedigenden) Antworten widerspiegelt. Unser Schwellenwert ist beispielsweise SLA = 1,2 Sekunden. Bei 95% der Antwortzeit von Anforderungen <= 1,2 Sekunden ist das Ergebnis erfolgreich. Bei einer großen Anzahl von Anforderungen von mehr als 1,2 Sekunden, aber weniger als 4T (4,8 Sekunden) wird das Ergebnis als zufriedenstellend angesehen, und wenn eine große Anzahl von Anforderungen 4T überschreitet, dh> 4,8 Sekunden, wird das Ergebnis als Fehler angesehen.
Schlussfolgerungen
Infolgedessen möchte ich sagen, dass die Entwicklung von Microservices tatsächlich das Verständnis und die praktische Anwendung von Distributed and Parallel Computing beinhaltet.
Natürlich müssen Sie einige Dinge opfern:
- Die Einfachheit der Entwicklung und Wartung - die Bemühungen der Entwickler, verteilte Module zu implementieren;
- Bei der Arbeit mit Datenbanken kann die strikte Konsistenz (ACID) andere Ansätze beeinträchtigen und erfordern.
- Rechenleistung wird für Netzwerkkommunikation und Serialisierung aufgewendet.
- Wir verbringen Zeit damit, DevOps-Praktiken für eine komplexere Überwachung und Bereitstellung zu implementieren.
Im Gegenzug bekommen wir meiner Meinung nach viel mehr:
- die Möglichkeit, ganze gebrauchsfertige Module wiederzuverwenden und dadurch Produkte schnell auf den Markt zu bringen;
- hohe Skalierbarkeit von Systemen, was mehr Kunden bedeutet, ohne SLA zu verlieren;
- Durch die Verwendung einer eventuellen Konsistenz, die auf dem CAP-Theorem basiert, können wir wieder große Datenmengen verwalten, ohne die SLA zu verlieren.
- die Fähigkeit, jede Änderung des Systemzustands für weitere Analysen und maschinelles Lernen aufzuzeichnen.