Etikettarkiv: redis

Att utveckla för molnet

Att utveckla webbtjänster för molnet gör att utvecklingen blir bättre. Jag upplever att jag tvingas att tänka på portabilitet och möjlighet till skalnCC http://commons.wikimedia.org/wiki/File:Bedeckt.gifing på ett annat sätt än när jag vanligtvis skapar webbtjänster.  Detta gör mig troligtvis också till en bättre programmerare.

Låt mig ta några exempel:

1. Istället för att använda Pythons inbyggda köhantering (Queue) så använder jag Redis och får då automatiskt skalning. Dock inte till vilket pris som helst eftersom Redis äter minne. Men med Amazon EC2 och 15GB minne så kommer jag rätt långt. Har testat Amazon SQS för köhantering men prestandan är direkt usel och är inte avsedd för miljoner operationer per sekund.

2. Sökvägar tvingas att sättas dynamiskt eftersom jag använder Amazon EBS där sökvägarna sätts på den extramonteringen som EBS tillhandahåller. Dock är det lite trist att vara låst till en ”zon” hos Amazon.

3. Att inte tänka på begränsningar på samma sätt. Det går alltid att kasta fler servrar, ramminne och hårddisk på problemet så löser det sig utan att behöva införskaffa fysisk hårddvara. Detta är något som jag ser som mycket intressant, att som liten ensam entreprenör kunna bygga stora system med hundratalet servrar. Dock ska ju allt underhållas också..

Finns säkert en drös med andra saker som jag inte kommer på just nu, men lämna gärna en kommentar på vad du ser för fördelar med att använda molntjänster vid utveckling.

Crawler 2.0

Som många vet så har jag två tjänster som visar information om domäner, nämligen DomainDB.com samt DomainTool.se. Jag var i behov av att uppdatera den informationen som fanns så det var dags att starta den crawler som jag skapat för några år sedan.

Crawlern (eller webcrawler, spider som det också heter) var tämligen ouppdaterad så jag tog tillfället i akt och använder nu enbart Redis. Tidigare så använde jag MySQL + Sphinx:

  • db0 – Kö för domäner som skall besökas
  • db1 – Koppling mellan namnserver och IP-nummer
  • db2 – Koppling mellan www.domän och IP-nummer
  • db3 – Sidtitlar

Db0 rensas och fylls på ungefär varannan dag med runt 25 miljoner nya domäner som besöks så efter cirka en vecka så har jag besökt 100 miljoner domäner. För server-kapacitet så använder jag Amazon EC2 och deras spot instances som är lite billigare och utnyttjar oanvända EC2-instanser.

NoSQL – MySQL och memcached på väg bort

Jag ser fler och fler välja alternativa lösningar till MySQL och memcached och väljer då istället exempelvis Redis eller Cassandra. Ryan King som jobbar på Twitter intervjuades nyligen och berättade att de håller på att gå över till Cassandra för att lagra deras ofantliga mängder med tweets.

Som jag har skrivit tidigare så använder jag Redis för alla mina nya projekt men ser även till att ha en kopia kvar i MySQL för att Sphinx skall indexera fritext. Men jag kommer förmodligen att skippa MySQL helt snart eftersom Sphinx även kan läsa in exempelvis fritext från XML som kan genereras från innehållet i Redis.

När jag startar mitt nästa projekt så kommer jag att skippa MySQL och memcache helt och försöka att bygga en lösning som enbart förlitar sig på Redis (och Sphinx så klart).

Kategorisering av de olika lagringstyperna:

  • Key-value stores: Redis, Scalaris, Voldmort, and Riak.
  • Document stores: Couch DB, MongoDB, and SimpleDB.
  • Record stores: BigTable, HBase, HyperTable, and Cassandra.
  • Scalable RDBMSs: MySQL Cluster, ScaleDB, Drizzle, and VoltDB.

Glöm inte läsa denna rapport som nyss släpptes på ämnet:

High Performance Scalable Data Stores av Rick Cattell

NoSQL here we come.

Redis är guds gåva till webbutvecklaren

Efter mitt blogginlägg om hur jag använder Memcache för att logga många klick så fick jag ett tips av Emil Stenström (som bl.a bloggar på FriendlyBit.com) om att ta en titt på Redis. Redis går lättast att beskriva som en storebror till Memcache som fungerar ungefär på samma sätt men har betydligt fler funktioner.

Redis stödjer exempelvis listor där du lätt kan skapa en FIFO-lista eller varför inte spara data under en längre tid eftersom Redis standardmässigt inte kastar bort något som Memcache gör.

Att installera och använda Redis under Ubuntu 9.10 så kan du göra enl. följande:

$ sudo apt-get install redis-server

$sudo apt-get install libphp-redis

Sedan är det bara att inkludera /usr/share/php/redis.php i din PHP-kod och testa Redis:

<?php

require_once "/usr/share/php/redis.php";
$redis = new Redis();
$redis->set("nyckel", "värde");
echo $redis->get("nyckel");

?>

Prestandan är imponerande:

110000 SETs/second, 81000 GETs/second

Observera även att paketet redis-server finns med i Ubuntu från och med version 9.10.

LoadImpact för belastningstester

Har just genomfört några belastningstester på den nya redundanta miljön som huserar i två olika datorhallar i USA. Med nginx och Redis som står för prestanda så måste jag säga att det ser rätt bra ut:

Återkommer när tjänsten är öppen för bruk!

LoadImpact med Ragnar Lönn (grundare av bl.a Algonet) i spetsen hittas så klart på LoadImpact.com

”Loadimpact.com, a unique, fully automated online service for load testing of websites. It has been developed by Gatorhole AB, a company that offers products and services related to system/network performance testing and measurement. Load Impact is the most popular web site load testing service on the Internet today, with tens of thousands of users per month and a total of over 50,000 executed load tests since its launch in january 2009.”