{"id":79153,"date":"2020-04-24T19:42:43","date_gmt":"2020-04-24T17:42:43","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/istoriya-sozdaniya-oblachnogo-servisa-pripravlennaya-kiberpankom"},"modified":"2020-04-24T19:42:43","modified_gmt":"2020-04-24T17:42:43","slug":"istoriya-sozdaniya-oblachnogo-servisa-pripravlennaya-kiberpankom","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/istoriya-sozdaniya-oblachnogo-servisa-pripravlennaya-kiberpankom","title":{"rendered":"Die Entstehungsgeschichte des Cloud-Dienstes, gew\u00fcrzt mit Cyberpunk.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Die Entstehungsgeschichte des Cloud-Dienstes, gew\u00fcrzt mit Cyberpunk.\" src=\"\/wp-content\/uploads\/2020\/04\/d1cad1dfa3513b5794c7be916a9dbb4b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mit zunehmender Berufserfahrung in der IT beginnt man zu bemerken, dass Systeme ihren eigenen Charakter haben. Sie k\u00f6nnen freundlich, still, launisch oder streng sein. Sie k\u00f6nnen anziehend oder absto\u00dfend wirken. So oder so muss man \"Verhandlungen\" mit ihnen f\u00fchren, zwischen \"unterseeischen Felsen\" navigieren und ihre Interaktionsketten aufbauen.<\/p>\n<p><\/p>\n<p>So wurde uns die Ehre zuteil, eine Cloud-Plattform zu erstellen, und daf\u00fcr mussten wir ein paar Teilsysteme \"\u00fcberzeugen\", mit uns zu arbeiten. Gl\u00fccklicherweise haben wir die \"API-Sprache\", geschickte H\u00e4nde und eine Menge Enthusiasmus. <\/p>\n<p><\/p>\n<p>In diesem Artikel wird es keinen technischen Hardcore geben, aber es wird eine Beschreibung der Probleme geben, mit denen wir beim Aufbau der Cloud konfrontiert waren. Ich habe mich entschieden, unseren Weg in Form einer leichten technischen Fantasie zu beschreiben, wie wir eine gemeinsame Sprache mit den Systemen gefunden haben und was daraus geworden ist. <\/p>\n<p><\/p>\n<p>Willkommen unter dem Cut.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><\/p>\n<h3 id=\"nachalo-puti\">Der Beginn des Weges<\/h3>\n<p><\/p>\n<p>Vor einiger Zeit wurde unser Team mit der Aufgabe betraut, eine Cloud-Plattform f\u00fcr unsere Kunden zu starten. Uns standen die Unterst\u00fctzung des Managements, Ressourcen, Hardware-Stack und die Freiheit bei der Auswahl der Technologien zur Verf\u00fcgung, um den Softwareteil des Dienstes zu realisieren.<\/p>\n<p><\/p>\n<p>Es gab auch eine Reihe von Anforderungen:<\/p>\n<p><\/p>\n<ul>\n<li>der Dienst ben\u00f6tigt ein benutzerfreundliches pers\u00f6nliches Konto;<\/li>\n<li>die Plattform muss in das bestehende Abrechnungssystem integriert werden;<\/li>\n<li>die Software-Hardware-Komponente: OpenStack + Tungsten Fabric (Open Contrail), die unsere Ingenieure recht gut \"zubereiten\" konnten.<\/li>\n<\/ul>\n<p><\/p>\n<p>Wie das Team zusammengestellt wurde, wie die Benutzeroberfl\u00e4che des pers\u00f6nlichen Kontos entwickelt und wie Designentscheidungen getroffen wurden, werden wir ein anderes Mal erz\u00e4hlen, wenn das Interesse der Habr-Community besteht.<br \/>\nDie Tools, die wir verwenden wollten, sind:<\/p>\n<p><\/p>\n<ul>\n<li>Python + Flask + Swagger + SQLAlchemy \u2013 eine ganz normale Python-Ausstattung;<\/li>\n<li>Vue.js f\u00fcr das Frontend;<\/li>\n<li>die Interaktion zwischen Komponenten und Diensten wollten wir mit Celery \u00fcber AMQP realisieren.<\/li>\n<\/ul>\n<p><\/p>\n<p>Um Fragen nach der Wahl von Python vorauszusehen, erkl\u00e4re ich: Die Sprache hat ihren Platz in unserem Unternehmen gefunden und es hat sich eine kleine, aber dennoch greifbare Kultur darum gebildet. Daher wurde beschlossen, den Dienst genau darauf aufzubauen. Zumal die Geschwindigkeit der Entwicklung in solchen Aufgaben oft entscheidend ist. <\/p>\n<p><\/p>\n<p>Also, lassen Sie uns mit unserem Kennenlernen beginnen.<\/p>\n<p><\/p>\n<h3 id=\"molchalivyy-bill--billing\">Stillen Bill \u2013 Abrechnung<\/h3>\n<p><\/p>\n<p><em>Wir kannten diesen Typen schon lange. Er sa\u00df immer neben uns und z\u00e4hlte still vor sich hin. Manchmal leitete er uns Benutzeranfragen weiter, stellte Kundenrechnungen aus und verwaltete Dienstleistungen. Ein ganz normaler arbeitender Mann. Es gab allerdings einige Schwierigkeiten. Er war schweigsam, manchmal nachdenklich und oft \u2014 in seinen eigenen Gedanken.<\/em><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Die Entstehungsgeschichte des Cloud-Dienstes, gew\u00fcrzt mit Cyberpunk.\" src=\"\/wp-content\/uploads\/2020\/04\/262bb5c9d6234041d264f8e041e647fe.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Billing war das erste System, mit dem wir versuchten, uns anzufreunden. Und die erste Schwierigkeit traf uns bereits bei der Bearbeitung von Dienstleistungen.<\/p>\n<p><\/p>\n<p>Zum Beispiel, wenn man einen Service erstellt oder entfernt, gelangt die Aufgabe in die interne Warteschlange des Billings. So wurde ein System f\u00fcr asynchrone Arbeit mit Dienstleistungen realisiert. Um unsere eigenen Servicetypen zu verarbeiten, mussten wir unsere Aufgaben in diese Warteschlange \u201eeinreihen\u201c. Hier trafen wir jedoch auf das Problem: Es mangelte an Dokumentation. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Die Entstehungsgeschichte des Cloud-Dienstes, gew\u00fcrzt mit Cyberpunk.\" src=\"\/wp-content\/uploads\/2020\/04\/4d96251df014e315308c94f848bc6cd0.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nach der Beschreibung der Programmierschnittstelle (API) ist es zwar m\u00f6glich, diese Aufgabe zu l\u00f6sen, aber wir hatten keine Zeit f\u00fcr Reverse Engineering, also haben wir die Logik nach au\u00dfen verlagert und eine Aufgabenwarteschlange \u00fcber RabbitMQ organisiert. Die Operation \u00fcber einen Service wird vom Kunden aus dem Kundenbereich initiiert, in eine \u201eAufgabe\u201c f\u00fcr Celery im Backend eingewickelt und auf der Seite des Billings und von OpenStack ausgef\u00fchrt. Celery erm\u00f6glicht ein ziemlich bequemes Management von Aufgaben, organisiert Wiederholungen und verfolgt den Status. Mehr \u00fcber \u201eCelery\u201c kann man beispielsweise hier nachlesen. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/oleg-bunin\/blog\/433476\/\">hier<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Auch das Billing stoppte nicht das Projekt, als das Geld ausging. Im Gespr\u00e4ch mit den Entwicklern stellten wir fest, dass es beim Z\u00e4hlen von Statistiken (und wir m\u00fcssen genau eine solche Logik umsetzen) eine komplexe Verflechtung von Stoppregeln gibt. Diese Modelle passen jedoch schlecht in unsere Realit\u00e4t. Wir haben auch \u00fcber Celery Aufgaben umgesetzt, indem wir die Logik der Serviceverwaltung ins Backend holten. <\/p>\n<p><\/p>\n<p>Die beiden oben genannten Probleme f\u00fchrten dazu, dass der Code ein wenig aufgebl\u00e4ht wurde, und wir in Zukunft Refactoring betreiben m\u00fcssen, um die Logik der Aufgabenverwaltung in einen separaten Service auszulagern. Wir m\u00fcssen auch Teile der Informationen \u00fcber Benutzer und deren Dienstleistungen in unseren Tabellen speichern, um diese Logik zu unterst\u00fctzen.<\/p>\n<p><\/p>\n<p>Ein weiteres Problem ist die Schweigsamkeit.<\/p>\n<p><\/p>\n<p>Auf einige API-Anfragen antwortet Billy stumm mit \u201eOk\u201c. So war es beispielsweise, als wir w\u00e4hrend des Tests (dar\u00fcber sp\u00e4ter mehr) versprochenen Zahlungen gutgeschrieben haben. Die Anfragen wurden korrekt ausgef\u00fchrt und wir sahen keine Fehler. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Die Entstehungsgeschichte des Cloud-Dienstes, gew\u00fcrzt mit Cyberpunk.\" src=\"\/wp-content\/uploads\/2020\/04\/d03f2c381fd39dbf33f2a0c3eeb1294d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Es war notwendig, die Protokolle zu studieren, w\u00e4hrend ich mit dem System \u00fcber die Benutzeroberfl\u00e4che arbeitete. Es stellte sich heraus, dass die Abrechnung \u00e4hnliche Anfragen ausf\u00fchrt, indem der Scope auf einen bestimmten Benutzer, zum Beispiel 'admin', ge\u00e4ndert wird, und dieser als Parameter 'su' \u00fcbergeben wird.<\/p>\n<p><\/p>\n<p>Insgesamt verlief trotz der L\u00fccken in der Dokumentation und kleinerer Fehler in der API alles recht gut. Die Protokolle sind auch bei hoher Auslastung gut lesbar, wenn man versteht, wie sie strukturiert sind und wonach man suchen muss. Die Struktur der Datenbank ist verworren, aber durchaus logisch und in mancher Hinsicht sogar ansprechend.<\/p>\n<p><\/p>\n<p>Zusammenfassend sind die Hauptprobleme, die wir in der Interaktion hatten, auf die Besonderheiten der Umsetzung des konkreten Systems zur\u00fcckzuf\u00fchren: <\/p>\n<p><\/p>\n<ul>\n<li>undokumentierte \u201eFunktionen\u201c, die uns mehr oder weniger betrifft haben;<\/li>\n<li>geschlossene Quellcodes (die Abrechnung ist in C++ geschrieben), was zur Folge hat, dass Problem 1 nur durch den \u201eTrial-and-Error\u201c-Ansatz gel\u00f6st werden kann.<\/li>\n<\/ul>\n<p><\/p>\n<p>Gl\u00fccklicherweise verf\u00fcgt das Produkt \u00fcber eine ziemlich umfassende API und wir haben folgende Teilsysteme in unser Kundenkonto integriert:<\/p>\n<p><\/p>\n<ul>\n<li>Modul f\u00fcr technischen Support \u2013 Anfragen aus dem Kundenkonto werden transparent f\u00fcr die Dienstleistungsbenutzer in die Abrechnung \u201eproxiesiert\u201c;<\/li>\n<li>Finanzmodul \u2013 erm\u00f6glicht das Ausstellen von Rechnungen an aktuelle Kunden, das Durchf\u00fchren von Abbuchungen und die Erstellung von Zahlungsdokumenten;<\/li>\n<li>Modul zur Verwaltung von Dienstleistungen \u2013 daf\u00fcr mussten wir unseren eigenen Handler implementieren. Die Erweiterbarkeit des Systems kam uns zugute und wir haben Billy einen neuen Diensttypen beigebracht.<br \/>\nEs war zwar etwas m\u00fchsam, aber ich denke, dass wir mit Billy gut zurechtkommen werden.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"progulki-po-volframovym-polyam--tungsten-fabric\">Spazierg\u00e4nge \u00fcber die Wolframfelder \u2013 Tungsten Fabric<\/h3>\n<p><\/p>\n<p><em>Wolframfelder, die mit hundert Dr\u00e4hten \u00fcbers\u00e4t sind, die tausende Bits Informationen durchlaufen. Informationen werden in \u201ePakete\u201c geb\u00fcndelt, analysiert und komplexe Routen erstellt, fast wie durch Magie.<\/em><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Die Entstehungsgeschichte des Cloud-Dienstes, gew\u00fcrzt mit Cyberpunk.\" src=\"\/wp-content\/uploads\/2020\/04\/9b6dd46d9f15e0e3393a8c1222abbf2f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Das ist das Reich des zweiten Systems, mit dem wir uns anfreunden mussten \u2013 Tungsten Fabric (TF), ehemals OpenContrail. Ihre Aufgabe ist es, Netzwerkhardware zu verwalten und uns als Nutzern eine programmathematische Abstraktion zu bieten. TF \u2013 SDN, kapselt komplexe Logik im Umgang mit Netzwerkger\u00e4ten ein. \u00dcber die Technologie selbst gibt es einen guten Artikel, zum Beispiel, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/muk\/blog\/251959\/\">hier<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Das System ist \u00fcber das Neutron-Plugin mit OpenStack integriert (dar\u00fcber sprechen wir gleich). <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Die Entstehungsgeschichte des Cloud-Dienstes, gew\u00fcrzt mit Cyberpunk.\" src=\"\/wp-content\/uploads\/2020\/04\/5abe3992efaab3e016a0c51dc0070a94.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Interaktion der OpenStack-Dienste.<\/em><\/p>\n<p><\/p>\n<p>Dieses System wurde uns von den Kollegen aus der Betriebsabteilung vorgestellt. Wir nutzen die API des Systems, um den Netzwerkstack unserer Dienste zu verwalten. Bisher verursacht es keine ernsthaften Probleme oder Unannehmlichkeiten (was die Kollegen aus der OE betrifft, m\u00f6chte ich nichts sagen), jedoch gab es einige kuriose Interaktionen.<\/p>\n<p><\/p>\n<p>Das erste sah so aus: Befehle, die eine gro\u00dfe Menge an Daten auf die Konsole der Instanz beim SSH-Zugriff ausgeben, \u201eh\u00e4ngten\u201c die Verbindung einfach auf, w\u00e4hrend alles \u00fcber VNC korrekt funktionierte.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Die Entstehungsgeschichte des Cloud-Dienstes, gew\u00fcrzt mit Cyberpunk.\" src=\"\/wp-content\/uploads\/2020\/04\/02bc97d63a1299e1dda08fce0f10fb97.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>F\u00fcr diejenigen, die mit dem Problem nicht vertraut sind, sieht es ziemlich lustig aus: ls \/root funktioniert korrekt, w\u00e4hrend zum Beispiel top komplett \u201eeinfriert\u201c. Gl\u00fccklicherweise hatten wir bereits mit \u00e4hnlichen Problemen zu tun. Es wurde durch das Tuning des MTU auf dem Weg von den Compute-Nodes zu den Routern gel\u00f6st. Nebenbei bemerkt, das ist auch kein Problem f\u00fcr TF.<\/p>\n<p><\/p>\n<p>Das n\u00e4chste Problem wartete um die Ecke. In einem \u201ewundersch\u00f6nen\u201c Moment verschwand die Magie der Routing, einfach so. TF h\u00f6rte auf, das Routing auf der Hardware zu steuern.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Die Entstehungsgeschichte des Cloud-Dienstes, gew\u00fcrzt mit Cyberpunk.\" src=\"\/wp-content\/uploads\/2020\/04\/db2a75ffdf2940b2ca90f73835f7a321.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wir arbeiteten mit OpenStack aus der Admin-Ansicht und wechselten dann auf die Ebene des ben\u00f6tigten Benutzers. SDN scheint den Geltungsbereich des Benutzers zu \u201e\u00fcbernehmen\u201c, mit dem die Aktionen ausgef\u00fchrt werden. Das Problem ist, dass dasselbe Admin-Konto zur Kommunikation zwischen TF und OpenStack verwendet wird. Beim Wechsel zu einem normalen Benutzer verschwand die \u201eMagie\u201c. Es wurde beschlossen, ein separates Konto f\u00fcr die Arbeit mit dem System einzurichten. Dies erlaubte es uns, zu arbeiten, ohne die Integrationsfunktionalit\u00e4t zu beeintr\u00e4chtigen.<\/p>\n<p><\/p>\n<h3 id=\"silikonovye-formy-zhizni--openstack\">Siliconformen des Lebens \u2013 OpenStack<\/h3>\n<p><\/p>\n<p><em>Das silikonartige Wesen in seltsamer Form lebt in der N\u00e4he von Wolframfeldern. Es sieht am meisten wie ein \u00fcbergro\u00dfes Kind aus, das uns mit einem einzigen Schwung zerquetschen kann, aber von ihm geht keine offensichtliche Aggression aus. Es verursacht keine Angst, aber seine Gr\u00f6\u00dfe gibt Anlass zur Sorge. Genauso wie die Komplexit\u00e4t dessen, was um uns herum geschieht.<\/em><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Die Entstehungsgeschichte des Cloud-Dienstes, gew\u00fcrzt mit Cyberpunk.\" src=\"\/wp-content\/uploads\/2020\/04\/8622d43e0cb963bc9ef2a2ce59a32499.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>OpenStack ist das Herzst\u00fcck unserer Plattform.<\/p>\n<p><\/p>\n<p>OpenStack hat mehrere Teilsysteme, von denen wir bisher am aktivsten Nova, Glance und Cinder nutzen. Jede von ihnen hat ihre eigene API. Nova ist verantwortlich f\u00fcr Compute-Ressourcen und die Erstellung von Instanzen, Cinder f\u00fcr das Management von Volumes und deren Snapshots, Glance ist der Image-Service, der Betriebssystemvorlagen und deren Metadaten verwaltet.<\/p>\n<p><\/p>\n<p>Jeder Dienst wird in einem Container gestartet, und der Nachrichtenbroker ist der \u201ewei\u00dfe Kaninchen\u201c \u2013 RabbitMQ.<\/p>\n<p><\/p>\n<p>Dieses System hat uns am meisten unerwartete Schwierigkeiten bereitet.<\/p>\n<p><\/p>\n<p>Und das erste Problem lie\u00df nicht lange auf sich warten, als wir versuchten, einen zus\u00e4tzlichen Volume an den Server anzuschlie\u00dfen. Die Cinder-API weigerte sich strikt, diese Aufgabe zu erf\u00fcllen. Genauer gesagt, wenn man OpenStack Glauben schenken darf, wird die Verbindung hergestellt, jedoch fehlt das Laufwerk innerhalb des virtuellen Servers.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Die Entstehungsgeschichte des Cloud-Dienstes, gew\u00fcrzt mit Cyberpunk.\" src=\"\/wp-content\/uploads\/2020\/04\/b4755d893f3f8ad7d7aeab3af69f35cf.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wir beschlossen, einen \u00abUmweg\u00bb zu nehmen und dieselbe Aktion \u00fcber die Nova-API anzufordern. Das Ergebnis \u2013 das Ger\u00e4t wird korrekt angeschlossen und ist innerhalb des Servers verf\u00fcgbar. Anscheinend tritt das Problem auf, wenn der Block-Speicher Cinder nicht antwortet.<\/p>\n<p><\/p>\n<p>Eine weitere Schwierigkeit erwartete uns bei der Arbeit mit Laufwerken. Es war nicht m\u00f6glich, das System-Volume vom Server zu trennen.<\/p>\n<p><\/p>\n<p>Auch hier \u00abschw\u00f6rt\u00bb OpenStack, dass die Verbindung getrennt wurde und man jetzt korrekt mit dem Volume arbeiten kann. Aber die API wollte unbedingt keine Operationen am Laufwerk durchf\u00fchren. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Die Entstehungsgeschichte des Cloud-Dienstes, gew\u00fcrzt mit Cyberpunk.\" src=\"\/wp-content\/uploads\/2020\/04\/952fd7cd11181605c52a7df71cd4f69f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hier entschieden wir uns, nicht weiter zu k\u00e4mpfen, sondern die Logik des Dienstes zu \u00fcberdenken. Wenn es eine Instanz gibt, sollte es auch ein System-Volume geben. Daher kann der Benutzer das \u00abFestplatten\u00bb-System vorerst nicht l\u00f6schen oder trennen, ohne den \u00abServer\u00bb zu entfernen.<\/p>\n<p><\/p>\n<p>OpenStack ist ein recht komplexes System mit seiner eigenen Interaktionslogik und einem verschlungenen API. Unsere Rettung ist die ziemlich ausf\u00fchrliche Dokumentation und nat\u00fcrlich die Methode von Versuch und Irrtum (wie sollte es auch anders sein).<\/p>\n<p><\/p>\n<h3 id=\"testovyy-zapusk\">Testlauf<\/h3>\n<p><\/p>\n<p>Den Testlauf f\u00fchrten wir im Dezember letzten Jahres durch. Die Hauptaufgabe bestand darin, unser Projekt sowohl aus technischer Sicht als auch aus der UX-Perspektive im Betrieb zu \u00fcberpr\u00fcfen. Die Zielgruppe wurde selektiv eingeladen und das Testen war geschlossen. Wir haben jedoch auch die M\u00f6glichkeit gelassen, den Zugang zum Testen \u00fcber unsere Website anzufordern.<\/p>\n<p><\/p>\n<p>Selbst der Test blieb selbstverst\u00e4ndlich nicht ohne kurvenreiche Momente, denn hier beginnen erst unsere Abenteuer. <\/p>\n<p><\/p>\n<p>Erstens haben wir das Interesse am Projekt etwas falsch eingesch\u00e4tzt und mussten w\u00e4hrend des Tests schnell Compute-Knoten hinzuf\u00fcgen. Ein \u00fcblicher Fall f\u00fcr ein Cluster, aber auch hier gab es Nuancen. In der Dokumentation f\u00fcr die spezifische Version von TF war eine bestimmte Kernelversion angegeben, auf der die Arbeit mit vRouter getestet wurde. Wir haben beschlossen, die Knoten mit neueren Kernen zu starten. Das Ergebnis \u2013 TF erhielt keine Routen von den Knoten. Wir mussten die Kerne dringend zur\u00fccksetzen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Die Entstehungsgeschichte des Cloud-Dienstes, gew\u00fcrzt mit Cyberpunk.\" src=\"\/wp-content\/uploads\/2020\/04\/377208246d5e396317fb934a35ed1227.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Eine weitere Kuriosit\u00e4t war die Funktion der Schaltfl\u00e4che \u00abPasswort \u00e4ndern\u00bb im pers\u00f6nlichen Bereich. <\/p>\n<p><\/p>\n<p>Wir haben beschlossen, JWT f\u00fcr den Zugang zum pers\u00f6nlichen Bereich zu verwenden, um nicht mit Sessions arbeiten zu m\u00fcssen. Da die Systeme vielf\u00e4ltig und weit verstreut sind, verwalten wir unser Token, in dem wir die Sessions vom Billing und das Token von OpenStack \u201everpacken\u201c. Wenn das Passwort ge\u00e4ndert wird, verf\u00e4llt das Token nat\u00fcrlich, da die Benutzerdaten ung\u00fcltig sind und neu ausgegeben werden m\u00fcssen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Die Entstehungsgeschichte des Cloud-Dienstes, gew\u00fcrzt mit Cyberpunk.\" src=\"\/wp-content\/uploads\/2020\/04\/daa27256d0b888b2c59d4bc6129f600d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wir haben diesen Punkt aus den Augen verloren, und es fehlten banal die Ressourcen, um dieses St\u00fcck schnell zu erg\u00e4nzen. Wir mussten die Funktionalit\u00e4t kurz vor dem Teststart herausnehmen.<br \/>\nMomentan f\u00fchren wir den Logout des Benutzers durch, wenn das Passwort ge\u00e4ndert wurde.<\/p>\n<p><\/p>\n<p>Trotz dieser Nuancen verlief das Testing gut. In den letzten zwei Wochen haben uns etwa 300 Personen besucht. Wir konnten das Produkt aus der Sicht der Benutzer betrachten, es im Einsatz testen und qualitatives Feedback sammeln. <\/p>\n<p><\/p>\n<h3 id=\"prodolzhenie-sleduet\">Fortsetzung folgt<\/h3>\n<p><\/p>\n<p>F\u00fcr viele von uns ist dies das erste Projekt dieser Gr\u00f6\u00dfenordnung. Wir haben eine Reihe wertvoller Lektionen dar\u00fcber gelernt, wie man im Team arbeitet und architektonische sowie gestalterische Entscheidungen trifft. Wie man mit begrenzten Ressourcen komplexe Systeme integriert und sie in die Produktion bringt. <\/p>\n<p><\/p>\n<p>Nat\u00fcrlich gibt es noch einiges zu tun, sowohl im Hinblick auf den Code als auch an den Schnittstellen zur Integration der Systeme. Das Projekt ist noch recht jung, aber wir sind voller Ambitionen, einen zuverl\u00e4ssigen und benutzerfreundlichen Service daraus zu entwickeln.<\/p>\n<p><\/p>\n<p>Die Systeme konnten wir bereits \u00fcberzeugen. Bill k\u00fcmmert sich gehorsam um die Berechnungen, Rechnungsstellung und Benutzeranfragen in seiner kleinen Kammer. Das \"Magische\" der Wolframfelder sorgt f\u00fcr eine stabile Verbindung. Nur OpenStack verh\u00e4lt sich manchmal launisch und ruft etwas wie \u201eWSREP hat den Knoten noch nicht f\u00fcr die Anwendungsnutzung vorbereitet\u201c aus. Aber das ist eine ganz andere Geschichte\u2026<\/p>\n<p><\/p>\n<p>Vor kurzem haben wir den Service gestartet.<br \/>\nAlle Details k\u00f6nnen Sie auf unserem <noindex><a rel=\"nofollow\" href=\"https:\/\/clo.ru?utm_source=habr&amp;utm_medium=article&amp;utm_campaign=product&amp;utm_term=first_clo\">Website<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Die Entstehungsgeschichte des Cloud-Dienstes, gew\u00fcrzt mit Cyberpunk.\" src=\"\/wp-content\/uploads\/2020\/04\/32550980b529a5d7b395b3962218e53e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>CLO Entwicklungsteam<\/em><\/p>\n<p><\/p>\n<p>                        <b class=\"spoiler_title\">N\u00fctzliche Links<\/b><\/p>\n<p><strong>OpenStack<\/strong><\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.openstack.org\/nova\/latest\/\">https:\/\/docs.openstack.org\/nova\/latest\/<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.openstack.org\/keystone\/latest\/\">https:\/\/docs.openstack.org\/keystone\/latest\/<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.openstack.org\/cinder\/latest\/\">https:\/\/docs.openstack.org\/cinder\/latest\/<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.openstack.org\/glance\/latest\/\">https:\/\/docs.openstack.org\/glance\/latest\/<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<p><strong>Tungsten Fabric<\/strong><\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/docs.tungsten.io\/en\/latest\/user\/getting-started\/index.html\">http:\/\/docs.tungsten.io\/en\/latest\/user\/getting-started\/index.html<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.juniper.net\/documentation\/en_US\/contrail-cloud10.0\/topics\/concept\/contrail-cloud-openstack-integration-overview.html\">https:\/\/www.juniper.net\/documentation\/en_US\/contrail-cloud10.0\/topics\/concept\/contrail-cloud-openstack-integration-overview.html<\/a><\/noindex><\/li>\n<\/ul>\n<p>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/first\/blog\/493606\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0421 \u0440\u043e\u0441\u0442\u043e\u043c \u0441\u0442\u0430\u0436\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0432 IT \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0448\u044c \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u044c, \u0447\u0442\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438\u043c\u0435\u044e\u0442 \u0441\u0432\u043e\u0439 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440. \u041e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043a\u043b\u0430\u0434\u0438\u0441\u0442\u044b\u043c\u0438, \u043c\u043e\u043b\u0447\u0430\u043b\u0438\u0432\u044b\u043c\u0438, \u0432\u0437\u0431\u0430\u043b\u043c\u043e\u0448\u043d\u044b\u043c\u0438, \u0441\u0443\u0440\u043e\u0432\u044b\u043c\u0438. \u041c\u043e\u0433\u0443\u0442 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c \u043a \u0441\u0435\u0431\u0435 \u0438\u043b\u0438 \u043e\u0442\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0442\u044c. \u0422\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435, \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u00ab\u0434\u043e\u0433\u043e\u0432\u0430\u0440\u0438\u0432\u0430\u0442\u044c\u0441\u044f\u00bb \u0441 \u043d\u0438\u043c\u0438, \u043b\u0430\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u00ab\u043f\u043e\u0434\u0432\u043e\u0434\u043d\u044b\u043c\u0438 \u043a\u0430\u043c\u043d\u044f\u043c\u0438\u00bb \u0438 \u0432\u044b\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u0438\u0445 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. \u0412\u043e\u0442 \u0438 \u043d\u0430\u043c \u0432\u044b\u043f\u0430\u043b\u0430 \u0447\u0435\u0441\u0442\u044c \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043e\u0431\u043b\u0430\u0447\u043d\u0443\u044e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443, \u0430 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u00ab\u0443\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c\u00bb [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":79154,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-79153","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0421 \u0440\u043e\u0441\u0442\u043e\u043c \u0441\u0442\u0430\u0436\u0430.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/istoriya-sozdaniya-oblachnogo-servisa-pripravlennaya-kiberpankom\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u043f\u0440\u0438\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u043a\u0438\u0431\u0435\u0440\u043f\u0430\u043d\u043a\u043e\u043c | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0421 \u0440\u043e\u0441\u0442\u043e\u043c \u0441\u0442\u0430\u0436\u0430.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/istoriya-sozdaniya-oblachnogo-servisa-pripravlennaya-kiberpankom\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-04-24T17:42:43+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-04-24T17:42:43+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Die Entstehungsgeschichte des Cloud-Services, gew\u00fcrzt mit Cyberpunk | ProHoster","description":"Mit wachsender Erfahrung.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/istoriya-sozdaniya-oblachnogo-servisa-pripravlennaya-kiberpankom","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u043f\u0440\u0438\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u043a\u0438\u0431\u0435\u0440\u043f\u0430\u043d\u043a\u043e\u043c | ProHoster","og:description":"\u0421 \u0440\u043e\u0441\u0442\u043e\u043c \u0441\u0442\u0430\u0436\u0430.","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/istoriya-sozdaniya-oblachnogo-servisa-pripravlennaya-kiberpankom","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-04-24T17:42:43+00:00","article:modified_time":"2020-04-24T17:42:43+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"79153","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 16:43:24","updated":"2022-10-02 03:25:48","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/79153","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=79153"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/79153\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/79154"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=79153"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=79153"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=79153"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}