Aplikasi dalam talian berskala besar telah berkembang pesat dalam dua dekad sebelumnya. Inovasi ini telah mengubah persepsi kami terhadap pembangunan perisian. Facebook, Instagram dan Twitter, sebagai contoh, adalah semua platform boleh skala.
Sistem ini mesti dibina untuk mengurus jumlah trafik dan data yang besar kerana berbilion orang menggunakannya pada masa yang sama di seluruh dunia. Inilah masanya reka bentuk sistem memasuki gambar.
Proses mewujudkan seni bina, antara muka dan data untuk sistem yang memenuhi kriteria tertentu dikenali sebagai reka bentuk sistem. Melalui sistem yang padu dan cekap, reka bentuk sistem memenuhi permintaan perniagaan atau organisasi anda.
Setelah syarikat atau organisasi anda menentukan kriterianya, anda boleh mula memasukkannya ke dalam reka bentuk sistem fizikal yang memenuhi permintaan pengguna anda.
Sama ada anda memilih untuk menggunakan pembangunan yang dipesan lebih dahulu, penyelesaian komersial atau gabungan kedua-duanya, cara anda mereka bentuk sistem anda akan menentukan cara anda membinanya.
Kami akan melihat secara terperinci reka bentuk sistem garis masa Twitter dalam siaran ini, lengkap dengan tutorial. Mari kita mulakan.
Langkah 1: Gariskan kes penggunaan & kekangan
Gunakan kes
- Seorang pengguna memuat naik tweet.
- Perkhidmatan ini menghantar pemberitahuan tolak dan e-mel kepada pengikut tweet.
- Garis masa pengguna dilihat (aktiviti daripada pengguna)
- Pengguna melihat garis masa rumah (aktiviti daripada orang yang diikuti oleh pengguna)
- Kata kunci dicari oleh pengguna.
- Perkhidmatan ini benar-benar boleh diakses.
Di luar skop
- Tweet dihantar ke Twitter Firehose dan aliran lain menggunakan perkhidmatan ini.
- Perkhidmatan ini mengalih keluar tweet berdasarkan tetapan keterlihatan pengguna.
- Jika pengguna tidak turut mengikuti orang yang dibalas, sembunyikan balasan itu.
- Perhatikan pilihan 'sembunyikan tweet semula'.
- Analisis
Kekangan & andaian
Andaian Negeri
- Trafik tidak tersebar sama rata.
- Ia sepatutnya mudah untuk menghantar tweet.
- Melainkan anda mempunyai berjuta-juta pengikut, menghantar tweet kepada semua pengikut anda hendaklah pantas.
- Terdapat 100 juta pengguna aktif.
- 15 bilion tweet setiap bulan atau 500 juta tweet setiap hari
- Setiap tweet mempunyai fanoout sebanyak 10 penghantaran secara purata.
- Setiap hari, fanout menghantar 5 bilion tweet.
- Fanout menyampaikan 150 bilion tweet setiap bulan.
- 250 bilion permintaan baca bulanan
- 10 bilion carian bulanan
Timeline
- Garis masa harus mudah dinavigasi.
- Twitter lebih kepada membaca daripada menulis.
- Optimumkan untuk membaca tweet pantas
- Penggunaan tweet memakan masa.
Cari
- Proses carian harus cepat.
- Ia memakan masa untuk mencari.
Kira penggunaan
Saiz setiap tweet:
- id tweet 8 bait
- 32 bait id pengguna
- 140 bait teks
- media – purata 10 KB
- Jumlah: ~10 KB
Setiap bulan, 150 TB kandungan tweet baharu dijana.
- * 500 juta tweet setiap hari * 30 hari sebulan * 10 KB setiap tweet
- Dalam tiga tahun, terdapat 5.4 PB kandungan tweet baharu.
Terdapat 100,000 permintaan baca setiap saat.
- * (400 permintaan sesaat / 1 bilion permintaan sebulan) 250 bilion permintaan baca setiap bulan
Terdapat 6,000 tweet setiap saat.
- * (400 permintaan sesaat / 1 bilion permintaan sebulan) 15 bilion tweet setiap bulan
Pada fanout, 60 ribu tweet dihantar setiap saat.
- Fanout menyampaikan 150 bilion tweet setiap bulan* (400 permintaan sesaat / 1 bilion permintaan sebulan).
4,000 permintaan untuk maklumat setiap saat
- * (400 permintaan sesaat / 1 bilion permintaan sebulan) 10 bilion carian setiap bulan
Beberapa penukaran yang berguna
- Setiap bulan, 2.5 juta saat berlalu.
- 2.5 juta permintaan sebulan pada 1 permintaan sesaat
- 100 juta permintaan sebulan x 40 permintaan sesaat
- 1 bilion permintaan sebulan = 400 permintaan sesaat
Langkah 2: Gambar rajah aras tinggi
Langkah 3: Menerangkan komponen teras
Kami boleh menyimpan tweet pengguna sendiri untuk mengisi garis masa pengguna (aktiviti daripada pengguna) dalam pangkalan data hubungan jika mereka menghantar tweet. Lebih sukar untuk menghantar tweet dan membangunkan garis masa rumah (aktiviti daripada individu yang diikuti pengguna).
Pangkalan data perhubungan biasa akan terharu dengan menyebarkan tweet kepada semua pengikut (60 ribu tweet dihantar setiap saat). Kami mungkin mahu menggunakan storan data tulis pantas seperti pangkalan data NoSQL atau Memory Cache.
Membaca 1 MB secara berurutan dari memori mengambil masa kira-kira 250 mikrosaat, tetapi membaca dari SSD mengambil masa 4 kali lebih lama dan membaca dari cakera mengambil masa 80 kali lebih lama.
Stor Objek boleh digunakan untuk menyimpan data seperti imej dan video.
- Pelayan Web, yang bertindak sebagai proksi terbalik, menerima tweet daripada Pelanggan.
- Permintaan dihantar ke pelayan API Tulis oleh Pelayan Web.
- API Tulis menyimpan tweet ke pangkalan data SQL dalam garis masa pengguna.
Perkhidmatan Fan-Out dihubungi oleh Write API, dan ia melaksanakan tugas berikut.
- Mencari pengikut pengguna dalam Cache Memori dengan menanyakan Perkhidmatan Graf Pengguna.
- Pada Cache Memori, tweet disimpan dalam garis masa utama pengikut pengguna.
- 1,000 pengikut = 1,000 carian dan sisipan = operasi O(n).
- Tweet itu disimpan dalam Perkhidmatan Indeks Carian untuk carian pantas.
- Kedai Objek digunakan untuk menyimpan media.
- Menghantar makluman tolak kepada pengikut melalui Perkhidmatan Pemberitahuan.
- Untuk menghantar makluman secara tidak segerak, ia menggunakan Baris Gilir.
Kami boleh menggunakan senarai Redis asli dengan struktur berikut jika Cache Memori kami ialah Redis:
Garis masa rumah pengguna akan dikemas kini dengan tweet baharu, yang akan disimpan dalam Cache Memori. Kami akan menggunakan API REST awam berikut:
Garis masa pengguna dilihat oleh pengguna.
- Pelayan Web menerima permintaan garis masa pengguna daripada Klien.
- Permintaan dihantar ke pelayan API Baca oleh Pelayan Web.
- API Baca menanyakan Pangkalan Data SQL untuk jangka masa pengguna.
API REST akan berfungsi sama dengan garis masa rumah, dengan pengecualian bahawa semua tweet akan berasal daripada pengguna dan bukannya orang yang mereka ikuti.
Seorang pengguna mencari kata kunci:
- Pelayan Web menerima permintaan carian daripada Klien.
- Permintaan dihantar ke pelayan API Carian oleh Pelayan Web.
Langkah 4: Garis masa Twitter
Penciptaan garis masa adalah tugas yang sukar. Pelayan penjanaan garis masa yang memaut ke web atau pelayan aplikasi diperlukan.
Setiap kali pengguna log masuk, perkhidmatan garis masa mengekalkan jejak tweet terbaru daripada pengguna dalam jadual pengikut dan mengemas kini atau memuat semula garis masa pengguna.
Kami tidak melaksanakan apa-apa jenis sistem kedudukan di sini; sebaliknya, kami menganggap bahawa 5 tweet teratas daripada pengikut pengguna dibentangkan dalam garis masa mengikut urutan masa penciptaan. Kami boleh mengekalkan potongan muat semula 50 tweet. Kami masih berhenti memuat semula atau membina garis masa selepas ambang itu dicapai sehingga pengguna memuat semula halaman.
Kebimbangan kependaman dan prestasi tinggi akan datang daripada penciptaan suapan pengguna secara langsung. Sebaliknya, mencipta strim luar talian yang boleh dipersembahkan serta-merta ialah cara terbaik untuk meningkatkan prestasi. Jalankan pelayan garis masa khusus yang ping pelayan aplikasi secara tetap untuk menyegarkan suapan berdasarkan masa ia dibuat.
Algoritma kedudukan harus mengambil kira isyarat penting dan memberikan wajaran untuk menjamin bahawa garis masa pengguna tidak dikuasai oleh bahan daripada satu atau lebih akaun yang mereka ikuti.
Lebih tepat lagi, kita boleh memilih ciri yang berkaitan dengan perkaitan mana-mana item suapan, seperti bilangan suka, ulasan, perkongsian dan masa kemas kini. Setiap kriteria ini harus digunakan untuk menilai tweet, dan kemudian kedudukan itu harus digunakan untuk menunjukkan tweet pada garis masa.
Perlukah kita sentiasa memaklumkan pengguna apabila kandungan baharu untuk suapan berita mereka tersedia? Pengguna boleh mendapati ia berfaedah untuk dimaklumkan apabila data baharu tersedia. Pada peranti mudah alih, bagaimanapun, apabila penggunaan data agak mahal, ia boleh membazirkan lebar jalur.
Akibatnya, kami boleh memilih untuk tidak menolak data ke peranti mudah alih dan sebaliknya membenarkan pengguna "Tarik untuk Muat Semula" untuk siaran baharu.
Langkah 5: Reka bentuk penskalaan
Kesesakan yang berpotensi ialah Perkhidmatan Fanout. Pengguna Twitter dengan berjuta-juta pengikut perlu menunggu beberapa minit untuk tweet mereka dilancarkan. Ini mungkin menyebabkan perlumbaan dengan balasan kepada tweet, yang boleh kita elakkan dengan memesan semula tweet pada masa siaran.
Kami juga boleh menghalang penyebaran tweet daripada orang yang mempunyai bilangan pengikut yang ramai. Sebaliknya, kami mungkin melakukan carian untuk tweet daripada individu yang sangat diikuti, menyepadukan hasil carian dengan hasil garis masa utama pengguna, dan kemudian menyusun semula tweet pada masa siaran.
Penambahbaikan tambahan termasuk:
- Simpan hanya beberapa ratus tweet dalam Cache Memori untuk setiap garis masa rumah.
- Dalam Cache Memori, hanya maklumat garis masa rumah pengguna aktif yang disimpan.
- Kami boleh membina semula kronologi daripada Pangkalan Data SQL jika pengguna tidak aktif dalam 30 hari sebelumnya.
- Untuk mengetahui siapa pengguna itu, gunakan Perkhidmatan Graf Pengguna.
- Tambahkan tweet ke Cache Memori dengan mendapatkannya dari Pangkalan Data SQL.
- Perkhidmatan Maklumat Tweet hanya boleh menyimpan tweet bernilai sebulan.
- Dalam Perkhidmatan Maklumat Pengguna, hanya pengguna aktif disimpan.
- Untuk mengekalkan kependaman rendah, Kluster Carian berkemungkinan besar perlu mengekalkan tweet dalam ingatan.
Kesimpulan
Walaupun Twitter adalah organisasi yang besar, ia mempunyai yang lebih baik pemahaman tentang reka bentuk sistem. Saya melakukan yang terbaik untuk memberikan anda gambaran keseluruhan peringkat tinggi tentang garis masa Twitter.
Saya harap anda mendapat maklumat yang berguna daripadanya dan boleh menggunakannya dengan sebaiknya.
Sila tinggalkan balasan anda