Microservices 是否可以通过microservice使用不同的语言构建项目?

Microservices 是否可以通过microservice使用不同的语言构建项目?,microservices,Microservices,是否可以通过microservice使用不同的语言构建项目?比如,我想构建一个酒店管理系统,我可以使用asp.net内核和nodejs来实现不同的模块吗。认为 我想使用nodejs获取数据,并使用.netcore发布数据。TIA是的。然后需要某种形式的进程间通信(IPC)。每种语言都存在于自己的过程中,不管操作系统的风格是什么,也不管您使用的是什么语言。通常,进程实际上是通过API进行通信的。还有其他方法可以通过数据库、内存(RAM)、信号甚至普通文件(在某些共享介质上)来安排IPC。是的。然后

是否可以通过microservice使用不同的语言构建项目?比如,我想构建一个酒店管理系统,我可以使用asp.net内核和nodejs来实现不同的模块吗。认为
我想使用nodejs获取数据,并使用.netcore发布数据。TIA是的。然后需要某种形式的进程间通信(IPC)。每种语言都存在于自己的过程中,不管操作系统的风格是什么,也不管您使用的是什么语言。通常,进程实际上是通过API进行通信的。还有其他方法可以通过数据库、内存(RAM)、信号甚至普通文件(在某些共享介质上)来安排IPC。

是的。然后需要某种形式的进程间通信(IPC)。每种语言都存在于自己的过程中,不管操作系统的风格是什么,也不管您使用的是什么语言。通常,进程实际上是通过API进行通信的。还有其他方法可以通过数据库、内存(RAM)、信号甚至普通文件(在某些共享介质上)来安排IPC。

是的,您可以为不同的微服务选择不同的语言/工具/技术。但更好的选择是选择一种团队完全熟悉的语言。如果你选择另一种语言,那么你应该有具体的理由。例如,在我的一个项目中,大多数服务都是用NodeJS编写的。我们用Go语言编写了一个服务,因为我们需要性能。

是的,您可以为不同的微服务选择不同的语言/工具/技术。但更好的选择是选择一种团队完全熟悉的语言。如果你选择另一种语言,那么你应该有具体的理由。例如,在我的一个项目中,大多数服务都是用NodeJS编写的。我们用Go语言编写了一个服务,因为我们需要性能。

是的,可以为不同的微服务使用不同的语言。例如,您可以用C#(.NETCore)编写micro-service-A,用Java编写micro-service-B,用NodeJS编写micro-service-C等等(您可以从这里的许多语言中进行选择)。但通常不建议这样做。如果你没有充分的理由,至少不会

微服务架构的好处

事实上,这是微服务的好处之一,能够为每个微服务使用不同的语言、技术、库、数据库和其他组件但是你应该小心不要做得太多,并且只在需要的时候做。在现实中,公司及其开发团队坚持使用1或2个技术堆栈,并使用它开发所有服务

选择不同语言和技术的推理

这里有两件事你应该考虑的是:

  • 开发人员技能。用其中一种技术堆栈/语言检查您的开发人员技能集和诀窍。如果您的大多数开发人员都精通.NET,那么选择.NET作为切换到其他堆栈/语言的成本将需要时间和学习努力
  • 业务需求和领域。在开始使用语言之前,先考虑一下语言的强弱面。例如,如果您有大量CPU密集型工作/负载的微服务,您可能希望避免使用NodeJ。在这种情况下,.NETCore或Golang可能是更好的选择。大多数主要的技术堆栈将涵盖web开发的标准要求,但是提前回顾和分析总是好的
  • 数据库。您不仅可以灵活地使用编程语言,还可以灵活地使用数据库。选择最适合特定微服务领域或用例的数据库。例如,通常对于大多数具有标准CRUD类型操作的微服务,您可以使用一些关系数据库,如Postgresql或MySql。另一方面,如果你有一个像微服务这样的特殊案例,有一些全文搜索要求,ElasticSearch将是一个不错的选择。这取决于你的需要
  • 适用于多种技术。对于许多编程语言来说,技术、框架和数据库技术也意味着不同类型的维护问题。更新库、为多种数据库技术编写存储库类需要时间和精力
  • 历史原因。一些公司有一些遗留系统,这些系统是使用一些较旧的技术(如VB6或类似技术)开发的。例如,他们连接到它来提取一些数据。如果他们决定将系统的某些部分(或整个系统)迁移到微服务,他们会选择一个新的技术堆栈或多个技术堆栈(较新的技术将吸引开发人员;))。在一段时间内,他们拥有一个具有多个堆栈/语言的系统,直到将所有堆栈/语言迁移到较新的堆栈/语言
  • 考虑共享库(如npm、nuget等包)。如果大多数微服务都是用同一种语言编写的,那么就可以创建和重用公共代码。这包括交叉关注点,如:数据库访问代码(存储库、工作单元、ORM)、队列交互代码、测试基础设施(单元和集成测试基础设施/设置代码)、日志记录和其他常见代码。如果您对不同的微服务使用不同的语言,那么您将无法共享此类代码。用多种语言编写和维护此文件可能会花费大量时间
  • 前端。类似的情况也适用于前端。从技术上讲,如果前端模块化或拆分为微型前端,则可以使用不同的技术(库和框架)。通常与后端微服务一样,您选择一个库,例如React并坚持使用它,除非您有充分的理由使用它和/或将它与其他东西结合使用
结论

我的建议是