【发布时间】:2019-10-08 05:17:12
【问题描述】:
如果微服务具有可扩展性,例如部署为 AWS 上的 ECS,是否应该在微服务开发中使用并行编程?
如果是,一个实例消耗更多资源与 N 个实例消耗相同资源有什么好处?
并行编程如何匹配https://12factor.net/
附:更具体地说 - 我应该在概念上使用并行流而不是简单流吗?
【问题讨论】:
-
这是一个非常模糊的问题,但考虑任务更有意义,因为服务通常已经是多线程的,使用线程池同时处理多个请求。所以更好的问题是,一个特定的任务是否应该使用多个线程?这取决于任务。
-
两个独立的 JVM 通常比一个拥有 2 个线程的线程池来处理一些任务的 JVM 消耗更多的资源,因为有 JVM 内部类和一些可以在线程之间共享的对象(如缓存、数据库连接游泳池等)
-
所有这些在很大程度上取决于上下文。工作量,“硬件规格”,什么不是。 我应该在概念上使用并行流而不是简单流吗? ... err: measure。不要做假设。试点。在本地和您的目标环境中。并行流会带来很多开销。 AFAIK,除非您在该流中谈论超过 1K 的元素,否则您不应该并行。否则,间接费用会超出您可能获得的收益。
标签: java multithreading parallel-processing scalability 12factor