Daptar eusi[Sumputkeun][Témbongkeun]
Instagram Feed mangrupikeun platform pikeun ngabagi sareng ngahubungkeun sareng jalma-jalma sareng hal-hal anu penting pikeun anjeun. Nalika anjeun muka Instagram atanapi nga-refresh feed anjeun, poto sareng pidéo anu kami pikir anjeun resep bakal nunjukkeun ka luhur.
Feed warta mangrupikeun kumpulan barang anu ngandung téks, gambar, atanapi pidéo anu diciptakeun ku éntitas sanés dina sistem anu ditargetkeun pikeun anjeun baca. Éta salawasna robih, sedengkeun organisasi sanés ngadamel tulisan énggal.
Dina postingan ieu, urang bakal ningali rarancang sistem feed Instagram. Ku kituna, hayu urang mimitian.
1. sarat
Kabutuhan fungsional
- Feed warta pamaké dijieun tina tulisan ti éntitas séjén dina sistem nu pamaké geus dituturkeun atawa dipikaresep ku.
- Téks, gambar, sareng video sadayana tiasa dipendakan dina tulisan.
- Eupan warta pamaké kudu diropéa kalawan postingan anyar dijieun ku batur.
Kriteria non-fungsi
- Nyiptakeun feed warta kedah lumangsung sacara real-time. Pamaké tungtung ngan kedah ngalaman reureuh 12 detik.
- Appending pos anyar: Ieu kudu nyokot teu leuwih ti 5 detik pikeun pos anyar muncul dina pamundut news feed sanggeus eta dikintunkeun ka sistem.
2. Estimasi Kapasitas
- Nepi ka Maret 2021, populasi sadunya ngan 7.8 miliar jalma. Éta nunjukkeun yén 21% tina populasi dunya nyaéta Facebook DAU (Pamaké Aktif Harian) sareng 32% nyaéta MAU Facebook (Pamaké Aktif Bulanan) (Pamaké Aktif Bulanan). Éta endah pisan.
- Hayu urang pura-pura sistem anu urang ngawangun gaduh 1 milyar DAU pikeun ngagampangkeun.
- Anggap hiji jalma nuturkeun 500 jalma atawa usaha dina Facebook. Grup atanapi halaman tiasa dianggap éntitas.
Diperkirakeun Lalu Lintas
Anggap yén hiji pangguna ngunduh feed warta rata-rata 10 kali unggal dinten. Janten éta sakitar 116K QPS sareng 1e10 pamundut unggal dinten.
Perkiraan Panyimpenan
Anggap urang mertahankeun 500 tulisan ti news feed unggal pamaké dina mémori rata-rata pikeun dimeunangkeun gancang, sarta unggal pos téh ukuranana 1KB. Janten 500 KB per pangguna, 500 TB kanggo sadaya DAU, sareng 5000 komputer kalayan masing-masing 100 GB RAM.
3. API pikeun Systems
userId (GUID): pamaké nu feed warta keur dipulut.
Widang di handap ieu sayogi dina parameter pilihan opsional:
- afterPostId (GUID): Kéngingkeun feed warta tina pos anu nuturkeun ieu. Lamun teu dieusian, meunang tulisan panganyarna.
- cacah (jumlah): jumlah maksimum tulisan nu unggal pamundut bisa balik. Backend netepkeun jumlah maksimum standar upami teu aya anu disayogikeun.
- excludeReplies (boolean): nyegah balesan teu kaasup dina feed warta.
- JSON balik ngandung daptar item feed warta.
4. Ngarancang Database
Entitas
- nu make
- entityId, nami, déskripsi, sareng timestamp sadayana mangrupikeun widang anu diperyogikeun.
- Widang di handap ieu diperlukeun: PostId, judul, téks, authorId, jeung timestamp.
- timestamp, url, jeung mediaId
hubungan
- Pamaké atawa Éntitas séjén bisa dituturkeun ku pamaké. (m:n)
- Pangarang-Pos: Boh pangguna sareng éntitas tiasa nyiptakeun tulisan. Anggap ngan Pamaké bisa nyieun Posts demi kesederhanaan. (1:n; authorId tiasa dipasang).
- Unggal postingan dibarengan ku sababaraha bentuk média. (1:n)
5. Desain Tingkat Tinggi
gawena undagi
Workflows
Produksi feed
Nalika Jay naroskeun aliran warta na, sistem bakal ngalakukeun ieu:
- Kéngingkeun KTP sadaya jalma sareng hal-hal anu diturutan ku Jay.
- Tulisan agrégat: dibéré ID éta, kéngingkeun tulisan anu paling anyar, populér, sareng relevan.
- Rengking tulisan dumasar kana relevansi sareng waktosna.
- Cache: simpen eupan anu diciptakeun sareng kirimkeun Jay 20 tulisan anu paling luhur.
- Nalika Jay réngsé maca 20 tulisan anu munggaran, pamundut anu sanés dikirimkeun pikeun nampi 20 tulisan anu salajengna.
Distribusi eupan
Anggap Jay nuturkeun Aayush sarta yén Aayush posting nanaon anyar. Feed warta Jay kedah diénggalan ku sistem:
- Kéngingkeun KTP pengikut Aayush.
- Tambihkeun tulisan énggal: Tambihkeun pos Aayush kana kolam renang feed warta para pengikut ID éta.
- Rengking tulisan dumasar kana relevansi sareng waktosna.
- Apdet cache tina pos ranking.
- Pengikut kudu dibere beja nalika tulisan anyar diterbitkeun.
komponén
Sambungan pamaké dijaga ku pangladén wéb.
Prosedur anu dituduhkeun di luhur dilaksanakeun ku pangladén aplikasi.
Cache sareng pangkalan data:
- pamaké / éntitas database Relational
- Pangkalan data hubungan (pos)
- Gambar / atribut video: Aayush storge
- Metadata database relational
jasa pribadi:
- Produksi feed
- Bewara eupan
6. Desain lengkep
Generasi pakan
Kipas-kaluar maca palaksanaan naif:
Masalah sareng palaksanaan beca ieu kalebet:
- Pamaké anu sajumlah réréncangan/pengikutna bakal perhatikeun kalambatan anu signifikan sabab urang kedah ngayak, ngagabung, sareng pangkat sajumlah ageung postingan.
- Lamun pamaké muka kaca maranéhanana, urang ngawangun timeline. Ieu tiasa sluggish sareng gaduh seueur latency.
- Unggal apdet status bakal ngahasilkeun apdet feed pikeun sadaya pengikut pikeun apdet langsung. Ieu tiasa nyababkeun telat anu signifikan dina Layanan Generasi Newsfeed kami.
Urang tiasa tos ngahasilkeun kronologi sareng simpen dina mémori pikeun ningkatkeun efisiensi.
Produksi Offline (Tulisan Fan-out)
Urang tiasa gaduh server khusus anu terus-terusan nyiptakeun sareng nyimpen newsfeed pangguna dina mémori. Urang ngan ukur tiasa nganteurkeun feed warta ti lokasi anu tos didamel, disimpen iraha waé pangguna hoyong.
Sabaraha item feed kudu eupan a pamaké disimpen dina mémori?
Adaptasikeun dumasar kana kabiasaan pamakean anjeun.
Naha urang kedah ngadamel newsfeed pikeun sadaya pangguna (sareng ngajaga dina mémori)?
- Pikeun jalma anu henteu sering log in.
- cache basis LRU mangrupakeun pendekatan basajan.
- Solusi anu langkung saé nyaéta pikeun terang kumaha pangguna asup. Iraha éta? Poé minggu anu anjeun nyarioskeun?
Publikasi eupan
Fanout mangrupikeun prosés ngirim tulisan ka sadaya pengikut anjeun.
Bacaan Fanout (tarik)
Lamun anjeun menta news feed, sistem narima pamundut dibaca. Fanout read ngirimkeun pamundut baca ka sadaya pengikut anjeun, naroskeun aranjeunna maca eusina.
Naros:
- Prosedur nulisna murah.
- Nalika maca data, langkung gampang ngagunakeun sababaraha algoritma agrégasi.
kontra:
- Pikeun jalma anu seueur pengikut, operasi maca rada mahal.
- Pamaké moal ningali data seger dugi aranjeunna narik éta.
- Nalika urang narik pikeun dipulut postingan panganyarna dina rutin, hese neangan cadence tarikan ditangtoskeun, sarta paling requests tarikan bakal balik hiji jawaban kosong, wasting sumberdaya.
Tulisan Fanout (dorong)
A pamundut nulis dijieun pikeun sistem mun anjeun ngirim pos anyar. Paménta nulis dikirim ka sadaya pengikut anjeun pikeun ngapdet newsfeedna nganggo fanout write.
keur
- Prosés maca téh murah.
con
- Pikeun pamaké kalawan jutaan pengikut, nu nulis prosedurna mahal teuing.
Pangkat Feed
Gantina ngan mesen feed sacara kronologis, algoritma peringkat ayeuna ogé nyobian ngajamin yén barang-barang anu langkung relevan diutamakeun.
- Pilih faktor anu tiasa ngabantosan anjeun mutuskeun relevansi hiji item feed, sapertos jumlah likes, koméntar, sareng dibagikeun, waktos item terakhir diropéa upami artikel ngandung poto atanapi video, sareng sajabana.
- Itung skor dumasar kana karakteristik.
- Anggo skor pikeun pangkat tulisan.
Nyetél KPIs kawas ingetan pamaké, panghasilan ad, jeung saterusna ningali kumaha éféktif sistem ranking urang.
kacindekan
Sanaos kanyataan yén Instagram atanapi bisnis indungna Facebook mangrupikeun perusahaan anu ageung, éta gaduh pamahaman anu langkung saé rarancang sistem.
Kuring nyobian sesah kuring pikeun nyayogikeun anjeun kasimpulan tingkat luhur tina feed Instagram.
Abdi ngarepkeun éta mangpaat sareng anjeun bakal tiasa dianggo kalayan saé.
Leave a Reply