Tuli kokeiltua Erlang-pohjaista webbijulkaisujärjestelmää opiskelumielessä. Käytin kokeilussani itse käännettyjä softia, koska Red Hat ei tue mitään näistä valmiina rpm-paketteina. Sivuhuomautuksena voinkin todeta, että Red Hat imee eikä sitä kannata käyttää missään, ellei ole pakko.
Tällä yhdistelmällä voi rakentaa MVC-mallin mukaisia webbisovelluksia, jotka käyttävät CouchDB:tä dokumenttitietokantana:
- Erlang OTP R12B-5
- Yaws 1.77
- ErlyWeb 0.7.2
- CouchDB 0.8.1
- erlang_couchdb 0.2.3
Testasin kuormankestoa ApacheBenchillä: tulos on keskimäärin 1000 pyyntöä sekunnissa, kun haetaan yksi dokumentti ja tulostetaan sen sisältö HTML:ksi.
Samalla raudalla vastaava yksinkertainen PHP-skripti, joka hakee MySQL:stä rivin dataa, pystyy käsittelemään noin 2000 pyyntöä sekunnissa eli tuplat. (Käytössä APC bytecode cache.)
Erlangin valttina PHP:hen nähden vaikuttaa olevan kuitenkin yhtaikaisten yhteyksien käsittelykapasiteetti. Kun testi pyörii sadalla säikeellä, molemmat selviytyvät kuormasta yhtä hyvin. Mutta kun säikeitä on tuhat, niin Apache alkaa yskiä. Erlang/Yaws taas ei ole moksiskaan. Pääasiallinen syy lienee siinä, että Apache käynnistelee Linuxiin worker-prosesseja (256 kpl) hoitelemaan hommia, kun taas Erlang pystyy käsittelemään yhtaikaiset pyynnöt sisäisesti fiksummin.
Johtopäätöksiä
Vaikka Erlangissa on suuria etuja rinnakkaisprosessoinnissa, niin en välttämättä silti lähtisi tekemään sillä webbisaitteja. PHP:llä saadaan ohjelmointimukavuuden lisäksi raakaa suorituskykyetua, ja hakupyyntöjen rinnakkaisuutta voidaan hallita kuormantasauksella sekä Apachen asetuksilla. Oikein koodatussa saitissa hakupyynnöt ovat riippumattomia toisistaan, joten skaalautuvuus on vain hardwaren lisäämistä.
Useimmitenhan webbisaitin pullonkaula on sitten joko tietokanta tai sen eteen rakennettu välimuisti. Tässä mielessä skaalautuva CouchDB on äärimmäisen kiinnostava, ja ajattelinkin seuraavaksi kokeilla sitä PHP:hen yhdistettynä.
Monipuolisemmissa web-palveluissa saattaa sitten olla vielä tietokannan ja MVC-kerroksen lisäksi muita raskaita taustatoimintoja. Esimerkki voisi olla virtuaalimaailma, mmorpg-peli tai sosiaalinen verkosto, jossa on paljon käyttäjien välistä reaaliaikaista vuorovaikutusta. Tällaisten projektien alustaksi Erlangia kannattaa varmasti harkita.