我在一个托管小型Java应用程序的平台上工作,所有这些应用程序目前都使用单个线程,位于Docker引擎中,使用来自Kafka服务器的数据并记录到中央数据库。
现在,我需要将另一个Java应用程序放到这个平台上。手边的这个应用程序使用了大量的多线程,我已经在Docker容器中测试了它,它在那里工作得很好,所以我已经准备好将它部署到手动缩放的平台上,也就是说,有人会定义要启动的容器的数量,每个容器都包含这个应用程序的一个实例。
我的架构师有一个反对意见,他说“在分布式环境中,我们从不使用多线程”。因此,现在,我必须重构我的应用程序,消除其中任何与线程相关的逻辑,使其成为单线程。我要求他提供更详细的理由,但他大叫“如果你不知道这个原则,你在Java附近就没有立足之地”。
在分布式系统中使用多线程Java应用程序真的是一个错误吗?分布式系统是一个包含10或20台物理机的简单集群,每个物理机托管许多虚拟机,然后这些虚拟机运行Docker容器,其中包含Java应用程序。
老实说,我不认为容器内存在多线程的问题。这真的是一个错误还是某种“禁止”?
谢谢。
发布于 2019-05-17 19:05:58
例如,当您编写将在Java EE应用程序服务器中运行的web应用程序时,通常不应在web应用程序中启动自己的线程。应用服务器将管理线程,并将分配线程来处理服务器上的传入请求。
但是,在分布式环境中使用多线程从来都不是一个好主意,这是没有硬规则或理由的。
使应用程序成为单线程有很多优点:代码会更简单,而且您不必处理复杂的并发问题。
但是“在分布式环境中我们从不使用多线程”并不一定总是正确的,“如果你不知道这个原则,你就没有接近Java的位置”听起来傲慢和居高临下。
发布于 2019-05-17 18:44:41
我猜他只是告诉你这一点,因为使用单线程可以消除多线程和数据排序问题。不过,多线程并没有什么问题。
发布于 2019-06-12 19:22:08
什么?我们在我们的应用程序中大量使用了RxJava和Spring Reactor,而且它运行得很好。无论如何,您不能跨两个JVM使用线程。因此,只需确保您的逻辑在单个JVM上如您所期望的那样工作。
https://stackoverflow.com/questions/56184687
复制相似问题