Arsitektur Perangkat Lunak lan Desain Sistem: Gambar lan Pandhuan Sumber Daya

Halo rekan kerja.

Dina iki kita nawakake kanggo pertimbangan sampeyan terjemahan artikel dening Tugberk Ugurlu, sing ngupayakake njelasake kanthi volume sing relatif cilik prinsip ngrancang sistem piranti lunak modern. Mangkene pangandikane penulis babagan awake dhewe ing ringkesan:

Arsitektur Perangkat Lunak lan Desain Sistem: Gambar lan Pandhuan Sumber Daya
Amarga pancen mokal kanggo nutupi ing artikel habro topik kolosal kaya pola arsitektur + pola desain ing taun 2019, disaranake ora mung teks Pak Uruglu dhewe, nanging uga akeh tautan sing dilebokake ing kono. Yen sampeyan seneng, kita bakal nerbitake teks sing luwih khusus babagan desain sistem sing disebarake.

Arsitektur Perangkat Lunak lan Desain Sistem: Gambar lan Pandhuan Sumber Daya

Gambar asli seko Isaac Smith saka Unsplash

Yen sampeyan durung nate ngadhepi tantangan kayata ngrancang sistem piranti lunak saka awal, mula nalika miwiti karya kasebut, kadhangkala ora jelas saka ngendi arep miwiti. Aku percaya yen sampeyan kudu nggambar wates dhisik supaya sampeyan duwe ide sing luwih utawa kurang yakin babagan apa sing bakal sampeyan rancang, banjur gulungake lengen klambi lan kerja ing wates kasebut. Minangka titik wiwitan, sampeyan bisa njupuk produk utawa layanan (saenipun sing sampeyan seneng banget) lan nemtokake cara kanggo ngleksanakake. Sampeyan bisa uga kaget carane prasaja produk iki katon, lan carane akeh kerumitan sing bener ngandhut. Aja lali: prasaja - biasane rumit, lan ora apa-apa.

Aku menehi saran paling apik kanggo sapa wae sing miwiti ngrancang sistem yaiku: aja nggawe asumsi! Saka wiwitan, sampeyan kudu nemtokake kasunyatan sing dikenal babagan sistem iki lan pangarepan sing ana gandhengane. Mangkene sawetara pitakon sing apik kanggo mbantu sampeyan miwiti desain:

  • Apa masalah sing kita nyoba kanggo ngatasi?
  • Apa nomer puncak pangguna sing bakal sesambungan karo sistem kita?
  • Apa pola nulis lan maca data sing bakal digunakake?
  • Apa kasus kegagalan sing dikarepake, kepiye cara ngatasi?
  • Apa sing dikarepake kanggo konsistensi lan kasedhiyan sistem?
  • Apa sampeyan kudu nggatekake syarat apa wae sing ana gandhengane karo verifikasi lan regulasi eksternal nalika kerja?
  • Apa jinis data sensitif sing bakal kita simpen?

Iki mung sawetara pitakonan sing migunani kanggo aku lan tim sing wis melu kegiatan profesional sajrone pirang-pirang taun. Yen sampeyan ngerti jawaban kanggo pitakonan kasebut (lan liya-liyane sing cocog karo konteks sing kudu ditindakake), mula sampeyan bisa mbatalake rincian teknis masalah kasebut.

Setel tingkat wiwitan

Apa tegese "baseline" ing kene? Bener, ing jaman saiki, akeh masalah ing industri piranti lunak "bisa" ditanggulangi kanthi nggunakake metode lan teknologi sing wis ana. Dadi, kanthi navigasi lanskap iki, sampeyan bakal entuk wiwitan nalika ngadhepi masalah sing kudu diatasi sadurunge wong liya. Aja lali yen program ditulis kanggo ngatasi masalah bisnis lan pangguna, mula kita ngupayakake ngatasi masalah kasebut kanthi cara sing paling gampang lan gampang (saka sudut pandang pangguna). Yagene iki penting kanggo elinga? Mungkin ing sistem koordinat sampeyan seneng nggoleki solusi unik kanggo kabeh masalah, amarga sampeyan mikir, "programmer apa aku yen aku ngetutake pola ing endi wae"? Nyatane, seni ing kene nggawe keputusan babagan ngendi lan apa sing kudu ditindakake. Mesthi, saben kita kudu ngatasi masalah sing unik saka wektu kanggo wektu, sing saben-saben dadi tantangan nyata. Nanging, yen tingkat awal kita wis ditetepake kanthi jelas, mula kita ngerti apa sing kudu digunakake kanggo energi: nggolek pilihan sing wis siap kanggo ngrampungake masalah sing disedhiyakake sadurunge, utawa luwih sinau lan entuk pangerten sing luwih jero.

Aku mikir aku bisa gawe uwong yakin yen spesialis yakin ngerti apa komponen arsitektur saka sawetara sistem lunak apik, kawruh iki bakal dadi indispensable kanggo nguwasani seni arsitek lan ngembangaken basis ngalangi ing lapangan iki.

Oke, dadi ngendi arep miwiti? U Donna Martina Ana repositori ing GitHub disebut sistem-desain-primer, saka ngendi sampeyan bisa sinau babagan ngrancang sistem skala gedhe, uga nyiapake wawancara babagan topik iki. Repositori duwe bagean kanthi conto arsitektur nyata, ing ngendi, utamane, dianggep cara pendekatan desain sistem kasebut sawetara perusahaan kondhangcontone Twitter, Uber, lsp.

Nanging, sadurunge pindhah menyang materi iki, ayo padha nliti tantangan arsitektur paling penting sing kita adhepi ing laku. Iki penting amarga sampeyan kudu nemtokake MANY aspèk masalah wangkal lan multi-faceted, lan banjur ngatasi ing framework saka peraturan ing pasukan ing sistem tartamtu. Jackson Gabbard, mantan karyawan Facebook, wrote Video 50 menit babagan wawancara desain sistem, ngendi dheweke nuduhake pengalaman dhewe saka screening atusan pelamar. Nalika video fokus banget ing desain sistem gedhe lan kritéria sukses sing penting nalika nggoleki calon kanggo posisi kasebut, video kasebut isih bakal dadi sumber daya lengkap babagan apa sing paling penting nalika ngrancang sistem. Aku uga menehi saran ringkesan video iki.

Mbangun kawruh babagan nyimpen lan njupuk data

Biasane, keputusan sampeyan babagan cara nyimpen lan njupuk data ing jangka panjang duwe pengaruh kritis marang kinerja sistem. Mula, sampeyan kudu ngerti babagan nulis lan maca karakteristik sistem sampeyan. Banjur sampeyan kudu bisa ngevaluasi indikator kasebut lan nggawe pilihan adhedhasar penilaian sing digawe. Nanging, sampeyan bisa kanthi efektif ngrampungake karya iki mung yen sampeyan ngerti pola panyimpenan data sing ana. Ing asas, iki tegese kawruh padhet related kanggo pilihan database.

Database bisa dianggep minangka struktur data sing bisa diukur lan tahan lama. Mulane, kawruh babagan struktur data kudu migunani banget kanggo sampeyan nalika milih database tartamtu. Tuladhane, Redis minangka server struktur data sing ndhukung macem-macem jinis nilai. Ngidini sampeyan nggarap struktur data kayata dhaptar lan set, lan maca data nggunakake algoritma sing kondhang, contone, LRU, ngatur karya kasebut kanthi gaya sing tahan lama lan gampang diakses.

Arsitektur Perangkat Lunak lan Desain Sistem: Gambar lan Pandhuan Sumber Daya

Gambar asli seko Samuel Zeller saka Unsplash

Sawise sampeyan duwe pangerten sing cukup babagan macem-macem pola panyimpenan data, pindhah menyang sinau konsistensi lan kasedhiyan data. Kaping pisanan, sampeyan kudu ngerti Teorema CAP paling ing istilah umum, lan banjur polish kawruh iki dening njupuk dipikir nyedhaki pola diadegakΓ© konsistensi ΠΈ aksesibilitas. Kanthi cara iki, sampeyan bakal ngembangake pangerten babagan lapangan lan ngerti manawa maca lan nulis data sejatine rong masalah sing beda-beda, saben duwe tantangan sing unik. Bersenjata karo sawetara pola konsistensi lan kasedhiyan, sampeyan bisa nambah kinerja sistem kanthi nyata nalika njamin aliran data lancar menyang aplikasi sampeyan.

Pungkasan, ngrampungake obrolan babagan masalah panyimpenan data, kita uga kudu nyebutake caching. Apa kudu mbukak bebarengan ing klien lan server? Data apa sing bakal ana ing cache sampeyan? Lan kenapa? Kepiye sampeyan ngatur cache invalidation? Apa bakal ditindakake kanthi rutin, ing interval tartamtu? Yen ya, sepira kerepe? Aku nyaranake miwiti kanggo sinau topik iki karo bagean sabanjure dhasar desain sistem kasebut.

Pola Komunikasi

Sistem kalebu macem-macem komponen; Iki bisa uga proses beda sing mlaku ing simpul fisik sing padha, utawa mesin sing beda-beda sing mlaku ing macem-macem bagean jaringan sampeyan. Sawetara sumber daya ing jaringan sampeyan bisa uga pribadi, nanging liyane kudu umum lan mbukak kanggo konsumen sing ngakses saka njaba.

Sampeyan perlu kanggo mesthekake komunikasi sumber daya kasebut karo saben liyane, uga ijol-ijolan informasi antarane kabeh sistem lan donya njaba. Ing konteks desain sistem, ing kene maneh kita bakal ngadhepi tantangan anyar lan unik. Ayo ndeleng carane padha bisa migunani tugas asynchronous mili, lan apa pMacem-macem pola komunikasi kasedhiya.

Arsitektur Perangkat Lunak lan Desain Sistem: Gambar lan Pandhuan Sumber Daya

Gambar asli seko Tony Stoddard saka Unsplash

Nalika ngatur komunikasi karo jagad njaba, mesthi penting banget safety, pranata kasebut uga kudu ditindakake kanthi serius lan aktif.

Distribusi sambungan

Aku ora yakin sing sijine topik iki menyang bagean kapisah bakal koyone sabdho kanggo everyone. Nanging, aku bakal nampilake konsep iki kanthi rinci ing kene, lan aku percaya yen materi ing bagean iki paling akurat diterangake kanthi istilah "distribusi sambungan".

Sistem kawangun kanthi bener nyambungake akeh komponen, lan komunikasi karo saben liyane asring diatur ing basis saka protokol diadegakΓ©, contone, TCP lan UDP. Nanging, protokol kasebut asring ora cukup kanggo nyukupi kabeh kabutuhan sistem modern, sing asring dioperasikake kanthi beban dhuwur lan uga gumantung banget marang kabutuhan pangguna. Asring kudu golek cara kanggo nyebarake sambungan kanggo ngatasi beban sing dhuwur ing sistem kasebut.

Distribusi iki adhedhasar kondhang sistem jeneng domain (DNS). Sistem kasebut ngidini transformasi jeneng domain kayata round robin bobot lan metode basis latensi kanggo mbantu nyebarake beban.

Ngimbangi beban dhasar penting, lan sakbenere saben sistem Internet gedhe kita menehi hasil karo dina dumunung konco siji utawa luwih load balancers. Load balancers mbantu nyebarake panjalukan klien ing pirang-pirang kasus sing kasedhiya. Penyeimbang beban kasedhiya ing hardware lan piranti lunak, nanging ing praktik, luwih asring sampeyan kudu ngatasi piranti lunak, umpamane. HAProxy ΠΈ ELB. proxy mbalikke konsep uga banget padha load balancers, sanajan ana sawetara antarane pisanan lan kaloro beda beda. Beda kasebut kudu digatekake nalika ngrancang sistem adhedhasar kabutuhan sampeyan.

Sampeyan uga kudu ngerti babagan jaringan pangiriman isi (CDN). CDN minangka jaringan server proxy sing disebarake global sing ngirim informasi saka simpul sing dumunung sacara geografis luwih cedhak karo pangguna tartamtu. CDN luwih becik digunakake yen sampeyan nggarap file statis sing ditulis ing JavaScript, CSS lan HTML. Kajaba iku, layanan awan sing nyedhiyakake manajer lalu lintas umume saiki, contone, Manajer Lalu Lintas Azure, menehi distribusi global lan nyuda latensi nalika nggarap konten dinamis. Nanging, layanan kasebut biasane migunani yen sampeyan kudu nggarap layanan web tanpa negara.

Ayo dadi pirembagan bab logika bisnis. Struktur logika bisnis, alur tugas lan komponen

Dadi, kita bisa ngrembug macem-macem aspek infrastruktur sistem kasebut. Paling kamungkinan, pangguna ora mikir babagan kabeh unsur sistem sampeyan lan, terus terang, ora peduli kabeh. Pangguna kasengsem ing apa kaya sesambungan karo sistem sampeyan, apa sing bisa digayuh kanthi nindakake iki, lan uga carane sistem nglakokake perintah pangguna, apa lan kepiye data pangguna.

Minangka judhul artikel iki, aku arep ngomong babagan arsitektur piranti lunak lan desain sistem. Patut, aku ora rencana kanggo nutupi pola desain software sing njlèntrèhaké carane komponen lunak digawe. Nanging, luwih akeh aku mikir babagan iki, luwih katon yen garis antarane pola desain piranti lunak lan pola arsitektur banget burem, lan konsep loro kasebut raket banget. Ayo dadi contone registrasi acara (sumber acara). Sawise sampeyan nggunakake pola arsitektur iki, bakal mengaruhi meh kabeh aspek sistem sampeyan: panyimpenan jangka panjang data, tingkat konsistensi sing diadopsi ing sistem sampeyan, wangun komponen ing, etc., etc. Mulane, aku mutusake kanggo nyebutake sawetara pola arsitektur sing langsung ana hubungane karo logika bisnis. Sanajan artikel iki kudu mbatesi dhaptar sing gampang, aku ngajak sampeyan kenal lan mikir babagan ide sing ana gandhengane karo pola kasebut. Kene sampeyan:

Pendekatan kolaboratif

Iku arang banget kamungkinan sing bakal nemokake dhewe ing project minangka peserta sing mung tanggung jawab kanggo proses desain sistem. Kosok baline, sampeyan kudu sesambungan karo kolega sing kerja ing njero lan njaba tugas sampeyan. Ing kasus iki, sampeyan bisa uga kudu ngevaluasi solusi teknologi sing dipilih karo kolega, ngenali kabutuhan bisnis lan ngerti cara paling apik kanggo paralel tugas.

Arsitektur Perangkat Lunak lan Desain Sistem: Gambar lan Pandhuan Sumber Daya

Gambar asli seko Kaleidico saka Unsplash

Langkah pisanan yaiku ngembangake pangerten sing akurat lan bareng babagan tujuan bisnis sing sampeyan coba entuk lan bagean obah sing kudu sampeyan lakoni. Teknik modeling klompok, utamane acara badai (acara storming) bantuan kanggo Ngartekno nyepetake proses iki lan nambah kasempatan kanggo sukses. Karya iki bisa ditindakake sadurunge utawa sawise sampeyan nggawe garis wates layanan sampeyan, lan banjur deepen minangka prodhuk matures. Adhedhasar tingkat konsistensi sing bakal digayuh ing kene, sampeyan uga bisa ngrumusake basa umum kanggo konteks winates ing ngendi sampeyan kerja. Yen sampeyan kudu ngomong babagan arsitektur sistem sampeyan, sampeyan bisa uga migunani model C4, ngajokaken Simon Brown, utamanΓ© nalika sampeyan kudu ngerti carane akeh sampeyan kudu pindhah menyang rincian masalah, visualizing bab sing arep komunikasi.

Mungkin ana teknologi diwasa liyane babagan topik iki sing ora kurang migunani tinimbang Desain Didorong Domain. Nanging, kita piye wae bali kanggo mangerteni wilayah subyek, supaya kawruh lan pengalaman ing lapangan Desain Domain-Driven kudu migunani kanggo sampeyan.

Source: www.habr.com

Add a comment