SongPop Behind The Scene

Ada yang tahu SongPop?

Mestinya sih banyak yang pada tahu yah :)
Jadi Song Pop itu adalah game tebak lagu di Facebook buatan FreshPlanet. Selain di Facebook, SongPop juga bikin mobile app-nya untuk iOS dan Android.

songpop-3

Cara mainnya sih gampang. Pilih lawan kamu dari friendlist facebook, pilih genre musik, nanti akan ada 5 lagu yang harus kamu dengerin selama beberapa detik dan tebak judul lagu atau nama penyanyinya.

 

Sederhana kan?  Yoi, kesederhanaan ini yang justru membuat sukses game-game di jejaring sosial.

Nah, kali ini kita ga akan membahas gimana cara bermain SongPop yang baik dan benar sesuai dengan tangga lagu billboard. Kali ini mari kita ngomongin mengenai isi dapur FreshPlanet, bagaimana mereka running SongPop ini.

Menurut data dari AppData (eh berima :P) SongPop FacebookApp mempunyai lebih dari 11,3 juta monthly active users (MAU). Daily active users (DAU) sendiri dah di atas angka 2 juta, dan game ini baru diluncurkan sekitar Mei 2012 kemarin. Belum ada setahun dan belum termasuk yang dari iOS ataupun Android Client. Nah silakan berhitung deh.

Nah, gimana sih caranya si FreshPlanet ini handle trafik game yang sebesar itu?
Di Wikufest 2013 kemarin ada adik kelas yang bertanya ke saya gimana caranya bikin layanan sosial media yang proper. Tapi karena saya belum tahu konsepnya dan cuman dapat info kalau dia ingin doing everything all in, saya cuman mengajukan pertanyaan dasar terkait infrastruktur dulu. Dan sepertinya pertanyaan saya tadi cukup membuatnya berhitung dengan serius :) *baru soal foto doang sih, belum ke yang lain-lain :P*

google-app-engine-logo

Oke, kembali ke laptop.
FreshPlanet infrastrukturnya menggunakan Google App Engine (GAE) dan Google Cloud Storage. Di tahun 2013 ini, ga jaman harus bangun infrastruktur sendiri untuk semua hal. Buat yang ikutan kelas CloudComputingnya si Dondy harusnya dah dapat gambaran yah.

Nah GAE ini sudah bukan kategori IaaS tapi lebih ke arah PaaS. Dengan memanfaatkan GAE ini, FreshPlanet mampu membuat Song Pop untuk dapat autoscale (baca: auto) hingga 60 juta user, 1 juta DAU, 17TB/hari delivery content (tentu saja lagu dan gambar), 10,000+ query/detik. Song Pop sendiri dihandle oleh “cuman” 6 orang, dan cuman 1 saja yang kerja fulltime ngurusin backend-nya.

songpop_gae_gc

Mengutip wawancara Zafir Khan dari GoogleAppEngine dengan Olivier Michon dan Alexis Hanicotte dari FreshPlanet ada beberapa tips yang mereka terapkan untuk optimalisasi dan tentunya skalabilitas si Song Pop itu sendiri. Diantaranya:

IMG_7213Denormalisasi: data user Song Pop tersebar di bermacam model, tapi tetap koleksinya di pool di satu tempat untuk mengurangi read latency.
Caching: Masih nyambung soal denormalisasi, data lawan main kita akan di cache. Jadi sistem ga akan selalu melakukan “query” ke user data cuman buat tau lawan main kita itu sapa ajah. Analoginya, query sekali, cache, query lagi kalo ada trigger cachenya tadi sudah obsolete/expired. FreshPlanet menggunakan Memcache untuk 2 hal di atas. Memcache itu fitur di GAE kok, dan orang-orang FreshPlanet menggunakan Python API-nya GAE buat kebutuhan ini. Hayo hayo pada belajar Python sana. It’s a fun languange.
Strategi: Iyah, bikin aplikasi itu harus ada strateginya. Apalagi kalau aplikasinya tadi bukan sekedar one-time asal jadi doang. Memilih GAE, beli premier support dari Google untuk kebutuhan GAE-nya tadi adalah salah satu strategi FreshPlanet untuk SongPop. Ceritanya saat DAU Song Pop mencapai angka 1 juta, query Datastore (yang digunakan untuk mencari lawan main secara acak) mulai lemot dan banyak timeoutnya. Untuk beresin ini, FreshPlanet menentukan deadline dan aktivitas fallback sistemnya, kemudian dengan bantuan Premier support melakukan tracing dan identifikasi yang bikin lemot query Datastore tadi apa. Dan seperti disebutkan di wawancara tersebut, masalahnya ternyata karena Datastore bergantung ke berbagai macam properti. Walaupun sudah di-index, tetap saja jumlah kebanyakan. Solusi yang muncul akhirnya ada opsi mau nambah sebuah composite index yang berisi semua properti yang dibutuhkan atau menggabungkan properti-properti tadi jadi satu.
Content Delivery: masih hosting static content dan ‘dynamic content’ atau apps di satu server yang sama? Satu mountpoint, LUN, directory yang sama? Nah coba baca-baca soal CDN (Content Delivery Network) deh :) Song Pop menggunakan Google Cloud Storage untuk serving lagu dan gambar dengan lebih dimanapun si user tadi berada. Jadi kalau kita main di Indonesia, sample lagu-nya ga harus kita download langsung dari server di Amerika sana misalnya :)

Detilnya wawancaranya bisa dibaca sendiri di sini deh. Walau jika dibaca keseluruhan hampir ga ada detil teknis howto-nya, tapi konsep yang disinggung di sini seru banget.

So… GAE bisa dicoba-coba gratis lho :) SDK-nya juga bisa didownload n insall di komputer masing-masing.

Dan… sekarang saatnya mengganti huruf P di PHP itu dengan Python :)

Tambahan referensi: