Alle sprechen ĂŒber die Entwicklungs- und Testprozesse, die Schulung des Personals, die Steigerung der Motivation, aber diese Prozesse sind kaum von Bedeutung, wenn eine Minute Ausfallzeit des Services astronomische Kosten verursacht. Was tun, wenn Sie finanzielle Transaktionen unter einem strengen SLA durchfĂŒhren? Wie können Sie die ZuverlĂ€ssigkeit und Ausfallsicherheit Ihrer Systeme erhöhen, ohne Entwicklung und Tests zu berĂŒcksichtigen?

Die nĂ€chste HighLoad++-Konferenz findet am 6. und 7. April 2020 in St. Petersburg statt. Weitere Informationen und Tickets unter . 9. November, 18:00 Uhr. HighLoad++ Moskau 2018, Saal âDelhi + Kalkuttaâ. Thesen und .
Yevgeny Kuzovlev (im Folgenden â EK): â Freunde, hallo! Mein Name ist Yevgeny Kuzovlev. Ich komme von der Firma EcommPay, genauer gesagt von der Abteilung EcommPay IT, der IT-Abteilung der Unternehmensgruppe. Heute werden wir ĂŒber Ausfallzeiten sprechen â darĂŒber, wie man sie vermeidet und wie man ihre Folgen minimiert, wenn eine Vermeidung nicht möglich ist. Das Thema, das wir behandeln, ist: âWas tun, wenn eine Minute Ausfallzeit 100.000 Dollar kostet?â Wir werden im Vorfeld Ă€hnliche Zahlen betrachten.
Womit beschÀftigt sich EcommPay IT?
Wer sind wir? Warum stehe ich hier vor Ihnen? Warum habe ich das Recht, Ihnen hier etwas zu erzĂ€hlen? Und worĂŒber werden wir hier ausfĂŒhrlicher sprechen?

Die Unternehmensgruppe EcommPay ist ein internationaler Acquirer. Wir bearbeiten Zahlungen weltweit â in Russland, Europa, in SĂŒdostasien (All Around the World). Wir haben 9 BĂŒros, insgesamt 500 Mitarbeiter und etwa die HĂ€lfte davon sind IT-Spezialisten. Alles, was wir tun, alles, womit wir Geld verdienen, haben wir selbst gemacht.
Alle unsere Produkte (wir haben ziemlich viele â in unserer Reihe groĂer IT-Produkte haben wir etwa 16 verschiedene Komponenten) haben wir selbst entwickelt; wir programmieren selbst, wir entwickeln selbst. Momentan fĂŒhren wir etwa eine Million Transaktionen pro Tag durch (Millionen â wahrscheinlich ist das die richtige Formulierung). Wir sind ein relativ junges Unternehmen â wir sind erst etwa sechs Jahre alt.
Vor 6 Jahren war das ein Startup, als die Leute zusammen mit dem GeschĂ€ft kamen. Sie waren durch eine Idee vereint (es gab nichts anderes als diese Idee), und wir sind losgelaufen. Wie jedes Startup sind wir schneller gelaufen⊠FĂŒr uns war die Geschwindigkeit wichtiger als die QualitĂ€t.
Irgendwann hielten wir inne: Wir erkannten, dass wir nicht mehr mit der bisherigen Geschwindigkeit und QualitĂ€t weiterleben können und dass wir in erster Linie die QualitĂ€t verbessern mĂŒssen. In diesem Moment beschlossen wir, eine neue Plattform zu entwickeln, die richtig, skalierbar und zuverlĂ€ssig sein wird. Diese Plattform haben wir angefangen zu entwickeln (wir haben investiert, die Entwicklung und das Testing vorangetrieben), aber irgendwann erkannten wir, dass die Entwicklung und das Testing es uns nicht erlauben, ein neues QualitĂ€tsniveau des Services zu erreichen.
Sie entwickeln ein neues Produkt, bringen es in die Produktion, aber trotzdem wird irgendwo etwas schiefgehen. Heute sprechen wir darĂŒber, wie wir ein neues qualitatives Niveau erreichen können (wie uns das gelungen ist, ĂŒber unsere Erfahrungen), wobei die Entwicklung und das Testing auĂen vor bleiben; wir werden darĂŒber sprechen, was fĂŒr den Betrieb verfĂŒgbar ist â was der Betrieb selbst tun kann, was er dem Testing anbieten kann, um die QualitĂ€t zu beeinflussen.
Downtimes. Die Gebote des Betriebs.
Immer der grundlegendste Eckpfeiler, ĂŒber den wir heute sprechen werden â Downtime. Ein schlimmes Wort. Wenn wir Downtime haben, stehen wir schlecht da. Wir eilen, um alles wieder zum Laufen zu bringen, die Admins halten den Server am Laufen â hoffentlich fĂ€llt er nicht aus, wie es in dem Lied heiĂt. Darum werden wir heute sprechen.

Als wir begannen, unsere AnsÀtze zu Àndern, formulierten wir 4 Gebote. Diese habe ich auf den Folien dargestellt:
Diese Gebote sind ziemlich einfach:

- Das Problem schnell identifizieren.
- Noch schneller es loswerden.
- Die Ursache verstehen helfen (spĂ€ter, fĂŒr die Entwickler).
- Und die AnsÀtze standardisieren.
Ich möchte Ihre Aufmerksamkeit auf Punkt Nr. 2 lenken. Wir befreien uns von dem Problem, anstatt es zu lösen. Eine Lösung kommt an zweiter Stelle. FĂŒr uns ist entscheidend, dass der Benutzer von diesem Problem abgeschottet ist. Es wird in einer gewissen isolierten Umgebung existieren, aber diese Umgebung wird nicht mit ihm in Kontakt treten. TatsĂ€chlich werden wir uns mit diesen vier Gruppen von Problemen beschĂ€ftigen (einige ausfĂŒhrlicher, andere weniger ausfĂŒhrlich), ich werde Ihnen erzĂ€hlen, was wir verwenden und welche entsprechenden Erfahrungen wir in den Lösungen haben.
Problemlösung: Wann treten sie auf und was ist zu tun?
Aber wir beginnen nicht der Reihenfolge nach, wir beginnen mit Punkt Nr. 2 â wie können wir das Problem schnell loswerden? Es gibt ein Problem â wir mĂŒssen es beheben. âWas sollen wir damit machen?â â die zentrale Frage. Und als wir anfingen, ĂŒber die Lösung des Problems nachzudenken, haben wir einige Anforderungen entwickelt, denen die Problemlösung folgen sollte.

Um diese Anforderungen zu formulieren, haben wir uns die Frage gestellt: âWann haben wir Probleme?â Und Probleme, wie sich herausstellte, treten in vier FĂ€llen auf:

- Hardwareausfall.
- Fehler von externen Diensten.
- Ănderung der Softwareversion (das ist das Deployment).
- Explosion des Lastwachstums.
Ăber die ersten beiden werden wir nicht sprechen. HardwareausfĂ€lle lassen sich recht einfach beheben: Sie mĂŒssen alles redundant haben. Wenn es sich um Festplatten handelt â die Festplatten sollten in einem RAID-Verbund konfiguriert sein, wenn es sich um einen Server handelt â der Server sollte dupliziert sein, und wenn Sie eine Netzwerk-Infrastruktur haben â sollten Sie eine zweite Kopie der Netzwerk-Infrastruktur bereitstellen, das heiĂt, Sie nehmen und duplizieren. Und wenn etwas ausfĂ€llt, schalten Sie auf die Backup-Ressourcen um. Hier gibt es nicht viel mehr zu sagen.
Das Zweite ist der Fehler von externen Diensten. FĂŒr die meisten Systeme ist das ĂŒberhaupt kein Problem, aber nicht fĂŒr uns. Da wir Zahlungen verarbeiten, sind wir ein Aggregator, der zwischen dem Benutzer (der seine Kartendaten eingibt) und den Banken, den Zahlungssystemen (âVisaâ, âMasterCardâ, âMirâ usw.) steht. Externen Diensten (Zahlungssystemen, Banken) können Fehler unterlaufen. Weder wir noch Sie (wenn Sie solche Dienste haben) können darauf Einfluss nehmen.
Was ist dann zu tun? Hier gibt es zwei AnsĂ€tze. Erstens, wenn Sie können, sollten Sie diesen Dienst irgendwie duplizieren. Zum Beispiel leiten wir, wenn wir können, den Traffic von einem Dienst auf einen anderen um: Wir haben beispielsweise Karten ĂŒber âSberbankâ verarbeitet, hat die âSberbankâ Probleme â leiten wir den Traffic [verhĂ€ltnismĂ€Ăig] auf âRaiffeisenâ um. Zweitens können wir sehr schnell den Fehler externer Dienste feststellen, und deshalb werden wir in dem nĂ€chsten Teil des Berichts ĂŒber die Reaktionsgeschwindigkeit sprechen.
TatsĂ€chlich können wir aus diesen vier Punkten konkret Einfluss auf den Wechsel der Softwareversion nehmen â MaĂnahmen ergreifen, die zu einer Verbesserung der Situation im Hinblick auf Deployments und im Kontext des explosionsartigen Anstiegs der Last fĂŒhren. Genau das haben wir getan. Hier, nochmals, ein kleiner Hinweis...
Von diesen vier Problemen lassen sich mehrere sofort lösen, wenn Sie eine Cloud haben. Wenn Sie in den Clouds von âMicrosoft Azureâ, âOzonâ sind, unsere Clouds von âYandexâ oder âMailâ nutzen, wird das Hardwareproblem zumindest zu ihrem Problem und bei Ihnen wird alles gut im Hinblick auf das Hardwareproblem.
Wir sind ein etwas ungewöhnliches Unternehmen. Hier sprechen alle ĂŒber âKubernetesâ, ĂŒber Clouds â wir haben weder âKubernetesâ noch Clouds. Stattdessen haben wir Server mit Hardware in vielen Rechenzentren, und auf dieser Hardware sind wir gezwungen zu leben, wir mĂŒssen dafĂŒr verantwortlich sein. Daher werden wir in diesem Kontext sprechen. Also, zu den Problemen. Die ersten zwei haben wir ausgeklammert.
Wechsel der Softwareversion. Grundlagen
Unsere Entwickler haben keinen Zugriff auf die Produktion. Warum ist das so? Ganz einfach, wir sind nach PCI DSS zertifiziert, und unsere Entwickler haben einfach nicht das Recht, in die âProduktionâ zu schauen. Punkt. Ganz entschieden. Daher endet die Verantwortung der Entwicklung genau in dem Moment, in dem die Entwicklung den Build an die Veröffentlichung ĂŒbergibt.

Unsere zweite Grundlage, die wir haben und die uns ebenfalls stark unterstĂŒtzt â es gibt keine einzigartigen, nicht dokumentierten Kenntnisse. Ich hoffe, dass es bei Ihnen ebenso ist. Denn wenn dem nicht so ist, werden Sie Probleme bekommen. Probleme treten auf, wenn diese einzigartigen, nicht dokumentierten Kenntnisse nicht zur richtigen Zeit am richtigen Ort vorhanden sind. Angenommen, eine Person weiĂ, wie man eine bestimmte Komponente deployed â dieser Person ist nicht da, sie ist im Urlaub oder krank â dann haben Sie Probleme.
Und die dritte Grundlage, zu der wir gekommen sind. Wir sind durch Schmerz, Blut und TrĂ€nen dazu gekommen â wir sind zu dem Punkt gelangt, dass jeder unserer Builds Fehler enthĂ€lt, selbst wenn er fehlerfrei ist. Wir haben fĂŒr uns beschlossen: Wenn wir etwas deployen, wenn wir etwas in die Produktion bringen â haben wir einen Build mit Fehlern. Wir haben Anforderungen formuliert, die unser System erfĂŒllen muss.
Anforderungen an den Wechsel der Softwareversion
Diese Anforderungen sind drei:

- Wir mĂŒssen das Deployment schnell zurĂŒckrollen.
- Wir mĂŒssen die Auswirkungen eines fehlgeschlagenen Deployments minimieren.
- Und wir sollten die Möglichkeit haben, uns schnell parallel bereitzustellen.
Genau in dieser Reihenfolge! Warum? Weil es beim Deployment einer neuen Version in erster Linie nicht auf die Geschwindigkeit ankommt, sondern Ihnen wichtig ist, dass Sie, falls etwas schiefgeht, schnell zurĂŒckschalten und minimale Auswirkungen haben. Wenn Sie jedoch eine Reihe von Versionen im Produktionsumfeld haben, bei denen sich herausgestellt hat, dass es einen Fehler gibt (es gab kein Deployment, aber der Fehler besteht), dann ist die Geschwindigkeit des nachfolgenden Deployments von Bedeutung. Was haben wir also getan, um diese Anforderungen zu erfĂŒllen? Wir haben auf eine solche Methodik zurĂŒckgegriffen:
Sie ist recht bekannt, wir haben sie nicht erfunden â es ist das Blue/Green Deployment. Was ist das? FĂŒr jede Gruppe von Servern, auf denen Ihre Anwendungen stehen, sollte es eine Kopie geben. Eine "warme" Kopie: Auf ihr gibt es keinen Verkehr, aber jederzeit kann dieser Verkehr auf diese Kopie geleitet werden. Diese Kopie enthĂ€lt die vorherige Version. Und im Moment des Deployments setzen Sie den Code auf die inaktive Kopie auf. Dann leiten Sie einen Teil des Verkehrs (oder den gesamten) auf die neue Version um. Dadurch mĂŒssen Sie, um den Verkehrsfluss von der alten Version auf die neue zu Ă€ndern, nur eine einzige MaĂnahme ergreifen: Sie mĂŒssen im Upstream den Load Balancer Ă€ndern, die Richtung Ă€ndern â von einem Upstream zum anderen. Das ist sehr praktisch und löst das Problem des schnellen Umschaltens, des schnellen Rollbacks.Hier ist die Lösung fĂŒr die zweite Frage â Minimierung: Sie können auf die neue Linie, die Linie mit dem neuen Code, nur einen Teil Ihres Verkehrs leiten (zum Beispiel 2 %). Und diese 2 % sind nicht 100%! Wenn Sie beim fehlerhaften Deployment 100 % des Verkehrs verloren haben â das ist schlimm, wenn Sie 2 % des Verkehrs verloren haben â das ist unangenehm, aber nicht katastrophal. AuĂerdem werden die Benutzer dies wahrscheinlich nicht einmal bemerken, denn in einigen FĂ€llen (nicht in allen) kann derselbe Benutzer, der F5 drĂŒckt, auf eine andere, funktionierende Version gelangen.
Blue/Green Deployment. Routing
Doch es ist nicht so einfach, "Blue/Green Deployment" zu machen... Alle unsere Komponenten können in drei Gruppen unterteilt werden:
- das Frontend (Zahlungsseiten, die unsere Kunden sehen);
- Kernverarbeitung;
- Adapter zur Zusammenarbeit mit Zahlungssystemen (Banken, MasterCard, Visa...).
Und hier gibt es einen wichtigen Punkt â der Punkt betrifft das Routing zwischen den Leitungen. Wenn Sie 100% des Traffics einfach umschalten, gibt es diese Probleme nicht. Aber wenn Sie 2% umschalten möchten, beginnen die Fragen: âWie macht man das?â Das Einfachste, ganz direkt: Sie können eine Zufallsauswahl, Round Robin in nginx einstellen, und haben dann 2% nach links, 98% nach rechts. Aber das ist nicht immer geeignet.
Bei uns interagiert der Benutzer beispielsweise nicht mit der System mit nur einer Anfrage. Das ist normal: 2, 3, 4, 5 Anfragen â Ihre Systeme können genauso sein. Und wenn es Ihnen wichtig ist, dass alle Anfragen des Benutzers auf dasselbe Leitungs kommen, auf das die erste Anfrage kam, oder (der zweite Punkt) dass alle Anfragen des Benutzers auf eine neue Linie nach dem Umschalten geleitet werden (er könnte zuvor schon mit dem System gearbeitet haben, vor dem Umschalten), â dann ist diese zufĂ€llige Verteilung nicht geeignet. Dann gibt es folgende Optionen:

Die erste Option, die einfachste â basierend auf den grundlegenden Parametern des Clients (IP-Hash). Sie haben eine IP, und Sie teilen nach der IP-Adresse nach rechts und links. Dann funktioniert der zweite von mir beschriebene Fall, wenn ein Deployment stattgefunden hat, der Benutzer bereits mit Ihrem System arbeiten konnte und seit dem Deployment alle Anfragen auf eine neue Leitung (auf dieselbe, sagen wir) geleitet werden.Wenn das aus irgendwelchen GrĂŒnden nicht geeignet ist und Sie die Anfragen unbedingt auf die Leitung schicken mĂŒssen, auf die die primĂ€re, anfĂ€ngliche Anfrage des Benutzers kam, dann haben Sie zwei Möglichkeiten...
Die erste Möglichkeit: Sie können nginx+ verwenden. Dort gibt es einen Mechanismus fĂŒr Sticky Sessions, der beim ersten Anfrage des Benutzers eine Sitzung festlegt und sie an jenen oder anderen Upstream bindet. Alle nachfolgenden Anfragen des Benutzers im Rahmen der Lebensdauer der Sitzung werden an denselben Upstream gesendet, an den die Sitzung festgelegt wurde.Das war fĂŒr uns nicht geeignet, da wir bereits ein normales nginx hatten. Auf nginx+ umzuschalten â es ist nicht so, dass es teuer wĂ€re, nur war es fĂŒr uns etwas schmerzhaft und nicht ganz richtig. âSticky Sessionsâ haben fĂŒr uns zum Beispiel nicht funktioniert aus dem einfachen Grund, dass âSticky Sessionsâ die Möglichkeit nicht bieten, nach dem Kriterium âOder-Oderâ zu routen. Man kann beispielsweise festlegen, dass man âSticky Sessionsâ nach der IP-Adresse oder nach IP-Adresse und Cookies oder nach POST-Parametern macht, aber âOder-Oderâ â da wird es schon schwieriger.
Daher sind wir zu der vierten Option gekommen. Wir haben nginx in einer âSteroid-Versionâ verwendet (das ist openresty) â es handelt sich um dasselbe nginx, das zusĂ€tzlich die UnterstĂŒtzung fĂŒr das EinfĂŒgen von Last-Skripten hat. Sie können ein Last-Skript schreiben, es diesem âopenrestyâ zur VerfĂŒgung stellen, und dieses Last-Skript wird ausgefĂŒhrt, wenn die Anfrage des Nutzers eingeht.
Und wir haben tatsĂ€chlich ein solches Skript geschrieben, openresty installiert und in diesem Skript durchlaufen wir 6 verschiedene Parameter durch die Verkettung âOderâ. Je nachdem, ob der eine oder andere Parameter vorhanden ist, wissen wir, ob der Nutzer auf eine Seite oder die andere, auf eine Linie oder die andere gekommen ist.
Blue/Green Deployment. Vor- und Nachteile
NatĂŒrlich hĂ€tte man es vielleicht einfacher machen können (die gleichen âSticky Sessionsâ verwenden), aber wir haben noch den Aspekt, dass nicht nur der Nutzer im Rahmen einer Verarbeitung einer Transaktion mit uns interagiert⊠sondern dass auch Zahlungssysteme mit uns interagieren: wir erhalten einen Callback, nachdem wir die Transaktion verarbeitet haben (nachdem wir die Anfrage an das Zahlungssystem geschickt haben).
Und nehmen wir an, dass wir innerhalb unseres Umfeldes die IP-Adresse des Nutzers in allen Anfragen weiterleiten können und auf Basis der IP-Adresse der Nutzer trennen können, dann wĂŒrden wir der gleichen âVISAâ nicht sagen: âLeute, wir sind so ein retro Unternehmen, wir sind irgendwie international (auf der Webseite und in Russland)⊠Aber könntet ihr uns bitte die IP-Adresse des Nutzers zusĂ€tzlich in ein zusĂ€tzliches Feld schicken, euer standardisiertes Protokoll!â VerstĂ€ndlich, dass sie nicht einwilligen werden.
Deshalb war das fĂŒr uns nicht geeignet â wir haben openresty gemacht. Folglich sieht unser Routing so aus:Der âBlue/Green Deploymentâ hat dementsprechend Vorteile, die ich erwĂ€hnt habe, und Nachteile.
Es gibt zwei Nachteile:
- Sie mĂŒssen sich um das Routing kĂŒmmern;
- Der zweite wesentliche Nachteil sind die Kosten.
Sie benötigen doppelt so viele Server, sie benötigen doppelt so viele Betriebsmittel, sie mĂŒssen doppelt so viel Aufwand fĂŒr die Wartung dieses Zoos aufbringen.
Ăbrigens, unter den Vorteilen gibt es noch eine weitere Sache, die ich bisher nicht erwĂ€hnt habe: Sie haben ein Reserve, falls die Last steigt. Wenn Sie einen sprunghaften Anstieg der Last haben und eine groĂe Anzahl von Nutzern auf Sie zukommt, aktivieren Sie einfach die zweite Linie im Verteilungssystem 50 zu 50 â und Sie haben sofort x2 Server in Ihrem Cluster, bis Sie das Problem mit der VerfĂŒgbarkeit der Server gelöst haben.
Wie macht man ein schnelles Deployment?
Wir haben darĂŒber gesprochen, wie man das Problem der Minimierung und schnellen RĂŒckrollung löst, aber die Frage bleibt: âWie kann man schnell deployenâ?

Hier ist alles kurz und einfach.- Sie mĂŒssen ein CD-System (Continuous Delivery) haben â ohne das geht es nicht. Wenn Sie einen Server haben, können Sie manuell deployen. Wir haben ungefĂ€hr tausendfĂŒnfhundert Server und manuelles Deployen auf tausendfĂŒnfhundert, das ist klar â wir können eine Abteilung in der GröĂe dieses Saals aufstellen, nur um zu deployen.
- Das Deployment muss parallel erfolgen. Wenn Ihr Deployment sequenziell ist, ist es schlecht. Ein Server â in Ordnung, jedoch bei tausendfĂŒnfhundert Servern werden Sie den ganzen Tag deployen.
- Nochmals, zur Beschleunigung ist das wahrscheinlich nicht erforderlich. Beim Deployment wird in der Regel das Projekt gebaut. Sie haben ein Webprojekt, eine Frontend-Komponente (dort machen Sie Webpack, npm sammeln â sowas in der Art), und dieser Prozess dauert eigentlich nicht lange â etwa 5 Minuten, aber diese 5 Minuten könnten kritisch sein. Deshalb machen wir beispielsweise das nicht: Wir haben diese 5 Minuten entfernt, wir deployen Artefakte.
Was ist ein Artefakt? Ein Artefakt ist ein gebauter Build, in dem bereits der gesamte Build-Prozess durchgefĂŒhrt wurde. Dieses Artefakt speichern wir in einem Artefakt-Repository. FrĂŒher haben wir zwei solcher Repositories verwendet â Nexus und jetzt jFrog Artifactory. "Nexus" haben wir ursprĂŒnglich verwendet, weil wir diesen Ansatz bei java-Anwendungen praktiziert haben (es war dafĂŒr gut geeignet). Dann haben wir auch einige PHP-Anwendungen hineingepackt; und "Nexus" war dafĂŒr nicht mehr geeignet, und dann haben wir uns fĂŒr jFrog Artifactory entschieden, das praktisch alles archivieren kann. Wir haben sogar dazu gekommen, dass wir in diesem Artefakt-Repository unsere eigenen binĂ€ren Pakete speichern, die wir fĂŒr Server bauen.
Sprunghafter Anstieg der Last
Wir haben ĂŒber den Versionswechsel der Software gesprochen. Das NĂ€chste, was wir haben, ist der sprunghafte Anstieg der Last. Hier verstehe ich unter sprunghafter Last wahrscheinlich nicht ganz das RichtigeâŠ
Wir haben ein neues System entwickelt â es ist serviceorientiert, modisch und schön, ĂŒberall Worker, ĂŒberall Warteschlangen, ĂŒberall AsynchronitĂ€t. In solchen Systemen können die Daten durch verschiedene Flows flieĂen. Bei der ersten Transaktion können der 1., 3. und 10. Worker eingesetzt werden, und bei der zweiten Transaktion der 2., 4. und 5. Und heute, sagen wir mal, haben Sie am Morgen einen Datenstrom, der die ersten drei Worker verwendet, und am Abend Ă€ndert sich dieser schlagartig und alle verwenden die anderen drei Worker.
Hier ergibt sich die Situation, dass Sie die Worker irgendwie skalieren mĂŒssen, dass Sie Ihre Dienste irgendwie skalieren mĂŒssen, dabei aber eine AufblĂ€hung der Ressourcen vermeiden sollten.

Wir haben unsere Anforderungen definiert. Diese Anforderungen sind recht einfach: es sollte Service Discovery geben, Parametrisierung â alles Standard fĂŒr den Aufbau solcher skalierbaren Systeme, auĂer einem Punkt â das ist die Amortisation der Ressourcen. Wir haben gesagt, dass wir nicht bereit sind, Ressourcen zu amortisieren, damit die Server die Luft erwĂ€rmen. Wir haben âConsulâ genommen, wir haben âNomadâ genommen, das unsere Worker verwaltet.Warum ist das fĂŒr uns ein Problem? Lassen Sie mich etwas zurĂŒckspringen. Momentan stehen hinter uns ca. 70 Zahlungssysteme. Am Morgen flieĂt der Traffic ĂŒber die âSberbankâ, dann fĂ€llt beispielsweise die âSberbankâ aus und wir schalten auf ein anderes Zahlungssystem um. Wir hatten 100 Worker bis zur âSberbankâ, und danach mĂŒssen wir plötzlich 100 Worker fĂŒr ein anderes Zahlungssystem hochfahren. Und das sollte alles idealerweise ohne menschliches Eingreifen geschehen. Denn wenn menschliches Eingreifen notwendig ist, muss ein Ingenieur 24/7 bereitstehen, der sich nur darum kĂŒmmert, denn solche AusfĂ€lle mit 70 Systemen hinter einem passieren regelmĂ€Ăig.
Deshalb haben wir uns âNomadâ angesehen, das eine offene IP hat, und haben unser Tool Scale-Nomad â ScaleNo â entwickelt, das Folgendes macht: es ĂŒberwacht das Wachstum der Warteschlange und verringert oder erhöht die Anzahl der Worker je nach Dynamik der WarteschlangenĂ€nderungen. Als wir es entwickelt hatten, dachten wir: âVielleicht sollten wir es Open Source machen?â Dann sahen wir uns das an â es ist so einfach wie zwei Cent.
Bis jetzt haben wir es nicht open-sourcete, aber falls Sie nach dem Vortrag, nach dem VerstĂ€ndnis, dass Sie so etwas brauchen, Bedarf daran haben, finden Sie meine Kontaktdaten auf der letzten Folie â schreiben Sie mir bitte. Wenn sich mindestens 3-5 Personen zusammenfinden, werden wir es open sourcen.

Wie funktioniert das? Lassen Sie uns einen Blick darauf werfen! Vorausgeschaut: Links gibt es einen Abschnitt unserer Ăberwachung: das ist eine Linie, oben â die Zeit zur Verarbeitung von Ereignissen, in der Mitte â die Anzahl der Transaktionen, unten â die Anzahl der Worker.Wenn man sich dieses Bild ansieht, gibt es einen Ausfall. Auf dem oberen Diagramm ist einer der Graphen nach 45 Sekunden abgestĂŒrzt â eines der Zahlungssysteme war ausgefallen. Hier wurde der Traffic ĂŒber 2 Minuten angezeigt und es gab einen Anstieg der Warteschlange bei einem anderen Zahlungssystem, bei dem es keine Worker gab (wir haben keine Ressourcen verbraucht â im Gegenteil, wir haben die Ressource korrekt genutzt). Wir wollten nicht ĂŒberlasten â dort gab es eine minimale Anzahl, ungefĂ€hr 5-10 Worker, aber sie konnten das nicht bewĂ€ltigen.
Im letzten Diagramm ist ein âBuckelâ zu sehen, der genau darauf hinweist, dass âSkalenoâ diese Anzahl verdoppelt hat. Und dann, als das Diagramm ein wenig gesunken ist, hat es ein wenig reduziert â die Anzahl der Worker wurde automatisch geĂ€ndert. So funktioniert dieses Teil. Wir haben ĂŒber Punkt Nr. 2 gesprochen â âWie man schnell die Ursachen beseitigtâ.
Ăberwachung. Wie erkennt man schnell ein Problem?
Jetzt der erste Punkt â âWie erkennt man schnell ein Problem?â Ăberwachung! Wir mĂŒssen bestimmte Dinge schnell verstehen. Welche Dinge mĂŒssen wir schnell verstehen?

Drei Dinge!- Wir mĂŒssen schnell verstehen und schnell die FunktionsfĂ€higkeit unserer eigenen Ressourcen erfassen.
- Wir mĂŒssen schnell erkennen, wenn etwas ausfĂ€llt, und die FunktionsfĂ€higkeit von Systemen ĂŒberwachen, die fĂŒr uns extern sind.
- Der dritte Punkt â das Erkennen von logischen Fehlern. Das ist, wenn das System bei Ihnen arbeitet, alle Anzeigen in Ordnung sind, aber etwas nicht stimmt.
Hier werde ich wahrscheinlich nicht viel Erstaunliches erzĂ€hlen. Ich werde Captain Offensichtlich sein. Wir haben geschaut, was auf dem Markt verfĂŒgbar ist. Wir haben einen âfröhlichen Zooâ erstellt. So sieht unser Zoo jetzt aus:

Wir verwenden âZabbixâ zur Ăberwachung von âHardwareâ, zur Ăberwachung der wichtigsten Serverkennzahlen. âOkmeterâ verwenden wir fĂŒr Datenbanken. âGrafanaâ und âPrometheusâ nutzen wir fĂŒr alle anderen Kennzahlen, die nicht in die ersten beiden passen, dabei teilweise â mit âGrafanaâ und âPrometheusâ, teilweise â âGrafanaâ mit âInfluxâ und Telegraf.Vor einem Jahr wollten wir New Relic verwenden. Eine groĂartige Sache, sie kann alles. Aber je mehr sie kann, desto teurer ist sie auch. Als wir auf 1.500 Server gewachsen sind, kam ein Anbieter zu uns und sagte: âLass uns einen Vertrag fĂŒr das nĂ€chste Jahr abschlieĂenâ. Wir sahen uns den Preis an und sagten, dass wir das nicht machen werden. Jetzt verzichten wir auf New Relic; wir haben noch etwa 15 Server, die unter New Relic ĂŒberwacht werden. Der Preis war einfach wahnsinnig.
Es gibt ein Tool, das wir selbst umgesetzt haben â den Debugger. Zuerst nannten wir ihn âBaggerâ, aber dann hatte wir einen Englischlehrer, der darĂŒber lauthals lachte, und wir benannten es um in âDebuggerâ. Was ist das? Es ist ein Tool, das innerhalb von 15-30 Sekunden auf jedem Komponent, wie ein âBlack Boxâ System, Tests auf die allgemeine FunktionsfĂ€higkeit des Komponenten durchfĂŒhrt.
Zum Beispiel, wenn die externe Seite (Zahlungsseite) â öffnet sie einfach und schaut, wie sie aussehen sollte. Wenn es sich um eine Verarbeitung handelt, fĂŒhrt es einen Testtransaktionsdurchlauf durch â prĂŒft, ob dieser âTransaktionsdurchlaufâ ankommt. Wenn es um die Verbindung zu Zahlungssystemen geht â senden wir entsprechend eine Testanfrage, wo wir können, und ĂŒberprĂŒfen, ob alles in Ordnung ist.
Welche Kennzahlen sind wichtig fĂŒr das Monitoring?
Was ĂŒberwachen wir hauptsĂ€chlich? Welche Kennzahlen sind fĂŒr uns wichtig?

- Reaktionszeit / RPS an den Fronten â eine sehr wichtige Kennzahl. Sie zeigt sofort an, dass etwas nicht stimmt.
- Anzahl der verarbeiteten Nachrichten in allen Warteschlangen.
- Anzahl der Worker.
- Wesentliche Metriken zur Richtigkeit.
Der letzte Punkt â eine âgeschĂ€ftlicheâ Metrik. Wenn Sie das Gleiche ĂŒberwachen möchten, mĂŒssen Sie eine oder zwei Metriken bestimmen, die fĂŒr Sie die wichtigsten Indikatoren sind. Eine solche Metrik bei uns ist die Durchsatzrate (das VerhĂ€ltnis erfolgreicher Transaktionen zum gesamten Transaktionsdurchfluss). Wenn sich daran alle 5-10-15 Minuten etwas Ă€ndert â haben wir Probleme (wenn es sich grundlegend Ă€ndert).
So sieht das bei uns aus â Beispiel eines unserer Dashboards:

Auf der linken Seite â 6 Grafiken, dies entspricht den Linien â die Anzahl der Mitarbeiter und die Anzahl der Nachrichten in den Warteschlangen. Auf der rechten Seite â RPS, RTS. Unten â die besagte "geschĂ€ftliche" Kennzahl. Und bei der "geschĂ€ftlichen" Kennzahl sehen wir sofort, dass auf den beiden mittleren Grafiken etwas nicht stimmt... Das ist genau das, was mit dem nĂ€chsten System passiert ist, das hinter uns steht.Zweitens mussten wir das Fallen externer Zahlungssysteme ĂŒberwachen. Hier haben wir OpenTracing verwendet â ein Mechanismus, ein Standard, ein Paradigma, das das Tracing verteilter Systeme ermöglicht; und wir haben es ein wenig verĂ€ndert. Das standardmĂ€Ăige OpenTracing-Paradigma besagt, dass wir das Tracing jeder einzelnen Anfrage erstellen. Das brauchten wir nicht, also haben wir es in ein summiertes, aggregiertes Tracing umgewandelt. Wir haben ein Tool entwickelt, das es uns ermöglicht, die Geschwindigkeit der Systeme zu ĂŒberwachen, die hinter uns stehen.

Das Diagramm zeigt uns, dass eines der Zahlungssysteme eine Antwortzeit von 3 Sekunden hat â wir haben Probleme. Dabei reagiert dieses System, sobald die Probleme beginnen, im Intervall von 20-30 Sekunden.Die dritte Fehlerklasse im Monitoring, die es gibt, ist das logische Monitoring.
Ehrlich gesagt wusste ich nicht, was ich auf diesem Slide zeichnen sollte, da wir lange nach einem passenden Produkt auf dem Markt gesucht haben. Wir haben nichts gefunden, also mussten wir es selbst machen.

Was meine ich mit logischem Monitoring? Nun, stellen Sie sich vor: Sie erstellen ein System (zum Beispiel einen Klon von "Tinder"); Sie haben es erstellt, gestartet. Erfolgreicher Manager Vasja Pupkin hat es auf seinem Telefon, sieht ein MĂ€dchen, liked sie... aber der Like geht nicht an das MĂ€dchen â der Like geht an Sicherheitsmann Michalitsch aus demselben Business-Center. Der Manager geht nach unten und fragt sich dann: âWarum lĂ€chelt dieser Sicherheitsmann Michalitsch ihm so angenehm zu?âIn solchen Situationen⊠Diese Situation klingt fĂŒr uns ein wenig anders, denn (ich habe geschrieben), es ist ein solcher Reputationsverlust, der indirekt zu finanziellen Verlusten fĂŒhrt. Bei uns ist die Situation umgekehrt: Wir können direkte finanzielle Verluste erleiden â zum Beispiel, wenn wir eine Transaktion als erfolgreich durchgefĂŒhrt haben, sie aber nicht erfolgreich war (oder umgekehrt). Wir mussten ein eigenes Tool schreiben, das die Anzahl erfolgreicher Transaktionen im Zeitverlauf anhand von GeschĂ€ftszahlen ĂŒberwacht. Wir haben nichts auf dem Markt gefunden! Genau diese Ăberlegung wollte ich vermitteln. FĂŒr die Lösung solcher Aufgaben gibt es nichts auf dem Markt.
Das war zur Frage, wie man Probleme schnell identifizieren kann.
Wie man die Ursachen des Deployments bestimmt
Die dritte Gruppe von Aufgaben, die wir lösen, besteht darin, nachdem wir das Problem identifiziert haben, nachdem wir es beseitigt haben, gut zu verstehen, warum dies passiert ist, um etwas fĂŒr die Entwicklung, das Testen zu tun. Entsprechend mĂŒssen wir Untersuchungen anstellen, wir mĂŒssen die Logs durchsehen.

Wenn wir ĂŒber Logs sprechen (der Hauptgrund sind die Logs), ist der gröĂte Teil der Logs bei uns im ELK-Stack â bei fast allen so. Manche haben vielleicht nicht ELK, aber wenn man Logs in Gigabyte schreibt, kommt man frĂŒher oder spĂ€ter zu ELK. Wir schreiben sie in Terabyte.
Hier gibt es ein Problem. Wir haben einen Fehler fĂŒr den Benutzer behoben, sind dargestellt worden, was da war, sind in "Kibana" gegangen, haben dort die Transaktions-ID eingegeben und eine solche Ansammlung erhalten (zeigt viel an). Und in diesem Dokument ist nichts klar zu erkennen. Warum? Weil es unklar ist, welcher Teil zu welchem Worker gehört, welcher Teil zu welchem Component gehört. In diesem Moment haben wir verstanden, dass wir eine Tracing-Lösung benötigen â das ist das OpenTracing, von dem ich sprach.Das haben wir vor einem Jahr gedacht, haben unseren Blick auf den Markt gerichtet, und dort gab es zwei Tools â das sind "Zipkin" und "Jaeger". "Jaeger" ist im Grunde der ideologische Nachfolger, der ideologische Fortsetzer von "Zipkin". Bei "Zipkin" ist alles gut, auĂer dass er nicht aggregieren kann, nicht die Logs in das Tracing einbeziehen kann, nur das Zeit-Tracking. Und "Jaeger" hat das unterstĂŒtzt.
Wir haben uns «Eger» angeschaut: Man kann Anwendungen instrumentieren, man kann in die API schreiben (die API-Norm fĂŒr PHP war damals noch nicht genehmigt â das war vor einem Jahr, aber jetzt ist sie genehmigt), aber es gab ĂŒberhaupt keinen Client. âOkayâ, dachten wir, und haben unseren eigenen Client geschrieben. Was haben wir erreicht? So sieht das ungefĂ€hr aus:

In «Eger» werden fĂŒr jede Nachricht Spans erstellt. Das heiĂt, wenn der Benutzer das System öffnet, sieht er ein oder zwei Blöcke fĂŒr jede eingehende Anfrage (1-2-3 â je nachdem, wie viele eingehende Anfragen vom Benutzer kamen, gibt es so viele Blöcke). Um es den Benutzern zu erleichtern, haben wir Tags zu den Logs und zur zeitlichen Nachverfolgung hinzugefĂŒgt. Im Falle eines Fehlers wird unsere Anwendung das Log mit dem entsprechenden Tag Error markieren. Man kann nach dem Tag Error filtern, und es werden nur die Spans angezeigt, die diesen Block mit dem Fehler enthalten. So sieht es aus, wenn wir einen Span ausklappen:
Innerhalb eines Spans gibt es eine Reihe von Traces. In diesem Fall sind das drei Test-Traces, und der dritte Trace sagt uns, dass ein Fehler aufgetreten ist. Dabei sehen wir hier auch die zeitliche Nachverfolgung: Oben haben wir eine Zeitachse, und wir sehen, in welchem Zeitintervall unser entsprechendes Log aufgezeichnet wurde.Dementsprechend ist es uns hervorragend gelungen. Wir haben eine eigene Erweiterung geschrieben und diese als Open Source veröffentlicht. Wenn Sie mit der Nachverfolgung arbeiten möchten, wenn Sie mit «Eger» in PHP arbeiten möchten â es gibt unsere Erweiterung, willkommen in der Nutzung, wie man so schön sagt:

Unsere Erweiterung ist ein Client fĂŒr die Nutzung der OpenTracing-API, erstellt als PHP-Extension, das heiĂt, Sie mĂŒssen es selbst zusammenstellen und in das System einfĂŒgen. Vor einem Jahr gab es nichts anderes. Jetzt sind noch andere Clients als Komponenten hinzugekommen. Hier liegt es an Ihnen: Entweder Sie laden die Komponenten mit Composer herunter, oder Sie verwenden die Extension â ganz wie Sie möchten.Unternehmensstandards
Wir haben ĂŒber die drei Gebote gesprochen. Das vierte Gebot besteht darin, die AnsĂ€tze zu standardisieren. Worum geht es dabei? Es geht ungefĂ€hr um Folgendes:

Warum steht hier das Wort «unternehmerisch»? Nicht weil wir ein groĂes oder bĂŒrokratisches Unternehmen sind, nein! Das Wort «unternehmerisch» wollte ich hier im Kontext verwenden, dass jedes Unternehmen, jedes Produkt seine eigenen Standards haben sollte, und das gilt auch fĂŒr Sie. Welche Standards haben wir?
- Wir haben eine Regelung fĂŒr Deployments. Ohne sie kommen wir nicht weiter, das ist unmöglich. Wir fĂŒhren etwa 60 Deployments pro Woche durch, das heiĂt, bei uns finden Deployments praktisch stĂ€ndig statt. Dabei haben wir zum Beispiel in der Regelung ein Verbot fĂŒr Deployments am Freitag â generell deployen wir nicht.
- Bei uns ist Dokumentation Pflicht. Kein neues Modul gelangt in die Produktion, wenn es keine Dokumentation gibt, selbst wenn es unter den HĂ€nden unserer RnD-Leute entstanden ist. Wir verlangen von ihnen eine Anleitung fĂŒr das Deployment, ein Monitoring-Diagramm und eine grobe Beschreibung (na ja, wie Programmierer es schreiben können) dessen, wie dieses Modul funktioniert, wie man es troubleshooten kann.
- Wir behandeln nicht die Ursache des Problems, sondern das Problem selbst â das habe ich bereits erwĂ€hnt. Es ist uns wichtig, den Nutzer von Problemen abzuschirmen.
- Wir haben Toleranzen. Zum Beispiel betrachten wir es nicht als Ausfall, wenn wir innerhalb von zwei Minuten 2 % des Traffics verloren haben. Das fÀllt grundsÀtzlich nicht in unsere Statistik. Wenn es prozentual oder zeitlich mehr ist, zÀhlen wir es bereits.
- Und wir schreiben immer Postmortems. Egal was passiert, jede Situation, in der sich etwas im Produktionsumfeld nicht normal verhĂ€lt, wird in einem Postmortem festgehalten. Ein Postmortem ist ein Dokument, in dem Sie aufschreiben, was passiert ist, eine detaillierte Zeitleiste, was Sie zur Behebung getan haben und (das ist ein obligatorischer Abschnitt!) was Sie tun werden, um solche VorfĂ€lle in Zukunft zu vermeiden. Das ist verpflichtend, erforderlich fĂŒr eine spĂ€tere Analyse.
Was zÀhlt als Ausfall?

Wozu hat das alles gefĂŒhrt?Das hat dazu gefĂŒhrt, dass (wir hatten gewisse Probleme mit der StabilitĂ€t, die uns und die Kunden nicht zufriedenstellten) unser StabilitĂ€tswert in den letzten 6 Monaten 99,97 betrug. Man kann sagen, dass das nicht viel ist. Ja, wir haben noch Luft nach oben. Von diesem Wert ist ungefĂ€hr die HĂ€lfte die StabilitĂ€t, die nicht wirklich unsere ist, sondern die unseres Web Application Firewalls, die uns vorgesetzt ist und als Dienst genutzt wird, aber das ist den Kunden egal.
Wir haben gelernt, nachts zu schlafen. Endlich! Vor einem halben Jahr konnten wir es nicht. Und an diesem Punkt möchte ich eine Bemerkung zu den Ergebnissen machen. Gestern Abend gab es einen groĂartigen Vortrag ĂŒber das Management eines Kernreaktors. Falls die Personen, die dieses System geschrieben haben, zuhören â bitte vergessen Sie, was ich ĂŒber â2% â das ist kein Ausfallâ gesagt habe. FĂŒr Sie sind 2 % ein Ausfall, selbst wenn es nur zwei Minuten lang ist!
Das ist alles! Ihre Fragen.

Ăber Load Balancer und Migration aus der Datenbank
Frage aus dem Publikum (im Folgenden â F): â Guten Abend. Vielen Dank fĂŒr diesen administrativen Vortrag! Die Frage ist kurz und betrifft Ihre Load Balancer. Sie haben erwĂ€hnt, dass Sie ein WAF haben, das heiĂt, ich verstehe, dass Sie als Load Balancer einen externen Dienst verwendenâŠ
EK: â Nein, als Load Balancer verwenden wir unsere eigenen Dienste. In diesem Fall ist das WAF fĂŒr uns ausschlieĂlich ein Instrument zum Schutz vor DDoS.
Frage: â Kann ich ein paar Worte ĂŒber die Load Balancer sagen?
EK: â Wie ich bereits sagte, handelt es sich um eine Gruppe von Servern in OpenResty. Wir haben derzeit 5 Gruppen von dedizierten Servern, die ausschlieĂlich⊠das heiĂt, der Server, auf dem nur OpenResty lĂ€uft, dient nur der Weiterleitung des Traffics. Um das VerstĂ€ndnis zu erleichtern, wie viel Traffic wir verarbeiten: Wir haben derzeit einen regulĂ€ren Traffic von mehreren Hundert Megabit. Sie kommen gut damit zurecht, sie sind nicht einmal gestresst.
Frage: â Auch eine einfache Frage. Es gibt Blue/Green Deployments. Was machen Sie zum Beispiel mit Migrationen aus der Datenbank?
EK: â Gute Frage! Sehen Sie, im Blue/Green Deployment haben wir separate Warteschlangen fĂŒr jede Linie. Das heiĂt, wenn wir ĂŒber Ereigniswarteschlangen sprechen, die von Worker zu Worker ĂŒbertragen werden, gibt es separate Warteschlangen fĂŒr die blaue und die grĂŒne Linie. Wenn wir ĂŒber die Datenbank selbst sprechen, haben wir diese absichtlich so weit wie möglich eingegrenzt und fast alles in Warteschlangen umgelegt. In der Datenbank speichern wir nur den Transaktionsstapel. Dieser Transaktionsstapel ist fĂŒr alle Linien identisch. BezĂŒglich der Datenbank in diesem Kontext: Wir teilen sie nicht in blau und grĂŒn auf, weil beide Codevarianten wissen mĂŒssen, was mit der Transaktion passiert.
Freunde, ich habe noch einen kleinen Preis fĂŒr Sie, um Sie anzuspornen â ein Buch. Und ich muss es fĂŒr die beste Frage ĂŒberreichen.
Frage: â Guten Tag. Vielen Dank fĂŒr den Vortrag. Die Frage ist folgende. Sie ĂŒberwachen Zahlungen, Sie ĂŒberwachen die Dienste, mit denen Sie kommunizieren⊠Aber wie ĂŒberwachen Sie, dass eine Person irgendwie auf Ihre Zahlungsseite gekommen ist, die Zahlung durchgefĂŒhrt hat und das Projekt ihr das Geld gutgeschrieben hat? Wie ĂŒberwachen Sie, dass der Merchant verfĂŒgbar ist und Ihr Callback angenommen hat?
EK: â Der âMerchantâ ist fĂŒr uns in diesem Fall genau derselbe externe Dienst wie die Zahlungsmethode. Wir ĂŒberwachen die Antwortgeschwindigkeit des Merchants.
Ăber die VerschlĂŒsselung der Datenbank
Frage: â Guten Tag. Ich hĂ€tte da eine kurze Frage. Sie haben sensible Daten gemÀà PCI DSS. Ich wollte wissen, wie Sie die PANs in den Warteschlangen speichern, die Sie weiterverarbeiten mĂŒssen? Verwenden Sie eine Art von VerschlĂŒsselung? Und die daraus resultierende zweite Frage: Laut PCI DSS mĂŒssen die Datenbanken regelmĂ€Ăig neu verschlĂŒsselt werden im Falle von Ănderungen (z.B. bei der Entlassung von Administratoren) â wie sieht es in diesem Fall mit der VerfĂŒgbarkeit aus?

EK: â Eine hervorragende Frage! ZunĂ€chst einmal speichern wir keine PANs in den Warteschlangen. Wir haben grundsĂ€tzlich nicht das Recht, PANs in offener Form irgendwo zu speichern, daher verwenden wir einen speziellen Dienst, den wir âKeydemonâ nennen â dies ist ein Dienst, der nur eines macht: er nimmt eine Nachricht entgegen und gibt eine verschlĂŒsselte Nachricht zurĂŒck. Und wir speichern alles in dieser verschlĂŒsselten Nachricht. Entsprechend haben wir eine SchlĂŒssellĂ€nge von etwa einem Kilobyte, damit das ernsthaft und sicher ist.Frage: â Braucht man jetzt bereits 2 Kilobyte?
EK: â Gestern waren es noch 256⊠Wo soll das noch hinfĂŒhren?!
Das ist das Erste. Und zweitens unterstĂŒtzt die vorhandene Lösung das Verfahren zur NeuverschlĂŒsselung â es gibt zwei Paare von KEKs (SchlĂŒsseln), die DEKs erzeugen, die verschlĂŒsseln (key ist der SchlĂŒssel, dek sind die derivativen SchlĂŒssel, die verschlĂŒsseln). Wenn das Verfahren initiiert wird (es lĂ€uft regelmĂ€Ăig, alle 3 Monate bis ± ein paar), laden wir ein neues Paar von KEKs hoch, und wir fĂŒhren die NeuverschlĂŒsselung der Daten durch. Wir haben separate Dienste, die alle Daten herausholen und neu verschlĂŒsseln; den Daten wird ein Identifikator des SchlĂŒssels zugeordnet, mit dem sie verschlĂŒsselt sind. Sobald die Daten mit den neuen SchlĂŒsseln verschlĂŒsselt sind, löschen wir die alten SchlĂŒssel.
Manchmal mĂŒssen Zahlungen manuell durchgefĂŒhrt werdenâŠ
Frage: â Das heiĂt, wenn eine RĂŒckerstattung fĂŒr eine bestimmte Transaktion eintritt, entschlĂŒsseln Sie vorerst mit dem alten SchlĂŒssel?
EK: â Ja.
Frage: â Dann noch eine kleine Frage. Wenn es zu einem Ausfall, einem Sturz oder einem Vorfall kommt, muss die Transaktion manuell angestoĂen werden. Solche Situationen gibt es.
EK: â Ja, die gibt es.
Frage: â Woher beziehen Sie diese Daten? Oder gehen Sie selbst mit den HĂ€nden in dieses Lager?
EK: â Nein, klar, wir haben ein gewisses Backoffice-System, das eine Schnittstelle fĂŒr unseren Support enthĂ€lt. Wenn wir nicht wissen, in welchem Status sich die Transaktion befindet (zum Beispiel solange das Zahlungssystem nicht mit einem Timeout antwortet) â wissen wir es grundsĂ€tzlich nicht, das heiĂt, wir weisen den finalen Status nur mit vollstĂ€ndiger Sicherheit zu. In diesem Fall stufen wir die Transaktion in einen speziellen Status fĂŒr die manuelle Bearbeitung ein. Am Morgen des nĂ€chsten Tages, sobald der Support die Information erhĂ€lt, dass im Zahlungssystem bestimmte Transaktionen offen geblieben sind, bearbeiten sie diese manuell in dieser Schnittstelle.

Frage: â Ich habe ein paar Fragen. Eine davon betrifft die Fortsetzung des PCI DSS: Wie exportieren Sie die Logs aus deren Umgebung? Die Frage ergibt sich, weil der Entwickler beliebige Daten in die Logs eintragen könnte! Die zweite Frage: Wie fĂŒhren Sie Hotfixes durch? Manuell in der Datenbank â das ist eine Möglichkeit, aber es könnte auch kostenlose Hotfixes geben â wie ist da die Vorgehensweise? Und die dritte Frage hĂ€ngt wahrscheinlich mit RTO, RPO zusammen. Ihre VerfĂŒgbarkeit betrug 99,97, also fast vier Neunen, aber ich verstehe, dass Sie auch ein zweites, drittes und fĂŒnftes Rechenzentrum haben⊠Wie synchronisieren und replizieren Sie diese, wie handelt man den Rest?EK: â Lassen Sie uns mit der ersten Frage beginnen. War die erste Frage ĂŒber die Logs? Wenn wir Logs schreiben, gibt es eine Schicht, die alle sensiblen Daten maskiert. Sie prĂŒft anhand einer Maske und zusĂ€tzlicher Felder. Folglich gelangen die Logs bereits mit maskierten Daten und im PCI DSS-Umfeld in die Auswertung. Das ist eine der regelmĂ€Ăigen Aufgaben, die der Testabteilung zugewiesen sind. Sie mĂŒssen jede Aufgabe auch hinsichtlich der Logs prĂŒfen, die sie erstellen, und das ist eine regelmĂ€Ăige Aufgabe bei Code-Reviews, um zu kontrollieren, dass der Entwickler nichts UnzulĂ€ssiges aufzeichnet. Die nachfolgende ĂberprĂŒfung wird etwa einmal pro Woche regelmĂ€Ăig von der Abteilung fĂŒr Informationssicherheit durchgefĂŒhrt: Es werden stichprobenartig die Logs des letzten Tages entnommen und durch einen speziellen Scanner-Analysator von Testservern geprĂŒft, um alles zu ĂŒberprĂŒfen.
Ăber Hotfixes. Dies ist in unseren Deployment-Richtlinien enthalten. Wir haben einen speziellen Punkt ĂŒber Hotfixes. Wir sind der Meinung, dass wir Hotfixes rund um die Uhr bereitstellen, wann immer wir es benötigen. Sobald die Version erstellt und getestet ist und wir ein Artefakt haben, wird ein diensthabender Systemadministrator auf einen Anruf vom Support hin aktiv und deployt es genau dann, wenn es nötig ist.Ăber die "vier Neunen". Die Zahl, die wir derzeit haben, wurde tatsĂ€chlich erreicht, und wir haben dies auch in einem anderen Rechenzentrum angestrebt. Jetzt haben wir ein zweites Rechenzentrum und beginnen, zwischen ihnen zu routen. Die Frage der Cross-Rechenzentrum-Replikation ist wirklich eine nicht triviale. Wir haben versucht, es damals mit verschiedenen Mitteln zu lösen: Wir haben versucht, dasselbe "Tarantula" zu verwenden â das hat bei uns nicht funktioniert, sage ich gleich. Deshalb sind wir zu der Entscheidung gekommen, dass wir die "Sensa" manuell bestellen. Jedes unserer Anwendungen fĂŒhrt tatsĂ€chlich die notwendige asynchrone Synchronisation "change â done" zwischen den Rechenzentren aus.
Frage: â Wenn ihr das zweite habt, warum gibt es dann kein drittes? Weil Split-Brain ...
EK: â Wir haben kein "Split-Brain". Da jede unserer Anwendungen ein Multi-Master-System verwendet, ist es fĂŒr uns egal, in welches Rechenzentrum die Anfrage eingegangen ist. Wir sind darauf vorbereitet, dass, wenn unser erstes Rechenzentrum ausfĂ€llt (darauf legen wir Wert) und wir in der Mitte des Benutzeranfrages auf das zweite Rechenzentrum umschalten, wir tatsĂ€chlich diesen Benutzer verlieren können; aber das werden nur absolute Einzelereignisse sein.
Frage: â Guten Abend. Danke fĂŒr den Vortrag. Sie haben von Ihrem Debugger gesprochen, der in der Produktion einige Testtransaktionen ausfĂŒhrt. Können Sie uns mehr ĂŒber die Testtransaktionen erzĂ€hlen? Wie tief geht es da?
EK: â Es durchlĂ€uft den vollstĂ€ndigen Zyklus der gesamten Komponente. FĂŒr die Komponente gibt es keinen Unterschied zwischen einer Testtransaktion und einer produktiven Transaktion. Aus Sicht der Logik ist es einfach ein separates Projekt im System, auf dem nur Testtransaktionen durchgefĂŒhrt werden.
Frage: â Wo schneiden Sie sie ab? Core hat gesendet...
EK: â In diesem Fall ŃлДЎŃĐ”ĐŒ wir fĂŒr die Testtransaktionen nach "Core"... Wir haben ein Konzept, das Routing heiĂt: "Core" weiĂ, in welches Zahlungssystem es senden muss â wir senden es an ein falsches Zahlungssystem, das einfach eine http-Antwort liefert und das war's.
Frage: â Sagen Sie bitte, ist Ihre Anwendung als ein groĂes Monolith geschrieben oder haben Sie sie in einige Dienste oder sogar Mikrodienste unterteilt?
EK: â Wir haben natĂŒrlich keinen Monolithen, unser System ist serviceorientiert. Es gibt einen Scherz, dass wir Monolith-Service haben â sie sind tatsĂ€chlich ziemlich groĂ. Es wĂ€re nicht korrekt, sie als Mikrodienste zu bezeichnen, aber es sind definitiv Dienste, in denen Arbeiter auf verteilten Maschinen arbeiten.
Wenn der Dienst auf dem Server kompromittiert istâŠ
Frage: â Dann habe ich die nĂ€chste Frage. Selbst wenn es ein Monolith gewesen wĂ€re, haben Sie trotzdem gesagt, dass Sie viele dieser Instant-Server haben, die im Grunde genommen Daten verarbeiten, und die Frage ist: âBei der Kompromittierung eines der Instant-Server oder einer Anwendung, eines bestimmten Elements, gibt es dort eine Art Zugriffskontrolle? Wer kann was tun? An wen kann man sich wenden, um welche Daten zu erhalten?

EK: â Ja, zweifellos. Die Sicherheitsanforderungen sind ziemlich streng. Erstens haben wir offene Datenbewegungen, und die Ports sind nur die, von denen wir im Voraus den Datenverkehr erwarten. Wenn ein Komponenten mit der Datenbank (sagen wir, mit MySQL) ĂŒber 5-4-3-2 kommuniziert, werden nur 5-4-3-2 geöffnet, und andere Ports, andere Verkehrsrichtungen werden nicht zugĂ€nglich sein. DarĂŒber hinaus muss man verstehen, dass es in der Produktion etwa 10 verschiedene Sicherheitszonen gibt. Und selbst wenn die Anwendung irgendwie kompromittiert wurde, Gott bewahre, kann der Angreifer keinen Zugang zur Server-Management-Konsole erhalten, weil dies eine andere Sicherheitszone ist.Frage: â In diesem Zusammenhang interessiert mich mehr der Punkt, dass Sie ja VertrĂ€ge mit den Diensten haben â was sie tun dĂŒrfen, ĂŒber welche âAktionenâ sie miteinander kommunizieren können... In einem normalen Ablauf fragen bestimmte Dienste eine Reihe von âAktionenâ von einem anderen an. GegenĂŒber anderen wenden sie sich normalerweise nicht, und sie haben andere Verantwortungsbereiche. Wenn jedoch einer von ihnen kompromittiert wird, kann er dann die âAktionenâ des anderen Dienstes auslösen?...
EK: â Ich verstehe. Wenn in einer normalen Situation mit einem anderen Server die Kommunikation ĂŒberhaupt erlaubt war, dann â ja. Laut SLA-Vertrag monitorieren wir nicht, dass dir nur die ersten 3 "Aktionen" erlaubt sind, wĂ€hrend dir die 4. "Aktion" nicht gestattet ist. Das ist fĂŒr uns wahrscheinlich ĂŒberflĂŒssig, da wir sowieso ein 4-stufiges Schutzsystem fĂŒr die Konturen haben. Wir ziehen es vor, durch Konturen zu schĂŒtzen und nicht auf der Ebene der Inneren.
Wie Visa, MasterCard und "Sberbank" funktionieren
Frage: â Ich möchte den Punkt klĂ€ren, wie der Benutzer von einem Rechenzentrum zu einem anderen wechselt. Soweit ich weiĂ, arbeiten "Visa" und "MasterCard" nach dem binĂ€ren synchronen Protokoll 8583, und dort gibt es Mixe. Ich wollte wissen, ob sich die Umschaltung jetzt direkt auf "Visa" und "MasterCard" bezieht oder bis zu den Zahlungssystemen, bis hin zu den Prozessoren?
EK: â Das sind bis zu den Mixen. Mixe haben wir in einem Rechenzentrum.
Frage: â Im GroĂen und Ganzen habt ihr einen einzigen Verbindungspunkt?
EK: â FĂŒr "Visa" und "MasterCard" â ja. Einfach weil "Visa" und "MasterCard" erhebliche Investitionen in die Infrastruktur erfordern, um separate VertrĂ€ge fĂŒr den Erhalt eines zweiten Paares von Mixen abzuschlieĂen, zum Beispiel. Sie sind im Rahmen eines Rechenzentrums reserviert, aber falls unser Rechenzentrum, Gott bewahre, ausfĂ€llt, wo die Mixe fĂŒr die Verbindung zu "Visa" und "MasterCard" stehen, wird die Verbindung zu "Visa" und "MasterCard" verloren gehen...
Frage: â Wie können sie reserviert sein? Ich weiĂ, dass "Visa" grundsĂ€tzlich nur eine Verbindung erlaubt!
EK: â Sie liefern die AusrĂŒstung selbst. Auf jeden Fall haben wir AusrĂŒstung erhalten, die intern redundanten Schutz hat.
Frage: â Das heiĂt, das Rack von ihren Connects Orange..?
EK: â Ja.
Frage: â Wie ist es in diesem Fall: Wenn euer Rechenzentrum ausfĂ€llt, wie geht es dann weiter? Oder stoppt einfach der Verkehr?
EK: â Nein. In diesem Fall schalten wir einfach den Verkehr auf einen anderen Kanal um, der uns natĂŒrlich teurer sein wird und auch teurer fĂŒr die Kunden. Aber der Verkehr wird nicht ĂŒber unsere direkte Verbindung zu "Visa", "MasterCard" gehen, sondern ĂŒber eine hypothetische "Sberbank" (sehr vereinfacht).
Ich entschuldige mich vielmals, falls ich Mitarbeiter von "Sberbank" beleidigt habe. Aber laut unserer Statistik fÀllt "Sberbank" am hÀufigsten im Vergleich zu anderen russischen Banken aus. Kein Monat vergeht, ohne dass bei "Sberbank" irgendetwas ausfÀllt.


Ein wenig Werbung đ
Danke, dass Sie bei uns bleiben. Gefallen Ihnen unsere Artikel? Möchten Sie mehr interessante Inhalte sehen? UnterstĂŒtzen Sie uns, indem Sie eine Bestellung aufgeben oder uns Freunden empfehlen, , ein einzigartiges Ăquivalent zu Einsteigerservern, das wir fĂŒr Sie entwickelt haben: (es sind Optionen mit RAID1 und RAID10 bis zu 24 Kernen und bis zu 40GB DDR4 verfĂŒgbar).
Dell R730xd ist im Equinix Tier IV Rechenzentrum in Amsterdam doppelt so gĂŒnstig? Nur bei uns in den Niederlanden! Dell R420 â 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB â ab $99! Lesen Sie, wie
Quelle: habr.com


























