Memberikan Keandalan Platform Skala Besar - Blog Roblox

Senin, 01 Agustus 2022

Menjalankan platform terdistribusi yang skalabel menuntut komitmen terhadap keandalan, untuk memastikan pelanggan memiliki apa yang mereka butuhkan saat mereka membutuhkannya. Ketergantungan bisa agak rumit, terutama dengan platform sebesar Roblox. Membangun layanan yang andal berarti bahwa, terlepas dari kompleksitas dan status dependensi, layanan apa pun yang diberikan tidak akan terganggu (mis tersedia), akan beroperasi bebas bug (yaitu tinggi kualitas) dan tanpa kesalahan (mis toleransi kesalahan).

Mengapa Keandalan Itu Penting

Tim Identitas Akun kami berkomitmen untuk mencapai keandalan yang lebih tinggi, karena layanan kepatuhan yang kami bangun adalah komponen inti platform. Kepatuhan yang rusak dapat memiliki konsekuensi yang parah. Biaya pemblokiran operasi alami Roblox sangat tinggi, dengan sumber daya tambahan yang diperlukan untuk memulihkan setelah kegagalan dan pengalaman pengguna yang melemah.

Pendekatan khas untuk keandalan berfokus terutama pada ketersediaan, tetapi dalam beberapa kasus istilah dicampur dan disalahgunakan. Sebagian besar pengukuran ketersediaan hanya menilai apakah layanan aktif dan berjalan, sementara aspek seperti toleransi partisi dan konsistensi terkadang dilupakan atau disalahpahami.

Sesuai dengan teorema CAP, setiap sistem terdistribusi hanya dapat menjamin dua dari tiga aspek ini, sehingga layanan kepatuhan kami mengorbankan beberapa konsistensi agar sangat tersedia dan toleran terhadap partisi. Namun demikian, layanan kami mengorbankan sedikit dan menemukan mekanisme untuk mencapai konsistensi yang baik dengan perubahan arsitektur yang wajar yang dijelaskan di bawah ini.

Proses untuk mencapai keandalan yang lebih tinggi bersifat iteratif, dengan pengukuran ketat yang sesuai dengan pekerjaan terus menerus untuk mencegah, menemukan, mendeteksi, dan memperbaiki cacat sebelum insiden terjadi. Tim kami mengidentifikasi nilai kuat dalam praktik berikut:

  • Pengukuran yang benar – Bangun observabilitas penuh seputar bagaimana kualitas disampaikan kepada pelanggan dan bagaimana ketergantungan memberikan kualitas kepada kami.
  • Antisipasi proaktif – Lakukan aktivitas seperti tinjauan arsitektur dan penilaian risiko ketergantungan.
  • Prioritaskan koreksi – Berikan perhatian yang lebih tinggi pada resolusi laporan insiden untuk layanan dan dependensi yang terkait dengan layanan kami.

Membangun keandalan yang lebih tinggi menuntut budaya kualitas. Tim kami telah berinvestasi dalam pengembangan berbasis kinerja dan mengetahui bahwa keberhasilan suatu proses bergantung pada penerapannya. Tim mengadopsi proses ini secara penuh dan menerapkan praktik sebagai standar. Diagram berikut menyoroti komponen proses:

Kekuatan Pengukuran yang Benar

Sebelum menyelam lebih dalam ke metrik, ada klarifikasi singkat yang harus dilakukan terkait pengukuran Tingkat Layanan.

  • SLO (Tujuan Tingkat Layanan) adalah tujuan keandalan yang ditargetkan oleh tim kami (yaitu 99,999%).
  • SLI (Indikator Tingkat Layanan) adalah keandalan yang dicapai dalam jangka waktu tertentu (yaitu 99,975% Februari lalu).
  • SLA (Perjanjian Tingkat Layanan) adalah keandalan yang disepakati untuk disampaikan dan diharapkan oleh konsumen kami pada jangka waktu tertentu (yaitu 99,99% seminggu).

SLI harus mencerminkan ketersediaan (tidak ada respons yang tidak ditangani atau hilang), toleransi kegagalan (tidak ada kesalahan layanan) dan kualitas yang dicapai (tidak ada kesalahan yang tidak terduga). Oleh karena itu, kami mendefinisikan SLI kami sebagai “Rasio Sukses” dari respons yang berhasil dibandingkan dengan total permintaan yang dikirim ke layanan. Tanggapan yang berhasil adalah permintaan yang dikirim dalam waktu dan bentuk, artinya tidak konektivitas, layanan atau kesalahan tak terduga terjadi.

SLI atau Rasio Sukses ini dikumpulkan dari sudut pandang konsumen (yaitu, klien). Tujuannya adalah untuk mengukur pengalaman end-to-end yang sebenarnya disampaikan kepada konsumen kami sehingga kami merasa yakin SLA terpenuhi. Tidak melakukannya akan menciptakan rasa keandalan yang salah yang mengabaikan semua masalah infrastruktur untuk terhubung dengan klien kami. Serupa dengan SLI konsumen, kami mengumpulkan SLI ketergantungan untuk melacak potensi risiko apa pun. Dalam praktiknya, semua ketergantungan SLA harus selaras dengan layanan SLA dan ada ketergantungan langsung dengan mereka. Kegagalan satu berarti kegagalan semua. Kami juga melacak dan melaporkan metrik dari layanan itu sendiri (yaitu, server) tetapi ini bukan sumber praktis untuk keandalan tinggi.

Selain SLI, setiap build mengumpulkan metrik kualitas yang dilaporkan oleh alur kerja CI kami. Praktik ini membantu untuk menegakkan gerbang kualitas (yaitu, cakupan kode) dan melaporkan metrik bermakna lainnya, seperti kepatuhan standar pengkodean dan analisis kode statis. Topik ini sebelumnya dibahas dalam artikel lain, Membangun Layanan Mikro yang Didorong oleh Kinerja. Ketaatan yang cermat terhadap kualitas bertambah ketika berbicara tentang keandalan, karena semakin banyak kita berinvestasi dalam mencapai skor yang sangat baik, semakin yakin kita bahwa sistem tidak akan gagal selama kondisi buruk.

Tim kami memiliki dua dasbor. One memberikan semua visibilitas ke SLI Konsumen dan SLI Ketergantungan. Yang kedua menunjukkan semua metrik kualitas. Kami sedang berupaya menggabungkan semuanya menjadi satu dasbor, sehingga semua aspek yang kami pedulikan terkonsolidasi dan siap untuk dilaporkan dalam jangka waktu tertentu.

Antisipasi Kegagalan

Sedang mengerjakan Ulasan Arsitektur adalah bagian mendasar dari menjadi dapat diandalkan. Pertama, kami menentukan apakah ada redundansi dan apakah layanan memiliki sarana untuk bertahan saat dependensi turun. Di luar ide replikasi biasa, sebagian besar layanan kami menerapkan teknik hidrasi cache ganda yang ditingkatkan, strategi pemulihan ganda (seperti antrean lokal failover), atau strategi kehilangan data (seperti dukungan transaksional). Topik-topik ini cukup luas untuk menjamin entri blog lain, tetapi pada akhirnya rekomendasi terbaik adalah menerapkan ide-ide yang mempertimbangkan skenario bencana dan meminimalkan penalti kinerja apa pun.

Aspek penting lainnya yang harus diantisipasi adalah apa saja yang dapat meningkatkan konektivitas. Itu berarti menjadi agresif tentang latensi rendah untuk klien dan mempersiapkan mereka untuk lalu lintas yang sangat tinggi menggunakan teknik kontrol-cache, sidecars, dan kebijakan berkinerja untuk batas waktu, pemutus sirkuit, dan percobaan ulang. Praktik ini berlaku untuk klien mana pun termasuk cache, penyimpanan, antrean, dan klien yang saling bergantung di HTTP dan gRPC. Ini juga berarti meningkatkan sinyal yang sehat dari layanan dan memahami bahwa health check memainkan peran penting dalam semua orkestrasi container. Sebagian besar layanan kami memberikan sinyal yang lebih baik untuk degradasi sebagai bagian dari umpan balik health check dan memverifikasi semua komponen penting berfungsi sebelum mengirim sinyal yang sehat.

Memecah layanan menjadi bagian-bagian kritis dan non-kritis telah terbukti berguna untuk berfokus pada fungsionalitas yang paling penting. Kami dulu memiliki endpoint khusus admin di layanan yang sama, dan meskipun tidak sering digunakan, endpoint tersebut memengaruhi metrik latensi keseluruhan. Memindahkan mereka ke layanan mereka sendiri memengaruhi setiap metrik ke arah yang positif.

Penilaian Risiko Ketergantungan adalah alat penting untuk mengidentifikasi potensi masalah dengan dependensi. Ini berarti kami mengidentifikasi dependensi dengan SLI rendah dan meminta penyelarasan SLA. Dependensi tersebut memerlukan perhatian khusus selama langkah integrasi sehingga kami memberikan waktu ekstra untuk melakukan benchmark dan menguji apakah dependensi baru cukup matang untuk rencana kami. Salah satu contoh bagus adalah adopsi awal yang kami miliki untuk Roblox Storage-as-a-Service. Integrasi dengan layanan ini memerlukan pengajuan tiket bug dan rapat sinkronisasi berkala untuk mengomunikasikan temuan dan umpan balik. Semua pekerjaan ini menggunakan tag “reliability” sehingga kami dapat dengan cepat mengidentifikasi sumber dan prioritasnya. Karakterisasi sering terjadi sampai kita memiliki keyakinan bahwa ketergantungan baru sudah siap untuk kita. Pekerjaan ekstra ini membantu menarik ketergantungan ke tingkat keandalan yang kami harapkan untuk mewujudkan tindakan bersama untuk tujuan bersama.

Bawa Struktur ke Kekacauan

Tidak pernah diinginkan untuk memiliki insiden. Tetapi ketika itu terjadi, ada informasi yang bermakna untuk dikumpulkan dan dipelajari agar lebih dapat diandalkan. Tim kami memiliki laporan insiden tim yang dibuat di atas dan di luar laporan umum di seluruh perusahaan, jadi kami fokus pada semua insiden terlepas dari skala dampaknya. Kami menyebutkan akar masalahnya dan memprioritaskan semua pekerjaan untuk menguranginya di masa mendatang. Sebagai bagian dari laporan ini, kami memanggil tim lain untuk memperbaiki insiden ketergantungan dengan prioritas tinggi, menindaklanjuti dengan resolusi yang tepat, meninjau kembali, dan mencari pola yang mungkin berlaku bagi kami.

Tim menghasilkan Laporan Keandalan Bulanan per Layanan yang mencakup semua SLI yang dijelaskan di sini, tiket apa pun yang kami buka karena keandalan dan kemungkinan insiden yang terkait dengan layanan. Kami sangat terbiasa membuat laporan ini sehingga langkah alami berikutnya adalah mengotomatiskan ekstraksinya. Melakukan aktivitas berkala ini penting, dan ini adalah pengingat bahwa keandalan terus dilacak dan dipertimbangkan dalam pengembangan kami.

Instrumentasi kami mencakup metrik khusus dan peringatan yang ditingkatkan sehingga kami membuka halaman sesegera mungkin ketika masalah yang diketahui dan yang diharapkan terjadi. Semua peringatan, termasuk positif palsu, ditinjau setiap minggu. Pada titik ini, memoles semua dokumentasi adalah penting sehingga konsumen kami tahu apa yang diharapkan ketika peringatan dipicu dan ketika kesalahan terjadi, dan kemudian semua orang tahu apa yang harus dilakukan (misalnya, pedoman dan pedoman integrasi diselaraskan dan sering diperbarui).

Akhirnya, adopsi kualitas dalam budaya kita adalah faktor yang paling kritis dan menentukan dalam mencapai keandalan yang lebih tinggi. Kita dapat mengamati bagaimana praktik-praktik ini diterapkan pada pekerjaan kita sehari-hari sudah membuahkan hasil. Tim kami terobsesi dengan keandalan dan ini adalah pencapaian terpenting kami. Kami telah meningkatkan kesadaran kami tentang dampak yang dapat ditimbulkan oleh cacat potensial dan kapan cacat tersebut dapat terjadi. Layanan yang menerapkan praktik ini secara konsisten mencapai SLO dan SLA mereka. Laporan keandalan yang membantu kami melacak semua pekerjaan yang telah kami lakukan adalah bukti pekerjaan yang telah dilakukan tim kami, dan menjadi pelajaran berharga untuk menginformasikan dan memengaruhi tim lain. Inilah bagaimana budaya keandalan menyentuh semua komponen platform kami.

Jalan menuju keandalan yang lebih tinggi bukanlah jalan yang mudah, tetapi perlu jika Anda ingin membangun platform tepercaya yang menata ulang bagaimana orang-orang berkumpul.


Alberto adalah Insinyur Perangkat Lunak Utama di tim Identitas Akun di Roblox. Dia sudah lama berkecimpung di industri game, dengan penghargaan pada banyak judul game AAA dan platform media sosial dengan fokus kuat pada arsitektur yang sangat skalabel. Sekarang dia membantu Roblox mencapai pertumbuhan dan kedewasaan dengan menerapkan praktik pengembangan terbaik.

Label:

Postingan Sebelumnya
Theme V11