{"id":373,"date":"2008-05-23T17:44:00","date_gmt":"2008-05-23T16:44:00","guid":{"rendered":"http:\/\/ollmetzer\/?p=373"},"modified":"2010-05-30T21:07:48","modified_gmt":"2010-05-30T19:07:48","slug":"microblogging-skalierungsprobleme","status":"publish","type":"post","link":"https:\/\/www.ollmetzer.com\/?p=373","title":{"rendered":"Microblogging Skalierungsprobleme"},"content":{"rendered":"<p>In letzter Zeit wird Twitter recht viel abgewatscht, weil der Dienst ziemlich instabil l\u00e4uft. Das ist zwar weniger wichtig, solange man &#8222;nur&#8220; private Statements wie &#8222;Bin verkatert &#8211; erstmal&#8217;n K\u00e4ffchen&#8220; schreibt, aber der Dienst wird zunehmend auch f\u00fcr ernsthaftere Anwendungen genutzt. Zum Beispiel f\u00fcr Terminhinweise von Veranstaltern oder sonstige Ver\u00f6ffentlichungen.<\/p>\n<p>Kurz: Twitter hat alle H\u00e4nde voll zu tun, den Dienst stabil und skalierbar zu machen. Von Au\u00dfenstehenden wurde viel \u00fcber die Ursachen der Probleme spekuliert. Die beliebtesten Vermutungen: Ruby on Rails skaliert nicht richtig und der Hoster bekommt Last und Traffic nicht in den Griff. Auf dem Entwicklerblog stellt Twitter mit dem Artikel &#8222;<a title=\"Twitter DevBlog\" href=\"http:\/\/dev.twitter.com\/2008\/05\/twittering-about-architecture.html\" target=\"tdb\">Twittering About Architecture<\/a>&#8220; nun klar, da\u00df beides nicht die Ursachen sind, sondern grundlegende Fragen der Softwarearchitektur gel\u00f6st werden m\u00fcssen. Zudem ist die Entwicklungsabteilung personell unterbesetzt.<\/p>\n<p>Eine detaillierte Beschreibung der komplexen technischen Herausforderungen f\u00fcr einen Microblogging-Dienst hat Eran Hammer-Lahav in einer kleinen Artikelserie &#8222;<a title=\"scaling microblogging\" href=\"http:\/\/www.hueniverse.com\/hueniverse\/2008\/03\/on-scaling-a-mi.html\">Scaling a Microblogging Service<\/a>&#8220; beschrieben. Er sah sich bei seinem eigenen Start-up Nouncer mit \u00e4hnlichen Herausforderungen konfrontiert und ist daher kompetent. Er unterteilt den Dienst unabh\u00e4ngig von der jeweiligen Implementierung in zwei Bereiche: delivery und retrieval.<\/p>\n<p><strong>Delivery<\/strong><br \/>\nHereinkommende Nachrichten zu nehmen und per Instant Message, SMS oder Email an diejenigen weiterzuverteilen, die Follower sind, ist zwar nicht v\u00f6llig trivial, aber dennoch vergleichweise einfach und es l\u00e4sst sich leicht skalieren.<\/p>\n<p><strong>Retrieval<\/strong><br \/>\nDas Problem und die Komplexit\u00e4t steckt in der Abfrage. Hammer-Lahav schreibt dazu:<\/p>\n<blockquote><p>&#8222;<em>Unlike webmail services where refreshing a user&#8217;s inbox only queries a very simple data set (is there anything new in MY inbox?), refreshing a user&#8217;s home page on Twitter queries a much more complex data set (are there any new updates in ALL my friends&#8216; pages?) and the nature of the service means that the ratio of reads to writes is significantly different from most other web services.<\/em>&#8222;<\/p><\/blockquote>\n<p>Eigentlich sind die Abfragen ja noch komplexer, etwa &#8222;Gib mir die letzten 20 Nachrichten von allem meinen Kontakten die nicht gesperrt sind und die mich nicht gesperrt haben, sowie alle privaten Nachrichten an mich, absteigend sortiert nach Uhrzeit&#8220;. Das funktioniert tadellos, sonlange es nur einige tausend User und einige -zig oder hunderttausend Nachrichten handelt. Die gro\u00dfe Menge ist das Problem: partitionierte Datenbanken, was und wie ist zu indizieren, was kann gecached werden etc.<\/p>\n<p>Der Autor vertritt weiterhin die Meinung, da\u00df ein Push-Service mit Inboxen \u00e4hnlich wie E-Mail das Problem genausowenig l\u00f6st, wie ein (in letzter Zeit ja h\u00e4ufig diskutierter) verteilter Service; ja im Gegenteil die Probleme dann nur umso gr\u00f6\u00dfer w\u00fcrden. Um das zu verdeutlichen entwirft er ein Szenario, in dem 3 User bei verschiedenen Providern (twitter, pownce und Jaiku) sind.<\/p>\n<p>Wirklich interessant: Das n\u00e4mlich genau das Szenario, f\u00fcr das ich seit kurzem ein simples Push-Protokoll entwerfe. Der Autor kommt auch tats\u00e4chlich zu den selben Punkten wie ich, z.B. echte (lokale) Accounts und virtuelle (remote) Accounts. Allerdings bewerte ich sie etwas anders.<\/p>\n<p><em>Richtig ist:<\/em> Bei einer zentralen L\u00f6sung hat twitter mit einigen Millionen Usern das Skalierungsproblem. Bei einer dezentralen L\u00f6sung hat ein Service mit einigen Millionen Usern immer noch dasselbe Skalierungsproblem plus noch einigen anderen Fallstricken, weil er von (vielen) externen Services abh\u00e4ngt.<\/p>\n<p><em>Aber:<\/em> Das Problem wird in der Praxis kaum noch auftauchen, wenn die meisten User auf kleineren System sind oder sogar einen eigenen Server betreiben, wie es heute bei E-Mail der Fall ist. Es interessiert mich einfach nicht, wenn Yahoo, GMX, MSN oder wer auch immer ein dickes Problem mit seinen Mailservern hat &#8211; ich bin trotzdem per Mail erreichbar. Twittern kann ich aber nur, wenn twitter funktioniert.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In letzter Zeit wird Twitter recht viel abgewatscht, weil der Dienst ziemlich instabil l\u00e4uft. Das ist zwar weniger wichtig, solange man &#8222;nur&#8220; private Statements wie &#8222;Bin verkatert &#8211; erstmal&#8217;n K\u00e4ffchen&#8220; schreibt, aber der Dienst wird zunehmend auch f\u00fcr ernsthaftere Anwendungen genutzt. Zum Beispiel f\u00fcr Terminhinweise von Veranstaltern oder sonstige Ver\u00f6ffentlichungen. Kurz: Twitter hat alle H\u00e4nde [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,11],"tags":[],"class_list":["post-373","post","type-post","status-publish","format-standard","hentry","category-development","category-onlinedienste"],"_links":{"self":[{"href":"https:\/\/www.ollmetzer.com\/index.php?rest_route=\/wp\/v2\/posts\/373","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ollmetzer.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ollmetzer.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ollmetzer.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ollmetzer.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=373"}],"version-history":[{"count":0,"href":"https:\/\/www.ollmetzer.com\/index.php?rest_route=\/wp\/v2\/posts\/373\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.ollmetzer.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=373"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ollmetzer.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=373"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ollmetzer.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=373"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}