Die Definition von DevOps ist sehr komplex, weshalb es immer wieder notwendig ist, die Diskussion darĂŒber neu zu beginnen. Allein auf Habr gibt es tausende von Veröffentlichungen zu diesem Thema. Aber wenn Sie dies lesen, wissen Sie wahrscheinlich, was DevOps ist. Denn ich weiĂ es nicht. Hallo, ich heiĂe Alexander Titov (@), und wir werden einfach ĂŒber DevOps sprechen und ich werde meine Erfahrungen teilen.

Ich habe lange ĂŒberlegt, wie ich meine ErzĂ€hlung nĂŒtzlich gestalten kann, daher wird es hier viele Fragen geben â die, die ich mir selbst stelle, und die, die ich unseren Kunden stelle. Indem ich auf diese Fragen antworte, wird das VerstĂ€ndnis besser. Ich werde erzĂ€hlen, warum DevOps aus meiner Sicht notwendig ist, was es ist, wiederum aus meiner Perspektive, und wie man erkennt, dass man sich auf dem Weg zu DevOps befindet, wiederum aus meiner Sicht. Der letzte Punkt wird durch Fragen erfolgen. Indem Sie sich diese selbst stellen, können Sie verstehen, ob Ihr Unternehmen auf dem Weg zu DevOps ist oder ob es dabei Probleme gibt.

Eine Zeit lang war ich auf den Wellen von Fusionen und Ăbernahmen unterwegs. ZunĂ€chst arbeitete ich in einem kleinen Startup namens Qik, das dann von einer etwas gröĂeren Firma namens Skype ĂŒbernommen wurde, die spĂ€ter von einer noch gröĂeren Firma, Microsoft, gekauft wurde. In diesem Moment bekam ich Einblicke, wie sich die Vorstellung von DevOps in Unternehmen unterschiedlicher GröĂenordnungen transformiert. Danach wurde es fĂŒr mich interessant, DevOps aus Marktsicht zu betrachten, und wir grĂŒndeten mit Kollegen die Firma Express 42. Bereits seit 6 Jahren navigieren wir auf diesem Markt.
Nebenbei bin ich einer der Organisatoren der Community DevOps Moscow und Organisator von DevOps-Days 2017, die 2018 jedoch nicht organisiert wurden. Express 42 arbeitet mit vielen Firmen zusammen. Wir etablieren dort DevOps, beobachten, wie das geschieht, ziehen Schlussfolgerungen, analysieren und teilen unsere Ergebnisse mit allen, schulen Menschen in DevOps-Praktiken. Kurz gesagt, wir fördern in dieser Hinsicht unsere Erfahrungen und unsere Expertise.
Warum DevOps
Die erste Frage, die alle und immer verfolgt â warum? Viele glauben, dass DevOps einfach Automatisierung oder eine Ă€hnliche Sache ist, die bereits in jedem Unternehmen vorhanden war.
â Wir hatten Continuous Integration â das heiĂt, wir hatten bereits DevOps, und warum brauchen wir diesen ganzen Kram? Da drĂŒben amĂŒsiert man sich, wĂ€hrend uns die Arbeit im Weg steht!
Nach 9 Jahren der Entwicklung der Gemeinschaft und Methodik ist bereits klar geworden, dass es sich dabei nicht um Marketingflitter handelt, aber es ist trotzdem nicht ganz klar, wozu es notwendig ist. Wie bei jedem Werkzeug und Prozess hat DevOps bestimmte Ziele, die es letztendlich erreicht.
Das alles hĂ€ngt damit zusammen, dass sich die Welt verĂ€ndert. Sie entfernt sich von dem unternehmerischen Ansatz, bei dem Unternehmen gemÀà einer bestimmten Strategie, wie unser Petersburger Klassiker sang, von Punkt A nach Punkt B aufbrechen, unterstĂŒtzt von einer dafĂŒr aufgebauten Struktur.

Im Grunde sollte alles im IT-Bereich auf diesem Ansatz basieren. Hier wird IT ausschlieĂlich zur Automatisierung von Prozessen eingesetzt.
Automatisierung Ă€ndert sich nicht oft, denn wenn ein Unternehmen auf den gewohnten Pfaden voranschreitet â was soll man da Ă€ndern? Es funktioniert â also nicht anfassen. Derzeit Ă€ndern sich die AnsĂ€tze in der Welt, und der, der als Agile bezeichnet wird, besagt, dass das endgĂŒltige Ziel B nicht sofort sichtbar ist.

Wenn ein Unternehmen den Markt durchlĂ€uft und mit dem Kunden arbeitet, erforscht es stĂ€ndig den Markt und Ă€ndert das endgĂŒltige Ziel B. Je hĂ€ufiger ein Unternehmen seine Richtung Ă€ndert, desto erfolgreicher ist es letztendlich, da es mehr Marktsegmente auswĂ€hlt.
Eine interessante Firma zeigt diese Strategie, von der ich kĂŒrzlich erfahren habe. One Box Shave â ein Lieferdienst fĂŒr Rasierer und Rasurartikel im Abonnement in einer Box. Sie können ihre âBoxâ fĂŒr verschiedene Kunden individuell anpassen. Das erledigt eine spezielle Software, die dann die Bestellung an eine koreanische Fabrik sendet, die das Produkt herstellt.
Dieses Produkt wurde von der Firma Unilever fĂŒr 1 Milliarde Dollar gekauft. Jetzt konkurriert es mit Gillette und hat einen signifikanten Marktanteil in den USA gewonnen. One Box Shave sagt:
â 4 Klingen? Sind Sie im Ernst? Warum brauchen Sie das â das verbessert die RasurqualitĂ€t nicht. Ein speziell ausgewĂ€hlter Rasiercreme, Duft und ein qualitativ hochwertiger Rasierer mit zwei Klingen lösen viel mehr Fragen als diese lĂ€cherlichen 4 Klingen von Gillette! Gehen wir bald auf 10 ĂŒber?
So verĂ€ndert sich die Welt. Unilever behauptet, dass sie ein groĂartiges IT-System haben, das dies ermöglicht. Am Ende sieht das aus wie das Konzept Time-to-market, ĂŒber das bereits viele gesprochen haben.

Die Bedeutung von Time-to-market liegt nicht darin, wie oft wir deployments durchfĂŒhren. Man kann hĂ€ufig deployen, doch die Release-Zyklen können dabei lang sein. Wenn man dreiĂig monatliche Release-Zyklen ĂŒbereinanderlegt und um eine Woche verschiebt, scheint es, als ob das Unternehmen einmal pro Woche deployt. Aber von der Idee bis zur endgĂŒltigen Umsetzung vergehen 3 Monate.
Time-to-market bedeutet, die Zeit von der Idee bis zur endgĂŒltigen Umsetzung zu minimieren.
In diesem Fall interagiert die Software mit dem Markt. So interagiert die Website von One Box Shave mit dem Kunden. Sie haben keine VerkĂ€ufer â nur die Website, auf der die Besucher klicken und WĂŒnsche hinterlassen. Daher muss die Website stĂ€ndig neue Inhalte bereitstellen und aktualisiert werden, um den WĂŒnschen gerecht zu werden. Zum Beispiel rasieren sich die Menschen in SĂŒdkorea anders als in Russland und sie bevorzugen im Duft nicht den Geruch von Kiefer, sondern zum Beispiel den von Vanille-Möhren.
Da der Inhalt der Website schnell geĂ€ndert werden muss, verĂ€ndert sich auch die Softwareentwicklung erheblich. Durch die Software mĂŒssen wir herausfinden, was der Kunde will. FrĂŒher haben wir das auf indirektem Weg erfahren, zum Beispiel ĂŒber das Business-Management. Dann entwarfen wir und legten die Anforderungen in das IT-System, und alles lief glatt. Heute ist es anders â die Software wird von allen, die an dem Prozess beteiligt sind, einschlieĂlich der Ingenieure, entworfen, da sie durch technische Spezifikationen erfahren, wie der Markt funktioniert, und auch ihre Einsichten mit dem GeschĂ€ft teilen.
Zum Beispiel haben wir bei der Firma Qik plötzlich erfahren, dass die Leute es sehr mögen, Kontaktlisten auf den Server hochzuladen, und sie haben uns eine App gegeben. Zuvor hatten wir darĂŒber nicht nachgedacht. In einem klassischen Unternehmen hĂ€tte man wahrscheinlich gesagt, das sei ein Bug, weil in der Spezifikation nicht steht, dass es gut funktionieren sollte, und es wurde schlieĂlich improvisiert. Man hĂ€tte die Funktion abgeschaltet und gesagt: "Das braucht keiner, das Wichtigste ist, dass die Grundfunktionen funktionieren." Aber ein technologieorientiertes Unternehmen sieht darin eine Chance und beginnt, die Software entsprechend zu Ă€ndern.

Im Jahr 1968 formulierte der weitsichtige Melvin Conway die folgende Idee.
Eine Organisation, die ein System erstellt, ist durch das Design eingeschrÀnkt, das die Kommunikationsstruktur dieser Organisation widerspiegelt.
Wenn wir ins Detail gehen, um Systeme eines anderen Typs zu produzieren, benötigen wir zusÀtzlich eine Kommunikationsstruktur innerhalb des Unternehmens, die ebenfalls anders ist. Wenn Sie eine hierarchische Kommunikationsstruktur haben, wird dies es Ihnen nicht ermöglichen, Systeme zu schaffen, die eine sehr hohe Time-to-Market-Rate bieten können.
Lesen kann man . Es ist wichtig fĂŒr das VerstĂ€ndnis der Kultur oder Philosophie von DevOps, da das Einzige, was sich grundlegend in DevOps Ă€ndert, die Kommunikationsstruktur zwischen den Teams ist..
Aus der Sicht des Prozesses liefen vor DevOps alle Phasen: Analyse, Entwicklung, Test, Betrieb, linear.
Im Fall von DevOps laufen all diese Prozesse gleichzeitig.

Time-to-Market kann nur so erfĂŒllt werden. FĂŒr Menschen, die im alten Prozess gearbeitet haben, wirkt das etwas futuristisch und im Grunde auch unpraktisch.
Warum ist DevOps notwendig?
FĂŒr die Entwicklung digitaler Produkte. Wenn Ihr Unternehmen kein digitales Produkt hat, ist DevOps nicht nötig â das ist sehr wichtig.
DevOps ĂŒberwindet die Geschwindigkeitsgrenzen des sequentiellen Softwareproduktionsplans. In ihm laufen alle Prozesse gleichzeitig.
Die KomplexitĂ€t nimmt zu. Wenn DevOps-Evangelisten erzĂ€hlen, dass es mit ihm einfacher wird, Software zu veröffentlichen â das ist Unsinn.
Mit DevOps wird alles nur komplizierter.
Auf der Konferenz am Stand von Avito konnte man sehen, was es bedeutet, einen Docker-Container zu deployen â eine unmögliche Aufgabe. Die KomplexitĂ€t wird ĂŒbermenschlich, man muss viele BĂ€lle gleichzeitig jonglieren.
DevOps verĂ€ndert vollstĂ€ndig den Prozess und die Organisation im Unternehmen â genauer gesagt, Ă€ndert nicht DevOps, sondern das digitale Produkt. Um zu DevOps zu gelangen, muss dieser Prozess jedoch vollstĂ€ndig geĂ€ndert werden.
Fragen fĂŒr den Spezialisten
Und was ist mit Ihnen? Fragen, die Sie sich stellen können, wÀhrend Sie im Unternehmen arbeiten und sich als Spezialist weiterentwickeln.
Haben Sie eine Strategie zur Erstellung eines digitalen Produkts? Wenn ja â schon gut. Das bedeutet, dass Ihr Unternehmen in Richtung DevOps geht.
Erstellt Ihr Unternehmen bereits ein digitales Produkt? Das bedeutet, dass Sie noch eine Stufe höher steigen können, interessantere Dinge tun â aus der Sicht von DevOps, um genau zu sein. Nur aus dieser Perspektive spreche ich.
Ist Ihr Unternehmen einer der MarktfĂŒhrer in der Nische mit einem digitalen Produkt? Spotify, Yandex, Uber â Unternehmen, die sich derzeit an der Spitze des technologischen Fortschritts befinden.
Stellen Sie sich diese Fragen, und wenn alle Antworten negativ sind, sollten Sie vielleicht nicht in diesem Unternehmen DevOps praktizieren. Wenn Ihnen jedoch das Thema DevOps wirklich interessiert, sollten Sie vielleicht⊠in ein anderes Unternehmen wechseln? Wenn Ihr Unternehmen DevOps umsetzen möchte, Sie aber auf alle Fragen mit âNeinâ geantwortet haben, Ă€hnelt es diesem wunderbaren Nashorn, das sich nie verĂ€ndern wird.

Organisation
Wie ich bereits gesagt habe, verÀndert sich die Organisation in einem Unternehmen gemÀà dem Conway-Gesetz. Ich beginne mit dem, was DevOps daran hindert, intern im Unternehmen einzudringen, und zwar aus organisatorischer Sicht.
Das Problem der âSilosâ
Das englische Wort âSiloâ wird hier auf Russisch als âĐșĐŸĐ»ĐŸĐŽĐ”Ńâ ĂŒbersetzt. Der Sinn dieses Problems ist, dass es keinen Informationsaustausch zwischen den Teams gibt.Jedes Team grĂ€bt seine Expertise tief, ohne eine gemeinsame Karte zu erstellen, auf der man sich orientieren kann.
Das erinnert an jemanden, der gerade in Moskau angekommen ist und noch nicht weiĂ, wie man sich mit der U-Bahn-karte orientiert. Muskoviten wissen normalerweise sehr gut Bescheid ĂŒber ihren Stadtteil, und in ganz Moskau orientieren sie sich mit der U-Bahn-Karte. Wenn Sie zum ersten Mal nach Moskau kommen, haben Sie diese FĂ€higkeit nicht und sind einfach orientierungslos.
DevOps schlĂ€gt vor, diesen Moment der Desorientierung zu ĂŒberwinden und allen Abteilungen gemeinsam eine gemeinsame Interaktionskarte zu erstellen.
Zwei Faktoren stehen dem entgegen.
Folge der Corporate Governance. Sie ist aus separaten hierarchischen âSilosâ aufgebaut. Zum Beispiel gibt es bestimmte KPIs in Unternehmen, die dieses System unterstĂŒtzen. Andererseits stehen die Gedanken des Menschen dem im Wege, der Schwierigkeiten hat, ĂŒber seine Expertise hinauszublicken und sich im gesamten System zurechtzufinden. Das ist einfach unbequem. Stellen Sie sich vor, Sie befinden sich am Flughafen von Bangkok â dort ist es schnell schwierig, sich zurechtzufinden. Auch in DevOps ist es kompliziert, den Ăberblick zu behalten, und deshalb sagen die Leute, dass man einen FĂŒhrer finden muss, um dorthin zu gelangen.
Aber das Wichtigste ist, dass das Problem der âSilosâ fĂŒr einen Ingenieur, der den Geist von DevOps verinnerlicht hat, Fowlers BĂŒcher gelesen hat und viele andere BĂŒcher, darin besteht, dass âSilosâ nicht erlauben, âoffensichtlicheâ Dinge zu tun.Wir treffen uns oft nach DevOps Moscow, reden miteinander und die Leute beklagen sich:
â Wir wollten einfach nur CI starten, aber es stellte sich heraus, dass das Management das nicht braucht.
Das geschieht genau aus dem Grund, dass CI und Continuous Delivery Prozess an der Grenze vieler Fachgebiete liegen. Wenn das Problem der 'Brunnen' auf organisatorischer Ebene nicht ĂŒberwunden wird, wird es nicht möglich sein, weiterzukommen, egal was Sie tun und wie traurig das auch sein mag.

Jeder Teilnehmer des Prozesses im Unternehmen: Backend- und Frontend-Entwickler, Test, DBA, Betrieb, Netzwerk, arbeitet in seiner eigenen Richtung, wĂ€hrend niemand auĂer dem Manager eine gemeinsame Ăbersicht hat, der sie auf eine Art ĂŒberwacht und nach der Methode "teile und herrsche" verwaltet.
Die Leute kÀmpfen um irgendwelche Sternchen oder FÀhnchen, jeder bearbeitet sein eigenes Fachgebiet.
Letztendlich, wenn die Aufgabe auftaucht, all dies zusammenzufĂŒgen und eine gemeinsame Pipeline zu erstellen, und um Sternchen und FĂ€hnchen braucht man nicht mehr zu kĂ€mpfen, stellt sich die Frage â was soll man ĂŒberhaupt tun? Man muss irgendwie einen Konsens finden, aber niemand hat uns in der Schule dazu gelehrt. Wir sind schon seit der Schule daran gewöhnt: Acht Klasse â wow! â im Vergleich zur Siebten! Hier ist es ganz Ă€hnlich.
Ist das auch in Ihrem Unternehmen so?
Um das zu ĂŒberprĂŒfen, kann man sich folgende Fragen stellen.
Nutzen die Teams gemeinsame Werkzeuge, tragen sie zur Ănderung dieser gemeinsamen Werkzeuge bei?
Wie oft werden die Teams umgebildet â wechseln Spezialisten aus einem Team in ein anderes? In der DevOps-Umgebung wird das normal, denn manchmal kann eine Person einfach nicht verstehen, was ein anderes Fachgebiet tut. Sie wechselt in eine andere Abteilung, arbeitet dort zwei Wochen, um sich eine Orientierungs- und Interaktionskarte mit dieser Abteilung zu erstellen.
Kann ein Komitee zur Ănderung gegrĂŒndet und etwas geĂ€ndert werden? Oder ist dafĂŒr eine starke Hand der obersten FĂŒhrungsebene und eine Anweisung erforderlich? KĂŒrzlich habe ich auf Facebook geschrieben, wie eine wenig bekannte Bank durch Anweisungen Werkzeuge einfĂŒhrt: Sie haben eine Anweisung geschrieben, setzen es ein Jahr um und schauen, was passiert. Das ist natĂŒrlich langwierig und traurig.
Wie wichtig ist es fĂŒr Manager, persönliche Erfolge unabhĂ€ngig von den Erfolgen des Unternehmens zu erzielen?
Wenn Sie diese Fragen fĂŒr sich selbst beantworten, wird klarer, ob Sie ein solches Problem im Unternehmen haben.
Infrastruktur als Code
Nachdem dieses Problem ĂŒberwunden ist, ist die erste wichtige Praxis, ohne die es schwierig ist, im DevOps weiterzukommen â das ist Infrastruktur als Code.
Meistens wird Infrastructure as Code so verstanden:
â Lass uns alles mit bash automatisieren, uns mit Skripten eindecken, damit die Administratoren weniger manuelle Arbeit haben!
Aber das ist nicht so.
Infrastructure as Code bedeutet, dass Sie die IT-Systeme, mit denen Sie arbeiten, in Form von Code beschreiben, um stÀndig ihren Zustand zu verstehen.
Gemeinsam mit anderen Teams erstellen Sie eine Karte in Form von Code, die allen verstĂ€ndlich ist und nach der man navigieren kann. Es spielt keine Rolle, womit das gemacht wird â ob mit Chef, Ansible, Salt oder YAML-Dateien in Kubernetes â es macht keinen Unterschied.
Auf der Konferenz erzĂ€hlte ein Kollege von 2GIS, wie sie ihr internes Tool fĂŒr Kubernetes entwickelt haben, das die Struktur einzelner Systeme beschreibt. Um 500 Systeme zu beschreiben, benötigten sie ein separates Werkzeug, das diese Beschreibung generiert. Wenn man diese Beschreibung hat, kann jeder sich gegenseitig abgleichen, Ănderungen ĂŒberwachen, wie man sie verĂ€ndern und verbessern kann und was fehlt.
Sie mĂŒssen zustimmen, dass separate bash-Skripte normalerweise nicht zu diesem VerstĂ€ndnis fĂŒhren. In einer der Firmen, in denen ich gearbeitet habe, gab es sogar den Begriff âwrite onlyâ-Skript â wenn das Skript geschrieben ist, kann man es nicht mehr lesen. Ich glaube, das ist Ihnen auch bekannt.
Infrastructure as Code ist Code, der den aktuellen Zustand der Infrastruktur beschreibt. An diesem Code arbeiten gemeinsam viele Produkt-, Infrastruktur- und Serviceteams, und das Wichtigste ist, dass alle verstehen mĂŒssen, wie dieser Code ĂŒberhaupt funktioniert.
Der Code wird entsprechend den besten Praktiken fĂŒr die Arbeit mit Code gepflegt: gemeinsame Entwicklung, Code-Reviews, XP-Programmierung, Tests, Pull-Requests, CI fĂŒr Infrastructure as Code â das alles ist wertvoll und kann verwendet werden.
Der Code wird zur gemeinsamen Sprache fĂŒr alle Ingenieure.
Ănderungen an der Infrastruktur im Code nehmen nicht viel Zeit in Anspruch. Ja, auch im Infrastrukturcode kann es technische Schulden geben. Normalerweise stoĂen Teams nach anderthalb Jahren auf diese, nachdem sie angefangen haben, âInfrastructure as Codeâ in Form von vielen Skripten oder sogar Ansible einzufĂŒhren, das sie wie Spaghetticode schreiben und dazu noch bash-Skripte hineinschieben!
Wichtig: Wenn Sie diesen Mist noch nicht ausprobiert haben, merken Sie sich, dass Ansible â nicht bashBitte lesen Sie die Dokumentation sorgfĂ€ltig und erfahren Sie, was darĂŒber gesagt wird.
Infrastructure as Code bedeutet, den Infrastrukturcode in separate Schichten zu unterteilen.
In unserem Unternehmen unterscheiden wir 3 grundlegende Schichten, die sehr klar und einfach verstĂ€ndlich sind, aber es können auch mehr sein. Sie können Ihren Infrastrukturcode ĂŒberprĂŒfen und feststellen, ob Sie diese Bedingung erfĂŒllen oder nicht. Wenn keine Schichten erkennbar sind, sollten Sie sich Zeit nehmen, um ein wenig zu refaktorisieren.

Basis-Schicht â das sind die Einstellungen fĂŒr das Betriebssystem, Backups und andere Low-Level-Dinge, wie zum Beispiel, wie Kubernetes auf Basisniveau bereitgestellt wird.
Service-Ebene â das sind die Dienste, die Sie den Entwicklern anbieten: Logging als Dienst, Monitoring als Dienst, Datenbank als Dienst, Lastenausgleich als Dienst, Warteschlange als Dienst, Continuous Delivery als Dienst â viele Dienste, die verschiedene Teams der Entwicklung zur VerfĂŒgung stellen können. All dies muss in Ihrer Konfigurationsverwaltung als separate Module beschrieben werden.
Schicht, in der Anwendungen erstellt werden und beschrieben wird, wie sie auf den beiden vorhergehenden Schichten bereitgestellt werden.
Kontrollfragen
Haben Sie in Ihrem Unternehmen ein gemeinsames Infrastruktur-Repository? Ăberwachen Sie die technische Schuld in der Infrastruktur? Setzen Sie Entwicklungspraktiken im Infrastruktur-Repository ein? Ist Ihre Infrastruktur in Schichten unterteilt? Sie können sich an dem Schema Base-service-APP orientieren. Wie schwierig ist es, eine Ănderung vorzunehmen?
Wenn Sie festgestellt haben, dass Ănderungen eineinhalb Tage in Anspruch genommen haben, bedeutet das, dass Sie technische Schulden haben, mit denen Sie sich befassen sollten. Sie sind auf die Stolpersteine der technischen Schulden im Infrastrukturcode gestoĂen. Ich erinnere mich an viele Geschichten, in denen man, um einen bestimmten CCTL zu Ă€ndern, die HĂ€lfte des Infrastrukturcodes neu schreiben musste, weil KreativitĂ€t und der Wunsch, alles zu automatisieren, dazu gefĂŒhrt haben, dass ĂŒberall alles zugeschraubt wurde, alle Handgriffe entfernt wurden und Refaktorisierung notwendig ist.
Kontinuierliche Lieferung
Lassen Sie uns das Debit mit dem Kredit abgleichen. ZunĂ€chst erscheint eine Beschreibung der Infrastruktur, die ziemlich einfach sein kann. Es ist nicht erforderlich, alles im Detail zu beschreiben, aber eine grundlegende Beschreibung ist erforderlich, damit Sie damit arbeiten können. Andernfalls ist es unklar, auf welcher Grundlage Sie die kontinuierliche Lieferung durchfĂŒhren können. All diese Praktiken entfallen gleichzeitig, wenn Sie zu DevOps kommen, aber Sie mĂŒssen mit dem VerstĂ€ndnis beginnen, was Sie haben und wie Sie es verwalten. Dies ist die Praxis der Infrastruktur als Code.
Nachdem verstĂ€ndlich wurde, was Sie haben und wie Sie damit umgehen, beginnen Sie zu ĂŒberlegen, wie der Entwicklercode so schnell wie möglich in die Produktion gebracht werden kann. Ich meine zusammen mit dem Entwickler - denken wir an das Problem der âBrunnenâ, das heiĂt, es sind nicht einzelne Personen, die das erdenken, sondern das Team.
Als wir Ivan Evtuchovich das erste Buch sahen Jez Humble und die Gruppe von Autoren âContinuous Deliveryâ, das 2009 veröffentlicht wurde, dachten wir lange darĂŒber nach, wie wir seinen Titel ins Russische ĂŒbersetzen können. Wir wollten es als âStĂ€ndig liefernâ ĂŒbersetzen, aber leider ĂŒbersetzten wir es als âKontinuierliche Lieferungâ. Ich glaube, dass in unserem Titel etwas Russisches steckt, mit Schwung.
StÀndig liefern bedeutet
Der Code, der im Produktrepository liegt, kann jederzeit in die Produktion gebracht werden. Er kann ungenutzt bleiben, ist aber immer bereit dafĂŒr. Daher schreiben Sie immer Code mit einem schwer zu erklĂ€renden GefĂŒhl der gewissenhaften Besorgnis im Hinterkopf. Dieses GefĂŒhl tritt hĂ€ufig auf, wenn Sie Infrastrukturcode ausrollen. Dieses GefĂŒhl der Besorgnis sollte vorhanden sein - es fördert Denkprozesse, die es ermöglichen, Code ein wenig anders zu schreiben. Das sollte in den Regeln innerhalb der Entwicklung verankert werden.
Um stĂ€ndig zu liefern, benötigen Sie ein Artefaktformat, das durch die Infrastrukturplattform geht. Wenn Sie unterschiedliche Formate von âAbfĂ€llen der LebensfĂŒhrungâ durch die Infrastrukturplattform werfen, wird sie nicht mehr einheitlich, es wird schwierig, sie zu unterstĂŒtzen, und es entsteht ein technisches Schuldenproblem. Das Artefaktformat muss angeglichen werden - das ist auch eine kollektive Aufgabe: Alle mĂŒssen sich zusammenfinden, ihre Köpfe zusammenstecken und dieses Format erarbeiten.
Das Artefakt verbessert sich kontinuierlich und Ă€ndert sich gemÀà der Produktionsumgebung wĂ€hrend des Durchlaufs durch die Lieferpipeline. Wenn das Artefakt durch die Pipeline bewegt wird, begegnet es stĂ€ndig einigen unangenehmen Dingen, die dem Ă€hneln, mit denen es im Produktionsumfeld konfrontiert wird. WĂ€hrend in der klassischen Softwareentwicklung dies ein Systemadministrator ĂŒbernimmt, der das Deployment durchfĂŒhrt, geschieht dies im DevOps-Prozess kontinuierlich: Hier wurde es durch einige Tests gedreht, dort wurde es in einen Kubernetes-Cluster eingefĂŒgt, der mehr oder weniger der Produktionsumgebung Ă€hnelt, und hier wurde plötzlich ein Lasttest gestartet.
Das erinnert an das Spiel Pac-Man â das Artefakt durchlĂ€uft eine Art Geschichte. Dabei ist es wichtig zu ĂŒberwachen, ob der Code tatsĂ€chlich die Geschichte durchlĂ€uft und ob sie mit Ihrer Produktionsumgebung verbunden ist. Geschichten aus der Produktion können in den Continuous Delivery-Prozess integriert werden: Es gab zum Beispiel einen Vorfall, als etwas ausgefallen ist, also lassen Sie uns dieses Szenario einfach in das System programmieren. Jedes Mal wird der Code auch dieses Szenario durchlaufen, und Sie werden das nĂ€chste Mal nicht mit diesem Problem konfrontiert. Sie werden viel frĂŒher davon erfahren, bevor es zu Ihrem Kunden kommt.
Verschiedene Deployment-Strategien. Zum Beispiel verwenden Sie A/B-Tests oder Canary-Deployments, um den Code auf verschiedene Arten bei unterschiedlichen Kunden zu testen, Informationen darĂŒber zu erhalten, wie der Code funktioniert, und das viel frĂŒher, als wenn er an 100 Millionen Benutzer freigegeben wird.
âStetige Lieferungâ sieht so aus.

Der Prozess der Lieferung Dev, CI, Test, PreProd, Prod ist keine separate Umgebung, sondern Stufen oder Stationen mit nicht brennbaren Summen, durch die Ihr Artefakt lÀuft.
Wenn Sie Code fĂŒr Infrastruktur haben, der als Basisdienst-App beschrieben ist, hilft er nicht alle Szenarien zu vergessen,, und sie ebenfalls in Form von Code fĂŒr dieses Artefakt zu dokumentieren, das Artefakt voranzubringen und es unterwegs zu Ă€ndern.
Fragen zur SelbstĂŒberprĂŒfung
Dauert es von der Beschreibung des Features bis zur Veröffentlichung in der Produktion in 95 % der FÀlle weniger als eine Woche? Steigt die QualitÀt des Artefakts in jeder Phase der Pipeline? Gibt es eine Geschichte, durch die es lÀuft? Verwenden Sie verschiedene Deployment-Strategien?
Wenn alle Antworten ja sind, dann sind Sie unglaublich toll! Schreiben Sie Ihre Antworten in die Kommentare â ich wĂŒrde mich freuen).
Feedback
Dies ist die schwierigste Praxis von allen. Auf der Konferenz DevOpsConf war ein Kollege von Infobip, der darĂŒber sprach, etwas verwirrt in seinen Worten, denn es ist wirklich eine sehr komplexe Praxis, bei der man alles ĂŒberwachen muss!

Vor langer Zeit, als ich bei Qik arbeitete und wir festgestellt haben, dass wir alles ĂŒberwachen mĂŒssen. Wir haben das getan und in Zabbix hatten wir 150.000 Items, die stĂ€ndig ĂŒberwacht werden. Das war beĂ€ngstigend, der technische Direktor hat sich nur am Kopf gekratzt:
â Leute, warum quĂ€lt ihr den Server mit undefinierbaren Dingen?
Aber dann geschah ein Vorfall, der zeigte, dass dies tatsÀchlich eine sehr coole Strategie ist.
Einer der Dienste begann stĂ€ndig abzustĂŒrzen. Interessanterweise ist er anfangs nicht abgestĂŒrzt, da dort kein Code hinzugefĂŒgt wurde, denn es war ein Basisbroker, in dem praktisch keine Business-FunktionalitĂ€ten waren â er ĂŒbertrug einfach Nachrichten zwischen einzelnen Diensten. Der Dienst hatte sich vier Monate lang nicht geĂ€ndert und begann plötzlich mit einem âSegmentation faultâ abzustĂŒrzen.
Wir waren schockiert, öffneten unsere Grafiken in Zabbix, und es stellte sich heraus, dass vor anderthalb Wochen das Verhalten der Anfragen im API-Dienst, der diesen Broker verwendet, sich stark geÀndert hatte. Danach sahen wir, dass sich die HÀufigkeit des Sendens eines bestimmten Nachrichtentyps geÀndert hatte. SpÀter haben wir festgestellt, dass es sich um die Android-Clients handelte. Wir fragten:
â Leute, was ist vor anderthalb Wochen passiert?
Als Antwort erhielten wir eine interessante Geschichte, dass sie das UI umgestaltet hatten. Kaum jemand wĂŒrde sofort sagen, dass er die HTTP-Bibliothek gewechselt hat. FĂŒr Android-Clients ist es wie wenn man die Seife im Bad wechselt â sie erinnern sich einfach nicht daran. Letztendlich haben wir nach 40 Minuten GesprĂ€ch herausgefunden, dass sie tatsĂ€chlich die HTTP-Bibliothek gewechselt hatten und sich die Standard-Timings geĂ€ndert hatten. Das fĂŒhrte dazu, dass sich das Verhalten des Traffics auf dem API-Server Ă€nderte, was zu der Situation fĂŒhrte, die eine Kollision innerhalb des Brokers verursachte, und er begann abzustĂŒrzen.
Ohne tiefgehende Ăberwachung ist das ĂŒberhaupt nicht zu erkennen.. Wenn es in der Organisation jedoch noch das Problem der "Brunnen" gibt, bei dem jeder die Verantwortung auf den anderen schiebt, kann das jahrelang bestehen bleiben. Sie starten einfach den Server neu, weil das Problem nicht gelöst werden kann. Wenn Sie alle Ereignisse, die Sie haben, ĂŒberwachen, verfolgen und analysieren und das Monitoring als ein Test-Tool verwenden â indem Sie Code schreiben und sofort angeben, wie er ĂŒberwacht werden soll, auch in Form von Code (wir haben bereits Infrastruktur als Code), wird alles so klar wie der Handballen. Sogar solch komplexe Probleme sind leicht nachzuvollziehen.

Sammeln Sie alle Informationen darĂŒber, was mit dem Artefakt in jeder Phase des Lieferprozesses geschieht â nicht in der Produktion.
Laden Sie das Monitoring in CI, und dort werden bereits einige grundlegende Dinge sichtbar sein. AuĂerdem werden Sie diese auch im Test, im PredProd und im Lasttest sehen. Sammeln Sie Informationen in allen Phasen, nicht nur Metriken, Statistiken, sondern auch Logs: wie die Anwendung ausgerollt wurde, Anomalien â sammeln Sie alles.
Andernfalls wird es schwierig sein, sich zurechtzufinden. Ich habe bereits gesagt, dass DevOps eine gröĂere KomplexitĂ€t mit sich bringt. Um mit dieser KomplexitĂ€t umzugehen, benötigt man eine angemessene Analytik..
Fragen zur Selbstkontrolle
Ist Ihr Monitoring und Logging ein Entwicklungswerkzeug fĂŒr Sie? Denken Ihre Entwickler, einschlieĂlich Ihnen, beim Schreiben von Code darĂŒber nach, wie er ĂŒberwacht werden kann?
Erfahren Sie von Problemen durch Kunden? Verstehen Sie den Kunden besser durch das Monitoring und Logging? Verstehen Sie das System besser durch das Monitoring und Logging? Ăndern Sie das System einfach, weil Sie gesehen haben, dass der Trend im System steigt und Sie verstehen, dass in 3 Wochen alles zusammenbricht?
Wenn Sie diese drei Komponenten haben, können Sie ĂŒber die infrastrukturelle Plattform in Ihrem Unternehmen nachdenken.
Infrastrukturelle Plattform
Es geht nicht darum, dass dies eine Sammlung von voneinander unabhÀngigen Werkzeugen ist, die in jedem Unternehmen vorhanden sind.
Der Sinn einer infrastrukturellen Plattform besteht darin, dass alle Teams diese Werkzeuge nutzen und gemeinsam weiterentwickeln.
Es ist klar, dass es separate Teams gibt, die fĂŒr die Entwicklung einzelner Teile der infrastrukturellen Plattform verantwortlich sind. Aber die Verantwortung fĂŒr die Entwicklung, FunktionsfĂ€higkeit und Förderung der infrastrukturellen Plattform trĂ€gt jeder Ingenieur. Auf interner Ebene wird dies zu einem gemeinsamen Werkzeug..
Alle Teams entwickeln eine Infrastrukturplattform und behandeln sie sorgfĂ€ltig wie ihre eigene IDE.. In Ihrer IDE installieren Sie verschiedene Plugins, um alles schön und schnell zu gestalten, und konfigurieren Tastenkombinationen. Wenn Sie Sublime, Atom oder Visual Studio Code öffnen, fallen sofort Fehler im Code auf und Sie merken, dass es ĂŒberhaupt unmöglich ist zu arbeiten. Sofort wird Ihnen schlecht und Sie laufen los, um Ihre IDE zu reparieren.
Behandeln Sie Ihre Infrastrukturplattform genauso. Wenn Sie merken, dass etwas nicht stimmt, stellen Sie eine Anfrage, wenn Sie es nicht selbst reparieren können. Wenn es jedoch etwas Einfaches ist â beheben Sie es selbst, senden Sie eine Pull-Request â die Kollegen prĂŒfen, fĂŒgen hinzu. Dies ist ein etwas anderer Ansatz im Ingenieurwesen fĂŒr den Kopf des Entwicklers.
Die Infrastrukturplattform sorgt dafĂŒr, dass Artefakte von der Entwicklung zum Kunden mit stĂ€ndig steigender QualitĂ€t ĂŒbertragen werden.. In der IP ist eine Reihe von Geschichten programmiert, die mit dem Code in Produktion passieren. Ăber die Jahre der Entwicklung werden diese Geschichten sehr zahlreich, einige davon sind einzigartig und beziehen sich nur auf Sie â sie sind nicht googlbar.
In diesem Moment wird die Infrastrukturplattform zu Ihrem Wettbewerbsvorteil., weil darin Dinge eingebaut sind, die kein Werkzeug des Wettbewerbers hat. Je tiefer Ihre IP ist, desto gröĂer ist Ihr Wettbewerbsvorteil in Bezug auf die Time-to-market. Hier tritt das Problem des Vendor Lock-inauf: Sie können sich eine fremde Plattform nehmen, aber wenn Sie auf die Erfahrung anderer zurĂŒckgreifen, werden Sie nicht verstehen, inwieweit diese relevant fĂŒr Sie ist. Ja, nicht jedes Unternehmen kann eine Plattform wie Amazon aufbauen. Das ist eine schwierige Grenze, wo die Erfahrung des Unternehmens fĂŒr seine Position auf dem Markt relevant ist, und den Vendor Lock-in sollte man dort nicht herunterlassen. DarĂŒber muss man auch nachdenken.
Diagramm
Das ist das grundlegende Schema einer Infrastrukturplattform, das Ihnen helfen wird, alle Praktiken und Prozesse in einem DevOps-Unternehmen zu etablieren.

Lassen Sie uns betrachten, woraus sie besteht.
Ein System zur Orchestrierung von Ressourcen, das CPU, Speicher, Festplatten fĂŒr Anwendungen und andere Dienste bereitstellt. DarĂŒber hinaus gibt es niedrigere Dienste: Ăberwachung, Protokollierung, CI/CD-Engine, Artefakt-Speicher, Infrastruktur als Code-Systeme.
Höhere Dienste.: Datenbank als Dienst, Warteschlangen als Dienst, Load Balancer als Dienst, BildgröĂenĂ€nderung als Dienst, Big Data Fabrik als Dienst. DarĂŒber hinaus â pipeline, die stĂ€ndig modifizierten Code an Ihren Kunden liefert.
Sie erhalten Informationen darĂŒber, wie Ihre Software beim Kunden funktioniert, Ă€ndern, liefern diesen Code erneut, erhalten Informationen â und entwickeln damit stĂ€ndig sowohl die Infrastrukturplattform als auch Ihre Software weiter.
In dem Diagramm besteht die Delivery-Pipeline aus mehreren Phasen. Aber das ist ein grundlegendes Schema, das als Beispiel dient â es muss nicht eins zu eins wiederholt werden. Die Phasen interagieren mit Diensten, als wĂ€ren es Dienste â jeder Baustein der Plattform erzĂ€hlt seine eigene Geschichte: wie Ressourcen zugewiesen werden, wie die Anwendung gestartet wird, mit Ressourcen arbeitet, ĂŒberwacht wird und sich Ă€ndert.
Es ist wichtig zu verstehen, dass jeder Teil der Plattform eine Geschichte erzĂ€hlt, und sich zu fragen â welche Geschichte erzĂ€hlt dieser Baustein, vielleicht sollte man ihn wegwerfen und durch einen externen Dienst ersetzen. Zum Beispiel, könnte man anstelle des Bausteins Okmeter verwenden? Möglicherweise haben die Leute diese Expertise bereits viel mehr entwickelt als wir. Aber vielleicht auch nicht â vielleicht haben wir eine einzigartige Expertise, und wir mĂŒssen Prometheus einsetzen und das weiterentwickeln.
Plattformerstellung
Das ist ein komplexer Kommunikationsprozess. Wenn Sie grundlegende Praktiken haben, initiieren Sie die Kommunikation zwischen verschiedenen Ingenieuren und Spezialisten, die Anforderungen und Standards entwickeln und diese stĂ€ndig fĂŒr verschiedene Werkzeuge und AnsĂ€tze anpassen. Hier ist die Kultur wichtig, die in DevOps vorhanden ist.

Mit der Kultur ist alles sehr einfach â es sind Zusammenarbeit und Kommunikation, das heiĂt, der Wunsch, gemeinsam im selben Bereich zu arbeiten, der Wunsch, ein Werkzeug gemeinsam zu beherrschen. Es gibt hier keine Raketenwissenschaft â alles ist sehr einfach, banal. Zum Beispiel leben wir alle im Treppenhaus und halten es sauber â so sieht diese Kultur aus.
Und wie sieht es bei Ihnen aus?
Wieder Fragen, die Sie sich stellen können.
Wurde die Infrastrukturplattform ĐČŃĐŽĐ”Đ»Đ”ĐœĐ°? Wer ist fĂŒr ihre Entwicklung verantwortlich? Verstehen Sie die Wettbewerbsvorteile Ihrer Infrastrukturplattform?
Diese Fragen sollte man sich stÀndig stellen. Wenn etwas an externe Dienste ausgelagert werden kann, sollte man es auslagern. Wenn ein externer Dienst beginnt, Ihre Bewegungen zu blockieren, muss man ein System in sich selbst aufbauen.
Also, DevOps...
... es ist ein komplexes System, das Folgendes enthalten sollte:
- Ein digitales Produkt.
- GeschÀftsmodelle, die dieses digitale Produkt weiterentwickeln.
- Entwicklungsteams, die Code schreiben.
- Continuous Delivery-Praktiken.
- Plattformen als Dienst.
- Infrastruktur als Dienst.
- Infrastruktur als Code.
- Einzelne Praktiken zur Sicherstellung der ZuverlÀssigkeit, die in DevOps verankert sind.
- Eine Feedback-Praxis, die all dies beschreibt.

Man kann dieses Schema nutzen und darin das markieren, was es in Ihrem Unternehmen bereits in irgendeiner Form gibt: hat sich entwickelt oder muss noch entwickelt werden.
In ein paar Wochen findet statt . im Rahmen von RIT++. Kommen Sie zur Konferenz, wo Sie viele spannende VortrĂ€ge ĂŒber Continuous Delivery, Infrastruktur als Code und DevOps-Transformation erwarten. , der letzte Stichtag fĂŒr die Preise ist der 20. Mai
Quelle: habr.com
