Kategoriarkiv: Linux

Bloggys infrastruktur

Tänkte beskriva lite om hur Bloggy är uppbyggt rent tekniskt. En förfrågan till Bloggy går ungefär igenom följande lager:

MySQL <- Sphinx <- Memcached <- Apache <- Varnishd

Varnish är en högpresterande webb frontend-proxy utvecklat av ett norskt företag och används  exempelvis av Aftonbladet. Detta går att utläsa genom HTTP-headern X-Varnish.

Denna frontend-cache används för att hantera alla statiska filer såsom CSS och bilder. Apache behöver jag inte skriva så mycket om men sedan kommer en intressant del och det är memcached som är utvecklat av Facebook.

De flesta SQL-frågor går genom memcached för att cachas ett antal sekunder, varje SQL-fråga är noggrant studerad hur länge den behöver cachas.

Sphinx är också en intressant del eftersom den gör att fulltextsökningar mot olika tabeller i MySQL-databasen. Sphinx tar hand om runt 40 sökningar i sekunden.

Sedan så kommer MySQL som hanterar allt annat som inte fångas upp av något av ovanstående system. Alla frågor har optimerats så att filsorteringar (file sort) och dylikt används minimalt. Jag har även tidigare (2007) bloggat om hur du kan optimera din MySQL databas.

Någon som kan knäcka nöten?

Jag gillar memcache och använder det flitigt här och var. Men tyvärr så stängs inte kopplingen ner korrekt någonstans i koden och jag vet inte riktigt var. Detta resulterar i att massor av TCP-koppel hamnar i TIME_WAIT:

$ netstat -n|grep -c TIME_WAIT

5449

Har du någon lösning på mitt problem eller tips på hur jag kan hitta vart kopplet inte stängs ner korrekt i PHP-koden?

Test av SliceHost

Fick några minuter över i dag så testade den amerikanska VPS-tjänsten SliceHost som Rackspace äger. Det tog enbart 5 minter för mig att vara i gång och konfigurera den Ubuntu-version som jag valt. Ser lovande ut än så länge och avser att flytta download11.com dit inom en snar framtid då majoriteten av besökarna är från andra sidan atlanten (download11 använder sig av SimpleCDN sedan tidigare).

Jag återkommer med en utförligare rapport med eventuellt för och nackdelar.

Prissättningen ser ut enligt följande:

slicehost

Såg även att svenska Crystone startat en ny VPS-tjänst på Server.se

Vimrc

Riktiga män kodar allt i vi(m) har jag hört, så nu tänkte jag dela med mig av min vimrc:

syntax on
colorscheme elflord
set autoindent
set smartindent
set updatecount=10
set tabstop=4
set shiftwidth=4
set expandtab
set viminfo=’10,\”100,:20,%,n~/.viminfo
au BufReadPost * if line(”‘\””) > 0|if line(”‘\””) <= line(”$”)|exe(”norm’\””)|else|exe ”norm $”|endif|endif

Den sista raden här är intressant. Läs mer här och här

Avlasta din webbsajt med ett CDN

CDN står för Content Delievery Network och är namnet på en tjänst där en eller flera servrar tar hand om din lagring på webben. Exempelvis så har Microsoft använt sig av Akamai och liknande tjänster för att se till att uppdateringar till Windows alltid går snabbt att ladda hem.

Det finns ett antal CDN-leverantörer och priser och funktionalitet skiljer sig en hel del beroende på vilken man väljer men man brukar få betala per överförd gigabyte.

Så hur kan ett CDN hjälpa dig undrar du kanske? Jo du kanske har en webbsajt med massor av statisk information såsom CSS, bilder eller kanske tunga filmer och här kommer ett CDN in i bilden.

Jag gjorde en snabb koll på min sajt download11.com över vilka filer som laddades in oftast:

/style.css
/bg.gif
/navigation.css
/nifty.js
/header-bg.png
/images/feed16.png
/images/download.gif
/favicon.ico

Och samtliga av dessa filer kan avlasta min webbserver genom att överföras till en CDN-leverantör. Jag testar för tillfället SimpleCDN.com och det tog mig max 20 minuter innan jag var igång och de serverade filer åt mig.

Jag har nu ett CNAME för files.download11.com som går till files.simplecdn.net där mina statiska filer nu ligger (files är ett namn som jag själv valt för min ”upload bucket”).

Bra CDN-leverantörer använder sig även av anycast-teknik vilket även innebär att de är mindre känsliga för belastningsattacker då samma IP-nummer återfinns på flera ställen.

Tips på några fler CDN-leverantörer förutom Akamai och SimpleCDN:

Övervaka din server med Munin

Munin är en trevlig klient/server mjukvara som övervakar din servers prestanda och visar denna på ett antal fina grafer. Enligt dem själva:

Munin the monitoring tool surveys all your computers and remembers what it saw. It presents all the information in graphs through a web interface. Its emphasis is on plug and play capabilities. After completing a installation a high number of monitoring plugins will be playing with no more effort.

Så jag tog mig tid för några dagar sedan och installerade server-delen på en av mina servrar samt klient-delen på ett antal andra servrar där jag ville övervaka prestandan och här kommer ett axplock med några av de grafer som genereras:

Servern där bloggy.se ligger:

Severn där bloggz.se, bloggvarde.se, bloggbackup.se mfl. ligger:

Antalet MySQL-frågor per sekund

Installation av Munin

Installationen är tämligen trivial iallafall under Unbutu och installationen sker enligt följande på server-delen:

$ sudo apt-get install munin

Och på klienterna (noderna):

$ sudo apt-get install munin-node

Efter detta så skapas en katalog /etc/munin/ där munin.conf finns på servern och munin-node.conf finns på klienterna (server och klient-del kan så klart köras på samma server).

På klienterna behövs enbart en rad läggas till i munin-node.conf och det är vilket IP-nummer som ska få behörighet att hämta statistik-data, exempelvis:

allow ^83\.23\.91\.1$

På servern så läggs följande rader till:

[bloggy]
    address 79.99.2.33
    use_node_name yes

Efter några minuter bör filer skapas i katalogen /var/www/munin/ som du sedan måste göra tillgänlig för din webbserver.

Om du som jag skulle sakna någon av graferna så kontrollera symlänkarna i katalogen /etc/munin/plugins. Jag var tvungen att lägga till så att /etc/munin/plugins/apache_processes symlänkades till /usr/share/munin/plugins/apache_processes för att få graferna för antalet apache-processer.

Övervaka dina tjänster med Monit

Jag har haft lite problem med Apache2 + PHP5 och en nödlösning just nu är att använda en mjukvara som håller koll på om Apache inte svarar som den ska. Och i mina sökningar efter en mjukvara som är kompetent och kan göra detta så hittade jag Monit.

Monit installeras och konfigureras på under 10 minuter enligt följande:

# apt-get install monit

editera /etc/monit/monitrc och lägg dit exempelvis följande rader:

check process apache2 with pidfile /var/run/apache2.pid
group apache
start program = ”/etc/init.d/apache2 start”
stop program = ”/etc/init.d/apache2 stop”
if failed host 127.0.0.1 port 80
protocol http then restart
if 5 restarts within 5 cycles then timeout

set mailserver localhost

set mail-format { from: [email protected]
subject: $SERVICE $EVENT at $DATE
message: Monit $ACTION $SERVICE at $DATE on $HOST: $DESCRIPTION.
}

set alert [email protected]
set logfile syslog facility log_daemon

Så var det klart! Nu övervakas tjänsten och lirar den inte så startas den om automagiskt (om nu en omstart hjälper problemet i fråga). Andra tjänster såsom sshd och mysql kan så klart också övervakas av monit.

Monit hittas: http://www.tildeslash.com/monit/

ffmpeg

Jag har hållt på att donat och strulat och försökt att få ffmpeg att lira med mer videoformat och codecs men det har inte varit en helt smärtfri väg att få till allt. Vet inte riktigt var jag ska börja men ffmpeg är ett verktyg för att hantera filmer på en massa sätt, exempelvis konvertering.

Genom att köra ffmpeg -v så konstaterade jag att varken libmp3lame eller libamr (3GPP/3GP) var inkompilerat i standardbinären på Ubuntu Edgy som jag kör:

FFmpeg version SVN-rUNKNOWN, Copyright (c) 2000-2007 Fabrice Bellard, et al.
configuration: –enable-gpl –enable-pp –enable-swscaler –enable-pthreads –enable-libvorbis –enable-libtheora –enable-libogg –enable-libgsm –enable-dc1394 –disable-debug –enable-shared –prefix=/usr

Så klart så testar jag ju att använda apt-src install ffmpeg och sedan modifiera debian/rules filen för att tillfredställa mina behov, men icket! Otaliga kompileringsfel i amr vilket jag försöker fixa men ger upp efter ett tag.

Dags och byta taktik, checkar ut en fräsch ffmpeg version från svn:

svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg-svn

Och efter att kliat huvet och kompilerat om ffmpeg ett antal gånger och installerat ett antal ubuntu paket såsom libamrnb3 libamrnb-dev libamrwb-dev libamrwb3 amrwb amrnb liblame-dev libxvidcore4-dev libfaac-dev libfaad2-dev för att bara nämna några så börjar det att ljusna.

ffmpeg -v ger mig nu:

FFmpeg version SVN-r14864, Copyright (c) 2000-2008 Fabrice Bellard, et al.
configuration: –enable-gpl –enable-nonfree –enable-swscale –enable-avfilter –enable-pthreads –enable-liba52 –enable-libamr-nb –enable-libamr-wb –enable-libmp3lame –enable-libgsm –enable-libmp3lame –enable-libvorbis –enable-libx264 –enable-libfaac –enable-static

Och det går betydligt lättare att konvertera mellan en massa videoformat.

Bloggkoll, värderingar, brevspam, fonter och slumptal

Markus Jalmerot har gjort en trevlig och grundlig utvärdering av två svenska modebloggare och en vacker dag så kanske jag tar och anammar vissa av dessa parametrar till BloggVärde.se:s värdering. IDG skriver även om detta.

**

Mattias Swenson som enligt mig är en av Sveriges yngsta och hetaste entreprenörer som bl.a står bakom forumet Swedish Startups berättar att BloggKoll nu finns en en alldeles ny fräsch version. Även Christian RudolfDisruptive har bloggat om detta.

**

Dan Nilsson slutar aldrig att förvånas och tar till nya guerilla marknadsföringsmetoder för att få ut budskapet om sin nya E-butik RoligaPrylar.se

**

Antalet bloggar som blivit värderade på BloggVärde.se överstiger när som helst 10 000! Det är helt sjukt vilken genomslagskraft sajten har fått. Testade att göra några slagningar i databasen och kom fram till att ungefär 300 svenskar skulle kunna blogga på heltid (räknat på medellön 222 520/år). Men som vanligt så ska man nog inte lita allt för mycket på mina hemmatränade apor!

**

Gillar du Naive Bayes, NGram analys eller kanske bygga dataminingplattformar tillsammans med Marcus Herou som är en av Sveriges främsta utvecklare? Då är Tailsweep rätt ställe för dig.

**

Read Write Web skriver att FontStruct är en ny webbtjänst som låter dig bygga egna fonter direkt på webben och sedan dela med dig av dessa. Jag gillar’t! Är du en riktig design nörd så kan du även gå direkt till överkursen och ladda hem FontForge:

An outline font editor that lets you create your own postscript, truetype, opentype, cid-keyed, multi-master, cff, svg and bitmap (bdf, FON, NFNT) fonts, or edit existing ones. Also lets you convert one format to another. FontForge has support for many macintosh font formats.

**

Lita inte för mycket på dina slumptal, speciellt inte om du använder OpenSSL tillsammans med Debian, Ubuntu eller Knoppix. Luciano Bello har nämligen hittat en brist som gör det möjligt att förutse genererat nyckelmaterial. Testa om du har dåliga nycklar med följande program. Beskrivning:

# Debian/OpenSSL Weak Key Detector
#
# Written by Florian Weimer <[email protected]>, with blacklist data
# from Kees Cook, Peter Palfrader and James Strandboge.

Update: Detta gäller så klart även SSH-nycklar. Se metasploit.com/users/hdm/tools/debian-openssl

When creating a new OpenSSH key, there are only 32,767 possible outcomes for a given architecture, key size, and key type.

**

Du glömmer väl inte heller att gå på det event som Swedish Startups samt Booli håller i? Jag kan tyvärr inte närvara.

**

Puust, så här mycket text som inte varit kod har jag inte skrivit på länge.