Seni Bina Perisian dan Reka Bentuk Sistem: Gambar Besar dan Panduan Sumber

Hello rakan sekerja.

Hari ini kami menawarkan untuk pertimbangan anda terjemahan artikel oleh Tugberk Ugurlu, yang berusaha menggariskan dalam jumlah yang agak kecil prinsip-prinsip mereka bentuk sistem perisian moden. Inilah yang penulis katakan tentang dirinya secara ringkas:

Seni Bina Perisian dan Reka Bentuk Sistem: Gambar Besar dan Panduan Sumber
Memandangkan adalah mustahil untuk memuatkan dalam artikel habro topik yang sangat besar seperti corak seni bina + corak reka bentuk pada tahun 2019, kami mengesyorkan bukan sahaja teks En. Uruglu sendiri, tetapi juga banyak pautan yang beliau sertakan di dalamnya. Jika anda suka, kami akan menerbitkan teks yang lebih khusus tentang reka bentuk sistem teragih.

Seni Bina Perisian dan Reka Bentuk Sistem: Gambar Besar dan Panduan Sumber

Syot kilat Isaac Smith daripada Unsplash

Jika anda tidak pernah menghadapi cabaran seperti mereka bentuk sistem perisian dari awal, maka apabila memulakan kerja sedemikian, kadang-kadang ia tidak jelas di mana untuk bermula. Saya percaya bahawa anda perlu melukis sempadan terlebih dahulu supaya anda mempunyai idea yang lebih kurang yakin tentang apa sebenarnya yang akan anda reka, dan kemudian singsingkan lengan baju anda dan bekerja dalam sempadan tersebut. Sebagai titik permulaan, anda boleh mengambil produk atau perkhidmatan (sebaik-baiknya yang anda sangat suka) dan memikirkan cara untuk melaksanakannya. Anda mungkin kagum melihat betapa mudahnya produk ini kelihatan, dan betapa banyak kerumitan yang terkandung di dalamnya. Jangan lupa: mudah - biasanya kompleks, dan tidak mengapa.

Saya rasa nasihat terbaik yang boleh saya berikan kepada sesiapa yang mula mereka bentuk sistem ialah ini: jangan membuat sebarang andaian! Dari awal lagi, anda perlu menyatakan fakta yang diketahui tentang sistem ini dan jangkaan yang berkaitan dengannya. Berikut ialah beberapa soalan yang bagus untuk ditanya bagi membantu anda memulakan reka bentuk anda:

  • Apakah masalah yang kita cuba selesaikan?
  • Apakah bilangan puncak pengguna yang akan berinteraksi dengan sistem kami?
  • Apakah corak penulisan dan pembacaan data yang akan kami gunakan?
  • Apakah kes kegagalan yang dijangkakan, bagaimana kita akan menanganinya?
  • Apakah jangkaan untuk konsistensi dan ketersediaan sistem?
  • Adakah anda perlu mengambil kira sebarang keperluan yang berkaitan dengan pengesahan dan peraturan luaran semasa bekerja?
  • Apakah jenis data sensitif yang akan kami simpan?

Ini hanyalah beberapa soalan yang berguna kepada saya dan pasukan yang saya sertai selama bertahun-tahun dalam aktiviti profesional. Jika anda tahu jawapan kepada soalan ini (dan mana-mana soalan lain yang berkaitan dengan konteks di mana anda perlu bekerja), maka anda boleh menyelidiki secara beransur-ansur butiran teknikal masalah itu.

Tetapkan tahap awal

Apakah yang saya maksudkan dengan "garis dasar" di sini? Sebenarnya, pada zaman kita, kebanyakan masalah dalam industri perisian "boleh" diselesaikan menggunakan kaedah dan teknologi sedia ada. Sehubungan itu, dengan menavigasi landskap ini, anda mendapat permulaan tertentu apabila berhadapan dengan masalah yang perlu diselesaikan oleh orang lain sebelum anda. Jangan lupa bahawa program ditulis untuk menyelesaikan masalah perniagaan dan pengguna, jadi kami berusaha untuk menyelesaikan masalah dengan cara yang paling mudah dan mudah (dari sudut pandangan pengguna). Mengapa ini penting untuk diingati? Mungkin dalam sistem koordinat anda, anda suka mencari penyelesaian unik untuk semua masalah, kerana anda berfikir, "pengaturcara jenis apakah saya jika saya mengikuti corak di mana-mana"? sebenarnya, seni di sini membuat keputusan tentang di mana dan apa yang perlu dilakukan. Sudah tentu, setiap daripada kita perlu menangani masalah unik dari semasa ke semasa, yang masing-masing adalah cabaran sebenar. Walau bagaimanapun, jika tahap awal kita ditakrifkan dengan jelas, maka kita tahu untuk menghabiskan tenaga kita: mencari penyelesaian siap sedia untuk masalah yang ditetapkan di hadapan kita, atau mengkaji lebih lanjut dan memperoleh pemahaman yang lebih mendalam.

Saya fikir saya dapat meyakinkan anda bahawa jika pakar dengan yakin memahami komponen seni bina beberapa sistem perisian yang hebat, maka pengetahuan ini sangat diperlukan untuk menguasai seni arkitek dan membangunkan asas yang kukuh dalam bidang ini.

Okay, jadi dari mana hendak bermula? U Donna Martina Terdapat repositori di GitHub dipanggil primer reka bentuk sistem, dari mana anda boleh belajar cara mereka bentuk sistem berskala besar, serta bersedia untuk temu duga mengenai topik ini. Repositori mempunyai bahagian dengan contoh seni bina sebenar, di mana, khususnya, dianggap bagaimana mereka mendekati reka bentuk sistem mereka beberapa syarikat terkenalcth Twitter, Uber, dsb.

Walau bagaimanapun, sebelum beralih kepada bahan ini, mari kita lihat dengan lebih dekat cabaran seni bina yang paling penting yang kita hadapi dalam amalan. Ini penting kerana anda perlu menentukan BANYAK aspek masalah yang degil dan pelbagai rupa, dan kemudian menyelesaikannya dalam rangka kerja peraturan yang berkuat kuasa dalam sistem tertentu. Jackson Gabbard, bekas pekerja Facebook, menulis Video 50 minit tentang temu bual reka bentuk sistem, di mana beliau berkongsi pengalamannya sendiri menapis ratusan pemohon. Walaupun video itu banyak menumpukan pada reka bentuk sistem yang besar dan kriteria kejayaan yang penting apabila mencari calon untuk jawatan sedemikian, ia masih akan berfungsi sebagai sumber yang komprehensif tentang perkara yang paling penting semasa mereka bentuk sistem. Saya juga mencadangkan ringkasan video ini.

Bina pengetahuan tentang menyimpan dan mendapatkan semula data

Biasanya, keputusan anda tentang cara anda menyimpan dan mendapatkan semula data anda dalam jangka panjang mempunyai kesan kritikal terhadap prestasi sistem. Oleh itu, anda mesti terlebih dahulu memahami ciri-ciri tulis dan baca yang diharapkan sistem anda. Kemudian anda perlu dapat menilai penunjuk ini dan membuat pilihan berdasarkan penilaian yang dibuat. Walau bagaimanapun, anda boleh mengatasi kerja ini dengan berkesan hanya jika anda memahami corak storan data sedia ada. Pada dasarnya, ini membayangkan pengetahuan yang kukuh berkaitan dengan pemilihan pangkalan data.

Pangkalan data boleh dianggap sebagai struktur data yang sangat berskala dan tahan lama. Oleh itu, pengetahuan tentang struktur data seharusnya sangat berguna kepada anda apabila memilih pangkalan data tertentu. Sebagai contoh, Redis ialah pelayan struktur data yang menyokong pelbagai jenis nilai. Ia membolehkan anda bekerja dengan struktur data seperti senarai dan set, dan membaca data menggunakan algoritma yang terkenal, contohnya, LRU, menganjurkan kerja sedemikian dalam gaya yang tahan lama dan mudah diakses.

Seni Bina Perisian dan Reka Bentuk Sistem: Gambar Besar dan Panduan Sumber

Syot kilat Samuel Zeller daripada Unsplash

Sebaik sahaja anda mempunyai pemahaman yang mencukupi tentang pelbagai corak storan data, teruskan kepada mengkaji ketekalan dan ketersediaan data. Pertama sekali, anda perlu memahami Teorem CAP sekurang-kurangnya dari segi umum, dan kemudian gilap pengetahuan ini dengan melihat lebih dekat pada corak yang telah ditetapkan konsisten ΠΈ kebolehcapaian. Dengan cara ini, anda akan menjadi lebih berpengetahuan dalam bidang ini dan memahami bahawa membaca dan menulis data sebenarnya adalah dua masalah yang sangat berbeza, masing-masing mempunyai cabaran tersendiri. Berbekalkan beberapa corak ketekalan dan ketersediaan, anda boleh meningkatkan prestasi sistem secara mendadak sambil memastikan aliran data lancar ke aplikasi anda.

Akhir sekali, menyimpulkan perbualan tentang isu penyimpanan data, kita juga harus menyebut caching. Sekiranya ia berjalan serentak pada klien dan pelayan? Apakah data yang akan berada dalam cache anda? Dan mengapa? Bagaimanakah anda mengatur ketidaksahihan cache? Adakah ia akan dilakukan secara berkala, pada selang waktu tertentu? Jika ya, berapa kerap? Saya mengesyorkan mula mempelajari topik ini dengan bahagian seterusnya primer reka bentuk sistem yang disebutkan di atas.

Corak Komunikasi

Sistem terdiri daripada pelbagai komponen; ini mungkin proses berbeza yang berjalan dalam nod fizikal yang sama, atau mesin berbeza yang berjalan pada bahagian rangkaian anda yang berbeza. Sesetengah sumber ini dalam rangkaian anda mungkin peribadi, tetapi yang lain harus terbuka dan terbuka kepada pengguna yang mengaksesnya dari luar.

Adalah perlu untuk memastikan komunikasi sumber-sumber ini antara satu sama lain, serta pertukaran maklumat antara keseluruhan sistem dan dunia luar. Dalam konteks reka bentuk sistem, di sini sekali lagi kita berhadapan dengan satu set cabaran baharu dan unik. Mari lihat bagaimana ia boleh berguna aliran tugas tak segerak, dan apakah pPelbagai corak komunikasi boleh didapati.

Seni Bina Perisian dan Reka Bentuk Sistem: Gambar Besar dan Panduan Sumber

Syot kilat Tony Stoddard daripada Unsplash

Apabila mengatur komunikasi dengan dunia luar, ia sentiasa sangat penting keselamatan, peruntukannya juga perlu diambil serius dan diusahakan secara aktif.

Pengagihan sambungan

Saya tidak pasti bahawa meletakkan topik ini ke bahagian yang berasingan akan kelihatan wajar kepada semua orang. Namun begitu, saya akan membentangkan konsep ini secara terperinci di sini, dan saya percaya bahawa bahan dalam bahagian ini diterangkan dengan paling tepat dengan istilah "pengedaran sambungan".

Sistem dibentuk dengan menyambungkan banyak komponen dengan betul, dan komunikasi mereka antara satu sama lain sering diatur berdasarkan protokol yang ditetapkan, contohnya, TCP dan UDP. Walau bagaimanapun, protokol seperti itu selalunya tidak mencukupi untuk memenuhi semua keperluan sistem moden, yang selalunya dikendalikan di bawah beban tinggi dan juga sangat bergantung kepada keperluan pengguna. Selalunya perlu mencari cara untuk mengedarkan sambungan untuk mengatasi beban yang begitu tinggi pada sistem.

Pengedaran ini berdasarkan yang terkenal sistem nama domain (DNS). Sistem sedemikian membolehkan transformasi nama domain seperti round robin berwajaran dan kaedah berasaskan kependaman untuk membantu mengagihkan beban.

Pengimbangan beban pada asasnya adalah penting, dan hampir setiap sistem Internet besar yang kita berurusan hari ini terletak di belakang satu atau lebih pengimbang beban. Pengimbang beban membantu mengedarkan permintaan pelanggan merentas berbilang keadaan yang tersedia. Pengimbang beban datang dalam kedua-dua perkakasan dan perisian, bagaimanapun, dalam amalan, lebih kerap anda perlu berurusan dengan perisian, contohnya HAProxy ΠΈ ELB. Proksi terbalik dari segi konsep juga sangat serupa dengan pengimbang beban, walaupun terdapat julat antara yang pertama dan kedua perbezaan yang berbeza. Perbezaan ini mesti diambil kira semasa mereka bentuk sistem berdasarkan keperluan anda.

Anda juga harus tahu tentang rangkaian penghantaran kandungan (CDN). CDN ialah rangkaian pengedaran global pelayan proksi yang menyampaikan maklumat daripada nod yang terletak secara geografi lebih dekat dengan pengguna tertentu. CDN adalah lebih baik untuk digunakan jika anda bekerja dengan fail statik yang ditulis dalam JavaScript, CSS dan HTML. Selain itu, perkhidmatan awan yang menyediakan pengurus trafik adalah perkara biasa hari ini, contohnya, Pengurus Trafik Azure, memberikan anda pengedaran global dan kependaman yang dikurangkan apabila bekerja dengan kandungan dinamik. Walau bagaimanapun, perkhidmatan sedemikian biasanya berguna dalam kes di mana anda perlu bekerja dengan perkhidmatan web tanpa negara.

Mari kita bercakap tentang logik perniagaan. Menstrukturkan logik perniagaan, aliran tugas dan komponen

Jadi, kami berjaya membincangkan pelbagai aspek infrastruktur sistem. Kemungkinan besar, pengguna tidak memikirkan semua elemen sistem anda ini dan, terus terang, tidak mengambil berat tentangnya sama sekali. Pengguna berminat dengan cara berinteraksi dengan sistem anda, apa yang boleh dicapai dengan melakukan ini, dan juga bagaimana sistem melaksanakan arahan pengguna, apa dan bagaimana ia dilakukan dengan data pengguna.

Seperti yang dicadangkan oleh tajuk artikel ini, saya akan bercakap tentang seni bina perisian dan reka bentuk sistem. Sehubungan itu, saya tidak bercadang untuk merangkumi corak reka bentuk perisian yang menerangkan cara komponen perisian dicipta. Walau bagaimanapun, semakin saya memikirkannya, semakin saya nampak bahawa garis antara corak reka bentuk perisian dan corak seni bina sangat kabur, dan kedua-dua konsep itu berkait rapat. Kita ambil sebagai contoh pendaftaran acara (sumber acara). Sebaik sahaja anda mengamalkan corak seni bina ini, ia akan mempengaruhi hampir setiap aspek sistem anda: penyimpanan data jangka panjang, tahap konsistensi yang diterima pakai dalam sistem anda, bentuk komponen di dalamnya, dsb., dsb. Oleh itu, saya memutuskan untuk menyebut beberapa corak seni bina yang berkaitan secara langsung dengan logik perniagaan. Walaupun artikel ini perlu menghadkan dirinya kepada senarai ringkas, saya menggalakkan anda untuk membiasakan diri dengannya dan memikirkan idea yang berkaitan dengan corak ini. Di sini anda:

Pendekatan kolaboratif

Sangat tidak mungkin anda akan mendapati diri anda dalam projek sebagai peserta yang bertanggungjawab sepenuhnya untuk proses reka bentuk sistem. Sebaliknya, anda berkemungkinan besar perlu berinteraksi dengan rakan sekerja yang bekerja di dalam dan di luar tugas anda. Dalam kes ini, anda mungkin perlu menilai penyelesaian teknologi yang dipilih dengan rakan sekerja, mengenal pasti keperluan perniagaan dan memahami cara terbaik untuk menyelaraskan tugas.

Seni Bina Perisian dan Reka Bentuk Sistem: Gambar Besar dan Panduan Sumber

Syot kilat Kaleidico daripada Unsplash

Langkah pertama ialah membangunkan pemahaman yang tepat dan dikongsi tentang matlamat perniagaan yang anda cuba capai dan bahagian bergerak yang perlu anda tangani. Teknik pemodelan kumpulan, khususnya peristiwa ribut (event storming) membantu mempercepatkan proses ini dengan ketara dan meningkatkan peluang anda untuk berjaya. Kerja ini boleh dilakukan sebelum atau selepas anda gariskan sempadan perkhidmatan anda, dan kemudian mendalaminya apabila produk matang. Berdasarkan tahap konsistensi yang akan dicapai di sini, anda juga boleh merumuskan Bahasa biasa untuk konteks terhad di mana anda bekerja. Apabila anda perlu bercakap tentang seni bina sistem anda, anda mungkin mendapati ia berguna model C4, dicadangkan Simon Brown, terutamanya apabila anda perlu memahami berapa banyak yang anda perlu pergi ke butiran masalah, menggambarkan perkara yang ingin anda sampaikan.

Mungkin terdapat satu lagi teknologi matang mengenai topik ini yang tidak kurang berguna daripada Reka Bentuk Didorong Domain. Walau bagaimanapun, kami entah bagaimana kembali memahami bidang subjek, jadi pengetahuan dan pengalaman dalam bidang tersebut Reka Bentuk Didorong Domain sepatutnya berguna kepada anda.

Sumber: www.habr.com

Tambah komen