Daftar Isi[Bersembunyi][Menunjukkan]
Umpan Instagram adalah platform untuk berbagi dan terhubung dengan orang-orang dan hal-hal yang penting bagi Anda. Saat Anda membuka Instagram atau menyegarkan umpan Anda, foto dan video yang menurut kami menarik bagi Anda akan ditampilkan di bagian atas.
Umpan berita adalah kumpulan item yang berisi teks, gambar, atau video yang dibuat oleh entitas lain dalam sistem yang ditargetkan untuk Anda baca. Itu selalu berubah, sementara organisasi lain membuat posting baru.
Dalam posting ini, kita akan melihat dari dekat desain sistem feed Instagram. Jadi, mari kita mulai.
1. Persyaratan
Kebutuhan fungsional
- Umpan berita pengguna dibuat dari posting dari entitas lain dalam sistem yang telah diikuti atau diminati pengguna.
- Teks, gambar, dan video semuanya dapat ditemukan di postingan.
- Umpan berita pengguna harus diperbarui dengan posting baru yang dibuat oleh orang lain.
Kriteria non-fungsional
- Pembuatan umpan berita harus dilakukan secara real-time. Pengguna akhir seharusnya hanya mengalami penundaan selama 12 detik.
- Menambahkan postingan baru: Diperlukan waktu tidak lebih dari 5 detik agar postingan baru muncul di permintaan umpan berita setelah dikirimkan ke sistem.
2. Estimasi Kapasitas
- Per Maret 2021, populasi dunia hanya 7.8 miliar orang. Hal ini menunjukkan bahwa 21% dari populasi dunia adalah Facebook DAU (Pengguna Aktif Harian) dan 32% adalah Facebook MAU (Pengguna Aktif Bulanan) (Pengguna Aktif Bulanan). Itu mengagumkan.
- Anggap saja sistem yang sedang kita bangun memiliki 1 miliar DAU untuk mempermudah segalanya.
- Asumsikan seseorang mengikuti 500 orang atau bisnis di Facebook. Grup atau halaman mungkin dianggap sebagai entitas.
Perkiraan Lalu Lintas
Asumsikan bahwa satu pengguna mengunduh umpan berita rata-rata 10 kali setiap hari. Jadi kira-kira 116 ribu QPS dan 1e10 permintaan setiap hari.
Perkiraan Penyimpanan
Asumsikan kami mempertahankan 500 posting dari umpan berita setiap pengguna di memori rata-rata untuk pengambilan cepat, dan setiap posting berukuran 1KB. Jadi 500 KB per pengguna, 500 TB untuk semua DAU, dan 5000 komputer dengan masing-masing 100 GB RAM.
3. API untuk Sistem
userId (GUID): pengguna yang umpan beritanya sedang diambil.
Bidang berikut tersedia di parameter opsi opsional:
- afterPostId (GUID): dapatkan umpan berita dari pos berikut ini. Jika tidak ditentukan, dapatkan posting terbaru.
- count (angka): jumlah posting maksimum yang dapat dikembalikan oleh setiap permintaan. Backend menetapkan jumlah maksimum default jika tidak ada yang diberikan.
- kecualikanReplies (boolean): mencegah balasan disertakan dalam umpan berita.
- JSON yang dikembalikan berisi daftar item umpan berita.
4. Merancang Basis Data
entitas
- Pengguna
- entityId, name, description, dan timestamp semuanya wajib diisi.
- Bidang berikut wajib diisi: PostId, judul, teks, authorId, dan stempel waktu.
- stempel waktu, url, dan mediaId
Hubungan
- Pengguna atau Entitas lain dapat diikuti oleh pengguna. (M N)
- Penulis-Posting: Baik pengguna dan entitas dapat membuat postingan. Asumsikan bahwa hanya Pengguna yang dapat membuat Postingan demi kesederhanaan. (1:n; authorId dapat disematkan).
- Setiap posting disertai dengan beberapa bentuk media. (1:n)
5. Desain Tingkat Tinggi
Arsitektur
Workflows
Produksi pakan
Saat Jay meminta aliran beritanya, sistem akan melakukan hal berikut:
- Ambil ID semua orang dan hal-hal yang diikuti Jay.
- Agregat posting: dengan ID tersebut, dapatkan posting terbaru, populer, dan relevan.
- Beri peringkat posting sesuai dengan relevansi dan waktunya.
- Cache: simpan feed yang dibuat dan kirimkan 20 postingan teratas kepada Jay.
- Ketika Jay selesai membaca 20 posting pertama, permintaan lain dikirim untuk mendapatkan 20 posting berikutnya.
Distribusi pakan
Asumsikan Jay mengikuti Aayush dan Aayush memposting sesuatu yang baru. Umpan berita Jay perlu diperbarui oleh sistem:
- Ambil ID pengikut Aayush.
- Tambahkan artikel baru: Tambahkan pos Aayush ke kumpulan umpan berita dari pengikut ID tersebut.
- Beri peringkat posting sesuai dengan relevansi dan waktunya.
- Perbarui cache posting peringkat.
- Pengikut harus diberitahu ketika posting baru diterbitkan.
Komponen
Koneksi pengguna dikelola oleh server web.
Prosedur yang ditunjukkan di atas dijalankan oleh server aplikasi.
Tembolok dan basis data:
- Pengguna/entitas basis data relasional
- Basis data relasional (pos)
- Atribut gambar/video: Penyimpanan Aayush
- Metadata basis data relasional
Layanan yang dipersonalisasi:
- Produksi pakan
- Pemberitahuan umpan
6. Desain Rinci
Generasi pakan
Implementasi naif baca fan-out:
Masalah dengan implementasi ceroboh ini meliputi:
- Pengguna dengan banyak teman/pengikut akan melihat penurunan yang signifikan karena kami harus menyaring, menggabungkan, dan memberi peringkat pada sejumlah besar posting.
- Saat pengguna memuat halaman mereka, kami membuat garis waktu. Ini bisa lamban dan memiliki banyak latensi.
- Setiap pembaruan status akan menghasilkan pembaruan umpan untuk semua pengikut untuk pembaruan langsung. Ini dapat menyebabkan penundaan yang signifikan dalam Layanan Pembuatan Umpan Berita kami.
Kami dapat membuat kronologi sebelumnya dan menyimpannya di memori untuk meningkatkan efisiensi.
Produksi Offline (Penulisan Fan-out)
Kami dapat memiliki server khusus yang terus-menerus membuat dan menyimpan umpan berita pengguna di memori. Kami hanya dapat mengirimkan umpan berita dari lokasi yang telah dibuat sebelumnya dan disimpan kapan pun pengguna menginginkannya.
Berapa banyak item feed yang harus disimpan feed pengguna di memori?
Beradaptasi berdasarkan perilaku penggunaan Anda.
Haruskah kita membuat umpan berita untuk semua pengguna (dan menyimpannya di memori)?
- Untuk orang yang tidak sering login.
- Caching berbasis LRU adalah pendekatan sederhana.
- Solusi yang lebih baik adalah mencari tahu bagaimana pengguna masuk. Kapan? Hari kerja apa yang kamu bicarakan?
Publikasi umpan
Fanout adalah proses mengirim kiriman ke semua pengikut Anda.
Fanout baca (tarik)
Saat Anda meminta umpan berita, sistem menerima permintaan baca. Fanout read mengirimkan permintaan baca ke semua pengikut Anda, meminta mereka untuk membaca konten mereka.
Pro:
- Prosedur penulisannya tidak mahal.
- Saat membaca data, lebih mudah menggunakan berbagai algoritme agregasi.
Cons:
- Untuk seseorang dengan banyak pengikut, operasi membaca agak mahal.
- Pengguna tidak akan melihat data baru sampai mereka menariknya.
- Ketika kami menarik untuk mengambil posting terbaru secara teratur, sulit untuk menemukan irama tarik yang tepat, dan sebagian besar permintaan tarik akan mengembalikan jawaban kosong, membuang-buang sumber daya.
Tulis fanout (dorong)
Permintaan tulis dibuat ke sistem saat Anda mengirim posting baru. Permintaan penulisan dikirim ke semua pengikut Anda untuk memperbarui umpan berita mereka menggunakan penulisan fanout.
per
- Proses membaca tidak mahal.
dengan
- Untuk pengguna dengan jutaan pengikut, menulis prosedurnya terlalu mahal.
Pangkat Umpan
Alih-alih hanya mengurutkan feed secara kronologis, algoritme peringkat hari ini juga berupaya memastikan bahwa item dengan relevansi yang lebih besar akan diprioritaskan.
- Pilih faktor yang dapat membantu Anda memutuskan relevansi item umpan, seperti jumlah suka, komentar, dan bagikan, waktu item terakhir diperbarui jika artikel berisi foto atau video, dan sebagainya.
- Hitung skor berdasarkan karakteristik.
- Gunakan skor untuk menentukan peringkat posting.
Siapkan KPI seperti retensi pengguna, pendapatan iklan, dan sebagainya untuk melihat seberapa efektif sistem peringkat kami.
Kesimpulan
Terlepas dari kenyataan bahwa Instagram atau bisnis induknya Facebook adalah perusahaan besar, ia memiliki pemahaman yang lebih baik tentang desain sistem.
Saya berusaha sekuat tenaga untuk memberi Anda ringkasan tingkat tinggi dari umpan Instagram.
Semoga bermanfaat dan bisa dimanfaatkan dengan baik.
Tinggalkan Balasan