multithreading - 单体(对比)微服务 ==> 线程(对比)进程

标签 multithreading process docker microservices

我有一个单进程有 5 个线程的单体应用程序。每个线程完成某些特定任务。考虑使用 docker 将此应用程序移动到微服务。如果我看一下架构,每个工作线程都会变成一个 docker 进程。因此,在某种程度上,在我的案例中,单体与微服务变得更像是线程与进程的讨论。

拥有单体的最初想法是为了性能而拥有线程并共享相同的内存。现在有了微服务架构,我被推向了一个从性能角度来看可能不适合的流程模型。

我有点卡在如何解决这个问题上。

最佳答案

这里你忽略的是,微服务并不适用于世界上任何软件系统!在做任何事情之前,请考虑将您当前的单体系统迁移到微服务的驱动程序。您正在寻求高可用性和可扩展性吗?你想自由地用不同的编程语言编写每个线程吗?您的系统是否复杂到无法用单一的方式来理解?最后,您准备好支付拥有微服务风格的费用了吗?

微服务给系统带来了很多复杂性,并且由于服务的繁杂性,可能会导致性能下降以支持更高的可扩展性。如果性能是一个重要的关注点,系统不是那么大,并且您对上述大部分问题的回答都是“否”,我强烈建议您不要选择微服务风格。相反,尝试模块化您当前的代码库并重构代码以获得更好的质量和可理解性。

关于 Docker,您甚至可以使用单体风格来使用它,以消除开发和部署环境中的一些部署障碍和不一致。如果上面提到的部署问题不困扰您,也不要选择 docker,因为它只是一层计算开销。

关于multithreading - 单体(对比)微服务 ==> 线程(对比)进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32364506/

相关文章:

MySql使用Makefile创建数据库

node.js - docker/bin/bash : nodemon: command not found

docker - 尝试访问容器化的 .netcore3.1 WeatherForecast 应用程序时获取 "localhost refused to connect."

java - 如何知道锁已被获取

java - 了解执行器服务中的线程池大小

c# - 在具有 ui/非 ui 线程差异的 WPF 中使用 PInvoke

c++ - 定期调用 GetProcessTimes 返回相同的结果

c# - Rx.NET 在所有回调之后再次直接调用函数

process - 一个程序可以有多个进程吗?

windows - 在批处理文件中,如何判断进程是否正在运行?