用于给定方案的进程或线程?

时间:2015-12-29 11:10:05

标签: java multithreading process scalability distributed-computing

我有一个场景,我对使用线程或进程感到困惑:

我有一个应用程序,它与不同公司提供的其他几个第三方Web应用程序进行通信,并从这些应用程序中提取数据。所以基本上我的应用程序点击了那些第三方应用程序提供的api,带来了大量数据并将它们转储到数据库中。

现在有几个因素很重要 - 网络延迟,数据库读/写,两端的慢/快服务器等。因此,应用程序基本上耗费大量时间和资源,其性能取决于各种因素。

现在提供如此庞大的数据,在使用流程/线程方面设计应用程序的最佳方式是什么?

我知道线程有许多积极的方面 - 快速上下文切换,资源共享,轻量级等。并且进程比线程更重。

从我的应用程序的角度来看,我有以下要求:

  1. 数据库和网络将在多个进程/线程之间共享。
  2. 互相排斥必须在那里。
  3. 应用程序必须防崩溃。因此,当一个线程崩溃时,它不会影响整个过程。
  4. 所以对于上面的场景,建议我应该使用什么 - 在同一个进程或多个进程中进行线程?

    请指出我的思维过程中是否遗漏了任何案例。

1 个答案:

答案 0 :(得分:0)

首先,恕我直言,你不应该考虑进程和线程级别的解决方案。 除此之外,您应首先提出一个没有任何可扩展性,性能和高可用性问题的解决方案。

例如,据我所知,您将使用REST客户端使用第三方外部服务。所以你需要一个http客户端层。 然后,很可能您会将传入的数据转换为您自己的数据结构。 最后,您需要一个数据库层来保存转换后的数据。

获得解决方案后,您可以对其进行测试,并确定哪一层需要性能改进,可扩展性和高可用性调整。

因为"巨大的"在"庞大的数据"很模糊不仅是数据的大小,而且还有处理这些数据所需的持续时间"巨大的数据"也很重要。如果你需要在1天内处理100 GB的数据,这可能不是什么大问题,但每分钟处理100MB就可以了。

因此,作为我迄今为止学到的一般优化规则,在对优化和可扩展性进行任何更改之前,您应该清楚地了解每个解决方案并找出问题点。否则你可能会花费这么多不必要的时间来优化错误的部分,最后你会想出一个不可扩展且过期的解决方案。