Luin mielenkiintoisen artikkelin In Memory Data Grideistä (highscalability.com) ja niiden soveltamisesta Twitterin kaltaisiin palveluihin.

Yleensähän webbipalvelut rakennetaan SQL-tietokannan päälle ja lisätään joukko memcached-palvelimia, jotka pitävät tietoa välimuistissa. Varastoitu tieto on "tyhmiä" bittijonoja, tyypillisesti serialisoituja PHP-objekteja, jotka sitten myöhemmin palautetaan henkiin Apachen sisällä. Kaikki logiikka sijoitetaan Apachessa ajettavaan PHP:hen, yleensä model-objekteihin.

IMDG-lähestymistavassa ei varastoidakaan memcachediin pelkkiä tyhmiä bittijonoja, vaan pidetään muistissa aktiivisia objekteja, jotka voivat suorittaa itsenäisiä operaatioita klusterin kullakin noodilla. Tähän on olemassa useita kaupallisia Java-pohjaisia tuotteita, kuten IBM WebSphere eXtreme Scale ja GigaSpaces XAP.

Itseäni kiinnostaa tässä yhteydessä Facebookin kehittämä Thrift. Sillä voi rakentaa useiden eri ohjelmointikielten välillä toimivia client-server-ratkaisuja (mm. C++, Java, Python, PHP, Ruby, Erlang, Perl, C#). Se ei tarjoa sinänsä valmista IMDG-platformia, mutta mahdollistaisi oman platformin kehittämisen vaikkapa Pythonilla. Muistissa olevia Python-objekteja voisi sitten kutsua helposti PHP:stä käsin.

Tällainen kotitekoinen datagrid voisi toimia MySQL-shard-arkkitehtuurissa siten, että jokaisen MySQL-palvelimen yhteydessä on oma Thrift-palvelin, joka pitää kyseisen shardin tuoreimpia objekteja muistissa ja huolehtii tietokantaoperaatioista. Se osaisi myös tarvittaessa hakea tietoa toisista shardeista. PHP-koodi pyytäisi esimerkiksi käyttäjän kaverien uusimmat tweetit käyttäjän omasta kotishardista, joka tekisi edelleen tarvittavat haut kunkin kaverin shardeihin ja yhdistelisi vastaukset nätiksi "uusimmat tweetit" -luetteloksi.

Published 15.4.2009