{"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":"Die Prinzipien der Entwicklung moderner Anwendungen von NGINX. Teil 1","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hallo, Freunde. Vor dem Start des Kurses <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/h4Ez\/\">\u201eBackend-Entwickler in PHP\u201c<\/a><\/noindex>, teilen wir traditionell mit Ihnen die \u00dcbersetzung eines n\u00fctzlichen Materials.<\/p>\n<p>Software l\u00f6st immer mehr allt\u00e4gliche Aufgaben und wird dabei immer komplexer. Wie Mark Andreessen einmal sagte, sie \u00fcbernimmt die Welt. <\/p>\n<p><img decoding=\"async\" alt=\"Die 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 zur Entstehung eines Sets von Prinzipien f\u00fchrten. Diese Prinzipien haben sich als n\u00fctzlich erwiesen, um Teams zu formen, Design, Entwicklung und die Bereitstellung Ihrer Anwendung an Endbenutzer zu gestalten. <noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Die Prinzipien lassen sich wie folgt zusammenfassen: <i>Die Anwendung sollte klein, netzwerkorientiert und entwicklerzentriert sein.<\/i>Auf Grundlage dieser drei Prinzipien k\u00f6nnen Sie eine zuverl\u00e4ssige, umfassende Anwendung erstellen, die schnell und sicher an den Endbenutzer ausgeliefert werden kann und zudem leicht skalierbar und erweiterbar ist.<\/p>\n<p><img decoding=\"async\" alt=\"Die 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 genannten Prinzipien hat verschiedene Aspekte, die wir er\u00f6rtern werden, um zu zeigen, wie jedes Prinzip zur Erreichung des Endziels beitr\u00e4gt: die schnelle Bereitstellung zuverl\u00e4ssiger, einfach zu wartender und benutzerfreundlicher Anwendungen. Wir werden die Prinzipien im Vergleich zu ihren Gegens\u00e4tzen betrachten, um beispielsweise zu verdeutlichen, was \"Stellen Sie sicher, dass Sie verwenden\" bedeutet. <i>Prinzip der Kleindimensionierung<\/i>\u00bb.<\/p>\n<p>Wir hoffen, dass dieser Artikel Sie dazu ermutigt, die vorgeschlagenen Prinzipien f\u00fcr den Aufbau moderner Anwendungen zu nutzen, die einen einheitlichen Ansatz im Design im Kontext des kontinuierlich wachsenden Technologiestacks bieten. <\/p>\n<p>Indem Sie diese Prinzipien anwenden, werden Sie feststellen, dass Sie die neuesten Trends in der Softwareentwicklung nutzen, einschlie\u00dflich des Ansatzes <noindex><a rel=\"nofollow\" href=\"https:\/\/www.nginx.com\/blog\/tag\/devops\/\">DevOps<\/a><\/noindex> f\u00fcr die Entwicklung und Bereitstellung von Anwendungen, die 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 (wie zum Beispiel, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.nginx.com\/blog\/tag\/kubernetes\/\">Kubernetes<\/a><\/noindex>), der Einsatz von Mikrodiensten (einschlie\u00dflich der Mikrodienstarchitektur <noindex>NGINX<\/noindex> und <noindex><a rel=\"nofollow\" href=\"https:\/\/www.nginx.com\/blog\/what-is-a-service-mesh\/\">Netzwerkarchitektur<\/a><\/noindex> f\u00fcr Mikrodienstanwendungen.<\/p>\n<p><b>Was ist eine moderne Anwendung?<\/b><\/p>\n<p>Moderne Anwendungen? Moderner Stack? Was bedeutet eigentlich 'modern'? <\/p>\n<p>Die meisten Entwickler haben nur ein allgemeines Verst\u00e4ndnis davon, woraus eine moderne Anwendung besteht, deshalb ist es wichtig, diese Begrifflichkeit klar zu definieren.<\/p>\n<p>Eine moderne Anwendung unterst\u00fctzt mehrere Clients, sei es eine Benutzeroberfl\u00e4che mit der JavaScript-Bibliothek React, eine mobile Anwendung f\u00fcr Android oder iOS, oder eine Anwendung, die sich \u00fcber eine API mit einer anderen verbindet. Eine moderne Anwendung geht davon aus, dass es eine unbestimmte Anzahl von Clients gibt, f\u00fcr die sie Daten oder Dienstleistungen bereitstellt.<\/p>\n<p>Eine moderne Anwendung stellt eine API zur Verf\u00fcgung, um auf die angeforderten Daten und Dienstleistungen zuzugreifen. Die API sollte stabil und konsistent sein, anstatt speziell f\u00fcr einen bestimmten Client entwickelt zu werden. Die API ist \u00fcber HTTP(S) zug\u00e4nglich und bietet Zugriff auf alle Funktionen, die im GUI oder CLI vorhanden sind. <\/p>\n<p>Daten sollten in einem g\u00e4ngigen, kompatiblen Format wie JSON verf\u00fcgbar sein. Die API stellt Objekte und Dienste in einer verst\u00e4ndlichen, strukturierten Form bereit, beispielsweise bieten RESTful APIs oder GraphQL eine angemessene Schnittstelle.<\/p>\n<p>Moderne Anwendungen basieren auf einem zeitgem\u00e4\u00dfen Technologie-Stack, der diese Anwendungen unterst\u00fctzt. Ein solcher Stack erm\u00f6glicht es Entwicklern, m\u00fchelos Anwendungen mit HTTP-Schnittstellen und klar definierten API-Endpunkten zu erstellen. Die gew\u00e4hlte Methode erleichtert es Ihrer Anwendung, Daten im JSON-Format zu empfangen und zu senden. Mit anderen Worten, der moderne Stack entspricht den Komponenten des Twelve-Factor-Applications-Ansatzes. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.nginx.com\/blog\/microservices-reference-architecture-nginx-twelve-factor-app\/\">Mikrodiensten<\/a><\/noindex>. <\/p>\n<p>Beliebte Versionen dieses Stack-Typs 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\">Knoten<\/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>. Mikroskopische Architektur <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nginxinc\/mra-ingenious\">NGINX<\/a><\/noindex> veranschaulicht ein Beispiel f\u00fcr einen modernen Stack, der in jeder der genannten Sprachen implementiert ist.<\/p>\n<p>Bitte beachten Sie, dass wir nicht ausschlie\u00dflich einen mikrosystematischen Ansatz propagieren. Viele von Ihnen arbeiten mit Monolithen, die weiterentwickelt werden m\u00fcssen, w\u00e4hrend andere mit SOA-Anwendungen zu tun haben, die sich weiterentwickeln, um zu mikrosystematischen Anwendungen zu werden. Drittens bewegen sich einige in Richtung serverloser (serverless) Anwendungen, w\u00e4hrend andere Kombinationen der oben genannten Ans\u00e4tze implementieren. Die in diesem Artikel dargelegten Prinzipien sind auf jedes dieser Systeme anwendbar mit nur geringf\u00fcgigen Anpassungen. <\/p>\n<p><b>Prinzipien<\/b><\/p>\n<p>Jetzt, wo wir ein gemeinsames Verst\u00e4ndnis daf\u00fcr entwickelt haben, was moderne Anwendungen und moderne Stacks sind, ist es an der Zeit, in die Prinzipien der Architektur und Entwicklung einzutauchen, die Ihnen bei der Entwicklung, Implementierung und Pflege moderner Anwendungen von gro\u00dfem Nutzen sein werden.<\/p>\n<p>Eines der Prinzipien lautet: \u201eErstellen Sie kleine Anwendungen\u201c. Lassen Sie uns einfach sagen, es sei <i>das Prinzip der Kleinheit<\/i>. Es gibt unglaublich komplexe Anwendungen, die aus einer Vielzahl von beweglichen Komponenten bestehen. Das Design einer Anwendung aus kleinen diskreten Komponenten erleichtert jedoch die Planung, Wartung und den Betrieb insgesamt. (Beachten Sie, wir haben \u201eerleichtert\u201c gesagt und nicht \u201eeinfach gemacht\u201c).<\/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, und sie w\u00e4hrend der Umsetzung von den Sorgen um Infrastruktur und CI\/CD befreien. Kurz gesagt, unser Ansatz <i>ist entwicklerorientiert.<\/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 enorme Fortschritte in Richtung einer vernetzten Zukunft gemacht, da Netzwerke schneller und Anwendungen komplexer geworden sind. Wie bereits festgestellt, sollte eine moderne Anwendung von einer Vielzahl verschiedener Clients \u00fcber das Netzwerk genutzt werden. Der Einsatz von Netzwerkdenken in der Architektur bietet erhebliche Vorteile, die gut mit <i>das Prinzip der Kleinheit<\/i> und dem Konzept des Ansatzes kombiniert werden, <i>der sich an Entwicklern orientiert.<\/i>.<\/p>\n<p>Wenn Sie bei der Entwicklung und Implementierung Ihrer Anwendung die genannten Prinzipien ber\u00fccksichtigen, haben Sie einen unbestreitbaren Vorteil bei der Entwicklung und Bereitstellung Ihres Produkts.<\/p>\n<p>Lassen Sie uns diese drei Prinzipien n\u00e4her betrachten.<\/p>\n<p><b>Das Prinzip der Kleinheit<\/b><\/p>\n<p>Das menschliche Gehirn hat Schwierigkeiten, gleichzeitig eine gro\u00dfe Menge an Informationen zu verarbeiten. In der Psychologie bezeichnet der Begriff kognitive Belastung die gesamte Menge an geistigen Anstrengungen, die erforderlich sind, um Informationen im Ged\u00e4chtnis zu behalten. Die Verringerung der kognitiven Belastung f\u00fcr Entwickler hat oberste Priorit\u00e4t, da sie sich so auf die L\u00f6sung von Problemen konzentrieren k\u00f6nnen, anstatt ein komplexes Modell der gesamten Anwendung und der entwickelten Funktionen im Kopf zu behalten. <\/p>\n<p><img decoding=\"async\" alt=\"Die 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 dekonstruiert:<\/p>\n<ul>\n<li>Verringerung der kognitiven Belastung f\u00fcr Entwickler;<\/li>\n<li>Beschleunigung und Vereinfachung von 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 f\u00fcr Entwickler zu verringern, und hier kommt das Prinzip der Kleinheit ins Spiel.<\/p>\n<p>Also, drei M\u00f6glichkeiten zur Verringerung der kognitiven Belastung:<\/p>\n<ol>\n<li>Die Zeitrahmen, die bei der Entwicklung neuer Funktionen ber\u00fccksichtigt werden m\u00fcssen, verk\u00fcrzen \u2013 je k\u00fcrzer der Zeitrahmen, desto geringer die kognitive Belastung.<\/li>\n<li>Die Menge des Codes, an dem gleichzeitig gearbeitet wird, reduzieren \u2013 weniger Code bedeutet weniger Belastung.<\/li>\n<li>Den Prozess zur Einf\u00fchrung inkrementeller \u00c4nderungen in die Anwendung vereinfachen.<\/li>\n<\/ol>\n<p>\n<b>Verk\u00fcrzung der Entwicklungszeitr\u00e4ume<\/b><\/p>\n<p>Lassen Sie uns zu der Zeit zur\u00fcckkehren, als die Methodik <code>waterfall<\/code> der Standard im Entwicklungsprozess war und Zeitrahmen von sechs Monaten bis zwei Jahren f\u00fcr die Entwicklung oder Aktualisierung einer Anwendung gang und g\u00e4be waren. In der Regel lasen die Ingenieure zun\u00e4chst die entsprechenden Dokumente wie das Produktanforderungsdokument (PRD), das Systemreferenzdokument (SRD), den Architekturplan und begannen, all diese Informationen zu einer kognitiven Modell zu verbinden, nach dem sie den Code schrieben. Da sich die Anforderungen und damit auch die Architektur \u00e4nderten, war es notwendig, erhebliche Anstrengungen zu unternehmen, um das gesamte Team \u00fcber die Aktualisierungen des kognitiven Modells zu informieren. Ein solcher Ansatz konnte im schlimmsten Fall die Arbeit vollst\u00e4ndig lahmlegen.<\/p>\n<p>Die gr\u00f6\u00dfte Ver\u00e4nderung im Prozess der Anwendungsentwicklung war die Einf\u00fchrung der agilen Methodik. Eine der wesentlichen Eigenschaften dieser Methodik <code>agil<\/code> ist die iterative Entwicklung. Dies f\u00fchrt zu einer Verringerung der kognitiven Belastung f\u00fcr die Ingenieure. Anstatt von den Entwicklern zu verlangen, eine Anwendung in einem langen Zeitraum zu realisieren, <code>agil<\/code> erlaubt dieser Ansatz, sich auf kleine Codeabschnitte zu konzentrieren, die schnell getestet und bereitgestellt werden k\u00f6nnen, w\u00e4hrend gleichzeitig auch Feedback eingeholt wird. Die kognitive Belastung der Anwendung hat sich von einem Zeitrahmen von sechs Monaten bis zu zwei Jahren, der eine enorme Anzahl von Spezifikationen umfasste, auf zweiw\u00f6chentliche Erg\u00e4nzungen oder \u00c4nderungen von Funktionen verschoben, die auf ein amorphes Verst\u00e4ndnis eines umfangreichen Programms ausgerichtet sind.<\/p>\n<p>Der Fokus verschiebt sich von einer massiven Anwendung auf spezifische, kleine Funktionen, die innerhalb eines zweiw\u00f6chigen Sprints abgeschlossen werden k\u00f6nnen, wobei maximal eine Funktion des n\u00e4chsten Sprints im Hinterkopf bleibt. Dies stellt eine wesentliche Ver\u00e4nderung dar. Es hat die Entwicklungseffizienz gesteigert, w\u00e4hrend die kognitive Belastung, die st\u00e4ndig schwankte, verringert wurde.<\/p>\n<p>In der Methodologie <code>agil<\/code> wird davon ausgegangen, dass die endg\u00fcltige Anwendung eine leicht ver\u00e4nderte Version des urspr\u00fcnglichen Konzepts sein wird, weshalb der Schluss der Entwicklung zwangsl\u00e4ufig unklar ist. Nur die Ergebnisse jedes einzelnen Sprints k\u00f6nnen klar und pr\u00e4zise 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. Moderne Anwendungen sind in der Regel umfangreich \u2013 eine zuverl\u00e4ssige, unternehmenskritische Anwendung kann aus Tausenden von Dateien und Hunderttausenden von Codezeilen bestehen. Je nach Organisation der Dateiverkn\u00fcpfungen und Codeabh\u00e4ngigkeiten k\u00f6nnen diese offensichtlich oder im Gegenteil schwer zu erkennen sein. Selbst das Debuggen der Codeausf\u00fchrung kann problematisch sein, abh\u00e4ngig von den verwendeten Bibliotheken und davon, wie gut die Debugging-Tools zwischen Bibliotheken\/Paketen\/Modulen und Benutzercode unterscheiden.<\/p>\n<p>Der Aufbau eines Arbeitsmodells f\u00fcr den Code einer Anwendung kann eine betr\u00e4chtliche Zeit in Anspruch nehmen und erneut eine gro\u00dfe kognitive Belastung f\u00fcr den Entwickler darstellen. 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 bei denen die Aufmerksamkeitsspannen oft verschwommen sind, da die funktionalen Grenzen nicht eingehalten werden. <\/p>\n<p>Eine der effektiven Methoden zur Verringerung der kognitiven Belastung f\u00fcr Ingenieure ist der \u00dcbergang zu einer Microservices-Architektur. In einem Microservices-Ansatz konzentriert sich jeder Service auf einen bestimmten Funktionsbereich; dabei ist die Bedeutung des Services in der Regel klar definiert und verst\u00e4ndlich. Die Grenzen des Services sind ebenfalls deutlich \u2013 denken Sie daran, dass die Kommunikation mit dem Service \u00fcber APIs erfolgt, sodass Daten, die von einem Service generiert wurden, problemlos an einen anderen \u00fcbertragen werden k\u00f6nnen.<\/p>\n<p>Die Interaktion mit anderen Services ist normalerweise auf einige benutzerdefinierte Services und einige Provider-Services beschr\u00e4nkt, die einfache und saubere API-Aufrufe, wie beispielsweise \u00fcber REST, verwenden. Dadurch wird die kognitive Belastung f\u00fcr den Ingenieur erheblich verringert. Die gr\u00f6\u00dfte Herausforderung bleibt das Verst\u00e4ndnis des Modells der Interaktion zwischen den Services und wie Transaktionen in mehreren Services stattfinden. Letztendlich reduziert die Nutzung von Microservices die kognitive Last, indem sie die Menge an Code verringert, klare Servicegrenzen definiert und das Verst\u00e4ndnis der Beziehungen zwischen Benutzern und Anbietern f\u00f6rdert.<\/p>\n<p><b>Kleine inkrementelle \u00c4nderungen<\/b><\/p>\n<p>Der letzte Aspekt des Prinzips <i>Kleinlichkeiten<\/i> besteht im \u00c4nderungsmanagement. F\u00fcr Entwickler besteht die besondere Versuchung darin, den Code zu betrachten (vielleicht sogar ihren eigenen, \u00e4lteren Code) und zu sagen: \u201eDas ist Mist, das m\u00fcssen wir alles neu schreiben.\u201c Manchmal ist das die richtige Entscheidung, manchmal nicht. Es legt die Verantwortung f\u00fcr eine umfassende Modell\u00e4nderung auf das Entwicklerteam, was wiederum zu einer erheblichen kognitiven Belastung f\u00fchrt. Besser ist es, wenn die Ingenieure sich auf die \u00c4nderungen konzentrieren, die sie im Laufe eines Sprints umsetzen k\u00f6nnen, um dann rechtzeitig die erforderlichen Funktionen schrittweise bereitzustellen. Das Endprodukt sollte einem zuvor geplanten Ansatz \u00e4hneln, jedoch mit einigen Anpassungen und Tests, um den Bed\u00fcrfnissen des Kunden gerecht zu werden.<\/p>\n<p>Beim Umschreiben gro\u00dfer Codeabschnitte kann es manchmal unm\u00f6glich sein, \u00c4nderungen schnell zu implementieren, da hier andere Systemabh\u00e4ngigkeiten ins Spiel kommen. Um den \u00c4nderungsfluss zu kontrollieren, kann die Technik des 'Feature Hiding' eingesetzt werden. Das bedeutet grunds\u00e4tzlich, dass die Funktionalit\u00e4t in der Produktionsumgebung vorhanden ist, aber \u00fcber Umgebungsvariablen (env-var) oder andere Konfigurationsmechanismen nicht zug\u00e4nglich ist. Wenn der Code alle Qualit\u00e4tssicherungsprozesse bestanden hat, kann er in einem versteckten Zustand in der Produktion landen. Diese Strategie funktioniert jedoch nur, wenn die Funktion letztendlich aktiviert wird. Andernfalls w\u00fcrde sie nur den Code \u00fcberladen und zus\u00e4tzliche kognitive Belastungen verursachen, mit denen der Entwickler umgehen muss, um produktiv zu bleiben. Das \u00c4nderungsmanagement und inkrementelle \u00c4nderungen helfen dabei, die kognitive Belastung der Entwickler auf einem handhabbaren Niveau zu halten. <\/p>\n<p>Ingenieure stehen vor vielen Herausforderungen, selbst bei der einfachen Implementierung zus\u00e4tzlicher Funktionen. Es w\u00e4re klug von der Unternehmensleitung, die unn\u00f6tige Belastung des Teams zu reduzieren, damit es sich auf die Schl\u00fcsselaspekte der Funktionalit\u00e4t konzentrieren kann. Es gibt drei Ma\u00dfnahmen, die Sie ergreifen k\u00f6nnen, um Ihr Entwicklerteam zu unterst\u00fctzen:<\/p>\n<ol>\n<li>Verwenden Sie eine Methodik <code>agil<\/code>, um den Zeitraum zu begrenzen, in dem sich das Team auf die wesentlichen Funktionen konzentrieren sollte.<\/li>\n<li>Implementieren Sie Ihre Anwendung als mehrere Microservices. Dies verengt die Anzahl der einzuf\u00fchrenden Funktionen und st\u00e4rkt die Grenzen, die die kognitive Belastung w\u00e4hrend der Arbeit aufrechterhalten.<\/li>\n<li>Bevorzugen Sie inkrementelle \u00c4nderungen gegen\u00fcber gro\u00dfen und komplexen Anpassungen, indem Sie kleine Codeabschnitte \u00e4ndern. Nutzen Sie Funktionsverbergung, um \u00c4nderungen umzusetzen, selbst wenn diese nicht sofort nach der Implementierung sichtbar werden.<\/li>\n<\/ol>\n<p>\nWenn Sie in Ihrer Arbeit das Prinzip der Kleinheit anwenden, wird Ihr Team viel gl\u00fccklicher, kann sich besser auf die notwendigen Funktionen konzentrieren und hat eine h\u00f6here Wahrscheinlichkeit, qualitativ hochwertige \u00c4nderungen schneller umzusetzen. Das bedeutet jedoch nicht, dass die Arbeit nicht komplexer werden kann; manchmal erfordert die Einf\u00fchrung neuer Funktionen Modifikationen mehrerer Dienste, und dieser Prozess kann schwieriger sein als in einer monolithischen Architektur. In jedem Fall sind die Vorteile des Ansatzes der Kleinheit das wert.<\/p>\n<p>Ende des ersten Teils.<\/p>\n<p>Bald 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\/\">einem 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 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\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\" \/>\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) 4.9.10\" \/>\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. \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\" \/>\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\udd47Grunds\u00e4tze der Entwicklung moderner Anwendungen von NGINX. Teil 1 | ProHoster","description":"Hallo zusammen. Im Vorfeld des Starts des Kurses \u201eBackend-Entwicklung mit PHP\u201c teilen wir traditionell n\u00fctzliche Materialien mit euch. Software l\u00f6st immer mehr allt\u00e4gliche Aufgaben und wird dabei immer komplizierter. Wie Mark Andreessen einmal sagte, sie erobert die Welt. In den letzten Jahren haben sich die Ans\u00e4tze zur Entwicklung und Bereitstellung von Anwendungen erheblich ge\u00e4ndert.","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. \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","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"},"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}]}}