Aplikasi online skala ageung parantos lami dina dua dekade sateuacana. Inovasi ieu parantos ngarobih persepsi urang ngeunaan pamekaran parangkat lunak. Facebook, Instagram, sareng Twitter, contona, sadayana platform anu tiasa skala.
Sistem ieu kedah diwangun pikeun ngatur volume lalu lintas sareng data anu ageung sabab milyaran jalma ngagunakeunana dina waktos anu sami di sakumna dunya. Ieu nalika rarancang sistem asup kana gambar.
Prosés ngadegkeun arsitéktur, interfaces, jeung data pikeun sistem nu meets kriteria tangtu katelah desain sistem. Ngaliwatan sistem anu kohesif sareng efisien, desain sistem nyumponan tungtutan bisnis atanapi organisasi anjeun.
Sakali perusahaan atanapi organisasi anjeun parantos netepkeun kriteriana, anjeun tiasa ngamimitian ngalebetkeun kana desain sistem fisik anu nyumponan tungtutan konsumén anjeun.
Naha anjeun milih nganggo pamekaran anu dipesen, solusi komérsial, atanapi kombinasi dua éta, kumaha anjeun mendesain sistem anjeun bakal nangtukeun kumaha anjeun ngawangun éta.
Kami bakal ningali detil ngeunaan desain sistem garis waktos Twitter dina tulisan ieu, lengkep sareng tutorial. Hayu urang ngamimitian.
Lengkah 1: Outline kasus pamakéan & konstrain
Paké bisi
- Pamaké unggah tweet.
- Ladenan ngirimkeun bewara push sareng email ka pengikut tweets.
- Garis waktos pangguna ditingali (aktivitas ti pangguna)
- Pangguna ningali garis waktos bumi (aktivitas ti jalma anu diturutan ku pangguna)
- Kecap konci anu searched ku pamaké.
- jasa nu bener diaksés.
Di luar wengkuan
- Tweets dikirim ka Twitter Firehose jeung aliran séjén ngagunakeun jasa ieu.
- Ladenan ngahapus tweets dumasar kana setélan pisibilitas pangguna.
- Upami pangguna henteu ogé nuturkeun jalma anu diwaler, sumputkeun waleranana.
- Titénan pilihan 'sumputkeun retweet'.
- Analytics
Konstrain & asumsi
Asumsi Nagara
- Lalu lintas henteu rata.
- Ieu kedah basajan pikeun ngirim tweet a.
- Kacuali anjeun gaduh jutaan pengikut, ngirim tweet ka sadaya pengikut anjeun kedah gancang.
- Aya 100 juta pangguna aktip.
- 15 milyar tweet unggal bulan atanapi 500 juta tweets unggal dinten
- Unggal tweet gaduh fanout tina 10 pangiriman rata-rata.
- Saban poé, fanout ngirimkeun 5 milyar tweets.
- Fanout ngirimkeun 150 milyar tweets unggal bulan.
- 250 milyar pamundut maca bulanan
- 10 miliar pilarian bulanan
Gariswanci
- Garis waktosna kedah gampang pikeun napigasi.
- Twitter langkung seueur ngeunaan maca tibatan nyerat.
- Optimalkeun pikeun maca tweet gancang
- Konsumsi tweet nyéépkeun waktos.
neangan
- Prosés pilarian kedah gancang.
- Éta waktos-consuming pikeun milarian.
Ngitung pamakean
Ukuran unggal tweet:
- 8 bait tweet id
- 32 bait pamaké-id
- 140 bait téks
- média - rata-rata 10 KB
- Total: ~10 KB
Unggal bulan, 150 TB eusi tweet seger dihasilkeun.
- * 500 juta tweet unggal dinten * 30 dinten per bulan * 10 KB per tweet
- Dina tilu taun, aya 5.4 PB eusi tweet seger.
Aya 100,000 pamundut dibaca unggal detik.
- * (400 requests per detik / 1 milyar requests per bulan) 250 milyar requests maca unggal bulan
Aya 6,000 tweets unggal detik.
- * (400 requests per detik / 1 miliar requests per bulan) 15 miliar tweets unggal bulan
Dina fanout, 60 rébu tweets dikirim unggal detik.
- Fanout ngirimkeun 150 milyar tweets unggal bulan * (400 requests per detik / 1 milyar requests per bulan).
4,000 pamundut inpormasi unggal detik
- * (400 requests per detik / 1 miliar requests per bulan) 10 miliar pilarian unggal bulan
Sababaraha konversi mangpaat
- Unggal bulan, 2.5 juta detik lulus.
- 2.5 juta requests per bulan dina 1 pamundut per detik
- 100 juta requests per bulan x 40 requests per detik
- 1 milyar requests per bulan = 400 requests per detik
Lengkah 2: diagram tingkat luhur
Lengkah 3: Ngajelaskeun komponén inti
Urang bisa nyimpen tweets pamaké sorangan pikeun populate timeline pamaké (aktivitas ti pamaké) dina database relational lamun aranjeunna ngalebetkeun tweet a. Langkung sesah ngirim tweet sareng ngembangkeun timeline bumi (aktivitas ti individu anu dituturkeun ku pangguna).
A database relational has bakal overwhelmed ku fanning kaluar tweets ka sadaya pengikut (60 sarébu tweets dikirimkeun unggal detik). Urang sigana bakal hoyong nganggo panyimpen data anu gancang-gancang sapertos database NoSQL atanapi Memory Cache.
Maca 1 MB sacara berurutan tina mémori butuh sakitar 250 mikrodetik, tapi maca tina SSD butuh 4 kali langkung lami, sareng maca tina disk nyandak 80 kali langkung lami.
Toko Obyék tiasa dianggo pikeun nyimpen data sapertos gambar sareng pidéo.
- Web Server, anu bertindak salaku proxy sabalikna, nampi tweet ti Klién.
- Paménta dikirim ka server Tulis API ku Web Server.
- API Tulis nyimpen tweet kana database SQL dina timeline pamaké.
Service Fan-Out dikontak ku Tulis API, sarta eta ngalaksanakeun tugas handap.
- Manggihan pengikut pamaké dina Cache Mémori ku querying Service Grafik pamaké.
- Dina Cache Mémori, tweetna disimpen dina garis waktu asal pengikut pangguna.
- 1,000 pengikut = 1,000 lookups na inserts = O (n) operasi.
- Tweet kasebut disimpen dina Search Index Service pikeun milarian gancang.
- Toko Obyék dipaké pikeun nyimpen média.
- Ngirimkeun panggeuing push ka pengikut ngalangkungan Layanan Bewara.
- Pikeun ngirimkeun béwara asynchronously, éta ngagunakeun antrian.
Urang tiasa ngagunakeun daptar Redis asli sareng struktur ieu upami Cache Mémori kami nyaéta Redis:
Garis waktu asal pangguna bakal diénggalan ku tweet énggal, anu bakal disimpen dina Cache Mémori. Kami bakal ngagunakeun REST API umum di handap ieu:
Garis waktos pangguna ditingali ku pangguna.
- Pangladén Wéb nampi pamundut garis waktos pangguna ti Klién.
- Paménta dikirim ka server Baca API ku Web Server.
- The Read API queries SQL Database pikeun timeframe pamaké.
API REST bakal tiasa dianggo sami sareng garis waktos bumi, iwal yén sadaya tweets asalna ti pangguna tinimbang jalma anu aranjeunna tuturkeun.
Pamaké milarian kecap konci:
- Server Wéb nampi pamundut milarian ti Klién.
- Paménta dikirim ka server Search API ku Web Server.
Lengkah 4: Twitter timeline
Nyiptakeun timeline mangrupikeun tugas anu sesah. A timeline generating server nu numbu ka web atawa aplikasi server diperlukeun.
Unggal waktos pangguna asup, ladenan timeline ngajaga lagu tweets pang anyarna ti pangguna dina tabel pengikut sareng ngapdet atanapi nyegerkeun garis waktos pangguna.
Kami henteu nerapkeun naon waé sistem réngking di dieu; Gantina, urang nganggap yén luhureun 5 tweets ti pengikut pamaké urang dibere dina timeline dina urutan waktu kreasi. Urang tiasa ngajaga cutoff refresh 50-tweet. Kami masih ngeureunkeun nyegerkeun atanapi ngawangun garis waktos saatos ambangna ngahontal dugi ka pangguna nga-refresh halaman.
Latensi tinggi sareng masalah kinerja bakal asalna tina nyiptakeun feed pangguna langsung. Sabalikna, nyiptakeun aliran offline anu tiasa disayogikeun langsung mangrupikeun cara anu pangsaéna pikeun ningkatkeun kinerja. Ngajalankeun server timeline dedicated nu ping server aplikasi dina rutin pikeun refresh feed dumasar kana waktu eta dijieun.
Algoritma ranking kedah merhatikeun sinyal anu penting sareng masihan beurat pikeun ngajamin yén garis waktos pangguna henteu didominasi ku bahan tina hiji atanapi langkung akun anu aranjeunna turutan.
Langkung tepatna, urang tiasa milih fitur anu aya hubunganana sareng relevansi naon waé item feed, sapertos jumlah likes, koméntar, dibagikeun, sareng waktos update. Masing-masing kriteria ieu kedah dianggo pikeun meunteun tweet, teras pangkat éta kedah dianggo pikeun nunjukkeun tweets dina timeline.
Naha urang kudu terus waspada pamaké lamun eusi anyar pikeun newsfeed maranéhanana sadia? Pamaké tiasa mendakan mangpaat pikeun diwaspadaan nalika data énggal sayogi. Dina alat sélulér, kumaha oge, nalika pamakean data rada mahal, éta tiasa ngabuang rubakpita.
Hasilna, urang tiasa milih henteu nyorong data kana alat sélulér sareng ngijinkeun pangguna "Tarik pikeun Refresh" kanggo postingan énggal.
Lengkah 5: Desain skala
Potensi bottleneck nyaéta Layanan Fanout. Pangguna Twitter anu gaduh jutaan pengikut kedah ngantosan sababaraha menit pikeun tweetsna kaluar. Ieu tiasa nyababkeun balapan kalayan balesan kana tweet, anu urang tiasa nyingkahan ku mesen ulang tweets dina waktos ngalayanan.
Urang ogé bisa nyegah nyebarkeun tweets ti jalma kalawan sajumlah badag pengikut. Sabalikna, urang tiasa milarian tweet ti individu anu diturutan pisan, ngahijikeun hasil pamilarian sareng hasil timeline bumi pangguna, teras nyusun ulang tweets dina waktos ngalayanan.
Perbaikan tambahan kalebet:
- Tetep ngan sababaraha ratus tweets dina Cache Mémori pikeun tiap timeline imah.
- Dina Cache Mémori, ngan ukur inpormasi timeline bumi pangguna aktip anu disimpen.
- Urang tiasa ngarekonstruksikeun kronologi tina Database SQL upami pangguna henteu aktip dina 30 dinten sateuacana.
- Pikeun milari saha pangguna éta, paké Layanan Grafik Pamaké.
- Tambahkeun tweets kana Cache Mémori ku retrieving aranjeunna tina Database SQL.
- Layanan Info Tweet ngan ukur tiasa ngahémat tweet sabulan.
- Dina Service Info pamaké, ngan pamaké aktip disimpen.
- Pikeun ngajaga latency low, Search Cluster paling dipikaresep kedah ngajaga tweets dina mémori.
kacindekan
Sanaos Twitter mangrupikeun organisasi anu ageung, éta ngagaduhan anu langkung saé pamahaman desain sistem. Kuring ngalakukeun anu pangsaéna pikeun masihan anjeun tinjauan tingkat luhur ngeunaan garis waktos Twitter.
Abdi ngarepkeun anjeun nampi inpormasi anu mangpaat tina éta sareng tiasa dianggo kalayan saé.
Leave a Reply