[{"data":1,"prerenderedAt":2246},["ShallowReactive",2],{"blog-current-amazon-mws-sp-api-wrapper-de-de":3,"blog-previous-amazon-mws-sp-api-wrapper-de-de":107,"blog-next-amazon-mws-sp-api-wrapper-de-de":122,"blog-alt-de-amazon-mws-sp-api-wrapper-de-de":135,"blog-alt-en-amazon-mws-sp-api-wrapper-de-de":136,"employee-bernd-helm":138,"content-query-L6Pt7i9jc4":244,"content-query-us0rrbF4qc":809,"content-query-1PFeYVQSzn":2089,"content-query-vhr2h3d1hs":2125,"related-refs-e-commerce_backend--de":2193},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"author":10,"image":11,"releaseDate":12,"blogCategories":13,"articleTags":16,"tags":19,"body":22,"_type":101,"_id":102,"_source":103,"_file":104,"_stem":105,"_extension":106},"/blog/amazon-mws-sp-api-wrapper-de","blog",false,"","Amazon MWS zu SP API Wrapper","Wir haben einen Wrapper veröffentlicht, der Amazon MWS in SP API umwandelt, um Entwicklern mit veralteten Systemen eine einfache Lösung anzubieten. Dieses Open-Source-Projekt bietet eine praktische Alternative zur Neuentwicklung und unterstützt die Fortführung bestehender Anwendungen.","bernd-helm","/blog/thumbnails/AWS.svg","2024-02-21",[14,15],"Das bewegt uns","DevOps",[17,18],"Amazon","Open Source",[20,21],"e-commerce","backend",{"type":23,"children":24,"toc":96},"root",[25,34,57,62,67,73,86,91],{"type":26,"tag":27,"props":28,"children":30},"element","h2",{"id":29},"was-ist-das",[31],{"type":32,"value":33},"text","Was ist das?",{"type":26,"tag":35,"props":36,"children":37},"p",{},[38,40,47,49,55],{"type":32,"value":39},"Dieser Wrapper dient als einfache und kosteneffiziente Brücke, die Aufrufe von der\n",{"type":26,"tag":41,"props":42,"children":44},"a",{"href":43},"https://docs.developer.amazonservices.com/en_US/dev_guide/index.html",[45],{"type":32,"value":46},"Amazon Marketplace Web Service (MWS)",{"type":32,"value":48},"\nAPI zu ",{"type":26,"tag":41,"props":50,"children":52},{"href":51},"https://developer-docs.amazon.com/sp-api",[53],{"type":32,"value":54},"Selling Partner (SP) API",{"type":32,"value":56}," Aufrufen übersetzt. Er wurde speziell für Kunden mit veralteten Systemen und begrenztem\nBudget entwickelt, für die eine komplette Neuentwicklung der Amazon-Schnittstelle wirtschaftlich untragbar wäre. Der\nWrapper ermöglicht es diesen Kunden, ihr Geschäft auch nach der Abschaltung der MWS-Schnittstelle fortzuführen.",{"type":26,"tag":35,"props":58,"children":59},{},[60],{"type":32,"value":61},"Technisch basiert das Projekt auf einem Docker-Container, der als Webserver fungiert. Dieser nimmt MWS-API-Aufrufe\nentgegen, übersetzt sie in SP-API-Aufrufe und wandelt die Antworten der SP-API wieder in das Format der MWS-API um.",{"type":26,"tag":35,"props":63,"children":64},{},[65],{"type":32,"value":66},"Die Idee für diesen Wrapper entstand aus einem Proof of Concept, mit dem Ziel zu überprüfen, ob die Schnittstellen\nausreichend ähnlich sind, um eine direkte Übersetzung zu ermöglichen. Trotz der Befürchtung, dass der Teufel im Detail\nliegen könnte, erwiesen sich die Aufrufe als relativ einfach zu übersetzen. Es war lediglich notwendig, einige\nFeed-Namen anzupassen und gelegentlich aus einem API-Aufruf zwei zu machen, um alle notwendigen Informationen zu erhalten.\nInsgesamt gestaltete sich das Projekt überraschend problemlos.",{"type":26,"tag":27,"props":68,"children":70},{"id":69},"download",[71],{"type":32,"value":72},"Download",{"type":26,"tag":35,"props":74,"children":75},{},[76,78,84],{"type":32,"value":77},"Interesse geweckt? Das Projekt wurde als Open-Source auf Github veröffentlicht:\n",{"type":26,"tag":41,"props":79,"children":81},{"href":80},"https://github.com/bhelm/Amazon-MWS-SP-Wrapper",[82],{"type":32,"value":83},"Amazon-MWS-SP-API-Wrapper",{"type":32,"value":85},".",{"type":26,"tag":35,"props":87,"children":88},{},[89],{"type":32,"value":90},"Mit diesem Angebot streben wir danach, zur Open-Source-Kultur beizutragen und erhoffen uns konstruktives Feedback von\nanderen Entwicklern.",{"type":26,"tag":35,"props":92,"children":93},{},[94],{"type":32,"value":95},"Bei Bedarf an Unterstützung bei der Integration in Ihre Anwendung oder falls Anpassungen bzw. Erweiterungen am Wrapper\nnotwendig sind, stehen wir gerne zur Verfügung. Da der Wrapper bisher nur von einer begrenzten Anzahl an Kunden genutzt\nwird, deckt er momentan auch nur einen Teil der möglichen API-Aufrufe und Parameter ab.",{"title":7,"searchDepth":97,"depth":97,"links":98},2,[99,100],{"id":29,"depth":97,"text":33},{"id":69,"depth":97,"text":72},"markdown","common:blog:11.amazon-mws-sp-api-wrapper-de.md","common","blog/11.amazon-mws-sp-api-wrapper-de.md","blog/11.amazon-mws-sp-api-wrapper-de","md",{"_path":108,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":109,"description":110,"author":10,"image":111,"releaseDate":112,"blogCategories":113,"articleTags":114,"tags":117,"_type":101,"_id":119,"_source":103,"_file":120,"_stem":121,"_extension":106},"/blog/wie-man-verschiedene-dns-server-fuer-bestimter-domaens-verwendet","Wie man verschiedene DNS-Server für die Namensauflösung bestimmter Domänen verwendet - VPN Use-Case","Wie man ausgewählte Domains über VPN unter Linux auflöst. In der heutigen Welt nutzen mehr Menschen als je zuvor VPN-Dienste, um aus der Ferne zu arbeiten. In manchen Fällen ist es jedoch nicht wünschenswert, den gesamten Datenverkehr und alle Domainnamenauflösungen über die VPN-Verbindung zu leiten.","/blog/thumbnails/VPN.png","2022-04-21",[14,15],[115,116],"VPN","Linux",[118],"devops","common:blog:10.wie-man-verschiedene-dns-server-fuer-bestimter-domaens-verwendet.md","blog/10.wie-man-verschiedene-dns-server-fuer-bestimter-domaens-verwendet.md","blog/10.wie-man-verschiedene-dns-server-fuer-bestimter-domaens-verwendet",{"_path":123,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":124,"description":125,"author":126,"image":127,"releaseDate":128,"blogCategories":129,"articleTags":130,"tags":131,"_type":101,"_id":132,"_source":103,"_file":133,"_stem":134,"_extension":106},"/blog/a-tribute-to-our-dev-ops","A Tribute to our Dev Ops","Web-Anwendungen werden meistens in einer Dev-Umgebung entwickelt und getestet – doch der eigentliche Härtetest kommt in der Praxis auf den Prod-Systemen.","jens-bornschein","/images/dev-ops-dark.svg","2025-03-31",[14],[15],[118],"common:blog:12.a-tribute-to-our-dev-ops.md","blog/12.a-tribute-to-our-dev-ops.md","blog/12.a-tribute-to-our-dev-ops",{"_path":4},{"_path":137},"/en/blog/amazon-mws-sp-api-wrapper",{"_path":139,"_dir":140,"_draft":6,"_partial":6,"_locale":7,"slug":10,"teams":141,"primaryTeam":143,"firstName":144,"lastName":145,"prefixTitle":7,"suffixTitle":7,"education":146,"executiveRole":151,"role":152,"workingSince":160,"inTheCompanySince":161,"techSkills":162,"skills":207,"projects":220,"contactDetails":233,"_image":237,"image":238,"_id":239,"_type":240,"title":241,"_source":140,"_file":242,"_stem":243,"_extension":240},"/employees/bernd-helm","employees",[142,143],"ai","devOps","Bernd","Helm",[147],[148,149,150],"B. Sc. Angewandte Informatik","FHDW Dresden","2010","CTO",[153,154,143,155,156,157,158,159],"founder","chiefTechnologyOfficer","databaseSpecialist","admin","softwareDeveloper","backendDeveloper","consultant","2005","2008",[163,167,169,171,174,176,179,181,183,185,188,192,195,198,201,204],{"name":164,"level":165,"icon":166},"Docker","expert","/images/Docker.svg",{"name":116,"level":165,"icon":168},"/images/linux_os-mono.svg",{"name":170,"level":165},"Zabbix",{"name":172,"level":165,"icon":173},"MariaDB ColumnStore","/images/maria-db-logo.svg",{"name":175,"level":165},"OpenAI",{"name":177,"level":165,"icon":178},"Pytorch","/images/PyTorch.svg",{"name":180,"level":165},"PHP",{"name":182,"level":165},"Java",{"name":184,"level":165},"Python",{"name":186,"level":165,"icon":187},"SQL","/images/SQL.svg",{"name":189,"level":190,"icon":191},"C++","advanced","/images/cpp-logo.svg",{"name":193,"level":190,"icon":194},"C#","/images/csharp.svg",{"name":196,"level":190,"icon":197},"CSS","/images/css.svg",{"name":199,"level":190,"icon":200},"HTML","/images/html.svg",{"name":202,"level":190,"icon":203},"OpenCV","/images/OpenCV.svg",{"name":205,"level":190,"icon":206},"Vue.js","/images/vuejs.svg",[208,210,212,214,216,218],{"name":209,"level":165},"artificialIntelligence",{"name":211,"level":165},"codingGuidelines",{"name":213,"level":165},"databases",{"name":215,"level":165},"linuxServerAdministration",{"name":217,"level":165},"softwareArchitect",{"name":219,"level":190},"qualityAssurance",[221,224,226,228,231],{"project":222,"position":223},"Gridside","Technical Consultant",{"project":225,"position":223},"Herole",{"project":227,"position":223},"Montagespezis",{"project":229,"position":230},"Orsee","Technical Manager",{"project":232,"position":223},"Vipr",{"eMail":234,"phone":235,"visibility":236},"bernd.helm@helmundwalter.de","+49 351 799 035 20","1","images/employees/Portraits/bernd_helm.webp","images/employees/Portraits/BerndHelm_MS.webp","employees:employees:1.bernd-helm.json","json","Bernd Helm","employees/1.bernd-helm.json","employees/1.bernd-helm",{"_path":108,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":109,"description":110,"author":10,"image":111,"releaseDate":112,"blogCategories":245,"articleTags":246,"tags":247,"body":248,"_type":101,"_id":119,"_source":103,"_file":120,"_stem":121,"_extension":106},[14,15],[115,116],[118],{"type":23,"children":249,"toc":804},[250,256,261,266,288,301,307,335,353,359,364,377,390,423,450,471,526,542,569,612,641,691,710,723,766,778,798],{"type":26,"tag":27,"props":251,"children":253},{"id":252},"wie-man-ausgewählte-domains-über-vpn-unter-linux-auflöst",[254],{"type":32,"value":255},"Wie man ausgewählte Domains über VPN unter Linux auflöst",{"type":26,"tag":35,"props":257,"children":258},{},[259],{"type":32,"value":260},"In der heutigen Welt nutzen mehr Menschen als je zuvor VPN-Dienste, um aus der Ferne zu arbeiten. In manchen Fällen ist\nes jedoch nicht wünschenswert, den gesamten Datenverkehr und alle Domainnamenauflösungen über die VPN-Verbindung zu\nleiten. Selbst wenn der VPN-Server möchte, dass der Client genau so\nkonfiguriert werden soll, kann der Client so konfiguriert werden, dass er die Anforderung, den gesamten Datenverkehr\nüber die VPN-Verbindung zu leiten, ignoriert.",{"type":26,"tag":35,"props":262,"children":263},{},[264],{"type":32,"value":265},"Zum Beispiel kann bei Openvpn die Option",{"type":26,"tag":267,"props":268,"children":272},"pre",{"className":269,"code":270,"language":271,"meta":7,"style":7},"language-apache shiki shiki-themes github-dark github-dark monokai","pull-filter ignore redirect-gateway\n","apache",[273],{"type":26,"tag":274,"props":275,"children":276},"code",{"__ignoreMap":7},[277],{"type":26,"tag":278,"props":279,"children":282},"span",{"class":280,"line":281},"line",1,[283],{"type":26,"tag":278,"props":284,"children":286},{"style":285},"--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2",[287],{"type":32,"value":270},{"type":26,"tag":35,"props":289,"children":290},{},[291,293,299],{"type":32,"value":292},"verwendet werden, um den ",{"type":26,"tag":274,"props":294,"children":296},{"className":295},[],[297],{"type":32,"value":298},"openvpn-client",{"type":32,"value":300}," anzuweisen, alle \"route all\"-Anfragen des Servers zu ignorieren.",{"type":26,"tag":27,"props":302,"children":304},{"id":303},"fritzbox-beispiel",[305],{"type":32,"value":306},"FRITZ!Box Beispiel",{"type":26,"tag":35,"props":308,"children":309},{},[310,312,318,320,326,328,334],{"type":32,"value":311},"Kürzlich musste ich eine VPN-Verbindung zu einer ",{"type":26,"tag":313,"props":314,"children":315},"strong",{},[316],{"type":32,"value":317},"FRITZ!Box",{"type":32,"value":319}," nutzen. Das ist ein sehr beliebter Router in Deutschland,\nder nicht nur\neinfache\nVPN-Verbindungen anbietet, sondern auch alle Hosts in seinem Netzwerk zu seinem eigenen DNS hinzufügt. Wenn Sie mit\neinem Rechner mit dem Namen ",{"type":26,"tag":274,"props":321,"children":323},{"className":322},[],[324],{"type":32,"value":325}," workstation",{"type":32,"value":327}," ansprechen wollen, können Sie ihn über den dns-Namen \"workstation.fritz.box\" erreichen. Die fritz-box\nselbst ist auch unter dem\ndns-Namen ",{"type":26,"tag":274,"props":329,"children":331},{"className":330},[],[332],{"type":32,"value":333},"fritz.box",{"type":32,"value":85},{"type":26,"tag":35,"props":336,"children":337},{},[338,340,345,347,351],{"type":32,"value":339},"In meinem Fall ziehe ich es aus Geschwindigkeits- und Datenschutzgründen vor, meinen eigenen DNS-Server für alle\nAbfragen zu verwenden - das heißt, ich möchte nur\ndie Domains mit dem Suffix ",{"type":26,"tag":274,"props":341,"children":343},{"className":342},[],[344],{"type":32,"value":333},{"type":32,"value":346}," über die ",{"type":26,"tag":313,"props":348,"children":349},{},[350],{"type":32,"value":317},{"type":32,"value":352}," auflösen.",{"type":26,"tag":27,"props":354,"children":356},{"id":355},"lösung-mit-einem-lokalen-dns-server-dnsmasq",[357],{"type":32,"value":358},"Lösung mit einem lokalen DNS-Server - dnsmasq",{"type":26,"tag":35,"props":360,"children":361},{},[362],{"type":32,"value":363},"Dnsmasq ist ein leichtgewichtiger DNS-Server, den man auf dem eigenen Rechner laufen lassen kann, um die Kontrolle über\ndie Namensauflösung zu bekommen. Ein netter Nebeneffekt ist, dass er seinen eigenen DNS-Cache hat, was wiederkehrende\nDNS-Abfragen schneller macht. Hier ist, wie ich ihn eingerichtet habe:",{"type":26,"tag":35,"props":365,"children":366},{},[367,369,375],{"type":32,"value":368},"Bevor Sie beginnen, müssen Sie herausfinden, welcher DNS-Server im VPN verwendet wird. Normalerweise ist es das\nStandard-Gateway, das normalerweise\nein ",{"type":26,"tag":274,"props":370,"children":372},{"className":371},[],[373],{"type":32,"value":374},".1",{"type":32,"value":376}," am Ende hat. Sie können die VPN-Protokolle genau beobachten, um herauszufinden, welcher DNS-Server bei der\nVerbindung verwendet wird.",{"type":26,"tag":35,"props":378,"children":379},{},[380,382,388],{"type":32,"value":381},"Es gibt ein Tool namens ",{"type":26,"tag":274,"props":383,"children":385},{"className":384},[],[386],{"type":32,"value":387},"dig",{"type":32,"value":389},", das DNS-Abfragen über bestimmte DNS-Server durchführen kann, zum Beispiel",{"type":26,"tag":267,"props":391,"children":395},{"className":392,"code":393,"language":394,"meta":7,"style":7},"language-bash shiki shiki-themes github-dark github-dark monokai","dig @192.168.1.1 a fritz.box\n\n","bash",[396],{"type":26,"tag":274,"props":397,"children":398},{"__ignoreMap":7},[399],{"type":26,"tag":278,"props":400,"children":401},{"class":280,"line":281},[402,407,413,418],{"type":26,"tag":278,"props":403,"children":405},{"style":404},"--shiki-default:#B392F0;--shiki-dark:#B392F0;--shiki-sepia:#A6E22E",[406],{"type":32,"value":387},{"type":26,"tag":278,"props":408,"children":410},{"style":409},"--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74",[411],{"type":32,"value":412}," @192.168.1.1",{"type":26,"tag":278,"props":414,"children":415},{"style":409},[416],{"type":32,"value":417}," a",{"type":26,"tag":278,"props":419,"children":420},{"style":409},[421],{"type":32,"value":422}," fritz.box\n",{"type":26,"tag":35,"props":424,"children":425},{},[426,428,434,436,441,443,449],{"type":32,"value":427},"wird den DNS-Server ",{"type":26,"tag":274,"props":429,"children":431},{"className":430},[],[432],{"type":32,"value":433},"192.168.1.1",{"type":32,"value":435}," nach der IP von ",{"type":26,"tag":274,"props":437,"children":439},{"className":438},[],[440],{"type":32,"value":333},{"type":32,"value":442}," fragen. Dig ist sehr praktisch bei der Fehlersuche bei DNS-Problemen und Ihrer Einrichtung zu testen.  Sie müssen es eventuell auf Ihrem System installieren. Unter Debian befindet es sich in einem Paket namens ",{"type":26,"tag":274,"props":444,"children":446},{"className":445},[],[447],{"type":32,"value":448},"dnsutils",{"type":32,"value":85},{"type":26,"tag":35,"props":451,"children":452},{},[453,455,461,463,469],{"type":32,"value":454},"Installieren Sie zuerst ",{"type":26,"tag":274,"props":456,"children":458},{"className":457},[],[459],{"type":32,"value":460},"dnsmasq",{"type":32,"value":462}," auf Ihrem Linux und bearbeiten Sie seine Konfiguration (normalerweise in ",{"type":26,"tag":274,"props":464,"children":466},{"className":465},[],[467],{"type":32,"value":468},"/etc/dnsmasq.conf",{"type":32,"value":470},"). Fügen Sie diese Zeilen\nhier ein:",{"type":26,"tag":267,"props":472,"children":474},{"className":269,"code":473,"language":271,"meta":7,"style":7},"resolv-datei=/etc/resolv.dnsmasq.conf\nserver=/fritz.box/192.168.1.1\n",[475],{"type":26,"tag":274,"props":476,"children":477},{"__ignoreMap":7},[478,486],{"type":26,"tag":278,"props":479,"children":480},{"class":280,"line":281},[481],{"type":26,"tag":278,"props":482,"children":483},{"style":285},[484],{"type":32,"value":485},"resolv-datei=/etc/resolv.dnsmasq.conf\n",{"type":26,"tag":278,"props":487,"children":488},{"class":280,"line":97},[489,494,500,504,509,513,517,521],{"type":26,"tag":278,"props":490,"children":491},{"style":285},[492],{"type":32,"value":493},"server=/fritz.box/",{"type":26,"tag":278,"props":495,"children":497},{"style":496},"--shiki-default:#79B8FF;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF",[498],{"type":32,"value":499},"192",{"type":26,"tag":278,"props":501,"children":502},{"style":285},[503],{"type":32,"value":85},{"type":26,"tag":278,"props":505,"children":506},{"style":496},[507],{"type":32,"value":508},"168",{"type":26,"tag":278,"props":510,"children":511},{"style":285},[512],{"type":32,"value":85},{"type":26,"tag":278,"props":514,"children":515},{"style":496},[516],{"type":32,"value":236},{"type":26,"tag":278,"props":518,"children":519},{"style":285},[520],{"type":32,"value":85},{"type":26,"tag":278,"props":522,"children":523},{"style":496},[524],{"type":32,"value":525},"1\n",{"type":26,"tag":35,"props":527,"children":528},{},[529,534,536,541],{"type":26,"tag":274,"props":530,"children":532},{"className":531},[],[533],{"type":32,"value":333},{"type":32,"value":535}," ist die Domain, die über den VPN-Dnsserver aufgelöst werden soll, in diesem Beispiel ",{"type":26,"tag":274,"props":537,"children":539},{"className":538},[],[540],{"type":32,"value":433},{"type":32,"value":85},{"type":26,"tag":35,"props":543,"children":544},{},[545,547,552,554,559,561,567],{"type":32,"value":546},"Die ",{"type":26,"tag":313,"props":548,"children":549},{},[550],{"type":32,"value":551},"Resolv-Datei",{"type":32,"value":553}," wird ",{"type":26,"tag":274,"props":555,"children":557},{"className":556},[],[558],{"type":32,"value":460},{"type":32,"value":560}," mitteilen, wie es seine DNS-Anfragen auflösen soll, falls es keine anderen Regeln\ngibt, also erstellen wir ",{"type":26,"tag":274,"props":562,"children":564},{"className":563},[],[565],{"type":32,"value":566},"/etc/resolv.dnsmasq.conf",{"type":32,"value":568},"\nmit dem Inhalt",{"type":26,"tag":267,"props":570,"children":572},{"className":269,"code":571,"language":271,"meta":7,"style":7},"Nameserver 1.1.1.1\n",[573],{"type":26,"tag":274,"props":574,"children":575},{"__ignoreMap":7},[576],{"type":26,"tag":278,"props":577,"children":578},{"class":280,"line":281},[579,584,588,592,596,600,604,608],{"type":26,"tag":278,"props":580,"children":581},{"style":285},[582],{"type":32,"value":583},"Nameserver ",{"type":26,"tag":278,"props":585,"children":586},{"style":496},[587],{"type":32,"value":236},{"type":26,"tag":278,"props":589,"children":590},{"style":285},[591],{"type":32,"value":85},{"type":26,"tag":278,"props":593,"children":594},{"style":496},[595],{"type":32,"value":236},{"type":26,"tag":278,"props":597,"children":598},{"style":285},[599],{"type":32,"value":85},{"type":26,"tag":278,"props":601,"children":602},{"style":496},[603],{"type":32,"value":236},{"type":26,"tag":278,"props":605,"children":606},{"style":285},[607],{"type":32,"value":85},{"type":26,"tag":278,"props":609,"children":610},{"style":496},[611],{"type":32,"value":525},{"type":26,"tag":35,"props":613,"children":614},{},[615,617,623,625,631,633,639],{"type":32,"value":616},"Wenn Sie eine statische Netzwerkkonfiguration verwenden, können Sie diese jetzt einfach bearbeiten, um ",{"type":26,"tag":274,"props":618,"children":620},{"className":619},[],[621],{"type":32,"value":622},"127.0.0.1",{"type":32,"value":624}," als\nNameserver zu verwenden. Wenn Sie\nautomatische IP-Konfiguration mit dhcp verwenden, müssen Sie Ihren dhcp-Client so konfigurieren, dass er den neuen\nlokalen DNS-Server verwendet. Unter Debian,\nist der Standard ",{"type":26,"tag":274,"props":626,"children":628},{"className":627},[],[629],{"type":32,"value":630},"dhclient",{"type":32,"value":632},". In diesem Fall editieren Sie ",{"type":26,"tag":274,"props":634,"children":636},{"className":635},[],[637],{"type":32,"value":638},"/etc/dhcp/dhclient.conf",{"type":32,"value":640}," und fügen hinzu:",{"type":26,"tag":267,"props":642,"children":644},{"className":269,"code":643,"language":271,"meta":7,"style":7},"domain-name-servers 127.0.0.1 vorangestellt;\n\n",[645],{"type":26,"tag":274,"props":646,"children":647},{"__ignoreMap":7},[648],{"type":26,"tag":278,"props":649,"children":650},{"class":280,"line":281},[651,656,661,665,670,674,678,682,686],{"type":26,"tag":278,"props":652,"children":653},{"style":285},[654],{"type":32,"value":655},"domain-name-servers ",{"type":26,"tag":278,"props":657,"children":658},{"style":496},[659],{"type":32,"value":660},"127",{"type":26,"tag":278,"props":662,"children":663},{"style":285},[664],{"type":32,"value":85},{"type":26,"tag":278,"props":666,"children":667},{"style":496},[668],{"type":32,"value":669},"0",{"type":26,"tag":278,"props":671,"children":672},{"style":285},[673],{"type":32,"value":85},{"type":26,"tag":278,"props":675,"children":676},{"style":496},[677],{"type":32,"value":669},{"type":26,"tag":278,"props":679,"children":680},{"style":285},[681],{"type":32,"value":85},{"type":26,"tag":278,"props":683,"children":684},{"style":496},[685],{"type":32,"value":236},{"type":26,"tag":278,"props":687,"children":688},{"style":285},[689],{"type":32,"value":690}," vorangestellt;\n",{"type":26,"tag":35,"props":692,"children":693},{},[694,696,701,703,708],{"type":32,"value":695},"Das war's. Alles, was Sie jetzt noch tun müssen, ist ",{"type":26,"tag":274,"props":697,"children":699},{"className":698},[],[700],{"type":32,"value":460},{"type":32,"value":702}," neu zu starten, damit es seine Konfiguration neu lädt und ",{"type":26,"tag":274,"props":704,"children":706},{"className":705},[],[707],{"type":32,"value":630},{"type":32,"value":709}," neu zu verbinden/starten\n(das Trennen und erneute Verbinden des Netzwerks kann funktionieren, im Zweifelsfall starten Sie den Rechner neu).",{"type":26,"tag":35,"props":711,"children":712},{},[713,715,721],{"type":32,"value":714},"Jetzt können Sie überprüfen, ob die Datei ",{"type":26,"tag":274,"props":716,"children":718},{"className":717},[],[719],{"type":32,"value":720},"/etc/resolv.conf",{"type":32,"value":722}," folgendes enthält",{"type":26,"tag":267,"props":724,"children":726},{"className":269,"code":725,"language":271,"meta":7,"style":7},"nameserver 127.0.0.1\n",[727],{"type":26,"tag":274,"props":728,"children":729},{"__ignoreMap":7},[730],{"type":26,"tag":278,"props":731,"children":732},{"class":280,"line":281},[733,738,742,746,750,754,758,762],{"type":26,"tag":278,"props":734,"children":735},{"style":285},[736],{"type":32,"value":737},"nameserver ",{"type":26,"tag":278,"props":739,"children":740},{"style":496},[741],{"type":32,"value":660},{"type":26,"tag":278,"props":743,"children":744},{"style":285},[745],{"type":32,"value":85},{"type":26,"tag":278,"props":747,"children":748},{"style":496},[749],{"type":32,"value":669},{"type":26,"tag":278,"props":751,"children":752},{"style":285},[753],{"type":32,"value":85},{"type":26,"tag":278,"props":755,"children":756},{"style":496},[757],{"type":32,"value":669},{"type":26,"tag":278,"props":759,"children":760},{"style":285},[761],{"type":32,"value":85},{"type":26,"tag":278,"props":763,"children":764},{"style":496},[765],{"type":32,"value":525},{"type":26,"tag":35,"props":767,"children":768},{},[769,771,776],{"type":32,"value":770},"als ersten Nameserver enthält. Wenn dies der Fall ist, sollte die ausgewählte Domain (in meinem Beispiel ",{"type":26,"tag":274,"props":772,"children":774},{"className":773},[],[775],{"type":32,"value":333},{"type":32,"value":777},")\nnun aufgelöst werden.",{"type":26,"tag":35,"props":779,"children":780},{},[781,783,788,790,796],{"type":32,"value":782},"Bei ",{"type":26,"tag":274,"props":784,"children":786},{"className":785},[],[787],{"type":32,"value":460},{"type":32,"value":789}," können Sie mehrere ",{"type":26,"tag":274,"props":791,"children":793},{"className":792},[],[794],{"type":32,"value":795},"server=",{"type":32,"value":797},"-Zeilen hinzufügen, was praktisch ist, wenn Sie mehrere Domains haben, die\nüber verschiedene DNS-Server aufgelöst werden müssen.",{"type":26,"tag":799,"props":800,"children":801},"style",{},[802],{"type":32,"value":803},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}",{"title":7,"searchDepth":97,"depth":97,"links":805},[806,807,808],{"id":252,"depth":97,"text":255},{"id":303,"depth":97,"text":306},{"id":355,"depth":97,"text":358},{"_path":123,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":124,"description":125,"author":126,"image":127,"releaseDate":128,"blogCategories":810,"articleTags":811,"tags":812,"body":813,"_type":101,"_id":132,"_source":103,"_file":133,"_stem":134,"_extension":106},[14],[15],[118],{"type":23,"children":814,"toc":2079},[815,824,843,849,895,960,972,978,988,1029,1038,1070,1110,1119,1152,1171,1225,1231,1240,1271,1316,1341,1366,1372,1381,1417,1540,1543,1547,1591,1597,1606,1660,1691,1715,1746,1765,1771,1780,1813,1832,1869,1888,1914,1926,1932,1941,1967,2023,2029,2057,2069],{"type":26,"tag":816,"props":817,"children":823},"img",{"alt":818,"aspect-ratio":819,"height":820,"object-fit":821,"src":822},"Eine Person hällt einen Sticker mit dem Schriftzug \"Dev-ops\" in der Hand","2.07",300,"fill","/blog/person_holding_devops_sticker.jpg",[],{"type":26,"tag":278,"props":825,"children":829},{"className":826},[827,828],"text-right","text-caption",[830],{"type":26,"tag":35,"props":831,"children":832},{},[833],{"type":26,"tag":834,"props":835,"children":836},"em",{},[837],{"type":26,"tag":41,"props":838,"children":840},{"href":839},"https://www.pexels.com/photo/person-holding-a-sticker-11035393/",[841],{"type":32,"value":842},"Photo by RealToughCandy.com",{"type":26,"tag":27,"props":844,"children":846},{"id":845},"warum-die-entwicklung-einer-web-applikation-nur-der-anfang-ist",[847],{"type":32,"value":848},"Warum die Entwicklung einer (Web-)Applikation nur der Anfang ist",{"type":26,"tag":35,"props":850,"children":851},{},[852,854,859,861,866,868,872,874,879,881,886,888,893],{"type":32,"value":853},"Web-Anwendungen werden meistens in einer ",{"type":26,"tag":834,"props":855,"children":856},{},[857],{"type":32,"value":858},"Dev",{"type":32,"value":860},"-Umgebung (Development-Umgebung) entwickelt und getestet – doch der\neigentliche Härtetest kommt in der Praxis auf den ",{"type":26,"tag":834,"props":862,"children":863},{},[864],{"type":32,"value":865},"Prod",{"type":32,"value":867},"-Systemen (Produktivumgebung). ",{"type":26,"tag":313,"props":869,"children":870},{},[871],{"type":32,"value":15},{"type":32,"value":873}," (kurz für\n",{"type":26,"tag":834,"props":875,"children":876},{},[877],{"type":32,"value":878},"Development Operations",{"type":32,"value":880},", also die enge Verzahnung von Entwicklung und IT-Betrieb) spielt hier eine Schlüsselrolle.\nInsbesondere bei Web-Anwendungen auf ",{"type":26,"tag":313,"props":882,"children":883},{},[884],{"type":32,"value":885},"Linux-Servern",{"type":32,"value":887}," mit komplexer ",{"type":26,"tag":313,"props":889,"children":890},{},[891],{"type":32,"value":892},"Netzwerkinfrastruktur",{"type":32,"value":894}," stellt sich oft erst\n„live“ heraus, wie stabil und performant eine Anwendung wirklich läuft. In diesem Beitrag werfen wir einen Blick auf\ngängige Thesen rund um DevOps im Web-Umfeld und prüfen, was dran ist. Dabei betrachten wir vor allem Aspekte, die für\nKunden aus dem Mittelstand und Partnerfirmen einer Software-Agentur relevant sind.",{"type":26,"tag":35,"props":896,"children":897},{},[898,900,905,907,912,914,919,921,930,932,941,943,951,953,958],{"type":32,"value":899},"Wir beleuchten, warum Entwicklungsumgebungen an ihre Grenzen stoßen, wieso echte Lasttests und ",{"type":26,"tag":834,"props":901,"children":902},{},[903],{"type":32,"value":904},"Edge Cases",{"type":32,"value":906}," (Randfälle)\nschwer simulierbar sind und weshalb die Arbeit nach dem Launch (Stichwort ",{"type":26,"tag":834,"props":908,"children":909},{},[910],{"type":32,"value":911},"Monitoring",{"type":32,"value":913}," und ",{"type":26,"tag":834,"props":915,"children":916},{},[917],{"type":32,"value":918},"Continuous Improvement",{"type":32,"value":920},")\ngerade erst richtig beginnt. Außerdem gehen wir darauf ein, welche Tools – von ",{"type":26,"tag":41,"props":922,"children":924},{"href":923},"https://sentry.io/",[925],{"type":26,"tag":313,"props":926,"children":927},{},[928],{"type":32,"value":929},"Sentry",{"type":32,"value":931}," über ",{"type":26,"tag":41,"props":933,"children":935},{"href":934},"https://grafana.com/",[936],{"type":26,"tag":313,"props":937,"children":938},{},[939],{"type":32,"value":940},"Grafana",{"type":32,"value":942}," bis\n",{"type":26,"tag":41,"props":944,"children":946},{"href":945},"https://www.zabbix.com/",[947],{"type":26,"tag":313,"props":948,"children":949},{},[950],{"type":32,"value":170},{"type":32,"value":952}," – im Alltag unverzichtbar sind und wie ",{"type":26,"tag":313,"props":954,"children":955},{},[956],{"type":32,"value":957},"CI/CD-Pipelines",{"type":32,"value":959}," auch weniger erfahrenen Entwicklern helfen,\ngefahrlos zu deployen.",{"type":26,"tag":278,"props":961,"children":963},{"className":962},[827],[964],{"type":26,"tag":35,"props":965,"children":966},{},[967],{"type":26,"tag":834,"props":968,"children":969},{},[970],{"type":32,"value":971},"Lesedauer: ca. 20 Minuten",{"type":26,"tag":27,"props":973,"children":975},{"id":974},"entwicklungsumgebung-vs-realität-begrenzte-leistung-und-unbekannte-randfälle",[976],{"type":32,"value":977},"Entwicklungsumgebung vs. Realität: Begrenzte Leistung und unbekannte Randfälle",{"type":26,"tag":35,"props":979,"children":980},{},[981,986],{"type":26,"tag":313,"props":982,"children":983},{},[984],{"type":32,"value":985},"These:",{"type":32,"value":987}," Software-Projekte und Web-Anwendungen werden in Entwicklungsumgebungen gebaut, die in Leistung und Testdaten\nlimitiert sind.",{"type":26,"tag":35,"props":989,"children":990},{},[991,993,998,1000,1005,1007,1012,1014,1019,1021,1027],{"type":32,"value":992},"In der Entwicklungsphase läuft eine Web-Anwendung oft auf dem Laptop, einem Desktop-PC oder in einer isolierten\nTest-Umgebung der Entwickler. Diese ",{"type":26,"tag":313,"props":994,"children":995},{},[996],{"type":32,"value":997},"Dev-Umgebung",{"type":32,"value":999}," ist typischerweise ",{"type":26,"tag":313,"props":1001,"children":1002},{},[1003],{"type":32,"value":1004},"weniger leistungsfähig",{"type":32,"value":1006}," als die späteren\nProduktionsserver und enthält nur einen Bruchteil echter Daten. Das ist zunächst normal – niemand hat eine vollständige\nKopie der Produktionsdatenbank auf seinem Laptop, und man will ja auch lokal schnell arbeiten können. Allerdings führt\ndiese Diskrepanz dazu, dass manche Probleme in der Dev-Umgebung gar nicht erst sichtbar werden. Ebenfalls kann sich bei\nperformance-Problemen schnell der Gedanke einschleichen, dass das Produktivsystem mit seiner überlegenen Leistung schon\nnicht so schwer damit zu kämpfen hat. Eine ",{"type":26,"tag":313,"props":1008,"children":1009},{},[1010],{"type":32,"value":1011},"staging",{"type":32,"value":1013},"- oder Test-Umgebung kann versuchen, die Produktionsumgebung\nnachzuahmen, ",{"type":26,"tag":313,"props":1015,"children":1016},{},[1017],{"type":32,"value":1018},"stößt aber an Grenzen",{"type":32,"value":1020},": Production environments haben Feinheiten, die in Staging nur schwer zu\nsimulieren sind – etwa das reale Nutzerverhalten, große Datenmengen oder komplexe System-Interaktionen\n",{"type":26,"tag":41,"props":1022,"children":1024},{"href":1023},"https://www.browserstack.com/guide/testing-in-production#:~:text=1.%20Real,only%20surface%20under%20specific%20conditions",[1025],{"type":32,"value":1026},"browserstack.com",{"type":32,"value":1028},"\n. Mit anderen Worten: In der Testumgebung läuft alles „schön sauber“, aber in der Realität kommen ganz andere Faktoren\nins Spiel.",{"type":26,"tag":35,"props":1030,"children":1031},{},[1032,1036],{"type":26,"tag":313,"props":1033,"children":1034},{},[1035],{"type":32,"value":985},{"type":32,"value":1037}," Entwickler und Kunden haben oft nicht den vollständigen Überblick über reale Anwendungsfälle, Edge-Cases und\nLastspitzen.",{"type":26,"tag":35,"props":1039,"children":1040},{},[1041,1043,1048,1050,1055,1057,1061,1063,1068],{"type":32,"value":1042},"Entwicklungsteams und selbst die Kunden kennen zwar die ",{"type":26,"tag":834,"props":1044,"children":1045},{},[1046],{"type":32,"value":1047},"Hauptanwendungsfälle",{"type":32,"value":1049}," ihrer Software, doch ",{"type":26,"tag":313,"props":1051,"children":1052},{},[1053],{"type":32,"value":1054},"reale Benutzer",{"type":32,"value":1056},"\ntreiben Anwendungen gerne an ihre Grenzen. Plötzlich nutzen sie Features in Kombinationen, an die niemand gedacht hat,\noder geben unerwartete Daten ein. Solche ",{"type":26,"tag":313,"props":1058,"children":1059},{},[1060],{"type":32,"value":904},{"type":32,"value":1062}," (Rand- oder Grenzfälle) bleiben in der Spezifikation oft\nunentdeckt. Erst im Echtbetrieb tauchen dann Fehler auf, die vorher niemand vorausgesehen hat. Ein Grund dafür ist,\ndass einige Bugs nur unter spezifischen Bedingungen auftreten, die man in Pre-Production-Tests nicht antizipiert.\nBeispielsweise könnte ein Nutzerprofil mit einem ",{"type":26,"tag":834,"props":1064,"children":1065},{},[1066],{"type":32,"value":1067},"Emoji",{"type":32,"value":1069}," im Namen irgendwo in der Verarbeitung einen Fehler auslösen –\netwas, das im Testdatensatz nicht vorkam. Oder ein Kunde nutzt die Web-App auf einem älteren Browser und stößt auf\nDarstellungsprobleme. Solche Fälle zeigen sich oft erst, wenn die Anwendung „in freier Wildbahn“ verwendet wird.",{"type":26,"tag":35,"props":1071,"children":1072},{},[1073,1075,1080,1082,1087,1089,1094,1096,1101,1103,1108],{"type":32,"value":1074},"Zudem kennen Kunden zwar ihre Geschäftsprozesse, aber ",{"type":26,"tag":313,"props":1076,"children":1077},{},[1078],{"type":32,"value":1079},"Lastspitzen",{"type":32,"value":1081}," durch Marketing-Aktionen oder völlig atypische\nNutzungszeiten (z.B. am Wochenende um 3 Uhr nachts) werden leicht unterschätzt. Die ",{"type":26,"tag":313,"props":1083,"children":1084},{},[1085],{"type":32,"value":1086},"kritische Perspektive",{"type":32,"value":1088}," hier:\nModerne Ansätze versuchen diese Lücken zu schließen und propagieren, dass Entwicklungs- und Produktionsumgebung so\nähnlich wie möglich sein sollen (",{"type":26,"tag":834,"props":1090,"children":1091},{},[1092],{"type":32,"value":1093},"dev/prod parity",{"type":32,"value":1095},"), um spätere Überraschungen zu minimieren.\n",{"type":26,"tag":313,"props":1097,"children":1098},{},[1099],{"type":32,"value":1100},"Containerisierung",{"type":32,"value":1102}," (z.B. mit Docker) erlaubt es, lokal eine Umgebung zu schaffen, die zumindest in den\nAbhängigkeiten und Voraussetzungen der Software-Faktoren der Produktionsumgebung sehr nahekommt. Dennoch bleibt es\nillusorisch, wirklich ",{"type":26,"tag":313,"props":1104,"children":1105},{},[1106],{"type":32,"value":1107},"alle",{"type":32,"value":1109}," realen Bedingungen vorwegzunehmen.",{"type":26,"tag":35,"props":1111,"children":1112},{},[1113,1117],{"type":26,"tag":313,"props":1114,"children":1115},{},[1116],{"type":32,"value":985},{"type":32,"value":1118}," Verhalten unter Dauerlast, externen Crawlern, Penetration-Tests oder Spam-Bots sind schwer simulierbar.",{"type":26,"tag":35,"props":1120,"children":1121},{},[1122,1124,1129,1131,1136,1138,1143,1145,1150],{"type":32,"value":1123},"Performance-Tests gehören zwar zum guten Ton, aber ",{"type":26,"tag":313,"props":1125,"children":1126},{},[1127],{"type":32,"value":1128},"dauerhafte Last 24/7",{"type":32,"value":1130}," über Wochen hinweg lässt sich „im Labor“\nkaum vollständig nachstellen. Viele Unternehmen führen vor einem Launch Stresstests durch – doch diese laufen oft nur\nwenige Stunden oder Tage. Wie sich die Anwendung über Monate verhält (Memory Leaks? Datenbank wächst unvorhergesehen?\nLogs füllen die Festplatte?) bleibt offen. Auch ",{"type":26,"tag":313,"props":1132,"children":1133},{},[1134],{"type":32,"value":1135},"böswillige Zugriffe",{"type":32,"value":1137}," sind ein Thema. Externe ",{"type":26,"tag":313,"props":1139,"children":1140},{},[1141],{"type":32,"value":1142},"Crawler",{"type":32,"value":1144}," (z.B. von\nGoogle, Bing, oder sonstigen) könnten massenhaft Seiten aufrufen oder ",{"type":26,"tag":313,"props":1146,"children":1147},{},[1148],{"type":32,"value":1149},"Spam-Bots",{"type":32,"value":1151}," atypische Eingaben und Aufrufe\nverursachen. Ein Dauerbeschuss durch ein Penetration-Testing-Tool oder gar eine echte Angriffssimulation (Stichwort\nDDoS) ist nur begrenzt machbar, ohne die echten Systeme evtl. zu gefährden oder für den Tagesbetrieb unbrauchbar zu\nmachen.",{"type":26,"tag":35,"props":1153,"children":1154},{},[1155,1157,1162,1164,1169],{"type":32,"value":1156},"Die Community der Entwickler und Dev-Ops ist sich hier einig: Es ist ",{"type":26,"tag":313,"props":1158,"children":1159},{},[1160],{"type":32,"value":1161},"unheimlich schwierig, Produktionslast wirklich zu\nsimulieren",{"type":32,"value":1163},". Selbst mit Testumgebungen, die der Prod-Umgebung ähneln, können unvorhergesehene Effekte auftreten. Ein\ninteressanter Ansatz ist dabei beinahe kontraintuitiv: Manchmal nutzt man ",{"type":26,"tag":313,"props":1165,"children":1166},{},[1167],{"type":32,"value":1168},"absichtlich unterdimensionierte\nTestumgebungen",{"type":32,"value":1170},", um Schwachstellen zu entdecken. In dem erwähnten Bericht führte eine kleine Test-Datenbank dazu, dass\nein wachsendes Log schneller die Platte füllte – ein Problem, das in einer großen Umgebung erst viel später aufgefallen\nwäre.",{"type":26,"tag":35,"props":1172,"children":1173},{},[1174,1175,1180,1182,1187,1189,1194,1196,1201,1203,1211,1212,1217,1223],{"type":32,"value":546},{"type":26,"tag":313,"props":1176,"children":1177},{},[1178],{"type":32,"value":1179},"überwiegende Meinung",{"type":32,"value":1181}," in der Tech-Community ist jedoch, dass ",{"type":26,"tag":313,"props":1183,"children":1184},{},[1185],{"type":32,"value":1186},"nichts an echte Produktions-Tests herankommt",{"type":32,"value":1188},".\nGroße Player wie Netflix propagieren sogar ",{"type":26,"tag":834,"props":1190,"children":1191},{},[1192],{"type":32,"value":1193},"Chaos Engineering",{"type":32,"value":1195},", bei dem in der laufenden Produktion gezielt Störungen\nerzeugt werden, um die Systemrobustheit zu prüfen. Ein Experte fasst es so zusammen: ",{"type":26,"tag":834,"props":1197,"children":1198},{},[1199],{"type":32,"value":1200},"„Um effektiv zu testen, muss das\nSystem in Produktion laufen. Schließlich kann man erst",{"type":32,"value":1202}," ",{"type":26,"tag":834,"props":1204,"children":1205},{},[1206],{"type":26,"tag":313,"props":1207,"children":1208},{},[1209],{"type":32,"value":1210},"in Produktion",{"type":32,"value":1202},{"type":26,"tag":834,"props":1213,"children":1214},{},[1215],{"type":32,"value":1216},"mit Faktoren wie Zustandsdaten, echten\nInputs und dem Verhalten externer Systeme arbeiten“",{"type":26,"tag":41,"props":1218,"children":1220},{"href":1219},"https://www.techtarget.com/searchsoftwarequality/tip/9-techniques-for-fixing-bugs-in-production#:~:text=want%20it%20to%2C%20and%20code,and%20how%20external%20systems%20behave",[1221],{"type":32,"value":1222},"techtarget.com",{"type":32,"value":1224},"\n. Das heißt, einige Fehler werden wir erst sehen, wenn wir live gehen. Wichtig ist dann, schnell reagieren zu können –\nund genau hier setzt DevOps an.",{"type":26,"tag":27,"props":1226,"children":1228},{"id":1227},"nach-dem-launch-ist-vor-dem-launch-analyse-und-optimierung-im-laufenden-betrieb",[1229],{"type":32,"value":1230},"Nach dem Launch ist vor dem Launch: Analyse und Optimierung im laufenden Betrieb",{"type":26,"tag":35,"props":1232,"children":1233},{},[1234,1238],{"type":26,"tag":313,"props":1235,"children":1236},{},[1237],{"type":32,"value":985},{"type":32,"value":1239}," Weitergehende Analyse und Optimierung nach dem Launch ist essenziell.",{"type":26,"tag":35,"props":1241,"children":1242},{},[1243,1245,1249,1251,1256,1258,1263,1269],{"type":32,"value":1244},"Früher galt ein Software-Projekt mit dem Go-Live als abgeschlossen – heute weiß man, dass ",{"type":26,"tag":313,"props":1246,"children":1247},{},[1248],{"type":32,"value":918},{"type":32,"value":1250},"\n(kontinuierliche Verbesserung) ein zentraler Bestandteil erfolgreicher Software ist. Gerade ",{"type":26,"tag":313,"props":1252,"children":1253},{},[1254],{"type":32,"value":1255},"nach dem Launch",{"type":32,"value":1257}," beginnt\ndie Phase, in der echte Nutzungsdaten ausgewertet, Engpässe erkannt und Optimierungen ausgerollt werden. So betont ein\nFachartikel: ",{"type":26,"tag":834,"props":1259,"children":1260},{},[1261],{"type":32,"value":1262},"„Selbst mit gründlichem Pre-Launch-Testing können echte Anwender in der Praxis Performance-Probleme\naufdecken, die während der Entwicklung nicht offensichtlich waren. Post-Launch-Monitoring hilft, diese Probleme zu\nidentifizieren, bevor sie eine große Zahl von Nutzern beeinträchtigen“",{"type":26,"tag":41,"props":1264,"children":1266},{"href":1265},"https://www.topdevelopers.co/blog/post-launch-support-in-software-development/#:~:text=Even%20with%20rigorous%20pre,a%20large%20number%20of%20users",[1267],{"type":32,"value":1268},"topdevelopers.co",{"type":32,"value":1270},"\n. Anders ausgedrückt: Ein Launch ohne anschließende Überwachung ist wie die Jungfernfahrt ohne jemanden am Steuerrad.\nIn der Praxis unterschätzen gerade kleinere und mittelständische Unternehmen diesen Aufwand gern.",{"type":26,"tag":35,"props":1272,"children":1273},{},[1274,1279,1281,1286,1288,1293,1295,1300,1302,1307,1309,1314],{"type":26,"tag":313,"props":1275,"children":1276},{},[1277],{"type":32,"value":1278},"Kritische Perspektive:",{"type":32,"value":1280}," Manche denken, eine gute Software würde „out of the box“ laufen – doch das ist nach unserer\nErfahrung nur extrem selten der Fall. Es braucht Zeit und iterative Verbesserungen, um eine (Web-)Anwendung zu\n",{"type":26,"tag":313,"props":1282,"children":1283},{},[1284],{"type":32,"value":1285},"stabilisieren und zu beschleunigen",{"type":32,"value":1287},". Studien zeigen, dass ",{"type":26,"tag":834,"props":1289,"children":1290},{},[1291],{"type":32,"value":1292},"kontinuierliche Pflege",{"type":32,"value":1294}," die ",{"type":26,"tag":313,"props":1296,"children":1297},{},[1298],{"type":32,"value":1299},"Nutzerzufriedenheit und\n-bindung",{"type":32,"value":1301}," deutlich erhöhten kann. Dazu gehören regelmäßige ",{"type":26,"tag":313,"props":1303,"children":1304},{},[1305],{"type":32,"value":1306},"Bugfixes",{"type":32,"value":1308},", Performance-Tuning (z.B. Caching-Strategien anpassen, Datenbank-Indices\noptimieren) und auch ",{"type":26,"tag":313,"props":1310,"children":1311},{},[1312],{"type":32,"value":1313},"Security-Patches",{"type":32,"value":1315},". Gerade Sicherheitslücken, die erst nach und nach publik werden, müssen sofort\ngeschlossen werden, um Schaden abzuwenden.",{"type":26,"tag":35,"props":1317,"children":1318},{},[1319,1321,1326,1328,1333,1335,1340],{"type":32,"value":1320},"Ein weiterer Aspekt ist die ",{"type":26,"tag":313,"props":1322,"children":1323},{},[1324],{"type":32,"value":1325},"Feedback-Schleife",{"type":32,"value":1327},": Durch echtes Nutzer-Feedback erfährt man, welche Features gut\nankommen und wo eventuell Usability-Probleme bestehen. Dieses Feedback fließt idealerweise direkt ins Backlog des\nEntwicklungsteams ein. Eine Kultur der ",{"type":26,"tag":834,"props":1329,"children":1330},{},[1331],{"type":32,"value":1332},"Continuous Deployment",{"type":32,"value":1334}," stellt sicher, dass Verbesserungen zeitnah zu den Kunden\ngelangen und nicht bis zum nächsten großen „Release“ aufgeschoben werden. Moderne DevOps-Teams betrachten ihre Software\nals lebendiges Produkt: ",{"type":26,"tag":834,"props":1336,"children":1337},{},[1338],{"type":32,"value":1339},"„Software endet nicht mit dem Launch – sie sollte als lebendiges Produkt gesehen werden.\nPost-Launch-Support ermöglicht kontinuierliche Verbesserung anhand von Nutzerfeedback und Performance-Daten“",{"type":32,"value":85},{"type":26,"tag":35,"props":1342,"children":1343},{},[1344,1345,1350,1352,1357,1359,1364],{"type":32,"value":546},{"type":26,"tag":313,"props":1346,"children":1347},{},[1348],{"type":32,"value":1349},"aktuelle Praxis",{"type":32,"value":1351}," in erfolgreichen Unternehmen zeigt klar: Nach dem Launch ist vor dem Launch. ",{"type":26,"tag":313,"props":1353,"children":1354},{},[1355],{"type":32,"value":1356},"Stagnation",{"type":32,"value":1358}," ist\ngefährlich – wer nach dem Go-Live nicht in ",{"type":26,"tag":313,"props":1360,"children":1361},{},[1362],{"type":32,"value":1363},"Monitoring, Fehlerbehebung und Optimierung",{"type":32,"value":1365}," investiert, riskiert Ausfälle,\nunzufriedene Nutzende und veraltete Software. Für Mittelständler bedeutet das konkret, genügend Ressourcen für die\nBetriebsphase einzuplanen oder einen kompetenten Partner zu haben, der das Monitoring und die Wartung übernimmt.",{"type":26,"tag":27,"props":1367,"children":1369},{"id":1368},"monitoring-und-logging-ohne-beobachtung-geht-es-nicht",[1370],{"type":32,"value":1371},"Monitoring und Logging: Ohne Beobachtung geht es nicht",{"type":26,"tag":35,"props":1373,"children":1374},{},[1375,1379],{"type":26,"tag":313,"props":1376,"children":1377},{},[1378],{"type":32,"value":985},{"type":32,"value":1380}," Monitoring-Tools wie Sentry oder Grafana sind unerlässlich für Logging und Fehleranalyse.",{"type":26,"tag":35,"props":1382,"children":1383},{},[1384,1386,1391,1393,1400,1401,1408,1410,1414],{"type":32,"value":1385},"Um im laufenden Betrieb Probleme schnell zu erkennen, sind ",{"type":26,"tag":313,"props":1387,"children":1388},{},[1389],{"type":32,"value":1390},"Monitoring- und Logging-Tools",{"type":32,"value":1392}," absolut entscheidend. Zwei\nprominente Vertreter sind ",{"type":26,"tag":41,"props":1394,"children":1395},{"href":923},[1396],{"type":26,"tag":313,"props":1397,"children":1398},{},[1399],{"type":32,"value":929},{"type":32,"value":913},{"type":26,"tag":41,"props":1402,"children":1403},{"href":934},[1404],{"type":26,"tag":313,"props":1405,"children":1406},{},[1407],{"type":32,"value":940},{"type":32,"value":1409}," (oft in Kombination mit Time-Series-Datenbanken wie Prometheus oder\nLog-Datenbanken wie ElasticSearch/Loki).\n",{"type":26,"tag":1411,"props":1412,"children":1413},"br",{},[],{"type":26,"tag":1411,"props":1415,"children":1416},{},[],{"type":26,"tag":1418,"props":1419,"children":1420},"ul",{},[1421,1473],{"type":26,"tag":1422,"props":1423,"children":1424},"li",{},[1425,1432,1434,1439,1441,1446,1448,1457,1459,1464,1466,1471],{"type":26,"tag":41,"props":1426,"children":1427},{"href":923},[1428],{"type":26,"tag":313,"props":1429,"children":1430},{},[1431],{"type":32,"value":929},{"type":32,"value":1433}," ist ein spezialisiertes Tool für ",{"type":26,"tag":313,"props":1435,"children":1436},{},[1437],{"type":32,"value":1438},"Error Tracking",{"type":32,"value":1440},". Es fängt Fehler und Exceptions der Anwendung ab und\nsammelt sie zentral. Warum ist das wichtig? In Produktion kann ein Entwickler nicht einfach mit dem Debugger am Code\nhängen. Sentry schließt diese Lücke: Es liefert detaillierte Fehlerreports (mit Stacktrace, User-Informationen,\nKontextvariablen etc.), sobald irgendwo im Code eine Exception auftritt. In der Dev-Community gilt Sentry daher\nmittlerweile als ",{"type":26,"tag":313,"props":1442,"children":1443},{},[1444],{"type":32,"value":1445},"industrieller Standard",{"type":32,"value":1447},", wenn es um Crash-Reporting geht\n",{"type":26,"tag":41,"props":1449,"children":1451},{"href":1450},"https://medium.com/@AndrzejSala/efficient-error-tracking-with-sentry-e975c186947c#:~:text=Sentry%20is%20a%20crash,an%20industry%20standard%20by%20TechRadar",[1452,1454],{"type":32,"value":1453},"medium.com",{"type":26,"tag":1411,"props":1455,"children":1456},{},[],{"type":32,"value":1458},".\nSelbst weniger erfahrene Entwickler finden mit Sentry schneller die Ursache von Fehlern, weil das Tool viel manuelle\nDetektivarbeit abnimmt. Ohne ein Tool wie Sentry bekommt man viele Fehler in einer komplexen Web-Anwendung gar nicht\nmit, bis Nutzende sich beschweren. Mit Sentry hingegen erfährt das Team oft ",{"type":26,"tag":313,"props":1460,"children":1461},{},[1462],{"type":32,"value":1463},"sofort",{"type":32,"value":1465},", wenn irgendwo ein Fehler\npassiert – und kann proaktiv reagieren, ",{"type":26,"tag":313,"props":1467,"children":1468},{},[1469],{"type":32,"value":1470},"bevor",{"type":32,"value":1472}," alle Nutzenden betroffen sind.",{"type":26,"tag":1422,"props":1474,"children":1475},{},[1476,1483,1485,1490,1492,1497,1499,1504,1506,1511,1513,1518,1520,1525,1527,1532,1534,1539],{"type":26,"tag":41,"props":1477,"children":1478},{"href":934},[1479],{"type":26,"tag":313,"props":1480,"children":1481},{},[1482],{"type":32,"value":940},{"type":32,"value":1484}," dagegen adressiert das ",{"type":26,"tag":313,"props":1486,"children":1487},{},[1488],{"type":32,"value":1489},"Performance-Monitoring und die Visualisierung",{"type":32,"value":1491}," von Systemmetriken. Grafana\nselbst ist eigentlich ein Dashboard-Werkzeug, das verschiedene Datenquellen einbinden kann – von Server-CPU-Auslastung\nüber Datenbank-Performance bis hin zu anwendungsspezifischen KPIs. In Kombination mit z.B. ",{"type":26,"tag":313,"props":1493,"children":1494},{},[1495],{"type":32,"value":1496},"Prometheus",{"type":32,"value":1498}," (für\nMetrik-Sammlung) oder ",{"type":26,"tag":313,"props":1500,"children":1501},{},[1502],{"type":32,"value":1503},"Loki",{"type":32,"value":1505}," (für Log-Sammlung) entsteht so ein mächtiges ",{"type":26,"tag":313,"props":1507,"children":1508},{},[1509],{"type":32,"value":1510},"Monitoring-Cockpit",{"type":32,"value":1512},". Man möchte ",{"type":26,"tag":834,"props":1514,"children":1515},{},[1516],{"type":32,"value":1517},"auf\neinen Blick",{"type":32,"value":1519}," sehen können, ob alle Systeme grün sind, wo vielleicht Engpässe drohen oder ob ungewöhnliche Ausschläge\nauftreten. Konkret bedeutet dies: Grafana & Co. helfen dabei, ",{"type":26,"tag":313,"props":1521,"children":1522},{},[1523],{"type":32,"value":1524},"Trends",{"type":32,"value":1526}," zu erkennen (z.B. stetig steigende\nSpeicherlast), ",{"type":26,"tag":313,"props":1528,"children":1529},{},[1530],{"type":32,"value":1531},"Anomalien",{"type":32,"value":1533}," aufzuspüren (z.B. plötzlicher Traffic-Anstieg um Mitternacht) und im Fehlerfall schnell\ndie ",{"type":26,"tag":313,"props":1535,"children":1536},{},[1537],{"type":32,"value":1538},"Ursache einzugrenzen",{"type":32,"value":85},{"type":26,"tag":1411,"props":1541,"children":1542},{},[],{"type":26,"tag":1544,"props":1545,"children":1546},"icons-dev-ops",{},[],{"type":26,"tag":35,"props":1548,"children":1549},{},[1550,1554,1556,1561,1563,1568,1570,1575,1577,1582,1584,1589],{"type":26,"tag":313,"props":1551,"children":1552},{},[1553],{"type":32,"value":1278},{"type":32,"value":1555}," Braucht jede kleinere Web-Anwendung gleich so ein Arsenal an Tools? Einige kleinere\nUnternehmen versuchen zunächst, ohne dediziertes Monitoring auszukommen, und verlassen sich auf einfache Logs oder\nmanuelles Überprüfen. Unsere persönliche Erfahrung zeigt jedoch: ",{"type":26,"tag":313,"props":1557,"children":1558},{},[1559],{"type":32,"value":1560},"Spätestens beim ersten größeren Problem wird klar,\ndass Monitoring kein „nice-to-have“, sondern ein echter Mehrwert",{"type":32,"value":1562}," ist. Ohne diese Tools tappt man schnell und lange im\nDunkeln und wühlt sich durch Log-Dateien. Essentiell ist jedoch, die ",{"type":26,"tag":313,"props":1564,"children":1565},{},[1566],{"type":32,"value":1567},"Flut an Daten",{"type":32,"value":1569}," richtig zu kanalisieren und dann\nzu interpretieren. Monitoring richtig aufzusetzen kostet anfangs Zeit (und erfordert etwas Expertise), zahlt sich aber\nbeim ersten Incident vielfach aus. Ein gut konfiguriertes Monitoring vermeidet zudem ",{"type":26,"tag":834,"props":1571,"children":1572},{},[1573],{"type":32,"value":1574},"Alert Fatigue",{"type":32,"value":1576}," – also zu viele\nFehlalarme. Hier ist ",{"type":26,"tag":313,"props":1578,"children":1579},{},[1580],{"type":32,"value":1581},"Qualität vor Quantität",{"type":32,"value":1583}," gefragt. Lieber wenige, dafür aussagekräftige Metriken und Alerts. Wir\nraten allen unseren Kunden mit Nachdruck: ",{"type":26,"tag":834,"props":1585,"children":1586},{},[1587],{"type":32,"value":1588},"die Investition in Monitoring- und Logging-Tools sind unerlässlich",{"type":32,"value":1590},", um im\nFehlerfall handlungsfähig zu bleiben!",{"type":26,"tag":27,"props":1592,"children":1594},{"id":1593},"automatische-alerts-zabbix-und-co-als-wächter-der-systeme",[1595],{"type":32,"value":1596},"Automatische Alerts: Zabbix und Co. als Wächter der Systeme",{"type":26,"tag":35,"props":1598,"children":1599},{},[1600,1604],{"type":26,"tag":313,"props":1601,"children":1602},{},[1603],{"type":32,"value":985},{"type":32,"value":1605}," Überwachungstools wie Zabbix sind notwendig für Alerts bei kritischen Systemzuständen.",{"type":26,"tag":35,"props":1607,"children":1608},{},[1609,1611,1616,1618,1622,1624,1629,1630,1635,1637,1644,1646,1651,1653,1658],{"type":32,"value":1610},"Neben dem reinen Beobachten von Metriken wollen wir natürlich ",{"type":26,"tag":313,"props":1612,"children":1613},{},[1614],{"type":32,"value":1615},"automatisch alarmiert",{"type":32,"value":1617}," werden, wenn etwas aus dem Ruder\nläuft. Hier kommen Systemüberwachungs-Tools wie ",{"type":26,"tag":313,"props":1619,"children":1620},{},[1621],{"type":32,"value":170},{"type":32,"value":1623},", ",{"type":26,"tag":313,"props":1625,"children":1626},{},[1627],{"type":32,"value":1628},"Nagios",{"type":32,"value":1623},{"type":26,"tag":313,"props":1631,"children":1632},{},[1633],{"type":32,"value":1634},"Icinga",{"type":32,"value":1636}," etc. ins Spiel. Bleiben wir bei\n",{"type":26,"tag":41,"props":1638,"children":1639},{"href":945},[1640],{"type":26,"tag":313,"props":1641,"children":1642},{},[1643],{"type":32,"value":170},{"type":32,"value":1645},"als Beispiel: Zabbix ist ein Open-Source-Monitoring-System, das vordefinierte ",{"type":26,"tag":313,"props":1647,"children":1648},{},[1649],{"type":32,"value":1650},"Trigger",{"type":32,"value":1652}," und\n",{"type":26,"tag":313,"props":1654,"children":1655},{},[1656],{"type":32,"value":1657},"Benachrichtigungen",{"type":32,"value":1659}," bietet. Man kann Grenzwerte festlegen – z.B. „CPU-Last > 90% über 5 Minuten“ oder „weniger als 10%\nfreier Plattenplatz“ – und sobald diese erreicht sind, sendet Zabbix einen Alarm (per E-Mail, SMS, Slack usw.).",{"type":26,"tag":35,"props":1661,"children":1662},{},[1663,1665,1669,1671,1676,1678,1682,1684,1689],{"type":32,"value":1664},"Warum braucht man das, wo wir doch eben Grafana & Co. gelobt haben? Der Unterschied: ",{"type":26,"tag":313,"props":1666,"children":1667},{},[1668],{"type":32,"value":940},{"type":32,"value":1670}," ist super für\nVisualisierung und Analyse, aber ",{"type":26,"tag":313,"props":1672,"children":1673},{},[1674],{"type":32,"value":1675},"aktive Alarmierung",{"type":32,"value":1677}," übernimmt oft ein dediziertes Tool wie Zabbix (oder Grafana wird\nmit einem Alertmanager kombiniert). ",{"type":26,"tag":313,"props":1679,"children":1680},{},[1681],{"type":32,"value":170},{"type":32,"value":1683}," und ähnliche Tools sind quasi die ",{"type":26,"tag":313,"props":1685,"children":1686},{},[1687],{"type":32,"value":1688},"Nachtwächter",{"type":32,"value":1690},", die unermüdlich auf\ndefinierte Bedingungen achten.",{"type":26,"tag":35,"props":1692,"children":1693},{},[1694,1696,1701,1707,1709,1713],{"type":32,"value":1695},"Die Wichtigkeit solcher Alerts kann man gar nicht überschätzen. Ein treffendes Zitat aus einem Linux-Journal-Artikel:\n",{"type":26,"tag":834,"props":1697,"children":1698},{},[1699],{"type":32,"value":1700},"„Alerts und Trigger sind der Herzschlag des Monitorings. Zabbix lässt einen spezifische Bedingungen definieren, bei\nderen Eintreten Benachrichtigungen über verschiedene Kanäle versendet werden, sodass man unverzüglich über kritische\nEreignisse informiert wird“",{"type":26,"tag":41,"props":1702,"children":1704},{"href":1703},"https://www.linuxjournal.com/content/how-monitor-your-system-zabbix#:~:text=Alerts%20and%20triggers%20are%20the,that%20could%20impact%20system%20performance",[1705],{"type":32,"value":1706},"linuxjournal.com",{"type":32,"value":1708},"\n. Ohne ein Alerting-System kann es passieren, dass ein Problem stundenlang unentdeckt bleibt – im schlimmsten Fall\nerfährt man es zuerst vom verärgerten Kunden am Telefon. Mit richtig konfigurierten Alerts erfährt das Team hingegen\n",{"type":26,"tag":313,"props":1710,"children":1711},{},[1712],{"type":32,"value":1463},{"type":32,"value":1714},", wenn zum Beispiel der Webserver ausgefallen ist oder die Antwortzeiten kritisch hochgehen.",{"type":26,"tag":35,"props":1716,"children":1717},{},[1718,1723,1725,1730,1732,1737,1739,1744],{"type":26,"tag":313,"props":1719,"children":1720},{},[1721],{"type":32,"value":1722},"Praxisblick:",{"type":32,"value":1724}," Für mittelständische Unternehmen, die vielleicht kein 24/7-Betriebsteam haben, ist ein gutes Alerting\nnoch wichtiger. Es ermöglicht kleinen Teams, effizient zu arbeiten, weil sie sich auf die Warnmeldungen verlassen\nkönnen, anstatt ständig manuell alles zu überprüfen. Allerdings gilt auch hier, dass ein schlecht konfiguriertes System,\ndas andauernd „Wölfe, Wölfe, …“ schreit (Stichwort ",{"type":26,"tag":834,"props":1726,"children":1727},{},[1728],{"type":32,"value":1729},"false positives",{"type":32,"value":1731},"), wird schnell ignoriert. Die Kunst ist,\n",{"type":26,"tag":313,"props":1733,"children":1734},{},[1735],{"type":32,"value":1736},"sinnvolle Grenzwerte",{"type":32,"value":1738}," zu definieren und ",{"type":26,"tag":313,"props":1740,"children":1741},{},[1742],{"type":32,"value":1743},"kontextreiche Alerts",{"type":32,"value":1745}," zu versenden (z.B. direkt mit Hinweis, welche\nKomponente betroffen ist, Logs anhängen etc.).",{"type":26,"tag":35,"props":1747,"children":1748},{},[1749,1756,1758,1763],{"type":26,"tag":41,"props":1750,"children":1751},{"href":945},[1752],{"type":26,"tag":313,"props":1753,"children":1754},{},[1755],{"type":32,"value":170},{"type":32,"value":1757}," hat sich in vielen unserer Projekte bewährt und wird bei uns intern oft als ",{"type":26,"tag":313,"props":1759,"children":1760},{},[1761],{"type":32,"value":1762},"unverzichtbares Werkzeug",{"type":32,"value":1764},"\ngenannt.",{"type":26,"tag":27,"props":1766,"children":1768},{"id":1767},"cicd-pipelines-standardisierte-deployments-auch-für-anfänger",[1769],{"type":32,"value":1770},"CI/CD-Pipelines: Standardisierte Deployments – auch für Anfänger",{"type":26,"tag":35,"props":1772,"children":1773},{},[1774,1778],{"type":26,"tag":313,"props":1775,"children":1776},{},[1777],{"type":32,"value":985},{"type":32,"value":1779}," CI/CD-Pipelines ermöglichen standardisierte, sichere Deployments auch für wenig erfahrene Entwickler.",{"type":26,"tag":35,"props":1781,"children":1782},{},[1783,1785,1790,1792,1797,1799,1804,1806,1811],{"type":32,"value":1784},"Die Begriffe ",{"type":26,"tag":313,"props":1786,"children":1787},{},[1788],{"type":32,"value":1789},"CI/CD",{"type":32,"value":1791}," stehen für ",{"type":26,"tag":834,"props":1793,"children":1794},{},[1795],{"type":32,"value":1796},"Continuous Integration",{"type":32,"value":1798}," (kontinuierliche Integration) und ",{"type":26,"tag":834,"props":1800,"children":1801},{},[1802],{"type":32,"value":1803},"Continuous\nDelivery/Deployment",{"type":32,"value":1805}," (kontinuierliche Auslieferung bzw. Bereitstellung). Eine ",{"type":26,"tag":313,"props":1807,"children":1808},{},[1809],{"type":32,"value":1810},"CI/CD-Pipeline",{"type":32,"value":1812}," ist eine automatisierte\nProzesskette, die Code vom Commit bis zum Rollout durchbaut, testet und schließlich deployt. Warum ist das so wichtig –\nund wie hilft es weniger erfahrenen Entwicklern?",{"type":26,"tag":35,"props":1814,"children":1815},{},[1816,1818,1823,1825,1830],{"type":32,"value":1817},"In traditionellen Entwicklungsabläufen war das ",{"type":26,"tag":313,"props":1819,"children":1820},{},[1821],{"type":32,"value":1822},"Deployment",{"type":32,"value":1824}," oft Handarbeit, ausgeführt von erfahrenen Admins oder\nDevOps-Engineers, weil viel schiefgehen konnte (fehlende Abhängigkeiten, falsche Configs, Downtime vermeiden etc.). Mit\neiner gut eingerichteten CI/CD-Pipeline wird Deployment jedoch zu einem ",{"type":26,"tag":313,"props":1826,"children":1827},{},[1828],{"type":32,"value":1829},"standardisierten, wiederholbaren Vorgang",{"type":32,"value":1831}," –\nim Idealfall auf Knopfdruck. Selbst wenn ein Entwickler noch nie manuell einen Linux-Server eingerichtet hat, kann er\ndurch die Pipeline-Funktionalität Code live stellen, weil die Pipeline ihm die nötigen Schritte abnimmt.",{"type":26,"tag":35,"props":1833,"children":1834},{},[1835,1840,1842,1847,1849,1854,1855,1860,1862,1867],{"type":26,"tag":313,"props":1836,"children":1837},{},[1838],{"type":32,"value":1839},"Sicherheit und Qualität",{"type":32,"value":1841}," kommen dabei nicht zu kurz – im Gegenteil. Gerade weniger erfahrene Entwickler profitieren\ndavon, dass die Pipeline ",{"type":26,"tag":834,"props":1843,"children":1844},{},[1845],{"type":32,"value":1846},"vor",{"type":32,"value":1848}," dem Deployment automatisierte ",{"type":26,"tag":313,"props":1850,"children":1851},{},[1852],{"type":32,"value":1853},"Tests",{"type":32,"value":913},{"type":26,"tag":313,"props":1856,"children":1857},{},[1858],{"type":32,"value":1859},"Code-Checks",{"type":32,"value":1861}," ausführt. So werden Fehler\nabgefangen, bevor sie auf die Nutzerschaft losgelassen werden. Zudem sorgt die Pipeline dafür, dass immer auf ",{"type":26,"tag":313,"props":1863,"children":1864},{},[1865],{"type":32,"value":1866},"die\ngleiche Weise",{"type":32,"value":1868}," deployed wird – es gibt keine Abweichungen, die durch menschliches Vergessen passieren (z.B. „Oops, die\nstaging Config auf Prod geladen“ – solche Patzer werden eliminiert). Für KMUs bedeutet das: schnellere Updates bei\ngleichzeitig geringerer Fehlerquote.",{"type":26,"tag":35,"props":1870,"children":1871},{},[1872,1874,1879,1881,1886],{"type":32,"value":1873},"Natürlich erfordert das Einrichten einer CI/CD-Pipeline zunächst ",{"type":26,"tag":313,"props":1875,"children":1876},{},[1877],{"type":32,"value":1878},"Know-how und Aufwand",{"type":32,"value":1880},". Hier kommt oft ein\nDevOps-Spezialist ins Spiel, der eine solche Pipeline (z.B. mit Jenkins, GitLab CI, GitHub Actions oder Bitbucket\nPipelines) aufbaut. ",{"type":26,"tag":313,"props":1882,"children":1883},{},[1884],{"type":32,"value":1885},"Kritisch betrachtet",{"type":32,"value":1887}," argumentieren manche, dass in einem perfekten DevOps-Team diese\nUnterscheidung zwischen Entwicklern und DevOps gar nicht mehr nötig wäre, weil alle für den Prozess verantwortlich sind.\nIn der Realität ist es aber gerade für weniger erfahrene Entwickler eine enorme Erleichterung, wenn ein robustes\nCI/CD-System existiert – es nimmt ihnen die Deployment-Angst (das gilt auch für mich selbst als\nProjekt-Verantwortlicher). Ein Junior-Entwickler kann mit ruhigem Gewissen auf „Deploy“ klicken, weil er weiß, wenn\nautomatisierte Tests durchlaufen sind und der Rollout kontrolliert abläuft, besteht ein Mindestmaß an Sicherheit, dass\ndas Produktivsystem nicht beeinträchtigt wird.",{"type":26,"tag":35,"props":1889,"children":1890},{},[1891,1893,1898,1900,1905,1907,1912],{"type":32,"value":1892},"Wichtig ist, dass CI/CD nicht nur technische, sondern auch ",{"type":26,"tag":313,"props":1894,"children":1895},{},[1896],{"type":32,"value":1897},"kulturelle Veränderungen",{"type":32,"value":1899}," mit sich bringt. Deployments\nwerden kleiner, dafür häufiger. Das reduziert Risiko und Fehler-Impact. Teams gewöhnen sich daran, dass Deployments\n",{"type":26,"tag":834,"props":1901,"children":1902},{},[1903],{"type":32,"value":1904},"Alltag",{"type":32,"value":1906}," sind und nicht „Großkampftage“. Gerade in der ",{"type":26,"tag":313,"props":1908,"children":1909},{},[1910],{"type":32,"value":1911},"Agilen Entwicklung",{"type":32,"value":1913}," ist CI/CD quasi das Rückgrat, um schnelle\nIterationen überhaupt zu ermöglichen.",{"type":26,"tag":35,"props":1915,"children":1916},{},[1917,1919,1924],{"type":32,"value":1918},"Zusammengefasst: CI/CD-Pipelines sind ein Game-Changer, der auch weniger erfahrene Entwickler befähigt,\n",{"type":26,"tag":313,"props":1920,"children":1921},{},[1922],{"type":32,"value":1923},"auf Knopfdruck",{"type":32,"value":1925}," auszuliefern – zuverlässig und wiederholbar.",{"type":26,"tag":27,"props":1927,"children":1929},{"id":1928},"erfahrung-zählt-live-daten-spezielle-fehler-und-die-rolle-von-devops-experten",[1930],{"type":32,"value":1931},"Erfahrung zählt: Live-Daten, spezielle Fehler und die Rolle von DevOps-Experten",{"type":26,"tag":35,"props":1933,"children":1934},{},[1935,1939],{"type":26,"tag":313,"props":1936,"children":1937},{},[1938],{"type":32,"value":985},{"type":32,"value":1940}," Bestimmte Fehler und Performance-Probleme zeigen sich nur auf Live-Daten und erfordern erfahrene\nDevOps-Spezialisten.",{"type":26,"tag":35,"props":1942,"children":1943},{},[1944,1946,1951,1953,1958,1960,1965],{"type":32,"value":1945},"Trotz aller Automatisierung und Testing bleibt die ",{"type":26,"tag":313,"props":1947,"children":1948},{},[1949],{"type":32,"value":1950},"Erfahrung",{"type":32,"value":1952}," im Umgang mit Produktionssystemen ist durch nichts zu\nersetzen. Es gibt Fehlerbilder, die erst bei echten ",{"type":26,"tag":313,"props":1954,"children":1955},{},[1956],{"type":32,"value":1957},"Live-Daten und Lasten",{"type":32,"value":1959}," auftreten – etwa aufgrund komplexer\nDatenkonstellationen oder schlichter Skalierungseffekte. Ein Query, der mit 100 Test-Datensätzen blitzschnell ist, kann\nmit 100 Millionen echten Datensätzen plötzlich zum Flaschenhals werden. Oder ein ",{"type":26,"tag":313,"props":1961,"children":1962},{},[1963],{"type":32,"value":1964},"Memory-Leak",{"type":32,"value":1966}," in einer bestimmten\nLibrary fällt erst nach Wochen Dauerbetrieb auf, wenn der Prozess immer mehr Speicher belegt. Solche Probleme zu\nerkennen und zu beheben, erfordert oft einen erfahrenen Blick.",{"type":26,"tag":35,"props":1968,"children":1969},{},[1970,1972,1977,1979,1985,1986,1992,1994,2000,2002,2007,2009,2014,2016,2021],{"type":32,"value":1971},"Ein DevOps-Engineer mit viel Betriebserfahrung hat meist ein Repertoire an ",{"type":26,"tag":313,"props":1973,"children":1974},{},[1975],{"type":32,"value":1976},"Diagnosetechniken",{"type":32,"value":1978},". Beispielsweise wissen\nerfahrene Leute, wie man mit Tools wie ",{"type":26,"tag":274,"props":1980,"children":1982},{"className":1981},[],[1983],{"type":32,"value":1984},"htop",{"type":32,"value":1623},{"type":26,"tag":274,"props":1987,"children":1989},{"className":1988},[],[1990],{"type":32,"value":1991},"iotop",{"type":32,"value":1993}," oder ",{"type":26,"tag":274,"props":1995,"children":1997},{"className":1996},[],[1998],{"type":32,"value":1999},"strace",{"type":32,"value":2001}," auf Linux debuggt, was weniger routinierte Entwickler\nvielleicht nie gebraucht haben. Auch ",{"type":26,"tag":313,"props":2003,"children":2004},{},[2005],{"type":32,"value":2006},"Dauerlast-Phänomene",{"type":32,"value":2008}," (Stichwort ",{"type":26,"tag":834,"props":2010,"children":2011},{},[2012],{"type":32,"value":2013},"Floating-Point-Precision Bugs",{"type":32,"value":2015},",\nspeicherbedingte Rounding Errors, etc.) kennen erfahrene DevOps aus der Praxis. Ein drastisches, aber reales Szenario:\nEin Speicherfehler tritt ",{"type":26,"tag":834,"props":2017,"children":2018},{},[2019],{"type":32,"value":2020},"nur",{"type":32,"value":2022}," unter richtiger Volllast auf und nur in Kombination mit bestimmten Hardwarebedingungen –\nhier braucht es Experten, die vielleicht schon mal ähnliches gesehen haben oder wissen, wo man ansetzt.",{"type":26,"tag":27,"props":2024,"children":2026},{"id":2025},"fazit",[2027],{"type":32,"value":2028},"Fazit",{"type":26,"tag":35,"props":2030,"children":2031},{},[2032,2034,2039,2041,2046,2048,2055],{"type":32,"value":2033},"Für (Web-)Anwendungen im produktiven Einsatz sind ",{"type":26,"tag":313,"props":2035,"children":2036},{},[2037],{"type":32,"value":2038},"DevOps kein Luxus, sondern eine Notwendigkeit",{"type":32,"value":2040},".\nEntwicklungsumgebungen stoßen an Grenzen, echte Nutzer sorgen für Überraschungen, und ohne kontinuierliches Monitoring\nfliegt man blind. Mittelständische Unternehmen, die vielleicht keine riesigen IT-Abteilungen haben, können durch einen\nDevOps-Ansatz enorm profitieren. Stabilere Systeme, schnellere Reaktionszeiten bei Problemen und zufriedenere Kunden.\nAllerdings muss man bereit sein, auch nach dem Launch ",{"type":26,"tag":313,"props":2042,"children":2043},{},[2044],{"type":32,"value":2045},"Zeit und Ressourcen zu investieren",{"type":32,"value":2047},", um Daten zu analysieren\nund Verbesserungen einzuspielen. Tools wie ",{"type":26,"tag":41,"props":2049,"children":2050},{"href":923},[2051],{"type":26,"tag":313,"props":2052,"children":2053},{},[2054],{"type":32,"value":929},{"type":32,"value":2056},", Grafana und Zabbix bilden dabei das Rückgrat der Überwachung – sie\nliefern die nötigen Daten und Unterstützungsmechanismen. Automatisierung mittels CI/CD nimmt viel Risiko aus Deployments\nund erlaubt auch weniger erfahrenen Team-Mitgliedern, Änderungen sicher live zu bringen.",{"type":26,"tag":35,"props":2058,"children":2059},{},[2060,2062,2067],{"type":32,"value":2061},"Am Ende zeigt sich: ",{"type":26,"tag":313,"props":2063,"children":2064},{},[2065],{"type":32,"value":2066},"Menschen",{"type":32,"value":2068}," machen den Unterschied. Erfahrene DevOps-Spezialisten können knifflige Live-Probleme\nlösen und eine Brücke zwischen Entwicklern und Betrieb schlagen.",{"type":26,"tag":35,"props":2070,"children":2071},{},[2072,2077],{"type":26,"tag":313,"props":2073,"children":2074},{},[2075],{"type":32,"value":2076},"Hinweis:",{"type":32,"value":2078}," Dieser Artikel wurde auch mit Unterstützung von KI generiert (Modell: GPT-4).",{"title":7,"searchDepth":97,"depth":97,"links":2080},[2081,2082,2083,2084,2085,2086,2087,2088],{"id":845,"depth":97,"text":848},{"id":974,"depth":97,"text":977},{"id":1227,"depth":97,"text":1230},{"id":1368,"depth":97,"text":1371},{"id":1593,"depth":97,"text":1596},{"id":1767,"depth":97,"text":1770},{"id":1928,"depth":97,"text":1931},{"id":2025,"depth":97,"text":2028},{"_path":139,"_dir":140,"_draft":6,"_partial":6,"_locale":7,"slug":10,"teams":2090,"primaryTeam":143,"firstName":144,"lastName":145,"prefixTitle":7,"suffixTitle":7,"education":2091,"executiveRole":151,"role":2093,"workingSince":160,"inTheCompanySince":161,"techSkills":2094,"skills":2111,"projects":2118,"contactDetails":2124,"_image":237,"image":238,"_id":239,"_type":240,"title":241,"_source":140,"_file":242,"_stem":243,"_extension":240},[142,143],[2092],[148,149,150],[153,154,143,155,156,157,158,159],[2095,2096,2097,2098,2099,2100,2101,2102,2103,2104,2105,2106,2107,2108,2109,2110],{"name":164,"level":165,"icon":166},{"name":116,"level":165,"icon":168},{"name":170,"level":165},{"name":172,"level":165,"icon":173},{"name":175,"level":165},{"name":177,"level":165,"icon":178},{"name":180,"level":165},{"name":182,"level":165},{"name":184,"level":165},{"name":186,"level":165,"icon":187},{"name":189,"level":190,"icon":191},{"name":193,"level":190,"icon":194},{"name":196,"level":190,"icon":197},{"name":199,"level":190,"icon":200},{"name":202,"level":190,"icon":203},{"name":205,"level":190,"icon":206},[2112,2113,2114,2115,2116,2117],{"name":209,"level":165},{"name":211,"level":165},{"name":213,"level":165},{"name":215,"level":165},{"name":217,"level":165},{"name":219,"level":190},[2119,2120,2121,2122,2123],{"project":222,"position":223},{"project":225,"position":223},{"project":227,"position":223},{"project":229,"position":230},{"project":232,"position":223},{"eMail":234,"phone":235,"visibility":236},{"_path":2126,"_dir":140,"_draft":6,"_partial":6,"_locale":7,"slug":126,"teams":2127,"primaryTeam":2128,"firstName":2129,"lastName":2130,"prefixTitle":2131,"suffixTitle":7,"executiveRole":2132,"education":2133,"role":2140,"workingSince":150,"inTheCompanySince":2137,"techSkills":2145,"skills":2163,"projects":2175,"contactDetails":2179,"certifications":2182,"image":2188,"_id":2189,"_type":240,"title":2190,"_source":140,"_file":2191,"_stem":2192,"_extension":240},"/employees/jens-bornschein",[2128],"appDev","Jens","Bornschein","Dr. Ing.","Projektmanager | Consultant",[2134,2138],[2135,2136,2137],"Doktor-Ingenieur der Informatik","TU Dresden","2020",[2139,2136,150],"Diplom-Medieninformatiker (TU)",[2141,157,2142,2143,2144,159],"projectManager","fullstackDeveloper","UI/UX","accessibility",[2146,2147,2148,2149,2150,2151,2152,2155,2158,2161],{"name":180,"level":165},{"name":193,"level":165,"icon":194},{"name":196,"level":190,"icon":197},{"name":199,"level":190,"icon":200},{"name":205,"level":190,"icon":206},{"name":182,"level":190},{"name":2153,"level":165,"icon":2154},"Adobe Photoshop","/images/adobeps-logo.svg",{"name":2156,"level":165,"icon":2157},"Adobe Illustrator","/images/adobeai-logo.svg",{"name":2159,"level":190,"icon":2160},"Adobe XD","/images/adobexd-logo.svg",{"name":2162,"level":190},"Gitlab",[2164,2166,2167,2168,2170,2172,2173],{"name":2165,"level":165},"projectManagement",{"name":2144,"level":165},{"name":2143,"level":165},{"name":2169,"level":190},"consulting",{"name":2171,"level":190},"scrum",{"name":217,"level":190},{"name":2174,"level":190},"training",[2176,2178],{"project":227,"position":2177},"project manager",{"project":232,"position":2177},{"eMail":2180,"phone":2181,"visibility":236},"jens.bornschein@helmundwalter.de","+49 351 799 035 24",[2183],{"image":2184,"link":2185,"title":2186,"pdf":2187},"/images/certifications/KHZG_Badge.svg","https://www.bundesamtsozialesicherung.de/de/themen/innovationsfonds-und-krankenhausstrukturfonds/krankenhausstrukturfonds/","Berechtigung nach § 21 Absatz 5 Satz 1 KHSFV - Management für KHZG geförderte Vorhaben","/certificates/jb_KHSFV_Zertifikat.pdf","images/employees/Portraits/JensBornschein_MS.webp","employees:employees:5.jens-bornschein.json","Jens Bornschein","employees/5.jens-bornschein.json","employees/5.jens-bornschein",[2194,2210,2223,2235],{"_path":2195,"_dir":2196,"_draft":6,"_partial":2197,"_locale":7,"name":2198,"slug":2196,"text":2199,"hoverText":2200,"image":2201,"customer":2202,"tags":2203,"_id":2205,"_type":2206,"title":2207,"_source":103,"_file":2208,"_stem":2209,"_extension":2206},"/portfolio/gridside/_teaser","gridside",true,"Gridside HANS","Umbauplanung von überregionalen Stromnetzen","Helm & Walter IT-Solutions GmbH wurde beauftragt, eine Web-Applikation für die Umbauplanung von überregionalen Stromnetzen zu entwickeln.","/images/portfolio/gridside/hero.png","Eine große internationale Elektronikfirma",[2204,21],"frontend","common:portfolio:890.gridside:_teaser.yaml","yaml","Teaser","portfolio/890.gridside/_teaser.yaml","portfolio/890.gridside/_teaser",{"_path":2211,"_dir":2212,"_draft":6,"_partial":2197,"_locale":7,"name":2213,"slug":2212,"text":2214,"hoverText":2215,"image":2216,"customer":2217,"tags":2218,"_id":2220,"_type":2206,"title":2207,"_source":103,"_file":2221,"_stem":2222,"_extension":2206},"/portfolio/bitburger/_teaser","bitburger","Bitburger B2B- und Marken-Shops","Launch des B2B Shops und Migration der Markenshops auf eine neue Plattform","Die Bitburger Braugruppe modernisierte ihr digitales Angebot. Nach dem Start des B2B Shops wurden fünf Markenshops auf eine gemeinsame Plattform migriert und weiterentwickelt.","/images/portfolio/bitburger/Bitburger_HuW_Glaeser.jpg","Bitburger Braugruppe",[2219,20],"shopware","common:portfolio:900.bitburger:_teaser.yaml","portfolio/900.bitburger/_teaser.yaml","portfolio/900.bitburger/_teaser",{"_path":2224,"_dir":2225,"_draft":6,"_partial":2197,"_locale":7,"name":2226,"slug":2225,"text":2227,"hoverText":2228,"image":2229,"customer":2230,"tags":2231,"_id":2232,"_type":2206,"title":2207,"_source":103,"_file":2233,"_stem":2234,"_extension":2206},"/portfolio/purize/_teaser","purize","Purize Filters","E-Commerce für hochwertige Aktivkohlefilter","Wir unterstützen PURIZE® Filters mit einem vollständigen E-Commerce-Service inklusive Fulfillment-Lösung und Anbindung an Versanddienstleister. Unsere Expertise im Online-Handel ermöglicht dem Hersteller qualitativ hochwertiger Aktivkohlefilter \"Made in Germany\" eine reibungslose Abwicklung ihrer Bestellprozesse.","/images/portfolio/barcode-machine-verdandijpg.jpg","PURIZE® Filters",[2219,20],"common:portfolio:9000.purize:_teaser.yaml","portfolio/9000.purize/_teaser.yaml","portfolio/9000.purize/_teaser",{"_path":2236,"_dir":2237,"_draft":6,"_partial":2197,"_locale":7,"name":2238,"slug":2237,"text":2239,"hoverText":2240,"image":2241,"customer":2238,"tags":2242,"_id":2243,"_type":2206,"title":2207,"_source":103,"_file":2244,"_stem":2245,"_extension":2206},"/portfolio/werner-consulting/_teaser","werner-consulting","Werner Consulting","Individualsoftware für ein vertrauensvolles Business","Maßgeschneiderte Softwarelösungen als Desktopanwendungen und Entwicklung von PlugIns für Softwareframeworks für komplexe Consulting-Lösungen, E-Commerce-Plattformen und Warenwirtschaftssysteme.","/images/portfolio/werner_consulting/consulting_portfolio.jpg",[21,20],"common:portfolio:9030.werner-consulting:_teaser.yaml","portfolio/9030.werner-consulting/_teaser.yaml","portfolio/9030.werner-consulting/_teaser",1782284042870]