Node, Edges, Arahan
Permintaan Sebagai Langkah di Graf
Setiap komponen yang disentuh oleh permintaan adalah sebuah node: klien, resolver DNS, tepi CDN, reverse proxy, replika backend, database, cache.
Setiap koneksi antara dua node adalah sebuah edge yang diarahkan: permintaan mengalir ke depan, respons mengalir kembali. Edge maju mewakili koneksi TCP terbuka plus protokol di atasnya.
Permintaan tunggal adalah sebuah jalur melalui graf ini. Total pekerjaan sistem untuk menjawab permintaan sama dengan jumlah pekerjaan di setiap node, plus latensi setiap edge.
Mengapa peduli? Setelah Anda menggambar graf, properti yang tidak terlihat dalam kode akan muncul:
- Jarak lompatan: jumlah edge dalam jalur. Setiap lompatan menambahkan latensi (putaran jaringan + pengolahan node). Jarak lompatan lebih sedikit = lantai lebih rendah pada latensi.
- In-degree: jumlah edge yang mengarah ke dalam sebuah node. In-degree tinggi berarti node menerima permintaan dari banyak sumber & harus skala atau melindungi diri sendiri.
- Out-degree: jumlah edge yang mengarah keluar dari sebuah node. Out-degree tinggi berarti node tergantung pada banyak downstream & memiliki banyak cara untuk gagal.
- Vertex potong: sebuah node tunggal yang penghapusanannya menghubungkan graf. Sebuah reverse proxy tanpa rekan adalah vertex potong; menghapusnya menghapus akses ke semua asalnya.
Di Mana Traffic Konsentrasi
Fan-In = Konsentrasi
Derajat masuk dari sebuah node = jumlah sisipan yang mengarah ke dalamnya. Di grafik permintaan, derajat masuk = jumlah sumber upstream yang mengirim permintaan.
Polanya fan-in: banyak klien -> satu CDN; banyak sisipan CDN -> beberapa proxy asal; banyak proxy -> lebih sedikit replika backend; banyak backend -> basis data tunggal.
Konsentrasi penting karena node dengan derajat masuk tertinggi melihat beban agregat terbanyak. Basis data di ujung rantai mungkin melihat query dari setiap permintaan aktif di sistem keseluruhan, meskipun tidak ada pengguna tunggal yang menghasilkannya.
Fan-Out = Ketergantungan
Derajat keluar dari sebuah node = jumlah sisipan yang mengarah keluar dari node tersebut. Derajat keluar tinggi berarti banyak ketergantungan turunan.
Sebuah backend yang memanggil basis data, dua cache, tiga API eksternal, dan antrian memiliki derajat keluar 7. Kemungkinan keberhasilannya sekitar produk dari kemungkinan keberhasilan setiap turunan (jika semua diperlukan untuk tanggapan sukses).
0,999 ^ 7 ≈ 0,993: sebuah backend dengan 7 turunan yang masing-masing memiliki keandalan 99,9% hanya bisa mencapai keandalan sekitar 99,3% sendiri, bahkan tanpa bug sendiri.
Turunkan derajat keluar dengan: caching hasil turunan, membuat turunan non-kritis opsional (degradasi halus), paralelisasi apa yang bisa paralel.
Asimetri
Fan-in mengkonsentrasikan beban; fan-out menggandakan risiko. Grafik yang baik mengurangi kedua di node yang paling berpengaruh.
Basis data (fan-in tertinggi): cache secara agresif untuk mengurangi beban. Replika baca untuk menyebar fan-in ke beberapa node.
Service orchestrator (fan-out tertinggi): breaker sirkuit per ketergantungan, degradasi halus, bulkheads.
Sebuah Node yang Ditetapkan Membeli Fleksibilitas
Indirect = Menambahkan Node Antara
Tanpa proxy, grafiknya adalah: client -> backend. Klien harus mengetahui alamat backend. Memindahkan backend memerlukan pengaturan kembali klien (via DNS atau konfigurasi). Ini adalah ikatan ketat.
Dengan proxy, grafik menjadi: client -> proxy -> backend. Klien hanya tahu tentang proxy. Memindahkan backend memerlukan pengaturan kembali konfigurasi upstream proxy, bukan klien.
Operasi grafik: tambahkan node di sepanjang tepi yang ada. Tepi baru client -> proxy stabil; tepi baru proxy -> backend sekarang menjadi tanggung jawab tim.
Bacaan geometris: indikasi menambahkan lapisan yang memisahkan perubahan upstream dari perubahan downstream. Setiap lapisan tepi dapat direnggangkan secara independen.
Biaya Indikasi
Setiap lapisan menambahkan:
- Satu hop latensi (menghubungkan edge dari klien ke proxy)
- Satu titik potong vertex lagi di jalur (proxy itu sendiri)
- Satu tempat lagi di mana kesalahan konfigurasi dapat terjadi
Manfaatnya (rewire, skala, pelindung, menghentikan TLS, mendistribusikan beban) biasanya lebih unggul dari biaya untuk sistem apa pun yang tidak trivial. Tapi ada batas: setiap lapisan indikasi menambahkan satu hop lagi & satu calon SPOF.
Folklore rule: masalah apa pun dapat diatasi dengan menambahkan lapisan indikasi (kecuali masalah terlalu banyak lapisan indikasi).
Baca Arsitektur sebagai Grafik
Sinetis
Kamu sekarang bisa membaca arsitektur sistem sebagai grafik: hitung hop, identifikasi vertex potong, ukur konsentrasi fan-in, hitung langit ketersediaan dari fan-out, & evaluasi perdagangan indikasi.
Terapkan semua empat.
Jasa baru ini memiliki arsitektur ini: klien -> CDN -> reverse proxy (2 replika) -> lapisan backend (8 replika) -> { DB utama, cluster cache (3 node), API eksternal }.
Catatan Tambahan
Catatan Tambahan
Geometri pelajaran ini merangkum kembali pelajaran utama Proxies & Origins sebagai analisis graf berarah.
Catatan teman berikutnya dalam kursus ini, geometry_of_stateless_horizontal_scaling, mengambil matematika replika dari pelajaran skala utama dan menghasilkan kurva antrian, Hukum Little, dan lutut geometri penggunaan 80%.
Well done.