Aplikasi online skala gedhe wis suwe banget sajrone rong dekade sadurunge. Inovasi kasebut wis ngowahi persepsi kita babagan pangembangan piranti lunak. Facebook, Instagram, lan Twitter, umpamane, kabeh platform sing bisa diukur.
Sistem iki kudu dibangun kanggo ngatur volume lalu lintas lan data sing akeh amarga milyaran wong nggunakake ing wektu sing padha ing saindenging jagad. Iki nalika desain sistem lumebu ing gambar.
Proses nggawe arsitektur, antarmuka, lan data kanggo sistem sing cocog karo kritéria tartamtu dikenal minangka desain sistem. Liwat sistem sing kohesif lan efisien, desain sistem nyukupi panjaluk bisnis utawa organisasi sampeyan.
Sawise perusahaan utawa organisasi sampeyan nemtokake kritéria, sampeyan bisa miwiti nggabungake menyang desain sistem fisik sing cocog karo panjaluk konsumen.
Apa sampeyan milih kanggo nggunakake pembangunan bespoke, solusi komersial, utawa kombinasi saka loro, carane sampeyan ngrancang sistem bakal nemtokake carane mbangun.
Kita bakal ndeleng rinci babagan desain sistem garis wektu Twitter ing kirim iki, lengkap karo tutorial. Ayo dadi miwiti.
Langkah 1: Njelasake kasus panggunaan & watesan
Gunakake kasus
- Pangguna ngunggah tweet.
- Layanan ngirim kabar push lan email menyang pandherekipun tweets.
- Garis wektu pangguna dideleng (aktivitas saka pangguna)
- Pangguna ndeleng garis wektu ngarep (aktivitas saka wong sing dituruti)
- Tembung kunci digoleki dening pangguna.
- Layanan kasebut pancen bisa diakses.
Metu saka ruang lingkup
- Tweets dikirim menyang Twitter Firehose lan stream liyane nggunakake layanan iki.
- Layanan kasebut mbusak tweets adhedhasar setelan visibilitas pangguna.
- Yen pangguna uga ora ngetutake wong sing dijawab, ndhelikake balesan kasebut.
- Mirsani opsi 'ndhelikake retweet'.
- Analytics
Watesan & asumsi
Asumsi Negara
- Lalu lintas ora kasebar merata.
- Sampeyan kudu gampang ngirim tweet.
- Kajaba sampeyan duwe jutaan pengikut, ngirim tweet menyang kabeh pengikut sampeyan kudu cepet.
- Ana 100 yuta pangguna aktif.
- 15 milyar tweets saben sasi utawa 500 yuta tweets saben dina
- Saben tweet duwe fanout 10 pangiriman rata-rata.
- Saben dina, fanout ngirim 5 milyar tweets.
- Fanout ngirim 150 milyar tweets saben wulan.
- 250 milyar panjaluk maca saben wulan
- 10 milyar telusuran saben wulan
timeline
- Garis wektu kudu gampang dilayari.
- Twitter luwih akeh babagan maca tinimbang nulis.
- Optimalake kanggo maca tweet kanthi cepet
- Konsumsi tweet mbutuhake wektu.
search
- Proses panelusuran kudu cepet.
- Iku wektu-akeh kanggo nggoleki.
Ngitung panggunaan
Ukuran saben tweet:
- 8 byte tweet id
- 32 bita user-id
- 140 bita teks
- media - rata-rata 10 KB
- Total: ~10 KB
Saben wulan, 150 TB isi tweet anyar digawe.
- * 500 yuta tweet saben dina * 30 dina saben wulan * 10 KB saben tweet
- Ing telung taun, wis ana 5.4 PB isi tweet anyar.
Ana 100,000 panjalukan maca saben detik.
- * (400 panjaluk per detik / 1 milyar panjaluk saben wulan) 250 milyar panjaluk maca saben wulan
Ana 6,000 tweet saben detik.
- * (400 panjaluk per detik / 1 milyar panjaluk saben wulan) 15 milyar tweet saben wulan
Ing fanout, 60 ewu tweets dikirim saben detik.
- Fanout ngirimake 150 milyar tweet saben wulan * (400 panjaluk per detik / 1 milyar panjaluk saben wulan).
4,000 panjalukan kanggo informasi saben detik
- * (400 panjaluk per detik / 1 milyar panjaluk saben wulan) 10 milyar telusuran saben wulan
Sawetara konversi migunani
- Saben wulan, 2.5 yuta detik liwati.
- 2.5 yuta panjalukan saben wulan kanthi 1 panjaluk saben detik
- 100 yuta panjalukan saben sasi x 40 panjalukan saben detik
- 1 milyar panjalukan saben sasi = 400 panjalukan saben detik
Langkah 2: Diagram tingkat dhuwur
Langkah 3: Nerangake komponen inti
Kita bisa nyimpen tweets pangguna dhewe kanggo ngisi timeline pangguna (kegiatan saka pangguna) ing basis data relasional yen ngirim tweet. Luwih angel ngirim tweet lan ngembangake garis wektu ngarep (kegiatan saka individu sing dituruti pangguna).
Basis data relasional sing khas bakal kepunjulen kanthi ngetokake tweets menyang kabeh pengikut (60 ewu tweets dikirim saben detik). Kita bisa uga pengin nggunakake panyimpenan data kanthi cepet kaya database NoSQL utawa Memory Cache.
Maca 1 MB kanthi urutan saka memori njupuk kira-kira 250 microseconds, nanging maca saka SSD njupuk 4 kaping dawa, lan maca saka disk njupuk 80 kaping dawa.
Toko Obyek bisa digunakake kanggo nyimpen data kayata gambar lan video.
- Server Web, sing tumindak minangka proxy mbalikke, nampa tweet saka Klien.
- Panjaluk kasebut dikirim menyang server API Tulis dening Server Web.
- API Tulis nyimpen tweet menyang database SQL ing timeline pangguna.
Layanan Fan-Out dikontak dening Write API, lan nindakake tugas ing ngisor iki.
- Temokake pandherekipun pangguna ing Cache Memori kanthi takon Layanan Grafik Pengguna.
- Ing Cache Memori, tweet kasebut disimpen ing garis wektu ngarep para pengikut pangguna.
- 1,000 pandherekipun = 1,000 goleki lan sisipan = O(n) operasi.
- Tweet kasebut disimpen ing Layanan Indeks Panelusuran kanggo nggoleki kanthi cepet.
- Obyek Store digunakake kanggo nyimpen media.
- Ngirim tandha push menyang pandherekipun liwat Layanan Notifikasi.
- Kanggo ngirim tandha ora sinkron, nggunakake Antrian.
Kita bisa nggunakake dhaptar Redis asli kanthi struktur ing ngisor iki yen Cache Memori yaiku Redis:
Garis wektu ngarep pangguna bakal dianyari karo tweet anyar, sing bakal disimpen ing Cache Memori. Kita bakal nggunakake REST API umum ing ngisor iki:
Garis wektu pangguna dideleng dening pangguna.
- Server Web nampa panjalukan garis wektu pangguna saka Klien.
- Panjaluk kasebut dikirim menyang server API Waca dening Server Web.
- API Waca pitakon Database SQL kanggo jangka wektu pangguna.
API REST bakal bisa digunakake kanthi cara sing padha karo garis wektu ngarep, kajaba kabeh tweet bakal asale saka pangguna tinimbang wong sing padha tindakake.
Pangguna nggoleki tembung kunci:
- Server Web nampa panjalukan telusuran saka Klien.
- Panjaluk kasebut dikirim menyang server API Panelusuran dening Server Web.
Langkah 4: Timeline Twitter
Nggawe timeline minangka tugas sing angel. Server ngasilake timeline sing nyambung menyang server web utawa aplikasi dibutuhake.
Saben pangguna mlebu, layanan timeline njaga trek tweets paling anyar saka pangguna ing tabel pengikut lan nganyari utawa refresh timeline pangguna.
Kita ora ngleksanakake sistem peringkat ing kene; tinimbang, kita nganggep yen 5 tweets paling dhuwur saka para pengikut pangguna ditampilake ing garis wektu miturut urutan wektu nggawe. Kita bisa njaga cutoff refresh 50-tweet. Kita isih mandheg nyegerake utawa nggawe garis wektu sawise ambang kasebut tekan nganti pangguna refresh kaca.
Keprigelan latensi lan kinerja dhuwur bakal teka saka nggawe feed pangguna langsung. Nanging, nggawe stream offline sing bisa ditampilake langsung minangka cara paling apik kanggo nambah kinerja. Mbukak server timeline darmabakti sing ping server aplikasi ing rutin kanggo refresh feed adhedhasar wektu iku digawe.
Algoritma peringkat kudu nimbang sinyal penting lan menehi bobot kanggo njamin manawa garis wektu pangguna ora didominasi materi saka siji utawa luwih akun sing dituruti.
Luwih tepate, kita bisa milih fitur sing ana gandhengane karo relevansi item feed apa wae, kayata jumlah seneng, komentar, enggo bareng, lan wektu nganyari. Saben kritéria kasebut kudu digunakake kanggo menehi rating tweet, banjur pangkat kasebut kudu digunakake kanggo nuduhake tweets ing timeline.
Apa kita kudu tansah menehi tandha marang pangguna nalika isi anyar kanggo newsfeed kasedhiya? Pangguna bisa nemokake migunani yen diwenehi tandha yen data anyar kasedhiya. Nanging ing piranti seluler, nalika nggunakake data cukup larang, bisa mbuang bandwidth.
Akibaté, kita bisa milih ora push data menyang piranti seluler lan malah ngidini kedhaftar kanggo "Narik kanggo Refresh" kanggo posting anyar.
Langkah 5: Desain skala
Kemacetan potensial yaiku Layanan Fanout. Pangguna Twitter kanthi mayuta-yuta pengikut kudu ngenteni sawetara menit supaya tweets diluncurake. Iki bisa nyebabake balapan kanthi balesan ing tweet kasebut, sing bisa dihindari kanthi ngurutake tweet maneh nalika dilayani.
Kita uga bisa nyegah panyebaran tweet saka wong sing duwe pengikut akeh. Nanging, kita bisa nggoleki tweets saka individu sing paling ditliti, nggabungake asil panelusuran karo asil timeline ngarep pangguna, lan banjur ngatur maneh tweets ing wektu layanan.
Tambahan tambahan kalebu:
- Tansah mung sawetara atus tweets ing Cache Memori kanggo saben timeline ngarep.
- Ing Cache Memori, mung informasi garis wektu ngarep pangguna aktif sing disimpen.
- Kita bisa mbangun maneh kronologi saka Database SQL yen pangguna durung aktif ing 30 dina sadurunge.
- Kanggo ngerteni sapa pangguna, gunakake Layanan Grafik pangguna.
- Tambah tweets menyang Cache Memori kanthi njupuk saka Database SQL.
- Layanan Info Tweet mung bisa nyimpen tweets sewulan.
- Ing Layanan Info pangguna, mung pangguna aktif sing disimpen.
- Kanggo njaga latensi kurang, Kluster Panelusuran mesthine kudu njaga tweets ing memori.
kesimpulan
Sanajan Twitter minangka organisasi gedhe, nanging luwih apik pemahaman babagan desain sistem. Aku nindakake sing paling apik kanggo nyedhiyakake ringkesan tingkat dhuwur babagan garis wektu Twitter.
Muga-muga sampeyan entuk informasi sing migunani lan bisa digunakake kanthi apik.
Ninggalake a Reply