Prinsip pikeun ngembangkeun aplikasi modern ti NGINX. Bagian 1

Halo babaturan. Dina antisipasi peluncuran kursus PHP pamekar backend, tradisional babagi sareng anjeun tarjamahan tina bahan mangpaat.

Software solves beuki loba tugas sapopoé, bari jadi beuki loba kompléks. Salaku Marc Andressen sakali ngomong, éta meakeun dunya.

Prinsip pikeun ngembangkeun aplikasi modern ti NGINX. Bagian 1

Hasilna, cara aplikasi dikembangkeun sareng dikirimkeun parantos robih sacara dramatis dina sababaraha taun katukang. Ieu mangrupikeun pergeseran skala tektonik anu nyababkeun sakumpulan prinsip. Prinsip-prinsip ieu parantos kabuktosan ngabantosan dina ngawangun tim, ngarancang, ngembangkeun, sareng ngirimkeun aplikasi anjeun ka pangguna akhir.

Prinsipna tiasa diringkeskeun kieu: aplikasi kudu leutik, basis web, sarta boga arsitéktur developer-centric. Kalawan tilu prinsip ieu dina pikiran, anjeun bisa nyieun hiji mantap, aplikasi tungtung-to-tungtung nu bisa gancang tur aman dikirimkeun ka pamaké tungtung, sarta gampang scalable na extensible.

Prinsip pikeun ngembangkeun aplikasi modern ti NGINX. Bagian 1

Masing-masing prinsip anu diusulkeun ngagaduhan sababaraha aspék anu bakal urang bahas pikeun nunjukkeun kumaha unggal prinsip nyumbang kana tujuan pamungkas, nyaéta pangiriman gancang aplikasi anu dipercaya anu gampang dijaga sareng dianggo. Urang bakal ningali prinsip anu aya hubunganana sareng sabalikna pikeun netelakeun naon hartosna, ucapkeun, "Pastikeun anjeun ngagunakeun prinsip leutikna".

Kami ngarepkeun tulisan ieu bakal nyorong anjeun ngagunakeun prinsip anu diusulkeun pikeun ngawangun aplikasi modéren, anu bakal nyayogikeun pendekatan anu ngahijikeun kana desain dina kontéks tumpukan téknologi anu terus-terusan.

Ku nerapkeun prinsip-prinsip ieu, anjeun bakal mendakan diri anjeun ngamangpaatkeun tren panganyarna dina pamekaran parangkat lunak, kalebet DevOps kana pamekaran sareng pangiriman aplikasi, panggunaan wadah (contona, Docker) jeung kerangka orkestrasi wadah (contona, Kubernetes), pamakéan microservices (kaasup Microservice Arsitéktur NGINX и arsitéktur komunikasi jaringan pikeun aplikasi microservice.

Naon aplikasi modern?

Aplikasi modern? tumpukan modern? Naon sabenerna hartina "modern"?

Kaseueuran pamekar ngan ukur gaduh ide umum ngeunaan naon anu diwangun ku aplikasi modéren, ku kituna kedah jelas ngartikeun konsép ieu.

Aplikasi modern ngadukung sababaraha klien, naha éta antarmuka pangguna perpustakaan React JavaScript, aplikasi sélulér Android atanapi ios, atanapi aplikasi anu nyambung ka API anu sanés. Aplikasi modern nunjukkeun jumlah klien anu teu katangtu anu nyayogikeun data atanapi jasa.

Aplikasi modern nyayogikeun API pikeun ngaksés data sareng jasa anu dipénta. API kudu immutable sarta konstan, sarta teu ditulis husus pikeun pamundut husus ti klien husus. API geus sadia ngaliwatan HTTP (S) jeung nyadiakeun aksés ka sadaya pungsi sadia dina GUI atawa CLI.

Data kudu sadia dina format interoperable ilahar ditarima kayaning JSON. API ngungkabkeun objék sareng jasa dina cara anu bersih, teratur, sapertos RESTful API atanapi GraphQL nyayogikeun antarmuka anu santun.

Aplikasi modéren diwangun dina tumpukan modéren, sareng tumpukan modéren nyaéta tumpukan anu ngadukung aplikasi sapertos kitu, masing-masing. Tumpukan ieu ngamungkinkeun pamekar a gampang nyieun hiji aplikasi kalawan panganteur HTTP na titik tungtung API jelas. Pendekatan anu dipilih bakal ngamungkinkeun aplikasi anjeun gampang nampi sareng ngirim data dina format JSON. Dina basa sejen, tumpukan modern pakait jeung elemen Aplikasi Dua belas-Faktor pikeun microservices.

Vérsi populér tina tipe ieu tumpukan dumasar kana Jawa, Python, titik, inten beureum, PHP и Go. Arsitéktur Microservice NGINX ngagambarkeun conto tumpukan modern dilaksanakeun dina unggal basa disebutkeun.

Punten dicatet yén kami henteu ngadukung pendekatan microservice sacara éksklusif. Seueur anjeun damel sareng monolith anu kedah mekar, sedengkeun anu sanésna ngurus aplikasi SOA anu ngembang sareng mekar janten aplikasi microservice. Masih anu sanésna nuju ka aplikasi tanpa server, sareng sababaraha anu ngalaksanakeun kombinasi di luhur. Prinsip-prinsip anu digariskeun dina artikel manglaku ka unggal sistem ieu ngan ukur sababaraha modifikasi leutik.

prinsip

Ayeuna urang gaduh pamahaman umum ngeunaan naon aplikasi modéren sareng tumpukan modéren, waktosna pikeun nyilem kana arsitéktur sareng prinsip pangembangan anu bakal ngabantosan anjeun pikeun ngembangkeun, ngalaksanakeun, sareng ngajaga aplikasi modern.

Salah sahiji prinsipna siga "nyieun aplikasi leutik", hayu urang sebut waé prinsip leutikna. Aya aplikasi incredibly kompléks nu diwangun ku loba bagian pindah. Sabalikna, ngawangun aplikasi tina komponén-komponén anu leutik sareng diskrit ngagampangkeun pikeun ngarancang, ngajaga, sareng ngagarap éta sacara gembleng. (Catetan yén kami nyarios "nyederhanakeun" sanés "ngajadikeun saderhana").

Prinsip kadua nyaéta yén urang tiasa ningkatkeun produktivitas pamekar ku ngabantosan aranjeunna fokus kana fitur anu aranjeunna kembangkeun, bari ngabebaskeun aranjeunna tina infrastruktur sareng masalah CI / CD salami palaksanaan. Ku kituna, dina nutshell, pendekatan urang fokus kana pamekar.

Tungtungna, sagalana ngeunaan aplikasi Anjeun kudu disambungkeun ka jaringan. Sapanjang 20 taun katukang, kami parantos nyandak léngkah-léngkah anu hadé pikeun masa depan jaringan kusabab jaringan janten langkung gancang sareng aplikasi langkung kompleks. Sakumaha urang tingali, aplikasi modern kedah dianggo dina jaringan ku seueur klien anu béda. Nerapkeun pamikiran jaringan kana arsitéktur ngagaduhan mangpaat anu penting anu saé prinsip leutikna jeung konsep pendekatan, berorientasi pamekar.

Upami anjeun ngémutan prinsip-prinsip ieu nalika ngarancang sareng nerapkeun aplikasi, anjeun bakal gaduh kauntungan anu teu tiasa ditolak dina pamekaran sareng pangiriman produk anjeun.

Hayu urang nempo tilu prinsip ieu dina leuwih jéntré.

Prinsip leutik

Hésé pikeun otak manusa pikeun nampi inpormasi anu ageung dina waktos anu sami. Dina psikologi, istilah beban kognitif nujul kana jumlah total usaha méntal diperlukeun pikeun nahan informasi dina memori. Ngurangan beban kognitif dina pamekar mangrupikeun prioritas sabab ngamungkinkeun aranjeunna pikeun difokuskeun ngarengsekeun masalah tinimbang ngajaga modél kompleks ayeuna tina sakabéh aplikasi sareng fitur anu dikembangkeun dina sirahna.

Prinsip pikeun ngembangkeun aplikasi modern ti NGINX. Bagian 1

Aplikasi terurai kusabab alesan ieu:

  • Ngurangan beban kognitif dina pamekar;
  • Akselerasi sareng nyederhanakeun tés;
  • Pangiriman gancang parobahan dina aplikasi.


Aya sababaraha cara pikeun ngirangan beban kognitif dina pamekar, sareng ieu mangrupikeun prinsip leutikna.

Janten ieu tilu cara pikeun ngirangan beban kognitif:

  1. Ngurangan pigura waktos aranjeunna kudu mertimbangkeun nalika ngamekarkeun fitur anyar - nu pondok pigura waktos, nu handap beban kognitif.
  2. Ngurangan jumlah kode dina hiji-waktos gawé dilumangsungkeun - kirang kode - kirang beban.
  3. Simplify prosés nyieun parobahan incremental kana hiji aplikasi.

Ngurangan pigura waktos pangwangunan

Hayu urang balik deui ka jaman nalika metodologi waterfall éta standar pikeun prosés pamekaran, sareng pigura waktos genep bulan dugi ka dua taun pikeun ngembangkeun atanapi ngapdet aplikasi mangrupikeun prakték umum. Biasana, insinyur bakal mimiti maca dokumén anu relevan sapertos syarat produk (PRD), dokumen rujukan sistem (SRD), blueprint arsitéktur, sareng ngawitan ngagabungkeun sadaya hal ieu janten hiji modél kognitif, numutkeun aranjeunna disandi. Salaku sarat jeung, konsékuénsina, arsitéktur robah, usaha serius kudu dilakukeun pikeun nginpokeun ka sakabéh tim ngeunaan apdet pikeun modél kognitif. Pendekatan sapertos kitu, paling parah, ngan saukur tiasa ngalumpuhkeun padamelan.

Parobihan pangbadagna dina prosés pamekaran aplikasi nyaéta ngenalkeun metodologi lincah. Salah sahiji fitur utama metodologi agile mangrupa ngembangkeun iterative. Kahareupna ieu nyababkeun pangurangan beban kognitif dina insinyur. Gantina meryogikeun tim pangembangan pikeun nerapkeun aplikasi dina hiji siklus panjang, agile pendekatan ngidinan Anjeun pikeun difokuskeun jumlah leutik kode nu bisa gancang diuji sarta deployed, bari ogé narima eupan balik. Beban kognitif aplikasi parantos bergeser tina waktos genep bulan ka dua taun kalayan jumlah spésifikasi anu ageung pikeun tambihan dua minggu atanapi parobihan fitur nargétkeun pamahaman anu langkung kabur ngeunaan aplikasi anu ageung.

Mindahkeun fokus ti aplikasi masif kana fitur leutik husus nu bisa réngsé dina dua minggu ngutruk, kalawan henteu leuwih ti hiji fitur dihareupeun ngutruk salajengna dina pikiran, mangrupakeun parobahan signifikan. Ieu ngamungkinkeun urang pikeun ngaronjatkeun produktivitas ngembangkeun bari ngurangan beban kognitif, nu terus fluctuated.

Dina metodologi agile aplikasi ahir diperkirakeun mangrupa versi rada dirobah tina konsép aslina, jadi titik ahir pangwangunan téh merta ambigu. Ngan hasil unggal ngutruk husus bisa jelas tur tepat.

Codebases leutik

Léngkah salajengna dina ngirangan beban kognitif nyaéta ngirangan kodeu. Sakumaha aturan, aplikasi modéren masif - aplikasi perusahaan anu kuat tiasa diwangun ku rébuan file sareng ratusan rébu garis kode. Gumantung kana kumaha file diatur, tumbu sareng katergantungan antara kode sareng file tiasa atra, atanapi sabalikna. Malahan palaksanaan kode debugging sorangan tiasa janten masalah, gumantung kana perpustakaan anu dianggo sareng kumaha alat debugging ngabédakeun antara perpustakaan / bungkusan / modul sareng kode khusus.

Ngawangun modél mental anu tiasa dianggo pikeun kode aplikasi tiasa nyandak waktos anu pikaresepeun, sareng sakali deui nempatkeun beban kognitif anu ageung pikeun pamekar. Ieu hususna leres pikeun basa kode monolithic, dimana aya jumlah badag kode, interaksi antara komponén fungsi nu teu jelas dihartikeun, sarta separation objék perhatian mindeng kabur sabab wates fungsi teu dimangfaatkeun.

Salah sahiji cara anu efektif pikeun ngirangan beban kognitif dina insinyur nyaéta ngalih ka arsitéktur microservice. Dina pendekatan microservice, unggal jasa museurkeun kana hiji set fitur; sedengkeun harti jasa biasana dihartikeun tur kaharti. Watesan jasa ogé jelas - émut yén komunikasi sareng jasa dilakukeun ngalangkungan API, ku kituna data anu dihasilkeun ku hiji layanan tiasa gampang dialihkeun ka anu sanés.

Interaksi sareng jasa anu sanés biasana dugi ka sababaraha jasa pangguna sareng sababaraha jasa panyadia anu nganggo sauran API anu sederhana sareng bersih, sapertos nganggo REST. Ieu ngandung harti yén beban kognitif dina insinyur diréduksi sacara serius. Tangtangan pangbadagna tetep ngartos modél interaksi jasa sareng kumaha hal-hal sapertos transaksi lumangsung dina sababaraha jasa. Hasilna, pamakéan microservices ngurangan beban kognitif ku cara ngurangan jumlah kode, nangtukeun wates layanan jelas, sarta nyadiakeun pamahaman hubungan antara pamaké sarta panyadia.

Parobahan incremental leutik

Unsur pamungkas tina prinsip leutikna nyaéta manajemén robah. Téh mangrupa godaan tinangtu pikeun pamekar katingal dina dasar kode (malah sugan sorangan, kode heubeul) sarta ngomong, "Ieu crap, urang kudu nulis balik eta sadayana." Kadang-kadang ieu kaputusan katuhu, sarta kadangkala henteu. Éta nempatkeun beban parobahan modél global dina tim pamekaran, anu dina gilirannana nyababkeun beban kognitif anu ageung. Éta langkung saé pikeun insinyur fokus kana parobihan anu tiasa dilakukeun nalika ngutruk, ku kituna aranjeunna tiasa ngagulung fungsionalitas anu diperyogikeun dina waktosna, sanaos sacara bertahap. Produk ahir kedah nyarupaan anu tos direncanakeun, tapi kalayan sababaraha modifikasi sareng uji pikeun nyocogkeun ka kabutuhan klien.

Nalika nulis ulang porsi badag kode, kadang teu mungkin pikeun gancang nganteurkeun parobahanana sabab katergantungan sistem séjén datang kana antrian. Pikeun ngadalikeun aliran parobahan, anjeun tiasa nganggo nyumputkeun fitur. Sacara prinsip, ieu ngandung harti yén pungsionalitasna aya dina produksi, tapi teu sadia ngagunakeun setélan variabel lingkungan (env-var) atawa sababaraha mékanisme konfigurasi séjén. Upami kodeu parantos ngalangkungan sadaya prosés kadali kualitas, maka éta tiasa ngahasilkeun produksi dina kaayaan laten. Nanging, strategi ieu ngan ukur tiasa dianggo upami fiturna diaktipkeun. Upami teu kitu, éta ngan bakal clutter up kode jeung nambahkeun beban kognitif nu developer bakal kudu nungkulan guna jadi produktif. Parobihan manajemén sareng parobihan tambahan ngabantosan ngajaga beban kognitif pamekar dina tingkat anu mampu.

Insinyur kedah ngatasi seueur kasusah bahkan kalayan ngenalkeun fungsionalitas tambahan anu saderhana. Dina bagian tina manajemen, éta bakal prudent pikeun ngurangan beungbeurat teu perlu dina tim meh bisa difokuskeun elemen fungsional konci. Aya tilu hal anu anjeun tiasa laksanakeun pikeun ngabantosan tim pangembangan anjeun:

  1. Paké metodologi agilepikeun ngawatesan pigura waktos nu tim kudu difokuskeun fitur konci.
  2. Laksanakeun aplikasi anjeun salaku sababaraha microservices. Ieu bakal ngabatesan jumlah fitur anu tiasa dilaksanakeun sareng nguatkeun wates anu ngajaga beban kognitif damel.
  3. Milih parobahan incremental leuwih badag tur unwieldy, ngarobah potongan leutik kode. Anggo panyumputan fitur pikeun nerapkeun parobihan sanaos henteu katingali langsung saatos nambihanana.

Upami anjeun ngalarapkeun prinsip leutikna dina padamelan anjeun, tim anjeun bakal langkung bagja, langkung difokuskeun kana ngalaksanakeun fitur anu diperyogikeun, sareng langkung dipikaresep pikeun ngarobih parobahan kualitatif langkung gancang. Tapi ieu lain hartosna yén karya teu bisa jadi leuwih pajeulit, sakapeung, sabalikna, bubuka fungsionalitas anyar merlukeun modifikasi sababaraha layanan, sarta prosés ieu bisa jadi leuwih hese ti sarupa dina arsitektur monolithic. Dina sagala hal, mangpaat nyokot pendekatan smallness patut eta.

Tungtung bagian kahiji.

Moal lami deui kami bakal nyebarkeun bagian kadua tarjamahan, sareng ayeuna kami ngantosan koméntar anjeun sareng ngajak anjeun Buka Poé, nu bakal lumangsung dinten di 20.00.

sumber: www.habr.com

Tambahkeun komentar