Halo!
Sekitar dua tahun lalu, kolega saya, Maxim (max_posedon) menerbitkan sebuah artikel Wargaming Platform: Hello World , di mana ia "mencoba" (sebagaimana ia sendiri tunjuk) untuk menjelaskan apa itu Wargaming Platform. Saya dan kolega saya ingin terus berbagi informasi dan kali ini kami akan menggali lebih dalam - seperti yang disarankan oleh judul artikel, tentang distribusi.
Semua orang akrab dengan distribusi digital, kami menggunakannya secara teratur, kami telah melihat semuanya selama 20 tahun keberadaannya, jadi saya akan mengabaikan teori dan contoh pasar, dan saya akan berbicara lebih banyak tentang implementasi dan pengalaman spesifik.
Skema distribusi umum untuk Wargaming
Mari kita mulai dengan gambar: Anda dapat melihat komponen utama Wargaming Distribution System (WDS) dan konten Arus Data.
Gambar 1
Prosesnya dapat dijelaskan secara singkat sebagai berikut: studio game (Game Studio) mengunggah perakitan game berikutnya ke server WDS, yang, setelah pemrosesan yang diperlukan (lebih lanjut tentang ini di bagian "Di bawah tenda"), melalui saluran distribusi (komponen yang ditandai dengan warna biru) mendistribusikannya ke klien Aplikasi WGC.
WGC (Wargaming Game Center) adalah aplikasi klien desktop, sarana interaksi pengguna dengan Platform Wargaming, khususnya dengan sistem distribusi. WGC mengunduh pembaruan ke mesin pengguna dari sumber yang tersedia saat ini.
WDS memiliki tiga saluran distribusi utama :
- CDN β Content Delivery Network. CDN .
- Static Seeds β BitTorrent-, .
- p2p exchange β WGC ().
Ya, teknologi BitTorrent adalah jantung dari pengiriman pembaruan. Saya harus segera mengatakan bahwa pertukaran data p2p antara klien, secara absolut, saluran minimum dalam hal volume lalu lintas. Fungsi utamanya adalah untuk mempercepat pemuatan di jaringan lokal dengan klien WGC dalam jumlah besar (misalnya, kafe Internet) dan mengurangi beban pada antarmuka jaringan eksternal. Selain itu, penggunaan BitTorrent memudahkan untuk mengatur titik kehadiran di tempat yang diinginkan.
Saluran distribusi Static Seeds menarik dari perspektif sejarah. Lihatlah diagram batang di bawah ini: ini menunjukkan dinamika biaya minimum lalu lintas CDN untuk konsumen terbesar (yaitu grosir, harga terendah).
Gambar 2
Pada tahun 2010, pada awal World of Tanks, biaya lalu lintas satu gigabyte sekitar $ 0,2 untuk pesanan 10 PB atau lebih. Dengan pembaruan rutin game AAA dengan jutaan penonton, biaya lalu lintas ternyata cukup mengesankan. Kemampuan untuk dengan mudah menambahkan node Anda ke titik mana pun (dari sudut pandang geografi / penyedia) memungkinkan Anda untuk menarik volume lalu lintas yang nyata ke sana. Bergantung pada keberadaan CDN di satu titik atau lainnya, beban pada sistem selama rilis, volume rilis game tertentu, alat semacam itu memiliki efek ekonomi yang baik bahkan hingga hari ini.
Untuk membuat skema distribusi dasar sepenuhnya dapat dipahami, ada baiknya menjelaskan beberapa kata tentang komponen, yang pada Gambar 1 ditetapkan sebagai backend Sistem Distribusi Wargaming. Tugas utama komponen:
- menyiapkan pembaruan, memastikan jumlah minimum konten yang diunduh dan dipasang oleh klien;
- mendistribusikan pembaruan melalui saluran distribusi;
- memberi klien informasi untuk pembaruan.
Sekarang mari kita lihat sekilas opsi distribusi.
Kegunaan
Teknologi BitTorrent, dan khususnya implementasi libtorrent (berkat Arvid Norberg), "di luar kotak" memungkinkan Anda untuk mengimplementasikan dengan biaya minimal:
- retacker dan seed lokal - relevan untuk kelompok pengguna dan studio game;
- menghubungkan beberapa CDN - skalabilitas horizontal;
- faktor pembobotan untuk CDN yang berbeda - balancing, CDN "cadangan";
- pemeriksaan dan pemulihan integritas - file game dapat rusak karena kelalaian, aplikasi pembersih, antivirus, masalah dengan driver atau media fisik.
Terlepas dari libtorrent, tetapi juga tentang unduhan:
- Pramuat pembaruan. Studio game dapat menerbitkan pembaruan hanya untuk diunduh (tanpa instalasi): pada saat rilis versi baru, mereka akan diterapkan, pengguna akan mulai memainkan versi baru lebih awal.
- Preload balancing. Dengan volume pembaruan yang besar, Anda dapat secara merata "mencoreng" penerimaan awal pembaruan untuk mengurangi beban pada node distribusi dan memuluskan puncaknya.
Memasang / memperbarui game:
- Tambalan. Pengguna hanya mengunduh bagian permainan yang hilang, dikompresi dengan baik.
- DLC. Beberapa konten dapat dimuat secara opsional sesuai pilihan pengguna atau bergantung pada logika permainan.
- Jenis klien. Gim ini dapat memberi pengguna pilihan "jenis klien" mana yang akan diunduh (misalnya, World of Tanks: ada pilihan antara tekstur standar (SD) dan tekstur definisi tinggi (HD), yang memungkinkan pengguna yang tidak memiliki sistem tidak mendukung pengaturan grafis maksimum. ).
- Klien mini. Kemampuan untuk bermain hingga instalasi selesai, studio game memiliki kemampuan untuk menentukan kumpulan file minimum yang diperlukan untuk memulai permainan.
Lain:
- Menginstal redistributable.
- Menjalankan pemasang sewenang-wenang selama proses pemasangan / pencopotan pemasangan.
Dibawah tenda
Bagian & Tambalan
Permainan dapat dibagi menjadi beberapa bagian (parts) yang menentukan urutan instalasi tertentu. Ini memungkinkan studio game untuk:
- mengirimkan konten ke pengguna hanya untuk bahasa game yang dipilih;
- menerapkan bagian minimum yang diperlukan dari permainan untuk memulai permainan dan mengirimkannya terlebih dahulu;
- tunjuk beberapa bagian sebagai DLC dan izinkan game / pengguna untuk memintanya secara terpisah.
Untuk memasang bagian, satu atau lebih tambalan harus dikirim dan diterapkan. Pada intinya, tambalan adalah arsip 7z dengan codec LZMA2. Tingkat kompresi dapat diubah tergantung pada jenis konten game. Untuk menginstal game dari awal, patch harus berisi semua konten untuk bagian tertentu dari game tersebut. Jika ini adalah pembaruan, maka tambalan hanya berisi perbedaan yang diperlukan. Perbedaan ini dihitung file demi file menggunakan algoritme berikut:
Algoritme yang pertama adalah berbasis blok, dan yang kedua menyediakan kemampuan untuk menyalin bagian-bagian dengan panjang dan pengulangan acak. Bergantung pada sifat perubahan (penyisipan, penghapusan, penggantian), tempat di file tempat dibuat (awal, akhir, tengah), ukurannya, redundansi file, salah satu algoritme dapat sangat mengungguli yang lain, atau dalam hal ukuran file diff yang dihasilkan, atau dengan kecepatan aplikasinya di komputer pengguna. WDS memilih algoritma perbedaan biner yang optimal untuk kasus tertentu.
Torrent
Untuk mengunduh patch, file torrent disiapkan menurut versi, klien WGC menerima informasi yang diperlukan dari backend WDS dan memulai sesi torrent dengan torrent yang diperlukan.
Seeds adalah, seperti yang telah disebutkan secara tidak langsung, CDN (webseeds), Static Seeds (mesin yang disiapkan khusus dengan klien berbasis libtorrent), klien WGC itu sendiri, dan klien torrent apa pun dengan torrent yang diperlukan. Terima benih ini, sesi torrent dari sumber-sumber berikut:
Beberapa penyedia memblokir protokol BitTorrent itu sendiri atau mengunduh file * .torrent. Karena pengunduhan dari webseeds terjadi melalui HTTP, dan file * .torrent sendiri diunduh melalui HTTPS, pemblokiran seperti itu tidak penting bagi kami, permainan akan tetap dikirimkan. Dalam kasus terburuk, lalu lintas dari Benih Statis dan p2p akan hilang. Ada beberapa kasus di Amerika Serikat ketika penyedia meminta pemasangan sertifikatnya dan memfilternya, termasuk lalu lintas HTTPS (tidak terlalu bagus), menemukan file torrent di sana dan memblokirnya. Tetapi tiba-tiba mengubah ekstensi file torrent memungkinkannya untuk diunduh, yaitu filter hanya di tingkat nama konten.
WGC saat ini membangun hingga 50 koneksi saluran distribusi. Beberapa koneksi dapat dibuat pada CDN yang sama, yang memungkinkan pemanfaatan saluran yang lebih efisien antara node dan klien. Selain itu, CDN utama menggunakan algoritma kontrol kemacetan BBR , yang dianggap serakah dan menggunakan saluran dengan cukup baik. Konfigurasi ini menyediakan pemanfaatan bandwidth tertinggi untuk pengiriman game cepat, tetapi tentu saja kenyamanan menggunakan koneksi Internet untuk aplikasi lain mungkin terganggu selama pembaruan. Serangkaian pengujian konfigurasi alternatif saat ini sedang berlangsung, dan dalam waktu dekat kami dapat mengharapkan penurunan jumlah koneksi secara berkelanjutan dengan peningkatan kenyamanan, tetapi tanpa dampak nyata pada kecepatan pengiriman.
Untuk berjaga-jaga, di sini saya ingin menekankan sekali lagi bahwa aktivitas jaringan apa pun dapat memengaruhi kualitas lalu lintas untuk klien game yang sangat penting. Itulah sebabnya, saat game berjalan, WGC tidak melakukan operasi jaringan apa pun tanpa kebutuhan eksplisit dari klien game (misalnya, operasi otorisasi).
Menginstal pembaruan
Proses pengunduhan dan pembongkaran tambalan diatur secara paralel, dan terlihat seperti ini:
- Mulai mengunduh tambalan, ubah prioritas unduhan ke bagian dengan header arsip.
- Setelah menerima header penuh dari arsip, proses pembongkaran dimulai dan data yang diterima dari jaringan segera dibuka.
- Data yang dibongkar disimpan ke disk.
- Tambalan yang diunduh juga disimpan ke disk, karena tidak semua fragmen diperlukan untuk membuka kemasan pada saat diterima, dan ditambah untuk didistribusikan ke orang lain.
- Setelah diproses, file patch dapat ditinggalkan di disk atau segera dihapus tergantung pada konfigurasi yang diberikan oleh studio game.
Proses membongkar dan menerapkan perbedaan biner terjadi dalam proses terpisah, yang memungkinkan Anda untuk mengontrol sistem dan prioritas I / O-nya melalui OS. Di atas fungsionalitas ini, terdapat pengaturan "turbo" khusus yang akan mempercepat proses instalasi tetapi bersaing ketat dengan aplikasi lain untuk mendapatkan sumber daya. Secara default, WGC berjalan dalam mode sumber daya rendah, mengandalkan kenyamanan, tetapi pada instalasi pertama, WGC menjelaskan kepada pengguna bahwa dia punya pilihan.
Performa
Volume pembaruan
Meminimalkan jumlah data yang diunduh adalah salah satu tugas utama sistem kami. Berbeda dengan pendekatan Steam, di mana keleluasaan data yang diproses dari klien game adalah 1 MB, kami sering beroperasi dengan byte saat membuat perbedaan biner. Selain itu, blok byte ini dapat ditambahkan ke bagian mana pun dari file, atau dihapus darinya. Akibatnya, pembaruan versi terjadwal dari World of Tanks dan World of Warships biasanya memiliki volume 1-2 GB, sedangkan versi game yang sama yang diunduh di Steam memerlukan sekitar 5 GB untuk diunduh. World of Warships didistribusikan melalui Steam, jadi data ini diterima secara teratur, dan untuk World of Tanks data diambil dari unduhan uji khusus.
Ruang disk pengguna yang dibutuhkan
Untuk jumlah minimum data yang diunduh dan p2p, Anda harus membayar dengan ruang disk yang diperlukan untuk operasi penginstalan dan pembaruan klien. Saat ini, pengguna membutuhkan lebih banyak ruang daripada yang dibutuhkan klien game: buffer semacam itu bisa sampai setengah ukuran klien. Kami sedang berupaya mengurangi nilai ini, dan mungkin dalam waktu dekat dapat memperbaikinya dan tidak melebihi 2 GB, yang menjadi cukup dapat diterima mengingat ukuran game modern. Namun ada fitur penting lainnya: untuk mengupdate game (yang di dunia modern merupakan aktivitas biasa), buffer yang relatif kecil juga cukup memadai, yaitu sudah sekitar 4 GB untuk sebagian besar patch game. Pada saat yang sama, beberapa solusi ini memerlukan ruang disk dua kali lebih banyak dari yang dibutuhkan klien game.
Kami melakukan serangkaian pengukuran untuk membandingkan kecepatan instalasi klien World of Warships di WGC dan Steam pada kecepatan saluran jaringan yang sama. Saat menggunakan mode penginstalan WGC standar, kedua sistem menunjukkan hasil yang hampir sama (sejauh mungkin untuk merekam dalam eksperimen tersebut, bahkan dengan mempertimbangkan sistem terbersih, boot ulang reguler, dll.). Saat menggunakan "turbo", kenaikan rata-rata upah WGC berada dalam kisaran 5-7 persen dari waktu pemasangan penuh. Kita juga harus memperhitungkan fakta bahwa bandwidth antarmuka jaringan harus diremehkan untuk kedua sistem agar mendapatkan kondisi yang sama dan bandwidth yang kurang lebih stabil. Mempertimbangkan fakta bahwa WGC lebih memanfaatkan saluran jaringan (lihat bagian Torrent),tanpa batasan tambahan pada mesin kustom, kecepatan penginstalan awal game menjadi lebih tinggi.
Kata terakhir, atau apa yang tidak ada di sini
Platform Wargaming, dan khususnya sistem distribusi Wargaming, adalah sistem perangkat lunak besar dengan sejarah sepuluh tahun dan lusinan teknologi dan bahasa pemrograman yang berbeda. Pada artikel ini, kami hanya mengenal skema distribusi tingkat tinggi dan karakteristik utamanya. Arsitektur sistem, sebagian besar teknologi, proses pengembangan, rilis, operasi, nuansa geografis distribusi, aplikasi WGC itu sendiri dengan semua fungsi non-distribusinya, dan masih banyak lagi yang ditinggalkan dalam tanda kurung karena artikel "non-rubber". Ini hanya berarti saya menunggu pertanyaan tentang artikel dan terutama tentang apa yang tidak termasuk di dalamnya, di komentar. Kode bagus, semoga sukses semuanya!