Dalam beberapa tahun kebelakangan ini, seni bina perkhidmatan mikro telah menjadi pilihan popular untuk membina sistem berskala, fleksibel dan mudah 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 telah 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 adalah cara terbaik untuk memahami keperluan dan implikasi sebenar perniagaan tersebut. 2. Teknologi dan Seni Bina Am 2.1 Seni Bina Perkhidmatan Mikro Seni bina Microservices membahagikan aplikasi kepada perkhidmatan yang lebih kecil dan bebas, masing-masing bertanggungjawab untuk bahagian tertentu fungsi. Perkhidmatan ini berkomunikasi melalui API yang jelas, yang memudahkan penyelenggaraan, skalabilitas dan penggunaan teknologi baharu. Faedah: Modularity: 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:
Ketahanan: Menguruskan lonjakan beban dan kegagalan sementara, memastikan mesej akhirnya diproses.
Penyepaduan: Laksanakan baris gilir mesej untuk komunikasi antara perkhidmatan yang ditulis dalam Go dan NodeJS, memastikan pertukaran data yang cekap dan berskala.
层分离:将代码划分为不同的层(域、应用程序、基础设施),以将业务逻辑与技术问题隔离。
独立于框架和库:确保业务逻辑不依赖于特定的框架或技术。
微服务中的应用:
代码组织:按照清洁架构原则构建每个微服务,以确保代码模块化、可测试且易于维护。
维护和演进:在不损害系统完整性的情况下促进新功能的添加和现有功能的修改。
在微服务生态系统中,HTTP 端点在编排文档工作流程中发挥着至关重要的作用,在这种情况下,它是一切的开始。该端点负责接收和处理创建新文档的请求。收到请求后,它将文档排队到 Go 工作线程,后者将负责生成和处理文档。此外,端点通过消息队列向文档服务发出通知,通知有新资源(即文档)已进入队列进行处理。这种方法确保了系统组件之间的高效集成,允许端点以协调和异步的方式管理文档的创建和跟踪,而 Go 工作线程则负责文档的实际创建,并且文档服务根据文档中的新项目进行更新。排队.
除了 HTTP 端点之外,系统还有两个具有不同角色的工作人员。第一个是用 Go 实现的,负责生成文档。它使用消息队列中的任务,处理数据,并在处理完成后通知特定端点已完成。 Go 的效率确保了快速、稳健的处理。第二个工作程序是用 NodeJS 开发的,负责处理文档初始状态的创建,将它们插入系统时将其定义为“未处理”。 NodeJS 的敏捷性允许从工作流程一开始就快速有效地管理文档状态。
总之,所描述的系统展示了一个协调良好的文档管理流程。 HTTP 端点与 Go 和 NodeJS Worker 一起提供了一个集成且高效的解决方案,保证文档处理从创建到完成。工作人员和 REST 之间的交互反映在下面的架构图中,该图说明了该架构如何促进可扩展性和模块化,从而确保稳健且协调的工作流程。这种方法不仅提高了运营效率,还可以适应不同的使用场景,提供灵活性和未来的增长。
最终效果图:
项目存储库:https://github.com/williamMDsilva/microservice-poc
使用清洁架构实现微服务架构可能会带来一些挑战。主要挑战之一是对业务的深入理解,以创建真正可扩展并保持业务逻辑完整性的代码。干净的架构要求以明确分离关注点的方式构建代码,这需要对该领域的详细了解才能有效地进行抽象和分离。
此外,了解 SOLID 原则也至关重要。这些原则有助于创建更具凝聚力、更少耦合的代码,并且对它们的深入理解可以节省大量的研究和故障排除时间。应用SOLID原则不仅可以提高代码质量,而且有利于系统维护和可扩展性。
就Go的具体情况而言,扎实的语言基础可以提高代码的可读性和可维护性。 Go 提供的工具和实践有助于保持代码整洁和高效,更深入的知识可以在实现复杂服务时发挥作用。
最后,使用好的样板是非常有益的。精心设计的清洁架构样板不仅可以加快开发速度,还可以确保在最初提出的标准中添加新功能。他们提供了一个框架,有助于在整个项目中保持代码的一致性和质量。
为了推进和改进所描述的架构,建议采取一些后续步骤:
包括监控和可观察性资源:实施监控和可观察性工具对于确保系统健康和性能至关重要。包含指标、日志和跟踪有助于识别问题并分析生产中的系统行为。
添加针对不可用的处理:至关重要的是包含处理故障和不可用的机制,例如重试、断路器和回退策略,以提高系统的弹性并确保服务的连续性。
执行单元和集成测试:测试对于确保代码的质量和组件的正确集成至关重要。单元测试验证代码中孤立部分的功能,而集成测试则确保系统的不同组件能够正确地协同工作。
重构服务和模块:审查和重构现有服务和模块以确保代码保持干净、可读并符合清洁架构原则是一项持续的任务,可以提高系统的可维护性和可扩展性。
Kafka 概念验证:考虑用 Kafka 替换 RabbitMQ 的概念验证可以深入了解不同工具如何影响项目。对服务设计和整体架构的影响分析可以为未来的技术决策提供有价值的见解。
这个项目展示了精心规划的架构的有效性以及仔细实施清洁架构原则的重要性。 Go 和 NodeJS 的使用,结合 SOLID 等实践以及消息队列和 REST API 的使用,有助于构建一个强大且可扩展的系统。然而,开发和维护微服务架构提出了挑战,需要深入了解业务和技术。通过充分的规划和采用良好实践来应对这些挑战有助于确保构建高效和可持续的系统。前进的道路包括整合持续改进,例如高级监控和新概念证明,以保持架构与业务需求和发展保持一致。
马丁,R.C.(2008)。干净的代码:实用的敏捷软件技能。阿尔塔图书.
马丁,R.C.(2017)。干净的架构:软件设计的框架和原则。阿尔塔图书.
RabbitMQ。 (日期不详)。教程二 - JavaScript。检索自 https://www.rabbitmq.com/tutorials/tutorial-two-javascript
RabbitMQ。 (日期不详)。教程二 - 取自 https://www.rabbitmq.com/tutorials/tutorial-two-go
由于该项目的学术和概念验证性质,某些功能尚未实现,并仍作为未来研究的技术债务。自动化测试、错误处理、资源流、服务身份验证和可观察性等领域仍然需要探索。欢迎和鼓励所有建设性的批评,因为它有助于不断改进和加深对这些重要领域的了解。
以上是[MICROSERVICES] 消息队列和 REST – 采用 Go、NodeJS 和 Clean 架构的方法的详细内容。更多信息请关注PHP中文网其他相关文章!