SberCraft, CyberCode, Luxcity - Anda mungkin pernah mendengar tentang game-game ini atau bahkan berpartisipasi di dalamnya. Semua ini hasil karya Geecko. Proyek Geecko terbesar masing-masing mengumpulkan 20 ribu pemain, sementara hingga saat ini perusahaan belum memiliki tim yang berdedikasi untuk mendukung infrastruktur tersebut.
Bengkel perusahaan Nikita Obukhov dan Direktur Pemasaran Irina Fedorova berbicara tentang insiden tersebut, yang menjadi salah satu argumen untuk secara serius memikirkan perubahan infrastruktur, pindah ke K8 dan menyewa tim DevOps.
Apa yang ada di dalamnya:
- kehilangan kendali atas Facebook,
- lalu lintas tiba-tiba pada Jumat malam,
- Hibah dari Microsoft Azure, Cloud Moving and Transformation Challenges.
Pergilah!
Geecko โ DevRel . IT- , : , , -.
Geecko
Game itu dibuat di mesin apa, secara teknis apa?
Nikita: Game kami secara eksklusif berbasis browser. Kami menggunakan perkembangan kami sendiri dan perpustakaan yang telah terbukti untuk bekerja dengan Canvas, peta, isometri. Kami menggunakan JS / TS, kerangka kerja Vue.js untuk UI web biasa.
Kami belum menulis untuk platform seluler - paling banter, kami mendukung izin seluler. Tetapi ini tidak sering diperlukan - di sebagian besar game kami, Anda perlu menulis kode, dan menulis kode dari ponsel sangatlah mudah.
Seberapa menuntut game di CPU dan memori?
Nikita: Dalam permainan kami, kami perlu menulis kode, dan kami perlu menjalankan kode ini.
Kami mendukung 12 bahasa: dikompilasi dan ditafsirkan dalam lingkungan yang berbeda. Kami menjalankan kode pada sumber daya server kami: beban pada prosesor dan memori intensif.
Kami juga menjalankan layanan LSP yang menyediakan kode pelengkapan otomatis untuk IDE online kami. Mereka juga membutuhkan CPU dan terutama memori: ketika ada banyak pemain, beban meningkat secara signifikan.
Di mana game-nya dihosting?
Nikita: Itu selalu awan. Sekarang penyedia utama adalah Azure (Geecko menerima hibah dari Microsoft untuk penggunaan gratis cloud - red.). Kami meluncurkan semua proyek baru di sana - dan, yang penting bagi kami, kami meluncurkannya di Kubernetes. Semua infrastruktur baru didasarkan pada Kubernetes dan Docker.
Penyedia mana yang Anda miliki sebelumnya dan mengapa Anda memutuskan untuk beralih?
Nikita: Kami telah dan masih terwakili di DigitalOcean dan Yandex.Cloud. Mereka adalah penyedia yang baik, tetapi Microsoft ternyata merupakan program hibah yang paling cocok untuk kami.
Berapa banyak yang Anda habiskan untuk server sebelumnya dan habiskan sekarang?
Nikita: Enam bulan lalu, kami menghabiskan sekitar 30 ribu rubel sebulan, sekarang angkanya mendekati 100 ribu. Pertumbuhan ini terkait dengan jumlah proyek: kami tidak menghentikan yang lama, mereka terus bekerja dan menerima pendaftaran organik. Kami secara rutin meluncurkan aktivitas baru: dalam satu bulan kami dapat merilis tiga proyek - misalnya, satu pertempuran, satu game, dan satu pertemuan.
Apakah Microsoft Grant Mencakup Semua Biaya?
Nikita: Biaya infrastruktur kami belum nol: kami tidak bisa mengangkut semuanya sekaligus, ini tidak layak secara ekonomi. Oleh karena itu, dua penyedia cloud lagi terus bekerja dengan kami, pangsa mereka menurun begitu saja.
Cadangan di area geografis lain, pemulihan bencana sumber daya di cloud lain - semua ini penting.
Secara keseluruhan, biaya keseluruhan berkurang. Layanan eksekusi kode memiliki konsumsi sumber daya terbesar, dan berkat hibahnya, biayanya di tahun mendatang akan nol. Jika sejumlah syarat terpenuhi, hibah akan diperpanjang untuk tahun kedua.
Tangkapan layar dari game Cybercode
Arus lalu lintas Facebook yang ramai pada hari Jumat
Pernahkah Anda mengalami situasi di mana masuknya pengguna menurunkan produksi?
Nikita: Iya pernah ada kejadian yang dekat dengan ini. Kami mendapat tugas dari perusahaan internasional: menemukan banyak pengembang berbahasa Inggris.
Secara desain, pemain harus secara kolektif menyelesaikan misi saat berada di peta yang sama. Peta memiliki dimensi yang terbatas, jadi tidak mungkin untuk menempatkan semua orang di dalamnya. Kami membagi pengguna menjadi beberapa kelompok yang terdiri dari 100 orang, yang masing-masing hanya hidup tidak lebih dari lima hari - ini adalah siklus permainan untuk menyelesaikan misi. Selama ini, peserta menang atau kalah.
Kami berharap hingga 10 kartu seperti itu akan aktif pada saat yang sama, yaitu hingga 1000 pemain. Namun nyatanya, ada lebih dari 2000 pemain atau 20 kartu di puncaknya.
Kenapa ini terjadi? Mengapa begitu banyak pengguna tiba-tiba datang ke game?
Irina: Ceritanya terjadi pada awal Maret, ketika Facebook mulai memblokir akun iklan secara besar-besaran dan spontan karena tidak konsisten dengan kebijakan pengiklan. Banyak perusahaan kemudian kehilangan kantor periklanan mereka, termasuk kami: kantor utama kami dan kedua kantor cadangan jatuh. Dan semua ini pada saat kami harus mempromosikan permainan.
Facebook adalah salah satu saluran promosi utama, karena cukup mudah untuk memilih audiens dan menyegmentasinya berdasarkan data yang tersedia. Dan selama 12 hari penuh kami kehilangan akses ke saluran ini. Ketika kami mengembalikannya dengan keringat, darah dan air mata, kami harus mengejar KPI - 4500 pendaftaran cairan untuk geolokasi tertentu, terutama di Eropa.
Tidak ada pilihan selain mendorong anggaran: kami mempercepat kampanye iklan kami.
Apa artinya "mendorong dengan anggaran"?
Irina: Jika awalnya kami membelanjakan 300-500 dolar sehari, kemudian sekarang kami menghabiskan lebih dari 1000.
Anda harus memahami bahwa biasanya kampanye periklanan dilatih selama beberapa hari, dan kemudian mulai bekerja semaksimal mungkin. Tetapi anggaran periklanan kami lebih besar dari biasanya, jadi kampanye belajar lebih cepat dan pada hari kedua mulai memutar indikator yang sangat keren. Pada titik tertentu, kami kehilangan kendali atas dirinya.
Kami mengandalkan tingkat konversi tertentu, tetapi ternyata lebih sederhana karena fakta bahwa Facebook melakukan overclock. Jika rata-rata tingkat konversi dalam game tersebut sekitar 8%, maka pada saat puncaknya mencapai 15%.
Keren!
Irina: Ya, saat itulah kami mengerti apa arti anggaran iklan yang besar. Benar, ini hanya berhasil dalam kasus Barat - di Rusia tidak ada penonton yang menghabiskan begitu banyak uang.
Dan, tentu saja, semuanya terjadi pada hari Jumat. Klasik! Pada Jumat malam, saya menerima pesan dari Nikita bahwa lalu lintas kami sangat padat sehingga kami perlu melakukan sesuatu untuk mengatasinya.
Bagaimana Nikita tahu tentang ini? Darimana asal sinyal ini?
Nikita: Kami memiliki pemberitahuan beban server otomatis. Beginilah tampilannya:
Peringatan datang bahwa mesin virtual (8 core, memori 32 GB) dimuat oleh 90% pada CPU pada nilai ambang 50%.
Ini tidak penting, karena layanan terus bekerja. Untuk pemain, ini berarti mereka menekan tombol "Jalankan Kode" dan menunggu dua kali lebih lama untuk eksekusi. Tetapi itu juga berarti bahwa jika pemain baru terus berdatangan, situasinya akan menjadi lebih buruk, hingga downtime.
Akibatnya, hasil terburuk dihindari - layanan tidak turun sepenuhnya?
Nikita: Untung semuanya berakhir dengan baik.
Tentu saja, jika situasi muncul di tengah hari kerja, kami tidak akan khawatir sama sekali - di sana Anda dapat bereaksi dengan cepat. Tapi tidak pada Jumat malam. Pada Jumat malam, Anda pergi ke bar dan menerima pesan ini di ponsel Anda. Tetapi untuk memperbaiki semuanya, tidak cukup hanya menggunakan telepon.
Bagaimana Anda mengelola situasi?
Irina: Kami baru saja mengurangi biaya kampanye iklan hampir 70%.
Apakah Anda kembali ke jalurnya nanti?
Irina: Tidak, mereka tidak membawanya ke kondisi yang sama, karena situasinya tidak dapat diprediksi: Facebook meningkat dan meningkatkan konversi setiap hari. Jika kita telah berputar dengan kecepatan yang sama selama seminggu berikutnya, mungkin konversinya akan lebih tinggi lagi. Tapi kemenangan heroik tidak dibutuhkan, jadi kami memulihkan level yang nyaman. Ternyata ada sekitar 10 peta yang dimuat, dan layanan tersebut bekerja dengan tenang.
Nikita: Perlu dicatat bahwa ada sisi lain dari masalah ini: kami mencoba menanggapi pesan pemain dengan segera. Semakin banyak pemain, semakin banyak permintaan dukungan yang mereka hasilkan. Kami ingin mempertahankan tingkat layanan yang tinggi, dan kami tidak siap untuk meningkatkan jumlah dukungan secepat itu. Kami memutuskan bahwa akan lebih bijaksana untuk melakukan segalanya dengan lebih lancar dan dapat diprediksi daripada mencapai puncaknya pada akhir pekan.
Kali ini Anda memutuskan untuk menghentikan kampanye iklan dan dengan demikian menyelamatkan situasi. Bagaimana Anda biasanya memecahkan masalah penskalaan dari sudut pandang teknis?
Nikita: Kami melakukan penskalaan dengan meluncurkan contoh layanan tambahan.
Dalam kasus ini, ini bukan Kubernetes dan tidak ada skala otomatis. Anda perlu memulai klon mesin virtual dalam mode semi-manual - Anda harus menunggu hingga setengah jam sementara VM dibuat ulang dari image. Setelah itu, Anda perlu memeriksa apakah VM berfungsi seperti yang diharapkan dan semua layanan di dalamnya telah meningkat: server LSP, pelari kode. Setelah itu, kami menyeimbangkan lalu lintas ke mesin baru dan terus memantau beban kerja dan kode status.
Tangkapan layar dari game SberCraft
Kesimpulan dan rencana
Bagaimana Anda mengatur ulang pekerjaan Anda setelah kejadian ini?
Nikita: Kami menemukan cara terbaik untuk merencanakan pemasaran: berapa banyak investasi yang diberikan berapa jumlah pendaftaran yang diberikan.
Di tingkat teknis, kami sangat yakin bahwa kami memerlukan cara baru untuk menskalakan layanan eksekusi kode, idealnya - skala otomatis.
Kami membuat layanan eksekusi kode tanpa status (terlepas dari sistem penyimpanan), membuat perubahan arsitektural kecil dan mengubah infrastruktur - kami memperkenalkan Kubernetes yang sama tempat layanan lain dijalankan.
Tetapi dalam kasus layanan eksekusi kode, skemanya lebih rumit - tidak semudah menerjemahkannya seperti yang lain. Kami masih memeriksa apakah semuanya berfungsi sebagaimana mestinya.
Saat ini, kode tersebut berjalan di DigitalOcean dan akan berjalan di cloud Azure. Di Kubernetes.
Di sana Anda menggunakan Kubernetes sebagai layanan (Azure Kubernetes Service)?
Nikita: Iya. Kami menggunakan Kubernetes sebagai layanan dan juga mempertimbangkan opsi Cloud Functions.
Bagaimana AWS Lambda?
Nikita: Ya, semua provider besar memilikinya. Mereka memungkinkan Anda membayar persis seperti yang Anda lakukan saat menjalankan kode. Namun ada batasan teknis dalam kemampuan lingkungan runtime.
Siapa yang bertanggung jawab atas infrastruktur sekarang?
Nikita: Kualifikasi dan kualifikasi saya sebagai back-end developer tidak selalu cukup, karena DevOps, SRE adalah area yang sangat luas. Dan membiarkan pengembang back-end yang bertugas untuk insiden tidak sepenuhnya benar. Oleh karena itu, di awal tahun, kami mendapatkan tim DevOps outsourcing - orang-orang yang sebelumnya bekerja dengan kami di bisnis lain.
Mengapa Anda mulai berkolaborasi dengan infrastruktur dan tim DevOps?
Nikita: Insiden dalam game adalah katalisator perubahan yang telah lama kami kenali, tetapi tidak memiliki kesempatan untuk diterapkan.
Perusahaan telah berkembang, kasus serupa mulai terjadi, yang menegaskan: ya, teman-teman, Anda membutuhkan teknisi DevOps, Anda perlu membuat infrastruktur yang akan lebih mudah untuk diskalakan.
Tugas sudah sepenuhnya diurus dua bulan lalu, saat kami menerima hibah dari Azure. Saat ini, banyak layanan telah dipindahkan ke cloud baru.
Mengapa Anda memutuskan untuk melakukan outsourcing daripada mempekerjakan orang?
Nikita: Dari pengalaman kami sendiri, kami tahu bahwa DevOps adalah area yang sulit untuk direkrut. Dan ini ternyata ada orang-orang yang terbukti, dan bentuk bekerja dengan kontraktor sangat nyaman bagi kami.
Nah, dan yang paling penting: kami memperoleh bukan hanya satu teknisi, tetapi seluruh tim yang memantau ketersediaan layanan sepanjang waktu dan siap menanggapi insiden sebelum ditemukan oleh pengguna.
Apakah tim DevOps menyiapkan semuanya dari awal atau menggunakan apa adanya, termasuk pemantauan?
Nikita: Kami mengambil jalur perpindahan. Kami memulai proyek baru di infrastruktur baru, memigrasikan layanan inti di sana, dan meninggalkan proyek di bawah dukungan di infrastruktur lama. Semuanya baru untuk proyek baru, termasuk pemantauan.
Keunikan transformasi adalah Anda harus memikirkan kembali arsitektur layanan. Kami mengerti bagaimana itu bisa diubah untuk mendapatkan kualitas baru.
Oleh karena itu, pekerjaan juga terjadi di sisi backend: kami akan memfaktor ulang kode, memperbarui arsitektur, tetapi dalam jumlah yang cukup moderat.
Jadi Anda sedang menyiapkan proses CI / CD baru sekarang?
Pertama-tama, kami melakukan restrukturisasi organisasi. Kami memiliki peran baru, sesuai dengan tim yang berdedikasi, dan cara komunikasi, pengaturan tugas telah berubah.
Kami memiliki proses CI / CD, mereka baru saja mulai beralih ke infrastruktur baru. Tentu saja, mereka membaik, tetapi mereka tidak berubah secara fundamental.
Tangkapan layar dari game SberCraft
Kesimpulan global apa yang telah Anda buat untuk diri Anda sendiri?
Pada berbagai tahap kehidupan proyek, semuanya berbeda. Enam bulan lalu, kami sendiri belum siap untuk tim DevOps. Tetapi sekarang kami dapat berkomunikasi dengan mereka secara lebih substansial. Kami memahami dengan jelas rasa sakit kami dan mendatangi orang-orang itu dengan daftar pertanyaan dan saran tentang bagaimana melakukan sesuatu. Ternyata itu adalah kolaborasi yang baik: bersama-sama kita membuat keputusan yang berkualitas tinggi dan beralasan.
Ada banyak pekerjaan di depan. Layanan eksekusi kode dalam proses migrasi, dan sebagai layanan kami yang paling kompleks, akan membutuhkan banyak keterlibatan. Untuk beberapa waktu, kami akan memiliki kedua versi layanan dalam produksi dan menyeimbangkan lalu lintas di antara keduanya. Saat kami memahami bahwa semuanya baik-baik saja, kami akan sepenuhnya beralih ke Azure.
, . , .
, , , .
21 ยซยป , .
:
โ ,
โ ,
โ ,
โ ,
โ .
Databricks, Mail.ru Cloud Solutions TangoMe.