Archiv 19. Januar 2005

Beitrag 4000

Wow. Das hier ist - in der derzeitigen Datenbank - der 4000ste Artikel

erstauntes Gesicht

bigempty.com ist ein sehr schönes Fotoblog mit einem sehr minimalistischen Design. Ein nettes Gimmick: die Hintergrundfarbe des Fussbereiches orientiert sich am angezeigten Foto - keine Ahnung ob es automatisch berechnet wird, aber die Idee ist nett.

Bundesgrenzschutz heißt bald Bundespolizei - war da nicht mal was von wegen Verbot einer Bundespolizei für Deutschland? Egal, auch diese letzte Schamgrenze fällt.

Fotos folternder Soldaten im Irak schockieren die Briten - aber werden sie deshalb ihrem Premier die Meinung sagen? Und wichtiger: wird Blair jetzt endlich von dem Wahnsinn Abstand nehmen? Oder wenigstens für die Zukunft daraus lernen und den Iran-Wahnsinn nicht mitmachen, der sich bei den Amerikanern so langsam andeutet?

Got New Spam Tactic Figured

Asymptomatic » Got New Spam Tactic Figured berichtet übert eine neue Taktik der Blogspammer. Und zwar tauchen relativ harmlose Kommentare auf Blogs auf, die keinen einzigen Link enthalten. Wenn die Spammer diese Kommentare über Google wiederfinden wissen sie, das sie dort höchstwarscheinlich weitere Kommentare ablassen können - und umgehen die Sperren, die darauf beruhen das ein Kommentar automatisch freigegeben wird wenn ein Besucher unter seiner eMail-Adresse schon mal einen freigegebenen Kommentar hatte. Es könnte also sein das nach einem Hey, Deine Seite finde ich toll Kommentar dann plötzlich ein Berg von Blogspam aufschlägt ...

Offenbar härtere Strafen für Drängler geplant - halte ich auch für dringend angebracht. Ich krieg jedesmal die Krise wenn wir mal auf der Autobahn unterwegs sind. Das ist doch pervers, was sich da einige hinterm Steuer erlauben ... (und nein, wir gehören weder zu den notorischen Linksfahrern noch zu den lahmen schleichern)

RSS 1.1: RDF Site Summary (DRAFT)

RSS 1.1: RDF Site Summary (DRAFT) - wie sinnvoll. Irgendjemand hat sich RSS 1.0 (ja, dieses ungeliebte RDF-basierte Format das eigentlich keiner so richtig kennt) und dazu einen Update entworfen. Weil, es gibt ja noch nicht genug Feed-Formate, da muss man ja unbedingt noch eins dazu packen.

Passend dazu bin ich dann auch noch über das HTML Syndication Format gestolpert - auch so eine sinnvolle Sache, da hat sich jemand gedacht den Feed einfach als speziell getaggten XHTML Source auszuliefern.

Und im Gegensatz zur RSS 3.0(das auf YAML basiert statt auf XML) meinen die anderen beiden es wohl mehr oder weniger ernst (beim HTML Syndication Format hoffe ich ja immer noch das es nur eine aufwändig gestaltete Ente war ...)

Schwarzenegger lehnt Gnadengesuch ab

Der Terminator macht seinen Filmfiguren alle Ehre - und schickt mal wieder einen Menschen in den Tod.

Sicher und anonym im Internet mit Proxys - Anleitung zur Nutzung von Privoxy und tor. Hatte ich irgendwie noch nicht hier verlinkt. Ist so gut, sollte man lesen. Wird man nicht dümmer von.

Subtraction: New, Improved Original Flavor!

Khoi Vinh stellt sein neues Design vor. Irgendwie cool wie er durch Weglassen einen - für mich - recht interessanten Eindruck produziert. Mir gefällt es jedenfalls sehr gut.

Ich wär ja froh wenn ich mal ein eigenes Design hinkriegen würde und meine Designs nicht immer irgendwo klauen müsste ... (einer der echten Vorteile von WordPress - das Kubrick Design mag ja mitlerweile etwas weit verbreitet sein, aber es lässt sich wenigstens auch von Design-Daus wie mir anpassen ohne das einem alles um die Ohren fliegt)

WordPress NoFollow Plugin

Das WordPress NoFollow Plugin versieht Links in Kommentaren mit dem rel="nofollow" um ihnen das Google-Ranking zu nehmen. Wobe ich persönlich daran schade fände, das dann generell Links nicht mehr von den Kommentaren gefolgt wird - und damit gerade die für kleinere Blogs brauchbare Möglichkeit durch aktive Diskussion in anderen Blogs das eigene zu promoten wegfällt. Ok, letzten Endes ist das auch nicht so schlimm, aber irgendwie geht schon ein kleines Stückchen der Ein Link wäscht den Anderen Mentalität der Blogs verloren ... Ein kleines Handicap ist, das der Autor das Plugin direkt verlinkt hat und dummerweise sein Server das PHP direkt ausführt. Im Moment kann man es also nicht runterladen, man kriegt nur eine leere HTML Seite

Zope-Hosting und Leistung - Englische Version

Jemand bat mich um eine englische Übersetzung meines Artikels zu Zope Hosting und Performance. Hier ist sie - okay, es ist nicht so sehr eine direkte Übersetzung, sondern eine Überarbeitung der Geschichte auf Englisch. Viel Spaß damit.

Kürzlich hatte der Schockwellenreiter Probleme mit seinem Blog-Server. Er verwendet Zope mit Plone und CoreBlog. Da ich seit einigen Jahren professionelles Zope-Hosting betreibe, Systeme, die im Bereich von 2000-3000 Hits pro Minute liegen, dachte ich, ich stelle einige der Dinge zusammen, die ich gelernt habe (manchmal auf die harte Tour) über Zope und Performance.

  • Der wichtigste Schritt, den ich unternehmen würde: schlankere Anwendung. Werfen Sie alles aus Ihrer Zope-Datenbank, was nicht dort bleiben muss. Wenn es kein Content-Management benötigt, speichern Sie es in Ordnern, die von Apache bereitgestellt werden. Verwenden Sie mod_rewrite, um es nahtlos in Ihre Website zu integrieren, so dass die Leute von außen keinen Unterschied bemerken. Dies kann am besten für Layout-Bilder, Stylesheets usw. erfolgen - Apache ist viel schneller beim Liefern dieser Dateien.
  • Verwenden Sie Zope-Caching, wenn möglich. Der Hauptparameter, den Sie überprüfen müssen: Haben Sie genug RAM. Zope wird beim Verwenden von Caching wachsen (insbesondere der RAMCacheManager). Die automatische Bereinigung wird Sie nicht retten - Zope wird trotzdem wachsen. Richten Sie eine Prozessüberwachung ein, die automatisch Zope-Prozesse tötet und neu startet, die über eine obere Grenze hinauswachsen, um Paging aufgrund eines zu hohen Speicherverbrauchs zu verhindern. Dies ist sogar eine gute Idee, wenn Sie überhaupt kein Caching verwenden.
  • Es gibt zwei bemerkenswerte Cache-Manager: einer verwendet RAM und der andere einen HTTP-Beschleuniger. Der RAMCacheManager zwischenspeichert Ergebnisse von Objekten im Speicher und kann verwendet werden, um kleine Objekte zu zwischenspeichern, die viel Zeit oder Ressourcen für die Konstruktion benötigen. Der HTTPCacheManager dient zur Verwendung eines HTTP-Beschleunigers - die meisten Leute werden Squid verwenden, aber Sie können auch einen entsprechend konfigurierten Apache verwenden. Der Cache-Manager stellt die richtigen Expires- und Cache-Control-Header bereit, so dass der meiste Verkehr aus den HTTP-Beschleunigern und nicht aus Zope geliefert werden kann.
  • Große Zope-Objekte töten die Performance von Zope. Bei der Verwendung von Caching zerstören sie die Effizienz des Cachings, indem sie den Cache mit großen Blobs von Dingen verunreinigen, die nicht oft benötigt werden, und Zope selbst wird durch sie ebenfalls in der Performance beeinträchtigt. Der Grund dafür ist, dass die Zope-Ausgabe im Speicher konstruiert wird. Die Konstruktion großer Objekte im Speicher verbraucht viele Ressourcen aufgrund der Sicherheits- und Architekturschichten in Zope. Besser ist es, sie mit Cronjobs oder anderen Mitteln außerhalb des Zope-Servers zu erstellen und sie direkt mit Apache zu liefern. Apache ist viel schneller. Eine typische Situation ist, wenn Benutzer PDF-Dokumente in Zope erstellen, anstatt sie außerhalb zu erstellen. Schlechte Idee.
  • Verwenden Sie ZEO. ZEO ist großartig. Wirklich. Im Wesentlichen handelt es sich dabei nur um die ZODB mit einer kleinen Kommunikationsschicht darüber. Diese Schicht wird in Zope-Instanzen verwendet, anstatt die ZODB direkt zu verwenden. Auf diese Weise können Sie mehrere Prozessgruppen auf Ihrer Maschine ausführen, die alle mit derselben Datenbank verbunden sind. Dies hilft bei dem oben erwähnten Prozessneustart: Wenn einer ausgefallen ist, erledigt der andere die Arbeit. Verwenden Sie mod_backhand in Apache, um die Last zwischen den Prozessgruppen zu verteilen, oder verwenden Sie andere Lastausgleichswerkzeuge. ZEO macht auch regelmäßige Datenbankpacks einfacher: Sie laufen auf dem Server und nicht in den Zope-Instanzen - sie bemerken den laufenden Pack eigentlich kaum.
  • Wenn Sie es haben, verwenden Sie eine SMP-Maschine. Oder kaufen Sie eine. Wirklich - das hilft. Sie müssen ZEO und mehrere Zope-Instanzen ausführen - andernfalls wird Sie der globale Interpreter-Lock von Python treffen und Zope wird nur einen der beiden Prozessoren verwenden. Das ist einer der Gründe, warum Sie mehrere Prozessgruppen von Anfang an wollen - Verteilung der Last auf der Maschine selbst, Nutzung mehrerer Prozessoren.
  • Sie können die Leistung verbessern, indem Sie die architektonischen Schichten reduzieren, durch die Ihr Code geht. Python-Skripte sind schneller als DTML. Zope-Produkte sind schneller als Python-Skripte. Entfernen Sie komplexen Code von Ihrem Server und verschieben Sie ihn in Produkte oder andere externe Orte. Dies erfordert das Umschreiben von Anwendungscode, daher ist es nicht immer eine Option - aber wenn Sie es tun, wird es sich auszahlen.
  • Lassen Sie Ihre ZODB-Datei nicht zu groß werden. Die ZODB fügt nur beim Schreiben hinzu - die Datei wächst. Sie wächst ziemlich groß, wenn Sie nicht regelmäßig packen. Wenn Sie nicht packen und Sie Multi-GB-ZODB-Dateien haben, beschweren Sie sich nicht über langsame Serverstarts ...
  • Wenn Sie komplexen Code in Ihrer Zope-Anwendung haben, kann es sich lohnen, ihn in einen externen Server zu stellen und mit Zope über RPC-Mittel zu verbinden, um die Ausführung auszulösen. Ich verwende mein |TooFPy| für solche Dinge - ziehen Sie einfach den Code heraus, bauen Sie ein Tool und hängen Sie es über XMLRPC in die Zope-Anwendung ein. Ja, XMLRPC kann ziemlich schnell sein - zum Beispiel ist pyXMLRPC eine C-geschriebene Version, die sehr schnell ist. Das Verschieben von Code außerhalb von Zope hilft, weil dieser Code keinen der statisch zugewiesenen Listener blockieren kann, um Dinge zu berechnen. Das Erhöhen der Anzahl der Listener-Threads zahlt sich nicht so aus, wie Sie erwarten würden: aufgrund des globalen Interpreter-Locks wird trotzdem nur ein Thread zur gleichen Zeit laufen und wenn Ihr Code C-Erweiterungen verwendet, kann er sogar alle anderen Threads blockieren, während er verwendet wird.
  • Wenn Sie PostgreSQL verwenden, verwenden Sie PsycoPG als Datenbank-Treiber. PsycoPG verwendet Sitzungs-Pooling und ist sehr schnell, wenn Ihr System viele Hits erhält. Andere Treiber blockieren Zope oft aufgrund von Einschränkungen wie nur einer Abfrage zur gleichen Zeit und anderem solchen Unsinn. Viele Administratoren mussten auf die harte Tour lernen, dass 16 Listener-Threads nicht wirklich 16 verfügbare Slots sind, wenn SQL-Treiber ins Spiel kommen ...

Es gibt noch mehr Möglichkeiten, die Leistung zu verbessern, aber die oben genannten sind mit relativ wenig Aufwand umsetzbar und hängen größtenteils davon ab, ob Sie genug Speicher haben und vielleicht eine SMP-Maschine. Speicher ist wichtig - je mehr, desto besser. Wenn Sie Speicher in Ihren Computer stecken können, tun Sie es. Es gibt so etwas wie zu viel Speicher nicht (solange Ihr Betriebssystem die Menge an Speicher unterstützt, natürlich).

Was tun, wenn selbst diese Tipps oben nicht funktionieren? Ja, ich war in dieser Situation. Wenn Sie in eine solche Situation geraten, gibt es nur eine - eher brutale - Lösung: aktives Caching. Damit meine ich das Herausziehen von Inhalten vom Zope-Server mit Cronjobs oder anderen Mitteln und das Speichern in Apache-Ordner und das Verwenden von mod_rewrite, um nur statische Inhalte an Benutzer zu liefern. mod_rewrite ist Ihr Freund. Im Wesentlichen nehmen Sie einfach die Seiten, die Sie derzeit umbringen, und machen sie pseudo-statisch - sie werden nur gelegentlich aktualisiert, aber die Hits erreichen Zope überhaupt nicht.

Ein weiterer Schritt ist natürlich mehr Hardware. Wenn Sie ZEO verwenden, ist es kein Problem, eine Farm von Zope-Servern vor Ihren ZEO-Maschine zu stellen (wir haben derzeit 5 Dual-Prozessor-Maschinen, die die Zope-Instanzen ausführen, und zwei eher große, fette, hässliche Server im Hintergrund für Datenbanken, Frontend mit zwei Apache-Servern, die im Vergleich zu den Backend-Dingen fast wie Zwerge aussehen).

Zope ist eine fantastische Software - verstehen Sie mich nicht falsch. Ich mag es. Besonders die Tatsache, dass es eine integrierte Entwicklungsumgebung für Webanwendungen und Content-Management ist, ist sehr schön. Und die einfache Integration externer Datenquellen ist auch schön. Aber Zope ist ein Ressourcenfresser - das ist nicht diskutierbar. Es gibt kein solches Ding wie ein kostenloses Mittagessen.