{"id":30,"date":"2017-12-06T11:46:16","date_gmt":"2017-12-06T11:46:16","guid":{"rendered":"http:\/\/www.sanchofock.de\/?p=30"},"modified":"2017-12-06T11:46:16","modified_gmt":"2017-12-06T11:46:16","slug":"das-performance-prinzip","status":"publish","type":"post","link":"https:\/\/www.sanchofock.de\/?p=30","title":{"rendered":"Das Performance Prinzip"},"content":{"rendered":"<p>Was habe ich \u00fcber Performance zu sagen? Eine ganze Menge. Es gibt viele Details und viele Wege sich dem Thema zu n\u00e4hern. Aber im Grunde sind es \u201enur\u201c ein paar einfache Prinzipien, die man verstehen muss. Die erkl\u00e4re ich gerne anhand von einfachen metaphorischen Beispielen. Um die passenden Methoden und Vorgehensweisen zu w\u00e4hlen und aus den Ergebnissen die richtigen R\u00fcckschl\u00fcsse zu ziehen is es vor allem wichtig, diese einfachen Prinzipien zu verstehen und anzuwenden. Daher finde ich, dass solche vereinfachenden Beispiele dies am besten verdeutlichen. Ich versuche hier zumindest einige von diesen Prinzipen zu erkl\u00e4ren und beginne mit dem was ich das Performance Prinzip nenne, welches ich gerne anhand eines einfachen Beispiels erkl\u00e4re, meinem \u201eB\u00e4ckerei Beispiel\u201c:<\/p>\n<p>Das Prinzip, wie sich die Performance einer Transaktion insbesondere unter der Einbeziehung der Dimension Last verh\u00e4lt ist im Grunde immer und f\u00fcr jede Transaktion gleich.<\/p>\n<p>Abstrakt gesprochen ergibt sich die Performance einer Transaktion aus der Menge der zu verrichtenden Aufgaben bzw. der daf\u00fcr ben\u00f6tigten Ressourcen und der Menge der zur Verf\u00fcgung stehenden Ressourcen. Wobei verschiedene Aufgaben auch verschiedene Ressourcen ben\u00f6tigen k\u00f6nnen.<\/p>\n<p>Aber das ist alles sehr Abstrakt, deshalb will ich das ganze anhand einer kleinen Analogie etwas zum Leben erwecken.<\/p>\n<p>Wir stellen uns eine B\u00e4ckerei vor. In der arbeiten 2 Fachverk\u00e4uferinnen und ich betrete morgens diese B\u00e4ckerei um meine Br\u00f6tchen zu kaufen. F\u00fcr die Abwicklung der Transaktion \u201eBr\u00f6tchen kaufen\u201c in dem System \u201eB\u00e4ckerei\u201c wird eine Minute ben\u00f6tigt. Bestandteil dieser Transaktion ist:<\/p>\n<ul>\n<li>Die Aufgabe der Bestellung durch mich<\/li>\n<li>Die Annahme der Bestellung durch eine der Verk\u00e4uferinnen<\/li>\n<li>Das Einpacken und \u00fcbergeben der Br\u00f6tchen<\/li>\n<li>Und das kassieren.Betritt nun mit mir ein 2. Kunde den Laden, so kann meine Bestellung weiterhin optimal durchgef\u00fchrt werden. Das gleiche gilt f\u00fcr den 2. Kunden. F\u00fcr uns beide wird die Bestellung jeweils eine Minute dauern, da auch f\u00fcr den 2. Kunden noch optimal viele Ressourcen (die 2. Verk\u00e4uferin) zur Verf\u00fcgung stehen.Wir nennen dies den \u201eelastischen Bereich\u201c, weil in diesem Lastbereich noch jederzeit ausreichend von allen ben\u00f6tigten Ressourcen zur Verf\u00fcgung stehen auch wenn die Last innerhalb dieses Bereiches erh\u00f6ht wird.Steigern wir die Last weiter, so ergeben sich bei 4 Kunden ca. 1,5 Minuten bei 5Kunden auf ca. 1,8 Minuten usw.Soweit, so gut. Es gibt aber noch eine weitere Grenze, die von gro\u00dfer Bedeutung ist. Im stabilen Bereich scheint die Antwortzeit unter einer bestimmten Last voraussehbar, weil sich die Erh\u00f6hung der Antwortzeit ja anscheinend Linear mit der Erh\u00f6hung der Last entwickelt. Aber Vorsicht! In ausnahmslos jedem System gibt es auch noch einen Punkt, an dem die Verarbeitung gest\u00f6rt wird.Unser System B\u00e4ckerei w\u00e4re an diesem Punkt \u00fcberlastet. Wir sprechen daher vom \u00dcberlastbereich.In einem Last- und Performancetest geht es uns also in der Regel darum diese Punkte zu finden, in denen das System jeweils von einem Bereich in den n\u00e4chsten \u00fcbergeht, denn anhand dessen k\u00f6nnen wir zumindest 3 grundlegende Feststellungen treffen:<\/li>\n<li>Diese drei Bereiche sind im Prinzip immer und f\u00fcr jede Transaktion in jedem System g\u00fcltig und vorhanden. Leider k\u00f6nnen wir niemals ohne Test sagen wie gro\u00df der jeweilige Bereich ist. Manchmal ist er auch gar nicht messbar. H\u00e4tte es in unserer B\u00e4ckerei beispielsweise nur eine Verk\u00e4uferin gegeben, so h\u00e4tten wir den elastischen Bereich beispielsweise gar nicht messen k\u00f6nnen.<\/li>\n<li>In unserer B\u00e4ckerei w\u00fcrde beispielsweise der 10. Kunde in der Schlange nach 3. Minuten nerv\u00f6s werden und den Laden verlassen, weil er f\u00fcrchtet seinen Bus zu verpassen. Wir h\u00e4tten also einen Timeout. Ebenso ist es m\u00f6glich, dass die unruhigen Kunden in der Schlange beginnen laut zu werden und die Verk\u00e4uferinnen dadurch nerv\u00f6s machen wodurch sie beginnen kleine Fehler zu machen und sich die Transaktion verlangsamt.<\/li>\n<li>Diesen Lastbereich nennen wir den stabilen Bereich, da hier gilt erh\u00f6ht sich die Last, erh\u00f6ht sich auch die Antwortzeit. Das ist das Prinzip, dass wohl den meisten Menschen spontan einleuchtet.<\/li>\n<li>Aber gehen wir weiter und nehmen an, dass zudem ein 3. Kunde die B\u00e4ckerei betritt um Br\u00f6tchen zu kaufen. Nun wird es interessant. Denn zwar kann ich weiterhin meine Br\u00f6tchen in einer Minute kaufen. Der 2, Kunde ebenso. Jedoch der 3. Kunde hat Pech. Er muss eine Minute warten, bis ich oder der 2. Kunde fertig bedient sind und kann erst dann seine Aktion starten. Er wird also insgesamt 2 Minuten ben\u00f6tigen um Br\u00f6tchen kaufen zu k\u00f6nnen. Die Durchschnittsgeschwindigkeit f\u00fcr die Transaktion \u201eBr\u00f6tchen kaufen\u201c \u00a0ist nun nach weiterer Erh\u00f6hung der Last also auf ca. 1,33 Minuten gestiegen.<\/li>\n<li>Die Last auf dem System \u201eB\u00e4ckerei\u201c hat sich also nun erh\u00f6ht von einem Br\u00f6tchenkauf pro Minute auf 2 Br\u00f6tchenk\u00e4ufe pro Minute. Die durchschnittliche Performance ist jedoch mit 1. Minute gleich geblieben.<\/li>\n<li>Die Zeit von einer Minute stellt also die optimale Performance f\u00fcr die Transaktion \u201eBr\u00f6tchen kaufen\u201c dar, da alle ben\u00f6tigten Ressourcen (In diesem Fall die Verk\u00e4uferin) optimal und vollst\u00e4ndig zur Verf\u00fcgung standen.<\/li>\n<\/ul>\n<ol>\n<li>Wie gut (schnell) ist eine Transaktion im besten Fall. In unserem Beispiel 1 Minute, die Performance im elastischen Bereich<\/li>\n<li>Wie hoch ist die maximale Kapazit\u00e4t des Systems. Das ist die verarbeitete Menge Transaktionen an dem Punkt kurz bevor der elastische Bereich verlassen wird. In unserem Beispiel also 2 Br\u00f6tchenverk\u00e4ufe pro Minute<\/li>\n<li>Wie hoch ist die angeforderte Belastung, die das System fehlerfrei verarbeiten kann. In unserem Fall also 9 Kunden\/Minute<\/li>\n<\/ol>\n<p>Um die Performance und die Kapazit\u00e4t des Systems jedoch beurteilen zu k\u00f6nnen reicht dies nicht aus. An diesem Punkt werden die Anforderungen zentral, denn wenn ich nicht weiss, mit wie vielen Kunden ich in dieser B\u00e4ckerei rechnen muss und wenn ich nicht wei\u00df, ab welcher Dauer ein Kunde vielleicht nie wieder in meinen Laden kommt, kann ich nicht sagen ob die Performance meiner B\u00e4ckerei gut oder schlecht ist.<\/p>\n<p>Liegen mir diese Anforderungen jedoch vor, so kann ich dieses beurteilen. Und daraus wiederrum kann ich ggf. auch Ma\u00dfnahmen ableiten, um die Performance oder die Kapazit\u00e4t zu erh\u00f6hen.<\/p>\n<p>In diesem Beispiel wurde die Ressource \u201eVerk\u00e4uferin\u201c zum Bottleneck. Vielleicht kann ich durch gute Schichtpl\u00e4ne daf\u00fcr sorgen, dass eine 3. Oder 4. Verk\u00e4uferin in den bekannten Sto\u00dfzeiten anwesend ist. Oder ich schaue mir an, ob die Verk\u00e4uferin vielleicht unn\u00f6tige Aufgaben hat um die Transaktion grunds\u00e4tzlich zu beschleunigen.<\/p>\n<p>Hier konnte ich bisher nur andeuten, welch wichtige Rolle die Anforderungen spielen um aus den Ergebnissen eines Performancetests auch nutzbringende Ma\u00dfnahmen ableiten zu k\u00f6nnen. Ich denke dieses Thema ist so gro\u00df, dass ich dazu irgendwann mal einen eigenen Beitrag schreiben werde.<\/p>\n<p>Das gleiche gilt f\u00fcr die Frage nach den geeigneten Ma\u00dfnahmen. Pauschale \u00c4nderungen am System wie mehr CPUs oder mehr Speicher ohne die Bottlenecks seines Systems zu kennen sind tendenziell Geldverschwendung.<\/p>\n<p>&nbsp;<\/p>\n<p>Diese Beispiel habe ich auch schon einmal ein einem Artikel auf <a href=\"http:\/\/www.performanceblog.org\/\">www.performanceblog.org<\/a> erkl\u00e4rt zu finden unter<a href=\"https:\/\/performanceblog.org\/?p=44\"> https:\/\/performanceblog.org\/?p=44<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Was habe ich \u00fcber Performance zu sagen? Eine ganze Menge. Es gibt viele Details und viele Wege sich dem Thema zu n\u00e4hern. Aber im Grunde sind es \u201enur\u201c ein paar einfache Prinzipien, die man verstehen muss. Die erkl\u00e4re ich gerne anhand von einfachen metaphorischen Beispielen. Um die passenden Methoden und Vorgehensweisen zu w\u00e4hlen und aus [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[4],"tags":[],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/www.sanchofock.de\/index.php?rest_route=\/wp\/v2\/posts\/30"}],"collection":[{"href":"https:\/\/www.sanchofock.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sanchofock.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sanchofock.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sanchofock.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=30"}],"version-history":[{"count":1,"href":"https:\/\/www.sanchofock.de\/index.php?rest_route=\/wp\/v2\/posts\/30\/revisions"}],"predecessor-version":[{"id":31,"href":"https:\/\/www.sanchofock.de\/index.php?rest_route=\/wp\/v2\/posts\/30\/revisions\/31"}],"wp:attachment":[{"href":"https:\/\/www.sanchofock.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=30"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sanchofock.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=30"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sanchofock.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=30"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}