Dalam beberapa tahun kebelakangan ini, seni bina perkhidmatan mikro telah menjadi pilihan popular untuk membina sistem berskala, fleksibel dan boleh diselenggara. Dengan membahagikan aplikasi kepada perkhidmatan bebas yang lebih kecil, adalah mungkin untuk mengekalkan, menguji dan menaik taraf setiap perkhidmatan secara autonomi, memudahkan skalabiliti dan kemasukan teknologi baharu.
Dalam artikel ini, kami akan meneroka penciptaan seni bina perkhidmatan mikro menggunakan Go dan NodeJS, dua bahasa yang digunakan secara meluas dan, dalam konteks ini, dengan ciri pelengkap. Selain itu, kami akan menggunakan prinsip Seni Bina Bersih, pendekatan reka bentuk yang bertujuan untuk memastikan kod bersih, modular dan mudah diselenggara serta diuji, memastikan logik perniagaan diasingkan daripada kebimbangan infrastruktur dan/atau kebergantungan.
Objektif projek ini adalah untuk mempraktikkan Go, bahasa yang saya pelajari baru-baru ini, dan menyemak semula konsep asas perkhidmatan mikro. Pada masa yang sama, kami akan menggunakan TypeScript dalam pembangunan perkhidmatan, menggunakan prinsip Seni Bina Bersih untuk mengukuhkan amalan reka bentuk perisian yang baik.
Berdasarkan premis ini, kami akan berpeluang meneroka kedua-dua perkara positif dan cabaran pendekatan ini. Lagipun, bukan setiap perniagaan memerlukan struktur yang begitu kompleks, dan projek praktikal ialah cara terbaik untuk memahami keperluan dan implikasi sebenar perniagaan itu.
Seni bina perkhidmatan mikro membahagikan aplikasi kepada perkhidmatan bebas yang lebih kecil, masing-masing bertanggungjawab untuk bahagian tertentu fungsi. Perkhidmatan ini berkomunikasi melalui API yang jelas, yang memudahkan penyelenggaraan, skalabilitas dan penggunaan teknologi baharu.
Kebaikan:
Modulariti: Memudahkan penyelenggaraan dan pembangunan bebas setiap perkhidmatan.
Kebolehskalaan: Membenarkan kebolehskalaan individu bagi setiap perkhidmatan mengikut permintaan.
Ketahanan: Mengasingkan kegagalan dan mengurangkan kesan masalah dalam satu perkhidmatan kepada yang lain.
Perbandingan dengan Monolith:
Monolith: Aplikasi disepadukan ke dalam satu pangkalan kod. Walaupun mudah pada mulanya, ia boleh menjadi sukar untuk dikekalkan dan diskalakan dari semasa ke semasa.
Perkhidmatan mikro: Mereka menawarkan fleksibiliti dan skalabiliti yang lebih besar, tetapi boleh mewujudkan kerumitan tambahan dalam pengurusan dan komunikasi antara perkhidmatan.
Dalam seni bina perkhidmatan mikro, komunikasi antara perkhidmatan boleh dilakukan dalam dua cara utama: komunikasi tak segerak, menggunakan baris gilir mesej untuk contoh dan komunikasi segerak, melalui REST API. Perlu diketengahkan bahawa terdapat bentuk komunikasi lain selain beratur dan berehat.
Baris gilir mesej digunakan untuk membolehkan komunikasi tak segerak antara perkhidmatan mikro. Mereka membenarkan perkhidmatan menghantar dan menerima mesej tanpa memerlukan respons segera, yang membantu meningkatkan daya tahan dan kebolehskalaan sistem.
Peranan Baris Mesej:
Komunikasi Asynchronous: Memudahkan pertukaran maklumat antara perkhidmatan tanpa memerlukan respons segera.
Ketahanan: Menguruskan lonjakan beban dan kegagalan sementara, memastikan mesej akhirnya diproses.
Pelaksanaan:
Alat: RabbitMQ dan Kafka ialah pilihan popular untuk menguruskan baris gilir mesej.
Penyepaduan: Laksanakan baris gilir mesej untuk komunikasi antara perkhidmatan yang ditulis dalam Go dan NodeJS, memastikan pertukaran data yang cekap dan berskala.
API RESTful digunakan untuk komunikasi segerak antara perkhidmatan. Ia adalah berdasarkan prinsip HTTP dan membenarkan perkhidmatan berinteraksi dengan cara yang standard dan cekap.
Seni Bina Bersih ialah pendekatan reka bentuk yang bertujuan untuk mencipta sistem dengan asas kod tersusun yang mudah diselenggara dan/atau diuji. Ia menekankan pengasingan kebimbangan dan kebebasan lapisan.
Prinsip Seni Bina Bersih:
Pemisahan Lapisan: Bahagikan kod kepada lapisan yang berbeza (domain, aplikasi, infrastruktur) untuk mengasingkan logik perniagaan daripada kebimbangan teknikal.
Kebebasan daripada Rangka Kerja dan Perpustakaan: Pastikan logik perniagaan tidak bergantung pada rangka kerja atau teknologi tertentu.
Aplikasi dalam Microservices:
Organisasi Kod: Susun setiap perkhidmatan mikro mengikut prinsip Seni Bina Bersih untuk memastikan kod modular, boleh diuji dan mudah diselenggara.
Penyelenggaraan dan Evolusi: Memudahkan penambahan ciri baharu dan pengubahsuaian yang sedia ada tanpa menjejaskan integriti sistem.
Dalam ekosistem perkhidmatan mikro, titik akhir HTTP memainkan peranan penting dalam mengatur aliran kerja dokumen, dalam konteks ini, di sinilah semuanya bermula. Titik akhir ini bertanggungjawab untuk menerima dan memproses permintaan untuk membuat dokumen baharu. Apabila menerima permintaan, ia akan beratur dokumen kepada pekerja Go, yang akan menguruskan penjanaan dan pemprosesan dokumen. Selain itu, titik akhir mengeluarkan pemberitahuan kepada perkhidmatan dokumen melalui Baris Mesej, memaklumkan bahawa sumber baharu, iaitu dokumen, telah memasuki baris gilir untuk diproses. Pendekatan ini memastikan penyepaduan yang cekap antara komponen sistem, membolehkan titik akhir mengurus penciptaan dan penjejakan dokumen dalam cara yang diselaraskan dan tidak segerak, sementara pekerja Go menjaga penciptaan dokumen sebenar dan perkhidmatan dokumen dikemas kini pada item baharu dalam beratur.
Selain titik akhir HTTP, sistem ini mempunyai dua pekerja dengan peranan yang berbeza. Yang pertama, dilaksanakan dalam Go, bertanggungjawab untuk menjana dokumen. Ia menggunakan tugas daripada baris gilir mesej, memproses data, dan setelah selesai pemprosesan, memberitahu titik akhir tertentu siap. Kecekapan Go memastikan pemprosesan yang cepat dan mantap. Pekerja kedua, dibangunkan dalam NodeJS, mengendalikan penciptaan keadaan awal dokumen, mentakrifkannya sebagai "tidak diproses" apabila dimasukkan ke dalam sistem. Ketangkasan NodeJS membolehkan pengurusan keadaan dokumen yang cepat dan cekap dari permulaan aliran kerja.
Ringkasnya, sistem yang diterangkan menunjukkan aliran yang diselaraskan dengan baik untuk pengurusan dokumen. Titik akhir HTTP, bersama dengan pekerja Go dan NodeJS, menyediakan penyelesaian bersepadu dan cekap, menjamin pemprosesan dokumen dari penciptaan hingga siap. Interaksi antara pekerja dan REST ditunjukkan dalam imej seni bina di bawah, yang menggambarkan cara seni bina menggalakkan kebolehskalaan dan modulariti, memastikan aliran kerja yang mantap dan diselaraskan. Pendekatan ini bukan sahaja meningkatkan kecekapan operasi, tetapi juga boleh disesuaikan untuk senario penggunaan yang berbeza, menawarkan fleksibiliti dan pertumbuhan masa hadapan.
Lukisan akhir:
Repositori projek: https://github.com/williamMDsilva/microservice-poc
Melaksanakan seni bina perkhidmatan mikro dengan Seni Bina Bersih boleh memberikan beberapa cabaran. Salah satu cabaran utama ialah pemahaman mendalam tentang perniagaan untuk mencipta kod yang benar-benar berskala dan mengekalkan integriti logik perniagaan. Seni Bina Bersih memerlukan kod distrukturkan dengan cara yang memisahkan kebimbangan dengan jelas, yang memerlukan pengetahuan terperinci tentang domain agar abstraksi dan pengasingan menjadi berkesan.
Selain itu, pengetahuan tentang prinsip SOLID adalah penting. Prinsip ini membantu mencipta kod yang lebih kohesif, kurang berganding, dan pemahaman yang kukuh tentangnya dapat menjimatkan masa penyelidikan dan penyelesaian masalah yang ketara. Menggunakan prinsip SOLID bukan sahaja meningkatkan kualiti kod, tetapi juga memudahkan penyelenggaraan sistem dan kebolehskalaan.
Dalam kes khusus Go, asas yang kukuh dalam bahasa boleh meningkatkan kebolehbacaan dan kebolehselenggaraan kod. Go menawarkan alat dan amalan yang membantu memastikan kod bersih dan cekap, dan pengetahuan yang lebih mendalam boleh membuat perubahan apabila melaksanakan perkhidmatan yang kompleks.
Akhir sekali, menggunakan boilerplate yang baik boleh menjadi sangat bermanfaat. Boilerplates yang direka dengan baik untuk Seni Bina Bersih bukan sahaja mempercepatkan permulaan pembangunan, tetapi juga memastikan ciri baharu ditambah dalam piawaian yang dicadangkan pada mulanya. Mereka menyediakan struktur yang membantu mengekalkan ketekalan dan kualiti kod sepanjang projek.
Untuk memajukan dan menambah baik seni bina yang diterangkan, beberapa langkah seterusnya disyorkan:
Sertakan Sumber Pemantauan dan Kebolehmerhatian: Melaksanakan alat pemantauan dan kebolehmerhatian adalah penting untuk memastikan kesihatan dan prestasi sistem. Kemasukan metrik, log dan pengesanan membantu mengenal pasti masalah dan menganalisis gelagat sistem dalam pengeluaran.
Tambah Rawatan untuk Ketiadaan: Adalah penting untuk memasukkan mekanisme untuk menangani kegagalan dan ketiadaan, seperti percubaan semula, pemutus litar dan strategi sandaran, untuk meningkatkan daya tahan sistem dan menjamin kesinambungan perkhidmatan.
Lakukan Ujian Unit dan Penyepaduan: Ujian adalah penting untuk memastikan kualiti kod dan penyepaduan komponen yang betul. Ujian unit mengesahkan fungsi bahagian terpencil kod, manakala ujian penyepaduan memastikan bahawa komponen sistem yang berbeza berfungsi dengan betul bersama-sama.
Perkhidmatan dan Modul Refactor: Menyemak dan memfaktorkan semula perkhidmatan dan modul sedia ada untuk memastikan kod kekal bersih, boleh dibaca dan sejajar dengan prinsip Seni Bina Bersih ialah tugas berterusan yang meningkatkan kebolehselenggaraan dan kebolehskalaan sistem.
Bukti Konsep dengan Kafka: Mempertimbangkan bukti konsep untuk menggantikan RabbitMQ dengan Kafka boleh menawarkan cerapan tentang cara alatan berbeza memberi kesan kepada projek. Analisis impak pada reka bentuk perkhidmatan dan seni bina keseluruhan boleh memberikan cerapan berharga untuk keputusan teknologi masa hadapan.
Projek ini menunjukkan keberkesanan seni bina yang dirancang dengan baik dan kepentingan pelaksanaan yang teliti bagi prinsip Seni Bina Bersih. Penggunaan Go dan NodeJS, digabungkan dengan amalan seperti SOLID dan penggunaan baris gilir mesej dan REST API, menyumbang kepada sistem yang teguh dan berskala. Walau bagaimanapun, membangunkan dan mengekalkan seni bina perkhidmatan mikro memberikan cabaran yang memerlukan pengetahuan mendalam tentang perniagaan dan teknologi. Menangani cabaran ini dengan perancangan yang mencukupi dan penggunaan amalan baik membantu memastikan pembinaan sistem yang cekap dan mampan. Laluan ke hadapan melibatkan penyepaduan penambahbaikan berterusan, seperti pemantauan lanjutan dan bukti konsep baharu, untuk memastikan seni bina sejajar dengan keperluan dan evolusi perniagaan.
Martin, R. C. (2008). Kod Bersih: Kemahiran Perisian Tangkas Praktikal. Buku Alta.
Martin, R. C. (2017). Seni Bina Bersih: Rangka Kerja dan Prinsip untuk Reka Bentuk Perisian. Buku Alta.
ArnabMQ. (n.d.). Tutorial Kedua - JavaScript. Diperoleh daripada https://www.rabbitmq.com/tutorials/tutorial-two-javascript
ArnabMQ. (n.d.). Tutorial Dua - Pergi Diambil daripada https://www.rabbitmq.com/tutorials/tutorial-two-go
Disebabkan sifat akademik dan bukti konsep projek ini, beberapa ciri tidak dilaksanakan dan kekal sebagai hutang teknikal untuk kajian akan datang. Bidang seperti ujian automatik, pengendalian ralat, penstriman sumber, pengesahan perkhidmatan dan pemerhatian adalah topik yang masih perlu diterokai. Segala kritikan membina dialu-alukan dan digalakkan, kerana ia menyumbang kepada peningkatan berterusan dan mendalami pengetahuan tentang bidang penting ini.
Atas ialah kandungan terperinci [MICROSERVICES] Barisan Mesej dan REHAT – Pendekatan dengan Go, NodeJS dan Seni Bina Bersih. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!