Rumah  >  Artikel  >  Java  >  Penstrukturan Projek Berkesan untuk Perkhidmatan Mikro dengan Quarkus

Penstrukturan Projek Berkesan untuk Perkhidmatan Mikro dengan Quarkus

DDD
DDDasal
2024-09-19 06:26:08682semak imbas

Dalam landskap pembangunan perisian yang sentiasa berkembang, penggunaan seni bina perkhidmatan mikro semakin mendapat tarikan kerana kebolehskalaan, fleksibiliti dan kebolehselenggaraannya. Quarkus, sebagai timbunan Kubernetes Asli Java yang disesuaikan untuk GraalVM dan HotSpot, mengoptimumkan Java khusus untuk bekas dan membolehkannya menjadi platform yang berkesan untuk persekitaran tanpa pelayan, awan dan Kubernetes.

Kunci untuk memanfaatkan Quarkus dengan berkesan ialah memahami cara menstruktur projek anda dengan betul. Penstrukturan projek yang betul bukan sahaja meningkatkan kebolehurusan kod tetapi juga memainkan peranan penting dalam kejayaan menggunakan seni bina perkhidmatan mikro.

Seni bina perkhidmatan mikro membezakan dirinya dengan beberapa ciri penentu yang dipertingkatkan oleh Quarkus:

  1. Kecil dan Fokus - setiap perkhidmatan dalam seni bina perkhidmatan mikro direka bentuk untuk melaksanakan satu tugasan yang jelas, menggalakkan kesederhanaan dan tumpuan. Quarkus menyokong perkara ini dengan memudahkan balang yang ringan, boleh boot dan kompilasi asli, yang sesuai untuk tugasan tertentu.

  2. Bebas- kemerdekaan membolehkan perkhidmatan dibangunkan, digunakan dan juga dipertingkatkan tanpa bergantung pada perkhidmatan lain. Falsafah mengutamakan kontena Quarkus memastikan setiap perkhidmatan mikro boleh dijalankan dalam persekitaran terpencilnya.

  3. Loosely Coupled- perkhidmatan berkomunikasi melalui API yang jelas, mengurangkan pergantungan pada pelaksanaan dalaman. Quarkus menggalakkan penyahgandingan melalui piawaian seperti MicroProfile dan JAX-RS, menjadikan interaksi perkhidmatan lancar dan cekap.

  4. Berskala- mengurus peningkatan beban kerja dengan cekap adalah penting. Keupayaan pengaturcaraan reaktif Quarkus membolehkan perkhidmatan menjadi responsif dan berskala di bawah beban yang berbeza-beza.

  5. Fleksibel- keupayaan untuk menyesuaikan diri dengan keadaan yang berubah-ubah difasilitasi oleh ciri penskalaan dan daya tahan dinamik Quarkus, menyokong pelarasan segera dalam persekitaran asli awan.

  6. Berdaya tahan- Quarkus meningkatkan keteguhan perkhidmatan mikro dengan toleransi kerosakan terbina dalam dan keupayaan pemeriksaan kesihatan, memastikan perkhidmatan tahan terhadap kegagalan dan pulih dengan pantas daripada gangguan.

Mengguna pakai struktur projek berbilang modul Maven telah terbukti berkesan dalam mengurus aplikasi Java berskala besar, dan Quarkus menyokong sepenuhnya modaliti ini. Mari kita perincikan struktur berbilang modul Maven:

Projek berbilang modul Maven terdiri daripada POM agregator yang mengatur beberapa submodul. Struktur ini berfaedah untuk membahagikan aplikasi besar kepada unit yang boleh diurus dan boleh digunakan secara bebas yang boleh diselenggara dan dikemas kini dengan mudah. Setiap modul biasanya mempunyai tanggungjawab yang difokuskan dan boleh digunakan secara bebas daripada yang lain.

Berikut ialah reka letak yang dipermudahkan berdasarkan aplikasi dunia sebenar:

parent (aggregator pom.xml)
├── api (API interfaces and DTOs)
│   ├── pom.xml
│   └── src
├── core (Business logic)
│   ├── pom.xml
│   └── src
├── data-access (Data layer integration)
│   ├── pom.xml
│   └── src

Saya telah menyesuaikan struktur projek yang dioptimumkan khusus untuk Quarkus yang meningkatkan kebolehskalaan, kebolehselenggaraan dan keselarasan merentas pasukan pembangunan yang pelbagai. Reka bentuk, yang pada asalnya saya bangunkan pada 2018, telah melihat beberapa penambahbaikan agar lebih sesuai dengan trend teknologi yang berkembang. Pada mulanya, struktur itu tidak direka khusus dengan mengambil kira Quarkus; namun, sepanjang penggunaannya, ia telah terbukti sangat serasi dengan falsafah dan amalan pengekodan Quarkus. Mari kita periksa struktur ini seperti yang dilaksanakan dalam IDE seperti IntelliJ IDEA - walaupun ia boleh disesuaikan dengan berkesan kepada mana-mana IDE moden yang lain.

Effective Project Structuring for Microservices with Quarkus

Anda boleh menemui struktur projek penuh dalam repositori GitHub

Bermula dari peringkat atasan, projek ini dibahagikan kepada beberapa modul, setiap satu dengan peranan tertentu:

  1. api-dtos- modul ini penting untuk menyahganding representasi dalaman data daripada apa yang terdedah secara luaran melalui API. Dengan mengasingkan Objek Pemindahan Data (DTO) daripada model domain, modul memastikan bahawa sebarang perubahan- sama ada dalam skema pangkalan data atau logik perniagaan- tidak menjejaskan pelanggan yang menggunakan API ini secara langsung. Pemisahan ini meningkatkan kestabilan dan pemversian API.

  2. commons- modul utiliti ini bertindak sebagai repositori untuk berkongsi logik, pemalar dan pembantu yang digunakan merentas berbilang modul lain dalam projek. Memusatkan fungsi biasa dengan cara ini mengurangkan pertindihan dan memupuk konsistensi sepanjang aplikasi. Ia amat membantu untuk menyimpan utiliti seperti penukar format data, pengesah standard atau peraturan perniagaan biasa.

  3. konfigurasi- pengurusan konfigurasi diperkemas dalam modul ini, yang menyatukan semua tetapan konfigurasi untuk keseluruhan aplikasi di satu tempat, memudahkan akses dan pengurusan. Repositori konfigurasi pusat ini memastikan tetapan digunakan dan diurus secara konsisten, memudahkan peralihan persekitaran (seperti daripada pembangunan kepada pengeluaran) dan meminimumkan potensi ralat akibat salah konfigurasi. Selain fail konfigurasi yang ringkas, modul ini juga merupakan lokasi yang sesuai untuk menentukan kacang terurus tersuai yang penting di seluruh aplikasi, seperti ObjectMapper untuk penyiaran dan penyahsirilan JSON, penyahserialisasi tersuai dan kacang khusus lain.

  4. db-entiti- didedikasikan secara eksklusif untuk interaksi pangkalan data, modul ini merangkumi semua kelas ORM atau skema pangkalan data, memastikan ia dipisahkan daripada logik perniagaan dan lapisan API. Mengasingkan entiti dengan cara ini membantu mengekalkan prinsip seni bina yang bersih dengan mengasingkan mekanisme capaian data daripada pemprosesan peraturan perniagaan, justeru menggalakkan pangkalan kod yang lebih bersih dan boleh dikesan.

  5. perkhidmatan- di sini terletak logik perniagaan teras, terkandung dalam kelas perkhidmatan yang beroperasi pada model domain dan menggunakan entiti db untuk kegigihan data. Setiap perkhidmatan memfokuskan pada tugas perniagaan tertentu, meningkatkan modulariti dan kebolehgunaan semula. Pemisahan ini juga membantu dalam mengasingkan operasi perniagaan daripada interaksi pelanggan langsung, yang dikendalikan oleh kelas pengawal dalam modul lain, dengan itu mematuhi prinsip tanggungjawab tunggal.

  6. sumber- di tengah-tengah beberapa perdebatan, modul ini dinamakan untuk menggambarkan penjajarannya dengan JAX-RS, di mana kelas yang dianotasi dengan JAX-RS dirujuk sebagai sumber. Modul ini mengendalikan penciptaan titik akhir REST, bertindak sebagai lapisan komunikasi yang antara muka dengan pelanggan luaran. Nama 'sumber' dipilih berbanding alternatif seperti 'rehat' atau 'pengawal' untuk menekankan penyeragaman dan pematuhan kepada prinsip RESTful yang ditetapkan seperti yang diterangkan dalam sumber Red Hat untuk membina API REST dengan Quarkus. Dengan menyelaraskan dengan istilah standard, projek ini bertujuan untuk menjadi intuitif untuk pembangun yang biasa dengan konvensyen JAX-RS dan REST.

  7. aplikasi- berfungsi sebagai modul payung yang menyatukan semua bahagian, memastikan ia berwayar dengan betul dan bersedia untuk digunakan.

Setiap modul ini memainkan peranan strategik yang disesuaikan untuk memupuk kemudahan penyelenggaraan, skalabiliti dan keteguhan dalam persekitaran perkhidmatan mikro Cloud-Native menggunakan Quarkus.

Struktur di atas adalah berdasarkan lapisan Senibina berikut yang disebut dalam sumber RedHat

Effective Project Structuring for Microservices with Quarkus


Banyak Abstraksi adalah Terlalu Banyak

Apabila membincangkan struktur projek, persoalan biasa timbul tentang keperluan untuk pendekatan berlapis yang saya nyatakan sebelum ini. Di sini, saya membangkitkan kata-kata David J. Wheeler:

Semua masalah dalam sains komputer boleh diselesaikan dengan tahap kelalaian yang lain, kecuali untuk masalah terlalu banyak lapisan tidak arah. - [David J. Wheeler daripada The C++ Programming Language edisi ke-4.]

Atas ialah kandungan terperinci Penstrukturan Projek Berkesan untuk Perkhidmatan Mikro dengan Quarkus. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn