|
Begin forwarded message: From: "Markus Czehak" <markusczehak@web.de> Date: 20. März 2007 17:06:55 GMT+01:00 Subject: Re: Squeak-ev Nachrichtensammlung, Band 49, Eintrag 20
------------------------------
Message: 4 Date: Tue, 20 Mar 2007 12:20:25 +0100 From: stepken <[hidden email]> Subject: [Squeak-ev] Kommerzielle Applikationen mit Squeak? Vgl. JBOSS vs. Seaside vs. Ruby vs. Python vs. Apache + Module ... To: Squeak in Germany / Squeak in Deutschland <[hidden email]> Message-ID: <[hidden email]> Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Hallo, Squeaker!
Sehr nachdenklich hat mich gemacht, daß immer mehr Firmen auf die sog. "bewährten" Sprachen und Frameworks (J2EE, JBOSS, RUBY ON RAILS, APACHE + PHP, PERL, PYTHON, ... für die Applikationsentwicklung setzen, vornehmlich Web-basierte Applikationen, allen voran der Apache Server mit seinen flexiblen Modulkonzept. Interessant ist, wieviel Geld zum Fenster hinausgeschmissen wird, weil oftmals die Kosten von Entwicklung und Wartung sowie Hardware aus oft unerfindlichen Gründen explodieren, sogar Applikationen neu entwickelt werden auf anderen Plattformen. Hier ein paar Anmerkungen zu den Hintergründen:
Außer Frage steht, daß die Entwicklungskosten umso niedriger sind, je mächtiger das Framework ist, und ob es für die Aufgabenstellung entwickelt wurde. Und dann gibt es noch erhebliche Folgekosten zu bedenken, Debugging, Softwarewartung (Refactoring) und die oft horrenden Kosten, wenn die Performance nicht ausreicht, Cluster für "load balancing" nachgerüstet werden müssen, und katastrophal ist es, wenn eine Applikation dauernd abstürzt. Entscheider verlassen sich nur auf "bewährtes", den Mainstream. Und kollektive Irrtümer hat es zuhauf gegeben.
Zuerst zur Performance:
Sind reine Interpreter, z.B. Smalltalk, Ruby, Python gegenüber JIT - Applikationen
David Shaffner hat sich 2005 die Mühe gemacht, die Performance von Squeak gegen VisualWorks gegen Jigsaw Java gegen Python, Ruby und Apache getestet. http://wiki.squeak.org/squeak/539 Er ist hier zu finden: http://www.cs.westminster.edu/~shaffer/Smalltalk/
Was er dort anspricht und misst, muß man erst einmal in Deutsch übersetzen. Async I/O und Async File I/O sind zunächst einmal Eigenschaft des Betriebssystems, die Fähigkeit, simultane Datenströme von/auf Festplatte und von/richtung Netzwerk handeln zu können. Was nutzt es, wenn z.B. der Webserver theoretisch 1000 simultane Anfragen beantworten könnte, jedoch das Betriebsystem immer nur 1 File gleichzeitig liefern kann, gilt auch für RAW DEVICES bei Datenbanken. Resultat - die Datenströme brechen ab, die Latenzzeiten erhöhen sich. Dann kommt Async I/O über die Netzwerkkarte hinzu. Hierdurch erst wird das Betriebssystem richtig performant, weil es gleichzeitige viele Netzwerkverbindungen nicht nur gleichzeitig offenhalten (siehe netstat), sondern auch mit Datenströmen bedienen kann. Man spricht hier von blocking, non blocking und async I/O. Die Betriebssysteme in der Vergangenheit, die das locker beherrschten, waren z.B. HP - UX, AIX, Solaris, Digital UNIX / True64 / VMS, Free/NetBSD ... Linux erst seit 2.6.9+ . Die Zahl der Network - und Filehandels, die das BS gleichzeitig verwalten kann, stellt ebenfalls eine Grenze dar. Könnte die Applikation 1000 veschiedene Files ausliefern, so wird sie oft daran gehindert, weil z.B. nur 256 gleichzeitige Files bzw. 256 Netzwerkverbindungen offen gehalten werden können. TCP/IP Verbindungen brechen oft dann ab. So unterscheiden sich z.B. die verschiedenen Versionen von Windows NT Server und Vista stark von den Windows Vista Home / Professional /Ultimate Editionen. Die Zahl der Network - und Filehandels wurde bewußt kastriert. Wer z.B. FreeBSD oder insbesondere NetBSD einsetzte war hierin völlig unbegrenzt. Diese BSD - Typen sind in jeder Hinsicht unbegrenzt, ohne Tuning. Ist das BS von diesen Verklemmungen befreit, so kommen architekturbedingte Verklemmungen auf Applikationsseite hinzu. So müssen z.B. einige Applikationen, um mehrere gleichzeitige Anfragen bedienen zu können, "forken", also Kopien von sich im RAM starten, damit eine zweite eingehende Netzwerkverbindung bedient werden kann, das CGI - Konzept. Fortschrittlicher sind hier dann sog. Multi-Threaded Server, wo zwar auch Kopien im RAM erzeugt werden, jedoch aufgrund des geteilten Datenbereiches weniger RAM verbraucht. Diese Server "skalieren" über mehrere CPU's. Noch fortschrittlicher sind hingegen wieder Single-Threaded Server - wo ein Server für jede eingehende Netzwerkverbindung eine neue Queue anlegt, und diese dann versucht, die Datenströme der Reihe nach 'round robin' zu bedienen. Komischerweise sind dies die absolut schnellsten Server (Zeus) Unter FreeBSD und NetBSD genügt hierbei nur eine einzige CPU, um 4 x 100 MBit mit Datenströmen "sättigen" zu können. Skalieren tut das System damit offiziell also nicht, es ist aber sauschnell und - sofern es ASYNC I/O und ASYNC FILE I/O beherrscht, kann es sogar zigtausendtausende simultane Datenströme fließend bedienen, wo die Daten kontinuierlich in jede Richtung fließen, zwar langsamer, aber gleichmäßig, nicht abrupt wechselnd. Und nun kommt das Problem mit den Threads. Für jeden Kernel - Thread (siehe auch das Konzept der PTHREADS) wird mindestens 1 MByte RAM fällig. Bei tausend simultanen Netzwerkverbindungen wird also z.B. ein Programm, welches Datenbankverbindung herstellt, aufbereitet und diese dann ausliefert, tausendfach kopiert, macht 1 Gigabyte RAM Verbrauch, nur allein, um die Netzwerkverbindungen offenhalten zu können. Da braucht man dann plötzlich Multi-CPU Serversysteme mit LOAD Balancing, die Folgekosten explodieren. Denial of Service Angriffe werden hierbei recht einfach. Daher haben die Hersteller von BS die Zahl der Netzwerk - Handels begrenzt, auch eine Art Schutz vor Überlastung. Apache 2.x besitzt daher eine Mischung aus Single-Threaded Server, wo jede Serverinstanz mehrere 1000 "einfache" HTML - Seiten ausliefern kann, und einem "pre-forking" Server, wo für jedes Skript, welches aufgeführt wird, je eine Kopie des Apache-Servers und der zugehörige PHP/Python/PERL Interpreter gestartet werden muß, auch wieder viele Megabyte jeweils groß. FASTCGI bedeutet eine Art asynchrone Abarbeitung der Skripte in einem Interpreter. Sie werden der Reihe nach FIFO abgearbeitet, es existiert aber nur 1 Instanz des Interpreters im RAM, ebenfalls sehr Speicheraufwändig. Nun kommt noch ein Nadelöhr. Datenbank. So werden z.B. bei einigen Datenbanken bei 100 gleichzeitigen Verbindungen 100 Kopien des Servers im RAM erzeugt. PostgreSQL z.B. verfolgt ein anderes Konzept - 1 Server und je Netzwerkverbindung wird eine Kopie eines PostgreSQL Clients erzeugt. Das ist viel sparsamer, als eine Kopie des kompletten SQL Servers im RAM zu halten. Und nun die pfiffigste und billigste Kombination. Betriebssystem mit ASYNC I/O, ASYNC FILE I/O (auch für RAW DEVICES bei DATENBANKEN), 2 CPU's, mehrere Netzwerkkarten, 2 auf unterschiedlichen CPU's gestartete Server-Threads mit Single-Threaded Technik, unlimited File - und network-handels, und dann muß natürlich der Server auch Async I/O und Async File I/O auch nutzen können. Wie nun handelt diese Single-Threaded - Technik 100.000 simultante Anfragen, wo Datenbank-Inhalte ausgeliefert werden müssen? Nun - alles muß in Single-Threaded - Technik mit Async I/O und Async File I/O durchgängig implementiert worden sein. Wie unterscheidet nun der Server die verschiedenen "Zustände" der eingehenden Verbindungen? - "Green Threads" für jede Netzwerkverbindung wird ein sog. "green thread" aufgemacht, also innerhalb des Interpreters eine Art Multi-Tasking ausgefürt. Der Interpreter verwaltet also eigenständig die vielen Tasks, legt selber Stapel (queues) an, arbeitet diese in schnellem Wechsel, also scheinbar fließend, ab. Vorteil dieser "green threads" ist, daß für jeden Thread nur ca. 700-900 Byte !!!! (nicht Megabyte) RAM verbraucht werden. Nanu?
Das Online-Game "EVE" ist das Paradebeispiel für diese Technik. 1 Stackless PYTHON - Interpreter (arbeitet mit Continuations, einer Art "goto" mit entsprechenden Nachteilen...dafür aber schnell!) verwaltet selber die Threads für TCP/IP, Server und Datenbank, und zwar in einer affenartigen Geschwindigkeit, obwohl oder gerade weil Interpreter: 30.000-100.000 simultane Datenströme aus der Datenbank, kontinuierlich in alle Richtungen fließend, verbinden Spieler mit einer gemeinsamen, virtuellen Welt. Servertechnik: FreeBSD 1 CPU, 4 GByte RAM, 8 Netzwerkkarten ! Dieselbe Technik in IRONGATE - einem Mailserver, welche ebenfalls 100.000 Mail-Datenströme gleichzeitig ausliefern kann. Diese werden für Spamming vorwiegend eingesetzt, weil die 300.000 Mails je Stunde rausschieben können, wobei sie auch GBit Netzwerkkarten sättigen.
Welche Technik unterstützt SQUEAK nun? Nun - Squeak ist "nur" Single-Threaded und nutzt auf bestimmten Betriebssystemen tatsächlich ASYNC I/O. Unter HP-UX, FreeBSD/NetBSD, OS X, Linux 2.6.9+, nur nicht unter Windows. Squeak auf Linux mit aktiviertem Async I/O haut die Daten aus der Netzwerkarte raus, das es eine Freude ist, zuzusehen. Der Apache - Benchmark "ab" von Zeus Technologies beweist es. Es bedarf keines VisualWorks Smalltalk oder Multi-Threaded - Technik, um auf Performance zu kommen, sondern nur der Beachtung dieser Kleinigkeit. David Shaffner hat Code Snippets in seinem Beispiel beigefügt, die dann Squeak befähigen, die Async I/O+File Eigenschaften des darunterliegenden BS auch nutzen zu können. Die hunderttausenden TCP/IP Verbindungen mit Green Thread - Technik kann man dann einfach nutzen ... net := HTTPSocket httpGET: 'http.....'. fork net. Und das in einem kleinen Schleifchen verpackt, macht ab auch alle Ehre ... http://www.oldenbuettel.de/squeak-doku/Network-Kernel/Socket.html Viele der Routinen sind für ASYNC ausgelegt. Bevor man sich mit der Performance bestehender HTML - Server in Squeak herumschlägt, hat man schnell selber einen Webserver mit Green Threads und Semaphoren selber geschrieben, und nutzt dann die OO-Datenbank in Squeak selber oder auf der CPU, z.B. MAGMA. Damit laufen dann sowohl Webserver, als auch Datenbankserver und Datenbankapplikation in einem Interpreter - klein, flink, sparsam im RAM, und - diese Kombination erst macht das System wahnsinnig schnell, gegenüber den Multi-CPU Servern mit Multi-Threading Applikationen, die tierisch CPU - Zeit allein für die Synchronisation der Tasks und die Zeitscheibenverteilung auf der CPU, Semaphoren, Network-Events ... aufwenden müssen.
Mit einem 500 Mhz Powerbook konnte man auch damals schon (Jahr 2000) mit Squeak eine 100 MBit - Karte sättigen! Wie? http://www-sor.inria.fr/~piumarta/squeak/unix/j3/Squeak-2.8/src/macos/sqMacNetwork.c
Es ist wirklich kein Problem, einen Green - Thread http - Server in Squeak zu programmieren. Wie das geht, zeigen auch RUBY und Python, da liegen die im Quellcode herum. Nun - Smalltalk hat eine noch einfachere Syntax, man kann aber flüssig beim Lesen von Python Code Smalltalk programmieren .... ;-)
Und wer dann will baut eine 2. CPU ein, startet eine 2. Squeak Engine auf der 2. CPU worin z.B. der Datenbankserver läuft, oder stellt einen Server daneben.
Und wer dann noch mehr Performance braucht, schaltet einen invertierten Proxy, z.B. SQUID hinzu. Dynamische Seiten, welche schon mal so ausgeliefert wurden, werden gecacht, die Anfragen gelangen erst garnicht mehr zum Interpreter. So kann man die Performance durchaus, trotz dynamischer Inhalte auf 10.000 ausgelieferte kleine HTML - Seiten/Sekunde erhöhen (selber getestet und oftmals implementiert). Und wer dann noch mehr Performance braucht, schaltet einfach einen LINUX LOAD - Balancer davor, diese Technik kann Linux von Hause aus: http://www.little-idiot.de/linuxsolutionguide/lvs.htm Damit kann man sich dann z.B. den CICSO LOCAL DIRECTOR ersparen. Damit fallen dann auch die evtl. Unterbrechungen der Smalltalk VM bei der FULL Garbage Collection nicht mehr auf, oder die (winzigkleinen) Unterbrechungen bei dem Recompilieren, wenn man Updates einspielt.... (und nicht vergessen, Background CPU Power zu aktivieren ... in der Squeak VM) Tatsache ist auch, daß z.B. Microsoft in seinem IIS und auch in JBOSS, J2EE heimliche "Caches" enthalten sind, genaugenommen dieselbe Technik, wie beim invertierten SQUID Proxy (iX hat darüber berichtet). Zaubern können die alle nicht, wollen aber bei Benchmarks immer glänzen. Und eine alte Weisheit besagt -
"Ein Entscheider kauft immer nur die Präsentation!"
Zu IronPython: http://www.google.de/search?hl=de&client=firefox-a&rls=org.mozilla%3Ade%3Aofficial&hs=vcZ&q=ironpython+eve+game&btnG=Suche&meta=
Übrigens - XING ist eine voll dynamische Homepage, mit RUBY (ASYNC I/O natürlich) Interpreter dahinter. Die Performance ist mit der von Squeak und der Smalltalk VM durchaus zu vergleichen. Auf JIT - Compiler und "Multi-Threaded" Implementierungen bei Squeak zu warten, ist nicht nötig, die Performance würde sich eh nur Faktor 2 (JIT) erhöhen, maximal. Ich freue mich schon auf die neuen IBM CELL PROZESSOREN auf PS3 mit Linux und Squeak drauf.... ;-) http://www.gamezone.de/news_detail.asp?nid=47638
Kleine Internas der Squeak VM, für die, die Spaß daran haben, Workspace auf:
Smalltalk garbageCollect. <ALT>-P -> Full GC, returns bytes free. Smalltalk garbageCollectMost. -> Incremental GC Smalltalk getVMParameters. -> Raw GC numbers. Smalltalk extraVMMemory. -> Get/Set extra Heap Memory (veraltet) Smalltalk bytesLeftString. -> Get bytes free + expansions Smalltalk setGCSemaphore. -> Semi to signal on IGC Smalltalk setGCBiasToGrow. -> setGCBiasToGrowGCLimit: Smalltalk isRoot: /isYoung:/rootTable/rootTableAt: Which memory space is that object in, or is it a root?
Mehr, siehe Google....
Daß die Entwicklungszeigen bei Smalltalk nur 1/3 bis 1/6 derjenigen von C++ und 1/2-1/3 derjenigen mit JAVA (oder C# bzw. .NET) und etwa gleichauf mit Ruby on Rails bzw. Apple WebObjects (schon seit NextStep ungeschlagen) liegt, dürfte zu denken geben. Softwarewartung ist ungleich billiger mit Smalltalk.
Tja, was sagen die Marketing - Leute dazu: "Esst Scheiße, millionen Fliegen können nicht irren!" Meine Liste jedenfalls der gescheiterten J2EE / JBOSS Großprojekte wird täglich länger, nicht nur seit dem gescheiterten Projekt FISCUS der Bundesregierung, nein auch viele weitere bei großen Unternehmen. Smalltalk - Projekte komischerweise werden viel öfter Erfolge, ob es an dem Verstand der Entwickler und Entscheider liegt, die sich nicht von dem Marketing Hype beeindrucken lassen? Kollektive Wahrnehmungsstörungen?
Viele Grüße, Guido Stepken
------------------------------
Message: 5 Date: Tue, 20 Mar 2007 12:39:58 +0100 From: Bert Freudenberg <[hidden email]> Subject: Re: [Squeak-ev] Kommerzielle Applikationen mit Squeak? Vgl. JBOSS vs. Seaside vs. Ruby vs. Python vs. Apache + Module ... To: Squeak in Germany / Squeak in Deutschland <[hidden email]> Message-ID: <[hidden email]> Content-Type: text/plain; charset=ISO-8859-1; delsp=yes; format=flowed
On Mar 20, 2007, at 12:20 , stepken wrote:
> Hallo, Squeaker!
Hallo Guido.
Dir ist schon klar, dass du hier dem Chor predigst? Ich für meinen Teil find das gut und erfrischend, aber die Leute hier auf der Liste musst du eigentlich nicht mehr von den Vorteilen von Squeak überzeugen ... Mit deinem Enthusiasmus würdest du aber einen hervorragenden Pressesprecher des Vereins abgeben. Lust?
Das ist ja sogesehen nicht ganz richtig. Ich für meinen Teil interessiere mich für Squeak/Smalltalk, bin da aber noch ein unbeschriebenes Blatt.
Ich arbeite an einem kfm. Berufskolleg in NRW. U.a. programmieren auch einige unserer Schüler, ich arbeite grad daran, dass die Zahl steigen kann. Und mit denen möchte ich dann gerne mit Squeak arbeiten. Gute Argumente, die für Squeak/Smalltalk sprechen anstelle von Java, PHP, C++ oder C# und wie sie alle heißen kann ich da gut gebrauchen.
Neulich hatte ich ein Gespräch mit der Bezirksregierung. Hab mich mal erkundigt, wie denn die Chancen stehen, in der Schule mit Smalltalk/Squeak zu programmieren (auch im Hinblick auf die zukünftige Abi-Zentralprüfungen in NRW). Wenn ich das gut begründen kann, wäre es in Ordnung, hieß es. Gut begründen muss man es gegenüber den Schülern (die nur Java, PHP, C#, ... kennen) und gegenüber der Bezirksregierung. Halt ein eingefahrener Verein. Ganz zu schweigen vom Großteil der Lehrer, die sich da stur stellen (und den Schülern so gerne mit VBA was beibringen (natürlich keine OO) oder PHP ganz toll finden, weil man da sofort Ergebnisse sieht). An vielen anderen Schulen ist es Java. Java ist nun mal "in". Das Zentralabi wirkt sich auch auf die Auswahl der Sprachen aus, hier soll die Vergeichbarkeit gewährleistet werden. Und da sind mehr als eine oder zwei (populäre) Sprachen nicht drin. Ähnliche Erfahrungen mache ich grad beim Einsatz von OpenSource (OpenOffice). Aber da bleib ich stur. ;-)
Da ich selber in Squeak noch ein unbeschriebenes Blatt bin, bin ich dankbar für jede Unterstützung (ein Pamphlet wurde hier mal angesprochen ;-) - an meiner Schule hat man einen guten Spielraum (freie Hand wäre übertrieben), unser Schulleiter ist da recht aufgeschlossen, wenn man gute Ideen hat und argumentativ auf sicherem Boden ist).
-- Herzliche Grüße,
Markus Czehak
|