【问题标题】:Should multithreading be used in microservices?微服务中应该使用多线程吗?
【发布时间】: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


【解决方案1】:

当然,想象一个微服务需要对一个 dB 或其他微服务执行多个独立调用并聚合结果。由于调用是独立的,它们可以并行执行,因此总时间最多是执行最慢调用所需的时间。

【讨论】:

    【解决方案2】:

    基本上你提供的链接也已经回答了你的问题

    这并不排除各个进程通过运行时 VM 内的线程处理自己的内部多路复用,或在 EventMachine、Twisted 或 Node.js 等工具中找到的异步/事件模型。但是单个 VM 只能增长到如此之大(垂直规模),因此应用程序还必须能够跨越在多个物理机器上运行的多个进程。

    https://12factor.net/concurrency

    【讨论】:

      猜你喜欢
      • 2020-08-27
      • 2019-10-23
      • 1970-01-01
      • 2016-07-02
      • 2018-12-27
      • 2017-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多