Arsitéktur Software sareng Desain Sistem: Gambar Badag sareng Pituduh Sumberdaya

Halo rekan-rekan.

Dinten ieu kami nawiskeun pikeun tinimbangan anjeun tarjamahan tina hiji artikel ku Tugberk Ugurlu, anu undertook mun outline dina volume relatif leutik prinsip ngarancang sistem software modern. Di dieu Kang naon pangarang nyebutkeun ngeunaan dirina dina kasimpulan:

Arsitéktur Software sareng Desain Sistem: Gambar Badag sareng Pituduh Sumberdaya
Kusabab teu mungkin pikeun nutupan dina artikel habro topik kolosal sapertos pola arsitéktur + pola desain dina taun 2019, kami nyarankeun henteu ngan ukur téks Mr. Uruglu sorangan, tapi ogé seueur tautan anu anjeunna bageur dilebetkeun. Upami anjeun resep, kami bakal nyebarkeun téks anu langkung khusus ngeunaan desain sistem anu disebarkeun.

Arsitéktur Software sareng Desain Sistem: Gambar Badag sareng Pituduh Sumberdaya

Snapshot Isaac Smith ti Unsplash

Upami anjeun teu acan kantos ngalaman tangtangan sapertos ngarancang sistem parangkat lunak ti mimiti, teras nalika ngamimitian padamelan sapertos kitu, sakapeung henteu écés dimana ngamimitian. Kuring yakin yén anjeun mimiti kedah ngagambar wates supados anjeun gaduh ide anu langkung atanapi kirang yakin ngeunaan naon anu anjeun badé rancang, teras gulung leungeun baju anjeun sareng damel dina wates éta. Salaku titik awal, anjeun tiasa nyandak hiji produk atawa jasa (ideally salah sahiji nu bener resep) jeung angka kaluar kumaha carana nerapkeun eta. Anjeun bisa jadi amazed di kumaha basajan produk ieu kasampak, jeung sabaraha pajeulitna sabenerna ngandung. Entong hilap: basajan - biasana kompléks, tur éta oke.

Jigana nasehat pangalusna abdi tiasa masihan ka saha dimimitian mendesain sistem ieu: ulah nyieun asumsi wae! Ti mimiti, anjeun kudu nangtukeun fakta dipikawanoh ngeunaan sistem ieu jeung ekspektasi pakait sareng eta. Ieu sababaraha patarosan anu saé pikeun ngabantosan anjeun ngamimitian desain anjeun:

  • Naon masalah anu urang coba pikeun ngajawab?
  • Naon jumlah puncak pangguna anu bakal berinteraksi sareng sistem kami?
  • Naon pola nulis sareng maca data anu bakal kami anggo?
  • Naon kasus kagagalan anu dipiharep, kumaha urang badé nangananana?
  • Naon ekspektasi pikeun konsistensi sareng kasadiaan sistem?
  • Naha anjeun kedah tumut kana sarat naon waé anu aya hubunganana sareng verifikasi sareng pangaturan éksternal nalika damel?
  • Jenis data sénsitip naon anu bakal urang simpen?

Ieu ngan ukur sababaraha patarosan anu mangpaat pikeun kuring sareng tim anu kuring miluan salami sababaraha taun kagiatan profésional. Upami anjeun terang jawaban kana patarosan ieu (sareng anu sanés anu relevan pikeun kontéks dimana anjeun kedah damel), maka anjeun laun-laun tiasa ngalenyepan rinci téknis masalah éta.

Setel tingkat awal

Naon anu kuring hartosna "dasar" di dieu? Sabenerna, di jaman urang, paling masalah dina industri software "bisa" direngsekeun ngagunakeun métode jeung téknologi aya. Sasuai, ku nganapigasi bentang ieu, anjeun bakal meunang titik mimiti lamun nyanghareupan masalah nu batur kudu ngajawab saméméh anjeun. Tong hilap yén program ditulis pikeun ngabéréskeun masalah bisnis sareng pangguna, janten kami narékahan pikeun ngabéréskeun masalah éta ku cara anu paling lugas sareng saderhana (tina sudut pandang pangguna). Naha ieu penting pikeun diinget? Panginten dina sistem koordinat anjeun resep milarian solusi anu unik pikeun sadaya masalah, sabab anjeun mikir, "Programer naon anu kuring upami kuring nuturkeun pola dimana-mana"? Kanyataanna, seni di dieu nyieun kaputusan ngeunaan dimana jeung naon nu kudu. Tangtu, unggal urang kudu nungkulan masalah unik ti jaman ka jaman, nu masing-masing mangrupakeun tantangan nyata. Nanging, upami tingkat awal urang didefinisikeun sacara jelas, maka urang terang naon anu kedah dibalanjakeun énergi: milarian pilihan anu siap-siap pikeun ngarengsekeun masalah anu disetél sateuacan urang, atanapi langkung diajar deui sareng kéngingkeun pamahaman anu langkung jero.

Jigana mah bisa ngayakinkeun yén lamun spesialis confidently understands naon komponén arsitéktur sababaraha sistem software éndah, pangaweruh ieu bakal jadi indispensable pikeun mastering seni arsiték sarta ngamekarkeun dasar padet dina widang ieu.

Oké, jadi dimana ngamimitian? U Donna Martina Aya Repository on GitHub disebut Sistim-desain-primer, dimana anjeun tiasa diajar kumaha mendesain sistem skala ageung, ogé nyiapkeun wawancara dina topik ieu. Repository ngagaduhan bagian sareng conto arsitéktur nyata, dimana, khususna, dianggap kumaha aranjeunna ngadeukeutan desain sistemna sababaraha pausahaan well-dipikawanohmisalna Twitter, Uber, jsb.

Nanging, sateuacan ngaléngkah ka bahan ieu, hayu urang ningal langkung caket kana tantangan arsitéktur anu paling penting anu urang nyanghareupan dina prakna. Ieu penting sabab anjeun kudu nangtukeun loba aspék masalah nekad sarta multi-faceted, lajeng ngabéréskeun eta dina kerangka perda lumaku dina sistem dibikeun. Jackson Gabbard, urut pagawe Facebook, wrote 50-menit video ngeunaan wawancara desain sistem, dimana anjeunna babagi pangalaman sorangan screening ratusan Ngalamar. Sanaos pidéo éta museurkeun pisan kana desain sistem anu ageung sareng kriteria kasuksésan anu penting nalika milarian calon pikeun posisi sapertos kitu, éta bakal tetep janten sumber komprehensif ngeunaan hal-hal anu paling penting nalika ngarancang sistem. Kuring ogé nyarankeun kasimpulan video ieu.

Ngawangun pangaweruh ngeunaan nyimpen jeung retrieving data

Biasana, kaputusan anjeun ngeunaan kumaha anjeun nyimpen sareng nyandak data anjeun dina jangka panjang gaduh dampak kritis kana kinerja sistem. Ku sabab éta, anjeun kedah ngartos heula karakteristik nyerat sareng maca anu dipiharep tina sistem anjeun. Teras anjeun kedah tiasa meunteun indikator ieu sareng ngadamel pilihan dumasar kana penilaian anu dilakukeun. Nanging, anjeun tiasa sacara efektif ngatasi padamelan ieu ngan upami anjeun ngartos pola panyimpen data anu tos aya. Sacara prinsip, ieu ngakibatkeun pangaweruh solid patali jeung pilihan database.

Basis data bisa dianggap salaku struktur data anu kacida scalable jeung awét. Ku alatan éta, pangaweruh ngeunaan struktur data kedah pisan mangpaat pikeun anjeun nalika milih database husus. Salaku conto, Redis nyaéta server struktur data nu ngarojong rupa-rupa nilai. Éta ngamungkinkeun anjeun damel sareng struktur data sapertos daptar sareng set, sareng maca data nganggo algoritma anu terkenal, contona, LRU, ngatur karya sapertos dina gaya awét sarta pohara diaksés.

Arsitéktur Software sareng Desain Sistem: Gambar Badag sareng Pituduh Sumberdaya

Snapshot Samuel Zeller ti Unsplash

Sakali anjeun gaduh pamahaman anu cekap ngeunaan rupa-rupa pola panyimpen data, teraskeun kana diajar konsistensi sareng kasadiaan data. Anu mimiti, anjeun kedah ngartos Téoréma CAP sahenteuna dina istilah umum, lajeng Polandia pangaweruh ieu ku cara nyokot katingal ngadeukeutan dina pola ngadegkeun konsistensi и aksésibilitas. Ku cara ieu, anjeun bakal ngamekarkeun pamahaman lapangan sareng ngartos yén maca sareng nyerat data saleresna mangrupikeun dua masalah anu béda-béda, masing-masing gaduh tangtangan anu unik. Bersenjata sareng sababaraha konsistensi sareng pola kasadiaan, anjeun tiasa sacara signifikan ningkatkeun kinerja sistem bari mastikeun aliran data lancar ka aplikasi anjeun.

Tungtungna, nyimpulkeun paguneman ngeunaan masalah panyimpen data, urang ogé kedah nyebatkeun cache. Kedah eta ngajalankeun sakaligus dina klien tur server? Data naon anu bakal aya dina cache anjeun? Jeung naha? Kumaha anjeun ngatur cache invalidation? Naha éta bakal dilakukeun sacara teratur, dina interval anu tangtu? Lamun enya, sabaraha sering? Abdi nyarankeun dimimitian diajar jejer ieu kalawan bagian salajengna primér desain sistem disebut tadi.

Pola Komunikasi

Sistem diwangun ku rupa-rupa komponén; Ieu bisa jadi prosés béda ngajalankeun dina titik fisik sarua, atawa mesin béda jalan dina bagian béda tina jaringan Anjeun. Sababaraha sumber ieu dina jaringan anjeun tiasa pribadi, tapi anu sanésna kedah umum sareng kabuka pikeun konsumén anu ngaksésana ti luar.

Ieu diperlukeun pikeun mastikeun komunikasi sumberdaya ieu saling, kitu ogé bursa informasi antara sakabéh sistem jeung dunya luar. Dina kontéks desain sistem, di dieu deui urang disanghareupan ku set tantangan anyar sareng unik. Hayu urang tingali kumaha aranjeunna tiasa mangpaat tugas asynchronous ngalir, jeung naon pAya rupa-rupa pola komunikasi.

Arsitéktur Software sareng Desain Sistem: Gambar Badag sareng Pituduh Sumberdaya

Snapshot Tony Stoddard ti Unsplash

Nalika ngatur komunikasi sareng dunya luar, éta salawasna penting pisan kaamanan, panyadiaan anu ogé kedah dilaksanakeun sacara serius sareng aktip.

Distribusi sambungan

Kaula teu yakin yén nempatkeun topik ieu kana bagian misah bakal sigana diyakinkeun ka dulur. Najan kitu, kuring baris nampilkeun konsép ieu di jéntré di dieu, sarta kuring yakin yén bahan dina bagian ieu paling akurat digambarkeun ku istilah "distribusi sambungan".

Sistem kabentuk ku cara ngahubungkeun leres seueur komponén, sareng komunikasina saling sering dikelompokeun dumasar kana protokol anu ditetepkeun, contona, TCP sareng UDP. Nanging, protokol sapertos kitu sering henteu cekap pikeun nyumponan sadaya kabutuhan sistem modern, anu sering dioperasikeun dina beban anu luhur sareng ogé gumantung pisan kana kabutuhan pangguna. Ieu sering diperlukeun pikeun manggihan cara pikeun ngadistribusikaeun sambungan Cope jeung beban tinggi misalna dina sistem.

Distribusi ieu dumasar kana well-dipikawanoh Sistim ngaran domain (DNS). Sistem sapertos kitu ngamungkinkeun transformasi ngaran domain sapertos round robin bobot sareng metode dumasar latency pikeun ngabantosan ngadistribusikaeun beban.

Balancing beban nyaeta fundamentally penting, sarta ampir unggal sistem Internet badag urang nungkulan kiwari perenahna tukangeun hiji atawa leuwih load balancers. Load balancers mantuan ngadistribusikaeun requests klien sakuliah sababaraha instansi sadia. Load balancers datang dina hardware jeung software, kumaha oge, dina prakna, leuwih sering anjeun kudu nungkulan software, contona. HAProxy и ELB. Ngabalikeun proxy konseptual ogé pisan sarupa load balancers, sanajan aya rentang antara kahiji jeung kadua bédana béda. Bedana ieu kedah dipertimbangkeun nalika ngarancang sistem dumasar kana kabutuhan anjeun.

Anjeun ogé kedah terang ngeunaan jaringan pangiriman eusi (CDN). CDN mangrupikeun jaringan pangladén proxy anu disebarkeun sacara global anu ngirimkeun inpormasi tina titik-titik anu lokasina sacara geografi langkung caket ka pangguna khusus. CDN langkung saé dianggo upami anjeun damel sareng file statik anu ditulis dina JavaScript, CSS sareng HTML. Salaku tambahan, jasa awan anu nyayogikeun manajer lalu lintas umum ayeuna, contona, Manajer Lalu Lintas Azure, masihan anjeun distribusi global sareng ngirangan latency nalika damel sareng eusi dinamis. Nanging, jasa sapertos kitu biasana mangpaat dina kasus dimana anjeun kedah damel sareng jasa wéb stateless.

Hayu urang ngobrol ngeunaan logika bisnis. Structuring logika bisnis, alur tugas sareng komponenana

Janten, urang junun ngabahas sababaraha aspék infrastruktur sistem. Paling dipikaresep, pamaké malah teu mikir ngeunaan sakabéh elemen ieu sistem anjeun sarta, terus terang, teu paduli ngeunaan aranjeunna. Pamaké museurkeun kana kumaha éta berinteraksi sareng sistem anjeun, naon anu tiasa dihontal ku ngalakukeun ieu, sareng ogé kumaha sistem ngalaksanakeun paréntah pangguna, naon sareng kumaha éta sareng data pangguna.

Salaku judul artikel ieu nunjukkeun, abdi bade ngobrol ngeunaan arsitéktur software jeung desain sistem. Sasuai, abdi teu rencanana nutupan pola desain software nu ngajelaskeun kumaha komponén software dijieun. Sanajan kitu, beuki kuring mikir ngeunaan eta, beuki sigana kuring yén garis antara pola desain software jeung pola arsitéktur pisan kabur, sarta dua konsép anu raket patalina. Hayu urang nyandak contona pendaptaran acara (acara sumber). Sakali anjeun ngadopsi pola arsitéktur ieu, éta bakal mangaruhan ampir unggal aspék sistem anjeun: panyimpen data jangka panjang, tingkat konsistensi anu diadopsi dina sistem anjeun, bentuk komponén di jerona, jsb., jsb. Ku alatan éta, kuring mutuskeun pikeun nyebut sababaraha pola arsitéktur anu langsung patali jeung logika bisnis. Sanaos tulisan ieu kedah ngawatesan diri kana daptar anu saderhana, kuring ajak anjeun kenal sareng pikirkeun ideu anu aya hubunganana sareng pola ieu. Yeuh ieu:

Pendekatan kolaboratif

Ieu pisan saperti teu mirip nu bakal manggihan diri dina proyék salaku pamilon anu solely jawab prosés desain sistem. Sabalikna, anjeun paling dipikaresep kedah berinteraksi sareng kolega anu damel di jero sareng di luar tugas anjeun. Dina hal ieu, anjeun kedah ngira-ngira solusi téknologi anu dipilih sareng kolega, ngaidentipikasi kabutuhan bisnis sareng ngartos kumaha cara anu pangsaéna pikeun parallelize tugas.

Arsitéktur Software sareng Desain Sistem: Gambar Badag sareng Pituduh Sumberdaya

Snapshot Kaleidico ti Unsplash

Léngkah munggaran nyaéta pikeun ngembangkeun pamahaman anu akurat sareng dibagikeun ngeunaan naon tujuan bisnis anu anjeun badé ngahontal sareng bagian-bagian anu bagerak anu anjeun kedah laksanakeun. Téhnik modeling grup, hususna kajadian storming (acara storming) mantuan pikeun nyata nyepetkeun prosés ieu jeung ningkatkeun Chances sukses Anjeun. Karya ieu bisa dipigawé saméméh atawa sanggeus anjeun outline wates jasa anjeun, lajeng deepen eta salaku produk matures. Dumasar kana tingkat konsistensi anu bakal dihontal di dieu, anjeun ogé tiasa ngarumuskeun basa umum pikeun konteks kawates dimana anjeun damel. Nalika anjeun kedah ngobrol ngeunaan arsitéktur sistem anjeun, anjeun tiasa mendakan éta mangpaat modél C4, diajukeun Simon Brown, utamana lamun anjeun kudu ngarti sabaraha anjeun bakal kudu balik kana detil masalah, visualizing hal rék komunikasi.

Meureun aya téhnologi dewasa sejen dina topik ieu nu teu kirang mangpaat ti Domain disetir Desain. Najan kitu, urang kumaha bae balik ka pamahaman wewengkon subjek, jadi pangaweruh jeung pangalaman dina widang Desain Domain-disetir kedah mangpaat ka anjeun.

sumber: www.habr.com

Tambahkeun komentar