Der Betrieb einer skalierbaren verteilten Plattform erfordert ein Engagement für Zuverlässigkeit, um sicherzustellen, dass Kunden das haben, was sie brauchen, wenn sie es brauchen. Die Abhängigkeiten könnten ziemlich kompliziert sein, insbesondere bei einer so großen Plattform wie Roblox. Das Erstellen zuverlässiger Dienste bedeutet, dass unabhängig von der Komplexität und dem Status von Abhängigkeiten kein bestimmter Dienst unterbrochen wird (d. h. hochgradig verfügbar), läuft fehlerfrei (d. h. hoch Qualität) und ohne Fehler (dh Fehlertoleranz).
Warum Zuverlässigkeit wichtig ist
Unser Account Identity-Team ist bestrebt, eine höhere Zuverlässigkeit zu erreichen, da die von uns erstellten Compliance-Services Kernkomponenten der Plattform sind. Eine gebrochene Compliance kann schwerwiegende Folgen haben. Die Kosten für die Blockierung des natürlichen Betriebs von Roblox sind sehr hoch, da zusätzliche Ressourcen zur Wiederherstellung nach einem Ausfall und einer geschwächten Benutzererfahrung erforderlich sind.
Der typische Ansatz zur Zuverlässigkeit konzentriert sich hauptsächlich auf die Verfügbarkeit, aber in einigen Fällen werden Begriffe gemischt und falsch verwendet. Die meisten Verfügbarkeitsmessungen bewerten nur, ob Dienste betriebsbereit sind, während Aspekte wie Partitionstoleranz und -konsistenz manchmal vergessen oder missverstanden werden.
Gemäß dem CAP-Theorem kann jedes verteilte System nur zwei dieser drei Aspekte garantieren, sodass unsere Compliance-Services etwas Konsistenz opfern, um hochverfügbar und partitionstolerant zu sein. Trotzdem haben unsere Dienste wenig geopfert und Mechanismen gefunden, um mit angemessenen architektonischen Änderungen, die unten erläutert werden, eine gute Konsistenz zu erreichen.
Der Prozess zum Erreichen einer höheren Zuverlässigkeit ist iterativ, wobei enge Messungen mit kontinuierlicher Arbeit übereinstimmen, um Fehler zu verhindern, zu finden, zu erkennen und zu beheben, bevor Zwischenfälle auftreten. Unser Team hat in den folgenden Praktiken einen starken Wert identifiziert:
- Richtige Messung – Erstellen Sie eine vollständige Beobachtbarkeit darüber, wie Qualität an Kunden geliefert wird und wie Abhängigkeiten uns Qualität liefern.
- Proaktive Antizipation – Führen Sie Aktivitäten wie Architekturüberprüfungen und Abhängigkeitsrisikobewertungen durch.
- Priorisieren Sie die Korrektur – Lenken Sie die Aufmerksamkeit stärker auf die Lösung von Vorfallberichten für den Dienst und Abhängigkeiten, die mit unserem Dienst verknüpft sind.
Der Aufbau einer höheren Zuverlässigkeit erfordert eine Kultur der Qualität. Unser Team hat bereits in leistungsorientierte Entwicklung investiert und weiß, dass der Erfolg eines Prozesses von seiner Einführung abhängt. Das Team hat diesen Prozess vollständig übernommen und die Praktiken als Standard angewendet. Das folgende Diagramm hebt die Komponenten des Prozesses hervor:
Die Macht der richtigen Messung
Bevor wir tiefer in die Metriken eintauchen, gibt es eine kurze Klarstellung bezüglich der Service-Level-Messungen.
- SLO (Service Level Objective) ist das Zuverlässigkeitsziel, das unser Team anstrebt (dh 99.999 %).
- SLI (Service Level Indicator) ist die erreichte Zuverlässigkeit in einem Zeitrahmen (zB 99.975 % im letzten Februar).
- SLA (Service Level Agreement) ist die vereinbarte und von unseren Verbrauchern erwartete Zuverlässigkeit in einem bestimmten Zeitrahmen (dh 99.99 % pro Woche).
Der SLI sollte die Verfügbarkeit (keine unbehandelten oder fehlenden Antworten), die Fehlertoleranz (keine Dienstfehler) und die erreichte Qualität (keine unerwarteten Fehler) widerspiegeln. Daher haben wir unseren SLI als das „Erfolgsverhältnis“ erfolgreicher Antworten im Vergleich zu den gesamten an einen Dienst gesendeten Anfragen definiert. Erfolgreiche Antworten sind solche Anfragen, die rechtzeitig und formgerecht versendet wurden, also nein Konnektivitäts-, Service- oder unerwartete Fehler sind aufgetreten.
Dieser SLI oder Success Ratio wird aus Sicht der Verbraucher (dh Kunden) erhoben. Die Absicht besteht darin, die tatsächliche End-to-End-Erfahrung zu messen, die unseren Verbrauchern geboten wird, damit wir sicher sein können, dass SLAs erfüllt werden. Andernfalls würde ein falsches Gefühl der Zuverlässigkeit entstehen, das alle Infrastrukturbedenken für die Verbindung mit unseren Kunden ignoriert. Ähnlich wie beim Verbraucher-SLI erfassen wir den Abhängigkeits-SLI, um potenzielle Risiken zu verfolgen. In der Praxis sollten alle Abhängigkeits-SLAs mit den Dienst-SLAs übereinstimmen, und es besteht eine direkte Abhängigkeit mit ihnen. Das Scheitern eines Menschen impliziert das Scheitern aller. Wir verfolgen und melden auch Metriken des Dienstes selbst (dh des Servers), aber dies ist nicht die praktische Quelle für hohe Zuverlässigkeit.
Zusätzlich zu den SLIs sammelt jeder Build Qualitätsmetriken, die von unserem CI-Workflow gemeldet werden. Diese Praxis hilft dabei, Quality Gates (dh Codeabdeckung) stark durchzusetzen und andere aussagekräftige Metriken zu melden, wie z. B. die Einhaltung von Codierungsstandards und die statische Codeanalyse. Dieses Thema wurde bereits in einem anderen Artikel behandelt, Aufbau von leistungsorientierten Microservices. Wenn wir über Zuverlässigkeit sprechen, summiert sich die sorgfältige Beachtung der Qualität, denn je mehr wir investieren, um hervorragende Ergebnisse zu erzielen, desto sicherer sind wir, dass das System auch unter widrigen Bedingungen nicht ausfällt.
Unser Team hat zwei Dashboards. One liefert alle Einblicke sowohl in das Consumers SLI als auch in das Dependencies SLI. Die zweite zeigt alle Qualitätsmetriken. Wir arbeiten daran, alles in einem einzigen Dashboard zusammenzuführen, sodass alle Aspekte, die uns wichtig sind, konsolidiert und bereit sind, innerhalb eines bestimmten Zeitrahmens gemeldet zu werden.
Antizipieren Sie Fehler
Tun Architekturbewertungen ist ein wesentlicher Bestandteil von Zuverlässigkeit. Zuerst bestimmen wir, ob Redundanz vorhanden ist und ob der Dienst über die Mittel verfügt, um zu überleben, wenn Abhängigkeiten nachlassen. Über die typischen Replikationsideen hinaus haben die meisten unserer Dienste verbesserte Dual-Cache-Hydratationstechniken, Dual-Wiederherstellungsstrategien (z. B. lokale Failover-Warteschlangen) oder Datenverluststrategien (z. B. Transaktionsunterstützung) angewendet. Diese Themen sind umfangreich genug, um einen weiteren Blogeintrag zu rechtfertigen, aber letztendlich ist die beste Empfehlung, Ideen zu implementieren, die Katastrophenszenarien berücksichtigen und Leistungseinbußen minimieren.
Ein weiterer wichtiger Aspekt ist alles, was die Konnektivität verbessern könnte. Das bedeutet, aggressiv auf niedrige Latenz für Clients zu achten und sie mithilfe von Cache-Kontrolltechniken, Sidecars und leistungsstarken Richtlinien für Timeouts, Circuit Breaker und Wiederholungen auf sehr hohen Datenverkehr vorzubereiten. Diese Praktiken gelten für alle Clients, einschließlich Caches, Stores, Warteschlangen und voneinander abhängige Clients in HTTP und gRPC. Es bedeutet auch, gesunde Signale von den Diensten zu verbessern und zu verstehen, dass Zustandsprüfungen eine wichtige Rolle bei der gesamten Container-Orchestrierung spielen. Die meisten unserer Dienste geben im Rahmen des Health-Check-Feedbacks bessere Signale für die Verschlechterung aus und überprüfen, ob alle kritischen Komponenten funktionsfähig sind, bevor sie fehlerfreie Signale senden.
Die Aufteilung von Services in kritische und nicht kritische Teile hat sich als nützlich erwiesen, um sich auf die Funktionalität zu konzentrieren, die am wichtigsten ist. Früher hatten wir nur für Administratoren bestimmte Endpunkte im selben Dienst, und obwohl sie nicht oft verwendet wurden, wirkten sie sich auf die gesamten Latenzmetriken aus. Die Umstellung auf einen eigenen Dienst wirkte sich positiv auf alle Messwerte aus.
Abhängigkeitsrisikobewertung ist ein wichtiges Werkzeug, um potenzielle Probleme mit Abhängigkeiten zu identifizieren. Das bedeutet, dass wir Abhängigkeiten mit niedrigem SLI identifizieren und nach einer SLA-Anpassung fragen. Diese Abhängigkeiten erfordern während der Integrationsschritte besondere Aufmerksamkeit, daher widmen wir zusätzliche Zeit dem Benchmarking und dem Testen, ob die neuen Abhängigkeiten für unsere Pläne ausgereift genug sind. Ein gutes Beispiel ist die frühe Einführung von Roblox Storage-as-a-Service. Die Integration mit diesem Dienst erforderte das Einreichen von Fehlertickets und regelmäßige Synchronisierungsmeetings, um Ergebnisse und Feedback zu kommunizieren. Alle diese Arbeiten verwenden das Tag „Zuverlässigkeit“, damit wir ihre Quelle und Prioritäten schnell identifizieren können. Die Charakterisierung geschah oft, bis wir sicher waren, dass die neue Abhängigkeit für uns bereit war. Diese zusätzliche Arbeit hat dazu beigetragen, die Abhängigkeit auf das erforderliche Maß an Zuverlässigkeit zu bringen, von dem wir erwarten, dass wir gemeinsam für ein gemeinsames Ziel handeln.
Bring Struktur ins Chaos
Es ist nie wünschenswert, Zwischenfälle zu haben. Aber wenn sie passieren, gibt es aussagekräftige Informationen zu sammeln und daraus zu lernen, um zuverlässiger zu sein. Unser Team verfügt über einen Teamvorfallbericht, der über den typischen unternehmensweiten Bericht hinausgeht, sodass wir uns auf alle Vorfälle konzentrieren, unabhängig vom Ausmaß ihrer Auswirkungen. Wir nennen die Grundursache und priorisieren alle Arbeiten, um sie in Zukunft zu mindern. Als Teil dieses Berichts rufen wir andere Teams hinzu, um Abhängigkeitsvorfälle mit hoher Priorität zu beheben, eine ordnungsgemäße Lösung vorzunehmen, zurückzublicken und nach Mustern zu suchen, die auf uns zutreffen könnten.
Das Team produziert a Monatlicher Zuverlässigkeitsbericht pro Dienst Dazu gehören alle hier erläuterten SLIs, alle Tickets, die wir aufgrund der Zuverlässigkeit geöffnet haben, und alle möglichen Vorfälle im Zusammenhang mit dem Dienst. Wir sind so daran gewöhnt, diese Berichte zu erstellen, dass der nächste natürliche Schritt darin besteht, ihre Extraktion zu automatisieren. Diese regelmäßige Aktivität ist wichtig und erinnert daran, dass die Zuverlässigkeit in unserer Entwicklung ständig verfolgt und berücksichtigt wird.
Unsere Instrumentierung umfasst benutzerdefinierte Metriken und verbesserte Warnungen, damit wir so schnell wie möglich benachrichtigt werden, wenn bekannte und erwartete Probleme auftreten. Alle Warnungen, einschließlich Fehlalarme, werden jede Woche überprüft. An diesem Punkt ist es wichtig, die gesamte Dokumentation zu optimieren, damit unsere Verbraucher wissen, was sie zu erwarten haben, wenn Warnungen ausgelöst werden und wenn Fehler auftreten, und dann weiß jeder, was zu tun ist (z. B. Playbooks und Integrationsrichtlinien werden häufig angepasst und aktualisiert).
Letztlich Die Aufnahme von Qualität in unsere Kultur ist der kritischste und entscheidende Faktor, um eine höhere Zuverlässigkeit zu erreichen. Wir können beobachten, dass sich diese Praktiken in unserer täglichen Arbeit bereits auszahlen. Unser Team ist von Zuverlässigkeit besessen und das ist unsere wichtigste Errungenschaft. Wir haben unser Bewusstsein dafür geschärft, welche Auswirkungen potenzielle Mängel haben könnten und wann sie eingeführt werden könnten. Dienste, die diese Praktiken implementiert haben, haben ihre SLOs und SLAs konsequent erreicht. Die Zuverlässigkeitsberichte, die uns dabei helfen, die gesamte von uns geleistete Arbeit zu verfolgen, sind ein Beweis für die Arbeit, die unser Team geleistet hat, und stellen eine unschätzbare Lektion dar, um andere Teams zu informieren und zu beeinflussen. So berührt die Zuverlässigkeitskultur alle Komponenten unserer Plattform.
Der Weg zu höherer Zuverlässigkeit ist nicht einfach, aber er ist notwendig, wenn Sie eine vertrauenswürdige Plattform aufbauen möchten, die neu definiert, wie Menschen zusammenkommen.
Alberto ist Principal Software Engineer im Account Identity-Team bei Roblox. Er ist seit langem in der Spielebranche tätig, mit Credits für viele AAA-Spieletitel und Social-Media-Plattformen mit einem starken Fokus auf hochskalierbare Architekturen. Jetzt hilft er Roblox, Wachstum und Reife zu erreichen, indem er bewährte Entwicklungsmethoden anwendet.
Die Post Bereitstellung von Plattformzuverlässigkeit im großen Maßstab erschien zuerst auf Roblox-Blog.
- "
- a
- Über Uns
- Konto
- Erreichen
- erreicht
- Aktivitäten
- Aktivität
- Zusatz
- Zusätzliche
- Adoption
- Neben
- Zustimmung
- Alle
- bereits
- Analyse
- Ein anderer
- erwarten
- angewandt
- Bewerbung
- Anwendung
- Ansatz
- architektonisch
- um
- Artikel
- damit verbundenen
- Aufmerksamkeit
- automatisieren
- Verfügbarkeit
- verfügbar
- Bewusstsein
- weil
- Bevor
- Sein
- unten
- Benchmark
- BESTE
- Beyond
- Blog
- bringen
- Fehler
- bauen
- rufen Sie uns an!
- österreichische Unternehmen
- Fälle
- Verursachen
- Schecks
- Kunden
- Code
- Programmierung
- sammeln
- wie die
- verpflichten
- Engagement
- begangen
- gemeinsam
- mit uns kommunizieren,
- verglichen
- Compliance
- Komponenten
- Bedingungen
- Vertrauen
- zuversichtlich
- Vernetz Dich
- Konnektivität
- Geht davon
- ständig
- Verbraucher
- KUNDEN
- Container
- Kernbereich
- könnte
- erstellen
- erstellt
- Credits
- kritischem
- Kultur
- Original
- Kunden
- Armaturenbrett
- technische Daten
- tiefer
- geliefert
- liefern
- liefert
- Anforderungen
- hängt
- Bestimmen
- Entwicklung
- Direkt
- Katastrophe
- verteilt
- nach unten
- angetrieben
- im
- Früh
- End-to-End
- Ingenieur
- insbesondere
- jedermann
- alles
- Beispiel
- Ausgezeichnet
- erwarten
- erwartet
- ERFAHRUNGEN
- umfangreiche
- Scheitern
- Feedback
- Vorname
- Fixieren
- Setzen Sie mit Achtsamkeit
- konzentriert
- Fokussierung
- folgen
- Folgende
- unten stehende Formular
- gefunden
- für
- voller
- funktional
- Funktionalität
- fundamental
- Zukunft
- Spiel
- Gates
- Erzeugung
- Kundenziele
- gut
- Wachstum
- Garantie
- Richtlinien
- passieren
- passiert
- Gesundheit
- Hilfe
- Unternehmen
- hilft
- hier
- GUTE
- höher
- Highlights
- hoch
- Ultraschall
- HTTPS
- Ideen
- identifizieren
- Identitätsschutz
- Impact der HXNUMXO Observatorien
- implementieren
- umgesetzt
- wichtig
- zu unterstützen,
- verbessert
- Verbesserung
- In anderen
- Dazu gehören
- Einschließlich
- hat
- Energiegewinnung
- beeinflussen
- Information
- Infrastruktur
- Integration
- Absicht
- Investitionen
- IT
- selbst
- Wissen
- bekannt
- LERNEN
- Niveau
- wenig
- aus einer regionalen
- Lang
- aussehen
- um
- Abstimmung
- Angelegenheiten
- reifen
- Reife
- Bedeutung
- sinnvoll
- Mittel
- messen
- Medien
- Tagungen
- Metrik
- gemischt
- mehr
- vor allem warme
- ziehen um
- Natürliche
- notwendig,
- dennoch
- betreiben
- Betrieb
- Orchesterbearbeitung
- Auftrag
- Andere
- Gesamt-
- besitzen
- Teil
- Personen
- Leistung
- Stücke
- Pläne
- Plattform
- Plattformen
- Play
- Points
- Perspektive
- Politik durchzulesen
- positiv
- möglich
- Potenzial
- Werkzeuge
- Praxis
- Gegenwart
- Principal
- Prioritätsliste
- Probleme
- Prozessdefinierung
- Qualität
- Direkt
- schnell
- erreichen
- vernünftig
- Entspannung
- Erholung
- reflektieren
- in Bezug auf
- zuverlässig
- berichten
- Meldungen
- Zugriffe
- falls angefordert
- Downloads
- Bewertungen
- Risiko
- Straße
- Roblox
- Rollen
- Wurzel
- Laufen
- gleich
- skalierbaren
- Skalieren
- Sinn
- Lösungen
- ähnlich
- da
- Single
- So
- Social Media
- Social Media
- Social-Media-Plattformen
- Software
- Software IngenieurIn
- einige
- besondere
- Stand
- Standard
- Status
- Läden
- Strategien
- stark
- Erfolg
- erfolgreich
- Support
- System
- sprechen
- Team
- Techniken
- AGB
- Test
- Das
- deswegen
- nach drei
- Tickets
- Zeit
- Zeitplan
- gemeinsam
- Toleranz
- Werkzeug
- Thema
- Themen
- verfolgen sind
- der Verkehr
- Verständnis
- us
- Wert
- überprüfen
- Anzeigen
- Sichtbarkeit
- Woche
- Was
- ob
- während
- ohne
- Arbeiten
- arbeiten,
- würde