[MICROSERVICES] 메시지 큐 및 REST - Go, NodeJS 및 클린 아키텍처를 사용한 접근 방식

WBOY
풀어 주다: 2024-08-20 06:54:41
원래의
265명이 탐색했습니다.

목차

  • 1. 간략한 맥락
  • 2. 기술 및 일반 아키텍처
  • 2.1. 마이크로서비스 아키텍처
  • 2.2. 마이크로서비스 간 통신
  • 2.2.1. 메시지 대기열(비동기 통신)
  • 2.2.2. REST API(동기 통신)
  • 2.3. 클린 아키텍처
  • 3. 프로젝트 생태계
  • 4. 과제 및 최종 고려 사항
  • 4.1. 구현의 과제
  • 4.2. 다음 단계
  • 4.3. 결론
  • 5. 참고자료
  • 6. 부인 성명

1. 간략한 맥락

최근 몇 년 동안 마이크로서비스 아키텍처는 확장 가능하고 유연하며 유지 관리가 가능한 시스템을 구축하기 위한 인기 있는 선택이 되었습니다. 애플리케이션을 더 작고 독립적인 서비스로 분할함으로써 각 서비스를 자율적으로 유지 관리, 테스트 및 업그레이드할 수 있어 확장성과 새로운 기술의 포함이 용이해집니다.

이 기사에서는 널리 사용되는 두 가지 언어인 Go와 NodeJS를 사용하고 이러한 맥락에서 상호 보완적인 특성을 지닌 마이크로서비스 아키텍처를 생성하는 방법을 살펴보겠습니다. 또한 코드를 깔끔하게 유지하고, 모듈식으로 유지 관리 및 테스트하기 쉽게 하는 것을 목표로 하는 설계 접근 방식인 클린 아키텍처의 원칙을 적용하여 비즈니스 로직이 인프라 문제 및/또는 종속성으로부터 격리되도록 할 것입니다.

이 프로젝트의 목표는 최근 제가 공부하고 있는 언어인 Go를 연습하고 마이크로서비스의 기본 개념을 다시 살펴보는 것입니다. 동시에 우리는 서비스 개발에 TypeScript를 사용하고 Clean Architecture의 원칙을 적용하여 좋은 소프트웨어 설계 관행을 강화할 것입니다.

이러한 전제를 바탕으로 우리는 이 접근 방식의 긍정적인 점과 과제를 모두 탐구할 기회를 갖게 될 것입니다. 결국 모든 비즈니스에 그렇게 복잡한 구조가 필요한 것은 아니며 실용적인 프로젝트가 실제 요구 사항과 의미를 이해하는 가장 좋은 방법입니다.

2. 기술 및 일반 아키텍처

2.1 마이크로서비스 아키텍처

마이크로서비스 아키텍처는 애플리케이션을 각각 기능의 특정 부분을 담당하는 더 작고 독립적인 서비스로 나눕니다. 이러한 서비스는 유지 관리, 확장성 및 새로운 기술 채택을 용이하게 하는 잘 정의된 API를 통해 통신합니다.

혜택:

모듈화: 각 서비스의 유지 관리 및 독립적인 개발을 촉진합니다.
확장성: 수요에 따라 각 서비스의 개별 확장성을 허용합니다.
탄력성: 오류를 격리하고 한 서비스의 문제가 다른 서비스에 미치는 영향을 줄입니다.
모놀리스와의 비교:

모놀리스: 단일 코드 기반으로 통합된 애플리케이션입니다. 처음에는 간단하지만 시간이 지남에 따라 유지 관리 및 확장이 어려워질 수 있습니다.

마이크로서비스: 더 뛰어난 유연성과 확장성을 제공하지만 서비스 간 관리 및 통신이 더욱 복잡해질 수 있습니다.

2.2 마이크로서비스 간 통신

마이크로서비스 아키텍처에서 서비스 간 통신은 두 가지 주요 방법, 즉 메시지 큐를 사용하는 비동기 통신과 REST API를 통한 동기 통신으로 수행될 수 있습니다. 대기열과 휴식 외에 다른 형태의 의사소통도 있다는 점은 주목할 만합니다.

2.2.1 메시지 큐(비동기 통신)

메시지 대기열은 마이크로서비스 간의 비동기 통신을 활성화하는 데 사용됩니다. 서비스가 즉각적인 응답 없이 메시지를 보내고 받을 수 있도록 하여 시스템 복원력과 확장성을 향상시키는 데 도움이 됩니다.

메시지 대기열의 역할:

비동기 통신: 즉각적인 응답 없이 서비스 간 정보 교환을 촉진합니다.
탄력성: 로드 급증과 일시적인 오류를 관리하여 메시지가 최종적으로 처리되도록 합니다.

구현:

도구: RabbitMQ와 Kafka는 메시지 대기열 관리에 널리 사용되는 옵션입니다.
통합: Go와 NodeJS로 작성된 서비스 간 통신을 위한 메시지 대기열을 구현하여 효율적이고 확장 가능한 데이터 교환을 보장합니다.

2.2.2 REST API(동기 통신)

RESTful API는 서비스 간 동기 통신에 사용됩니다. 이는 HTTP 원칙을 기반으로 하며 서비스가 표준화되고 효율적인 방식으로 상호 작용할 수 있도록 합니다.

2.3 클린 아키텍처

클린 아키텍처는 유지 관리 및/또는 테스트가 용이하고 잘 구성된 코드 기반으로 시스템을 만드는 것을 목표로 하는 설계 접근 방식입니다. 관심사의 분리와 레이어의 독립성을 강조합니다.

클린 아키텍처 원칙:

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.

3. Ekosistem projek

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. Setelah 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:

[MICROSERVICES] Message Queues e REST – Uma Abordagem com Go, NodeJS e Clean Architecture

Repositori projek: https://github.com/williamMDsilva/microservice-poc

4. Cabaran dan Pertimbangan Akhir

4.1 Cabaran dalam Pelaksanaan

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 rangka kerja yang membantu mengekalkan ketekalan dan kualiti kod sepanjang projek.

4.2 Langkah Seterusnya

Untuk memajukan dan menambah baik seni bina yang diterangkan, beberapa langkah seterusnya disyorkan:

  1. 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 tingkah laku sistem dalam pengeluaran.

  2. 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 memastikan kesinambungan perkhidmatan.

  3. 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.

  4. 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.

  5. 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.

4.3 Kesimpulan

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 penggabungan penambahbaikan berterusan, seperti pemantauan lanjutan dan bukti konsep baharu, untuk memastikan seni bina sejajar dengan keperluan dan evolusi perniagaan.

5. Rujukan

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

Penafian

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 penambahbaikan berterusan dan mendalami pengetahuan tentang bidang penting ini.

위 내용은 [MICROSERVICES] 메시지 큐 및 REST - Go, NodeJS 및 클린 아키텍처를 사용한 접근 방식의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!