{"id":34140,"date":"2019-10-31T21:56:35","date_gmt":"2019-10-31T18:56:35","guid":{"rendered":"https:\/\/prohoster.info\/blog\/printsipy-razrabotki-sovremennyh-prilozhenij-ot-nginx-chast-1\/"},"modified":"2019-10-31T21:56:35","modified_gmt":"2019-10-31T18:56:35","slug":"printsipy-razrabotki-sovremennyh-prilozhenij-ot-nginx-chast-1","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/printsipy-razrabotki-sovremennyh-prilozhenij-ot-nginx-chast-1","title":{"rendered":"Prinzipien der Entwicklung moderner Anwendungen von NGINX. Teil 1","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hallo, Freunde. Im Vorfeld des Starts des Kurses <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/h4Ez\/\">\u201eBackend-Entwickler auf PHP\u201c<\/a><\/noindex>, teilen wir traditionell mit euch die \u00dcbersetzung n\u00fctzlicher Materialien.<\/p>\n<p>Software l\u00f6st immer mehr allt\u00e4gliche Aufgaben und wird dabei immer komplizierter. Wie Marc Andreessen einmal sagte, sie erobert die Welt. <\/p>\n<p><img decoding=\"async\" alt=\"Prinzipien der Entwicklung moderner Anwendungen von NGINX. Teil 1\" src=\"\/wp-content\/uploads\/928924e3036beaac518dd4a2674a8a30.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn den letzten Jahren haben sich die Ans\u00e4tze zur Entwicklung und Bereitstellung von Anwendungen erheblich ver\u00e4ndert. Es gab tektonische Verschiebungen, die letztendlich zu einem Set von Prinzipien f\u00fchrten. Diese Prinzipien haben sich als n\u00fctzlich erwiesen bei der Bildung von Teams, dem Entwurf, der Entwicklung und der Bereitstellung eurer Anwendung an die Endbenutzer. <noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Die Prinzipien k\u00f6nnen wie folgt zusammengefasst werden: <i>Die Anwendung muss klein, netzwerkf\u00e4hig sein und eine entwicklerorientierte Architektur haben.<\/i>Auf Grundlage dieser drei Prinzipien k\u00f6nnt ihr eine zuverl\u00e4ssige, umfassende Anwendung erstellen, die schnell und sicher an den Endbenutzer ausgeliefert werden kann und sich gleichzeitig leicht skalieren und erweitern l\u00e4sst.<\/p>\n<p><img decoding=\"async\" alt=\"Prinzipien der Entwicklung moderner Anwendungen von NGINX. Teil 1\" src=\"\/wp-content\/uploads\/9116869a53fb6cf89d92f1d507d7904f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJedes der vorgeschlagenen Prinzipien hat eine Reihe von Aspekten, die wir diskutieren werden, um zu zeigen, wie jedes Prinzip dazu beitr\u00e4gt, das endg\u00fcltige Ziel zu erreichen, n\u00e4mlich die schnelle Bereitstellung zuverl\u00e4ssiger Anwendungen, die einfach zu warten und zu verwenden sind. Wir werden die Prinzipien im Vergleich zu ihren Gegens\u00e4tzen betrachten, um zu verdeutlichen, was es bedeutet, beispielsweise \u201eStellen Sie sicher, dass Sie den <i>Prinzip der Kleinheit\u201c verwenden.<\/i>\u00bb.<\/p>\n<p>Wir hoffen, dass dieser Artikel euch dazu anregt, die vorgeschlagenen Prinzipien zum Aufbau moderner Anwendungen zu nutzen, die einen koh\u00e4renten Ansatz f\u00fcr das Design im Kontext eines kontinuierlich wachsenden Technologie-Stacks gew\u00e4hrleisten. <\/p>\n<p>Wenn ihr diese Prinzipien anwendet, werdet ihr feststellen, dass ihr den neuesten Trends in der Softwareentwicklung folgt, einschlie\u00dflich des Ansatzes <noindex><a rel=\"nofollow\" href=\"https:\/\/www.nginx.com\/blog\/tag\/devops\/\">DevOps<\/a><\/noindex> zur Entwicklung und Bereitstellung von Anwendungen, der Nutzung von Containern (zum Beispiel <noindex><a rel=\"nofollow\" href=\"https:\/\/www.nginx.com\/blog\/tag\/docker\/\">Docker<\/a><\/noindex>) und Frameworks zur Orchestrierung von Containern (zum Beispiel <noindex><a rel=\"nofollow\" href=\"https:\/\/www.nginx.com\/blog\/tag\/kubernetes\/\">Kubernetes<\/a><\/noindex>), der Verwendung von Mikroservices (einschlie\u00dflich der Mikroservice-Architektur <noindex>NGINX<\/noindex> und <noindex><a rel=\"nofollow\" href=\"https:\/\/www.nginx.com\/blog\/what-is-a-service-mesh\/\">Netzwerkarchitektur<\/a><\/noindex> f\u00fcr Mikroservice-Anwendungen.<\/p>\n<p><b>Was ist eine moderne Anwendung?<\/b><\/p>\n<p>Moderne Anwendungen? Moderner Stack? Was genau bedeutet \u201emodern\u201c? <\/p>\n<p>Die meisten Entwickler haben nur eine allgemeine Vorstellung davon, was eine moderne Anwendung ausmacht, deshalb ist es notwendig, eine klare Definition dieses Begriffs zu geben.<\/p>\n<p>Moderne Anwendungen unterst\u00fctzen mehrere Clients, sei es ein Benutzerinterface auf der JavaScript-Bibliothek React, eine mobile Anwendung f\u00fcr Android oder iOS oder eine Anwendung, die \u00fcber eine API mit einer anderen verbunden ist. Eine moderne Anwendung impliziert die Existenz einer unbestimmten Anzahl von Clients, f\u00fcr die sie Daten oder Dienste bereitstellt.<\/p>\n<p>Moderne Anwendungen bieten eine API f\u00fcr den Zugriff auf die angeforderten Daten und Dienste. Die API sollte unver\u00e4nderlich und best\u00e4ndig sein und nicht speziell auf eine Anfrage eines bestimmten Clients zugeschnitten sein. Die API ist \u00fcber HTTP(S) verf\u00fcgbar und bietet Zugang zu allen Funktionen, die im GUI oder CLI vorhanden sind. <\/p>\n<p>Daten sollten in einem gebr\u00e4uchlichen, kompatiblen Format wie JSON verf\u00fcgbar sein. Die API stellt Objekte und Dienste in einer verst\u00e4ndlichen, organisierten Form bereit; beispielsweise bieten RESTful APIs oder GraphQL ein angemessenes Interface.<\/p>\n<p>Moderne Anwendungen basieren auf einem modernen Stack, und ein moderner Stack ist ein solcher, der solche Anwendungen entsprechend unterst\u00fctzt. Ein solcher Stack erm\u00f6glicht es Entwicklern, problemlos Anwendungen mit HTTP-Interfaces und klaren API-Endpunkten zu erstellen. Der gew\u00e4hlte Ansatz erm\u00f6glicht es Ihrer Anwendung, Daten einfach im JSON-Format zu empfangen und zu senden. Mit anderen Worten, ein moderner Stack entspricht den Elementen einer Twelve-Factor-Anwendung f\u00fcr <noindex><a rel=\"nofollow\" href=\"https:\/\/www.nginx.com\/blog\/microservices-reference-architecture-nginx-twelve-factor-app\/\">Mikroservices<\/a><\/noindex>. <\/p>\n<p>Beliebte Versionen dieses Stacks basieren auf <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nginxinc\/mra-photoresizer\">Java<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nginxinc\/mra-user-manager\">Python<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nginxinc\/mra-photouploader\">Node<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nginxinc\/mra-album-manager\">Ruby<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nginxinc\/mra-pages\">PHP<\/a><\/noindex> und <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nginxinc\/mra-content-service\">Go<\/a><\/noindex>. Mikrosservice-Architektur <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nginxinc\/mra-ingenious\">NGINX<\/a><\/noindex> stellt ein Beispiel f\u00fcr einen modernen Stack dar, der in jeder der genannten Sprachen implementiert ist.<\/p>\n<p>Bitte beachten Sie, dass wir keinen ausschlie\u00dflich mikrosserviceorientierten Ansatz propagieren. Viele von Ihnen arbeiten mit Monolithen, die sich weiterentwickeln m\u00fcssen, w\u00e4hrend andere mit SOA-Anwendungen umgehen, die erweitert werden, um mikrosserviceorientierte Anwendungen zu werden. Dritte bewegen sich in Richtung der Implementierung von serverlosen Anwendungen, und einige setzen Kombinationen der oben genannten um. Die in diesem Artikel dargelegten Prinzipien sind auf jede dieser Systeme anwendbar, jedoch mit einigen geringf\u00fcgigen \u00c4nderungen. <\/p>\n<p><b>Prinzipien<\/b><\/p>\n<p>Jetzt, wo wir ein gemeinsames Verst\u00e4ndnis dar\u00fcber haben, was moderne Anwendungen und der moderne Stack sind, ist es an der Zeit, in die Prinzipien der Architektur und Entwicklung einzutauchen, die Ihnen in der Entwicklung, Implementierung und Wartung moderner Anwendungen gute Dienste leisten werden.<\/p>\n<p>Eines der Prinzipien lautet \"Erstellen Sie kleine Anwendungen\"; nennen wir es einfach <i>das Prinzip der Kleinheit<\/i>. Es gibt unglaublich komplexe Anwendungen, die aus einer Vielzahl von beweglichen Komponenten bestehen. Der Aufbau einer Anwendung aus kleinen, diskreten Komponenten vereinfacht das Design, die Wartung und die Nutzung insgesamt. (Beachten Sie, dass wir \"vereinfacht\" und nicht \"einfach gemacht\" gesagt haben).<\/p>\n<p>Das zweite Prinzip besagt, dass wir die Produktivit\u00e4t der Entwickler steigern k\u00f6nnen, indem wir ihnen helfen, sich auf die Funktionen zu konzentrieren, die sie entwickeln, w\u00e4hrend wir sie von den Sorgen um Infrastruktur und CI\/CD w\u00e4hrend der Implementierung befreien. Zusammengefasst bedeutet unser Ansatz <i>entwicklerzentriert<\/i>.<\/p>\n<p>Schlie\u00dflich sollte alles, was mit Ihrer Anwendung zu tun hat, mit dem Netzwerk verbunden sein. In den letzten 20 Jahren haben wir erhebliche Fortschritte in Richtung einer vernetzten Zukunft gemacht, da Netzwerke schneller und Anwendungen komplexer geworden sind. Wie bereits festgestellt, sollte eine moderne Anwendung von vielen verschiedenen Clients \u00fcber das Netzwerk verwendet werden. Die Anwendung des Netzwerkdenkens in der Architektur bietet erhebliche Vorteile, die gut zu <i>das Prinzip der Kleinheit<\/i> und dem konzeptionellen Ansatz passen, <i>entwicklerzentriert<\/i>.<\/p>\n<p>Wenn Sie bei der Entwicklung und Implementierung einer Anwendung die genannten Prinzipien im Hinterkopf behalten, haben Sie einen unbestreitbaren Vorteil bei der Entwicklung und Lieferung Ihres Produkts.<\/p>\n<p>Lassen Sie uns diese drei Prinzipien genauer betrachten.<\/p>\n<p><b>Prinzip der Kleinheit<\/b><\/p>\n<p>Es ist schwierig f\u00fcr das menschliche Gehirn, gleichzeitig eine gro\u00dfe Menge an Informationen zu verarbeiten. In der Psychologie bezeichnet der Begriff kognitive Belastung die Gesamtmenge an mentalem Aufwand, die erforderlich ist, um Informationen im Ged\u00e4chtnis zu behalten. Eine Verringerung der kognitiven Belastung der Entwickler hat Priorit\u00e4t, da sie sich so auf die Probleml\u00f6sung konzentrieren k\u00f6nnen, anstatt das aktuelle komplexe Modell der gesamten Anwendung und der entwickelten Funktionen im Kopf zu behalten. <\/p>\n<p><img decoding=\"async\" alt=\"Prinzipien der Entwicklung moderner Anwendungen von NGINX. Teil 1\" src=\"\/wp-content\/uploads\/26df2016a46d8b82b45832fe1df9bf23.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Anwendungen werden aus folgenden Gr\u00fcnden dekomponiert:<\/p>\n<ul>\n<li>Verringerung der kognitiven Belastung der Entwickler;<\/li>\n<li>Beschleunigung und Vereinfachung der Tests;<\/li>\n<li>Schnelle Bereitstellung von \u00c4nderungen in der Anwendung.<\/li>\n<\/ul>\n<p><\/i><br \/>\nEs gibt mehrere M\u00f6glichkeiten, die kognitive Belastung der Entwickler zu reduzieren, und hier kommt das Prinzip der Kleinheit ins Spiel.<\/p>\n<p>Also, drei M\u00f6glichkeiten, die kognitive Belastung zu senken:<\/p>\n<ol>\n<li>Die Zeitrahmen reduzieren, die sie bei der Entwicklung einer neuen Funktion ber\u00fccksichtigen m\u00fcssen \u2013 je k\u00fcrzer der Zeitrahmen, desto geringer die kognitive Belastung.<\/li>\n<li>Die Menge an Code reduzieren, an dem gleichzeitig gearbeitet wird \u2013 weniger Code \u2013 weniger Belastung.<\/li>\n<li>Den Prozess der inkrementellen \u00c4nderungen an der Anwendung vereinfachen.<\/li>\n<\/ol>\n<p>\n<b>Reduzierung der Entwicklungszeitr\u00e4ume<\/b><\/p>\n<p>Lassen Sie uns in die Zeiten zur\u00fcckkehren, als die Methodik <code>Wasserfall<\/code> der Standard f\u00fcr den Entwicklungsprozess war und Zeitrahmen von sechs Monaten bis zwei Jahren f\u00fcr die Entwicklung oder Aktualisierung einer Anwendung verbreitete Praxis waren. In der Regel lasen Ingenieure zuerst die entsprechenden Dokumente wie die Produktanforderungen (PRD), das Systemreferenzdokument (SRD), den Architekturplan und begannen, all diese Dinge in ein kognitives Modell zusammenzuf\u00fchren, gem\u00e4\u00df dem sie den Code schrieben. Als sich die Anforderungen und damit die Architektur \u00e4nderten, mussten gro\u00dfe Anstrengungen unternommen werden, um das gesamte Team \u00fcber die Aktualisierungen des kognitiven Modells zu informieren. Ein solcher Ansatz konnte im schlimmsten Fall die Arbeit einfach l\u00e4hmen.<\/p>\n<p>Die gr\u00f6\u00dfte Ver\u00e4nderung im Prozess der Anwendungsentwicklung war die Einf\u00fchrung der Methodik Agile. Eine der Hauptmerkmale der Methodik <code>Agil<\/code> ist die iterative Entwicklung. Dies f\u00fchrt wiederum zu einer Verringerung der kognitiven Belastung der Ingenieure. Anstatt von der Entwicklerteam zu verlangen, die Anwendung in einem langen Zyklus zu realisieren, <code>Agil<\/code> erm\u00f6glicht dieser Ansatz, sich auf kleine Codeabschnitte zu konzentrieren, die schnell getestet und bereitgestellt werden k\u00f6nnen, wobei gleichzeitig auch R\u00fcckmeldungen eingeholt werden. Die kognitive Belastung der Anwendung hat sich von einem Zeitrahmen von sechs Monaten bis zwei Jahren mit einer gro\u00dfen Menge an Spezifikationen auf zweiw\u00f6chige Funktionen oder \u00c4nderungen verschoben, die auf ein verschwommenes Verst\u00e4ndnis eines gro\u00dfen Projekts ausgerichtet sind.<\/p>\n<p>Die Verschiebung des Fokus von umfangreichen Anwendungen hin zu konkreten kleinen Funktionen, die in einem zweiw\u00f6chigen Sprint abgeschlossen werden k\u00f6nnen, mit einem Blick in die Zukunft, der nicht mehr als eine Funktion aus dem n\u00e4chsten Sprint umfasst, stellt einen bedeutenden Wandel dar. Dies hat die Produktivit\u00e4t der Entwicklung gesteigert und gleichzeitig die kognitive Belastung reduziert, die st\u00e4ndig schwankte.<\/p>\n<p>In der Methodik <code>Agil<\/code> wird davon ausgegangen, dass die endg\u00fcltige Anwendung eine etwas ver\u00e4nderte Version des urspr\u00fcnglichen Konzepts sein wird, weshalb der endg\u00fcltige Entwicklungsstand unbedingt mehrdeutig ist. Nur die Ergebnisse jedes einzelnen Sprints k\u00f6nnen klar und eindeutig sein.<\/p>\n<p><b>Kleine Codebasen<\/b><\/p>\n<p>Der n\u00e4chste Schritt zur Verringerung der kognitiven Belastung besteht darin, die Codebasis zu verkleinern. Modern Anwendungen sind in der Regel umfangreich \u2013 eine zuverl\u00e4ssige, unternehmensweite Anwendung kann aus Tausenden von Dateien und Hunderttausenden von Codezeilen bestehen. Je nach Organisation der Dateien k\u00f6nnen die Verbindungen und Abh\u00e4ngigkeiten zwischen dem Code und den Dateien offensichtlich oder umgekehrt sein. Selbst das Debuggen der Ausf\u00fchrung des Codes kann Probleme verursachen, je nachdem, welche Bibliotheken verwendet werden und wie gut die Debugging-Tools zwischen Bibliotheken\/Paketen\/Modulen und benutzerdefiniertem Code unterscheiden.<\/p>\n<p>Der Aufbau eines funktionierenden mentalen Modells des Codes einer Anwendung kann erheblich Zeit in Anspruch nehmen und erneut eine hohe kognitive Belastung f\u00fcr die Entwickler mit sich bringen. Dies ist besonders typisch f\u00fcr monolithische Codebasen, in denen eine gro\u00dfe Menge an Code vorhanden ist, dessen Interaktionen zwischen den funktionalen Komponenten nicht klar definiert sind und die Trennung der Aufmerksamkeitsobjekte oft verschwommen ist, da die funktionalen Grenzen nicht eingehalten werden. <\/p>\n<p>Eine effektive M\u00f6glichkeit, die kognitive Belastung f\u00fcr Ingenieure zu reduzieren, besteht darin, auf eine Microservices-Architektur umzusteigen. Im Microservices-Ansatz konzentriert sich jeder Dienst auf einen bestimmten Funktionsbereich; dabei ist der Sinn des Dienstes in der Regel klar und verst\u00e4ndlich definiert. Die Grenzen des Dienstes sind ebenfalls klar \u2013 erinnern Sie sich daran, dass die Kommunikation mit dem Dienst \u00fcber APIs erfolgt, sodass Daten, die von einem Dienst erzeugt werden, leicht an einen anderen \u00fcbergeben werden k\u00f6nnen.<\/p>\n<p>Die Interaktion mit anderen Diensten ist normalerweise auf einige Benutzer- und Anbieter-Dienste beschr\u00e4nkt, die einfache und klare API-Aufrufe nutzen, beispielsweise \u00fcber REST. Das hei\u00dft, die kognitive Last f\u00fcr den Ingenieur wird erheblich reduziert. Die gr\u00f6\u00dfte Herausforderung bleibt das Verst\u00e4ndnis des Modells der Interaktion zwischen den Diensten und wie Dinge wie Transaktionen in mehreren Diensten ablaufen. Insgesamt verringert die Nutzung von Mikrodiensten die kognitive Belastung, indem sie die Menge an Code reduziert, klare Servicegrenzen festlegt und das Verst\u00e4ndnis der Beziehungen zwischen Benutzern und Anbietern f\u00f6rdert.<\/p>\n<p><b>Kleine inkrementelle \u00c4nderungen<\/b><\/p>\n<p>Das letzte Element des Prinzips <i>Kleinigkeit<\/i> \u2013 ist das Management von \u00c4nderungen. Ein besonderes Verlangen f\u00fcr Entwickler ist es, sich den Code anzuzeigen ( vielleicht sogar ihren eigenen, \u00e4lteren Code) und zu sagen: \u201eDas ist Mist, wir m\u00fcssen alles neu schreiben.\u201c Manchmal ist das die richtige Entscheidung, manchmal nicht. Es legt das Gewicht eines globalen \u00c4nderungsmodells auf das Team der Entwickler, was wiederum zu einer erheblichen kognitiven Belastung f\u00fchrt. Es ist besser, wenn Ingenieure sich auf die \u00c4nderungen konzentrieren, die sie w\u00e4hrend eines Sprints umsetzen k\u00f6nnen, um dann p\u00fcnktlich die ben\u00f6tigte Funktionalit\u00e4t bereitstellen zu k\u00f6nnen, auch wenn dies schrittweise geschieht. Das Endprodukt sollte dem geplanten entsprechen, jedoch mit einigen \u00c4nderungen und Tests, um den Anforderungen des Kunden gerecht zu werden.<\/p>\n<p>Beim Umschreiben gro\u00dfer Codeabschnitte kann es manchmal unm\u00f6glich sein, \u00c4nderungen schnell bereitzustellen, da dabei andere Abh\u00e4ngigkeiten des Systems ins Spiel kommen. Um den Fluss der \u00c4nderungen zu kontrollieren, kann das Deaktivieren von Funktionen (Feature-Hiding) verwendet werden. Im Grunde bedeutet das, dass eine Funktion in der Produktion vorhanden ist, aber \u00fcber Umgebungsvariablen (env-var) oder irgendeinen anderen Konfigurationsmechanismus nicht verf\u00fcgbar ist. Wenn der Code alle Qualit\u00e4tssicherungsprozesse durchlaufen hat, kann er versteckt in der Produktion landen. Diese Strategie funktioniert jedoch nur, wenn die Funktion letztendlich aktiviert wird. Andernfalls wird sie nur den Code \u00fcberladen und die kognitive Belastung erh\u00f6hen, mit der der Entwickler f\u00fcr produktives Arbeiten umgehen muss. Das Management von \u00c4nderungen und inkrementelle \u00c4nderungen helfen von sich aus, die kognitive Belastung der Entwickler auf einem angemessenen Niveau zu halten. <\/p>\n<p>Ingenieuren begegnen viele Herausforderungen selbst bei der einfachen Implementierung zus\u00e4tzlicher Funktionen. Von der F\u00fchrungsebene w\u00e4re es sinnvoll, die zus\u00e4tzliche Belastung des Teams zu verringern, damit es sich auf die Schl\u00fcsselfunktionen konzentrieren kann. Es gibt drei Dinge, die Sie tun k\u00f6nnen, um Ihrem Entwicklungsteam zu helfen:<\/p>\n<ol>\n<li>Die Methodik nutzen <code>Agil<\/code>, um den Zeitrahmen zu begrenzen, in dem sich das Team auf die wesentlichen Funktionen konzentrieren muss.<\/li>\n<li>Ihre Anwendung als mehrere Mikrodienste implementieren. Dies wird die Anzahl der implementierten Funktionen begrenzen und die Grenzen st\u00e4rken, die die kognitive Belastung w\u00e4hrend der Arbeit aufrechterhalten.<\/li>\n<li>Bevorzugen Sie inkrementelle \u00c4nderungen gegen\u00fcber gro\u00dfen und klobigen, und \u00e4ndern Sie kleine Codeabschnitte. Verwenden Sie Features-Hiding, um \u00c4nderungen umzusetzen, selbst wenn sie nach der Hinzuf\u00fcgung nicht sofort sichtbar sind.<\/li>\n<\/ol>\n<p>\nWenn Sie in Ihrer Arbeit das Prinzip der Kleinheit anwenden, wird Ihr Team viel gl\u00fccklicher, besser auf die Umsetzung der notwendigen Funktionen fokussieren und mit gr\u00f6\u00dferer Wahrscheinlichkeit schneller qualitativ hochwertige \u00c4nderungen umsetzen. Aber das bedeutet nicht, dass die Arbeit nicht komplexer werden kann; manchmal erfordert die Implementierung neuer Funktionen die Modifizierung mehrerer Services, und dieser Prozess kann komplizierter sein als der entsprechende in einer monolithischen Architektur. In jedem Fall sind die Vorteile des Ansatzes der Kleinheit die M\u00fche wert.<\/p>\n<p>Ende des ersten Teils.<\/p>\n<p>In K\u00fcrze werden wir den zweiten Teil der \u00dcbersetzung ver\u00f6ffentlichen, und jetzt freuen wir uns auf Ihre Kommentare und laden Sie zu <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/mJ6e\/\">Tag der offenen T\u00fcr<\/a><\/noindex>, der heute um 20:00 Uhr stattfinden wird.<br \/>\n<br \/>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/452748\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0434\u0440\u0443\u0437\u044c\u044f. \u0412 \u043f\u0440\u0435\u0434\u0434\u0432\u0435\u0440\u0438\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u0443\u0440\u0441\u0430 \u00abBackend \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043d\u0430 PHP\u00bb, \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e \u0434\u0435\u043b\u0438\u043c\u0441\u044f \u0441 \u0432\u0430\u043c\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u043c \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0433\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430. \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435 \u0440\u0435\u0448\u0430\u0435\u0442 \u0432\u0441\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0432\u0441\u0435\u0434\u043d\u0435\u0432\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0441\u044c \u0432\u0441\u0435 \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u0438 \u0441\u043b\u043e\u0436\u043d\u0435\u0435. \u041a\u0430\u043a \u043e\u0434\u043d\u0430\u0436\u0434\u044b \u0441\u043a\u0430\u0437\u0430\u043b \u041c\u0430\u0440\u043a \u0410\u043d\u0434\u0440\u0435\u0441\u0441\u0435\u043d, \u043e\u043d\u043e \u043f\u043e\u0433\u043b\u043e\u0449\u0430\u0435\u0442 \u043c\u0438\u0440. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043b\u0435\u0442 \u043f\u043e\u0434\u0445\u043e\u0434\u044b \u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-34140","post","type-post","status-publish","format-standard","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=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0434\u0440\u0443\u0437\u044c\u044f.\" \/>\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\/printsipy-razrabotki-sovremennyh-prilozhenij-ot-nginx-chast-1\" \/>\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\u041f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043e\u0442 NGINX. \u0427\u0430\u0441\u0442\u044c 1 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0434\u0440\u0443\u0437\u044c\u044f.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/printsipy-razrabotki-sovremennyh-prilozhenij-ot-nginx-chast-1\" \/>\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=\"2019-10-31T18:56:35+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:56:35+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 Prinzipien der Entwicklung moderner Anwendungen von NGINX. Teil 1 | ProHoster","description":"Hallo, Freunde.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/printsipy-razrabotki-sovremennyh-prilozhenij-ot-nginx-chast-1","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\u041f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043e\u0442 NGINX. \u0427\u0430\u0441\u0442\u044c 1 | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442, \u0434\u0440\u0443\u0437\u044c\u044f.","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/printsipy-razrabotki-sovremennyh-prilozhenij-ot-nginx-chast-1","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":"2019-10-31T18:56:35+00:00","article:modified_time":"2019-10-31T18:56:35+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"34140","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":"2026-01-21 18:05:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:27:30","updated":"2026-01-21 18:05:19","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\/34140","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=34140"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/34140\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=34140"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=34140"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=34140"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}