我有一个场景,我对使用线程或进程感到困惑:
我有一个应用程序,它与不同公司提供的其他几个第三方Web应用程序进行通信,并从这些应用程序中提取数据。所以基本上我的应用程序点击了那些第三方应用程序提供的api,带来了大量数据并将它们转储到数据库中。
现在有几个因素很重要 - 网络延迟,数据库读/写,两端的慢/快服务器等。因此,应用程序基本上耗费大量时间和资源,其性能取决于各种因素。
现在提供如此庞大的数据,在使用流程/线程方面设计应用程序的最佳方式是什么?
我知道线程有许多积极的方面 - 快速上下文切换,资源共享,轻量级等。并且进程比线程更重。
从我的应用程序的角度来看,我有以下要求:
所以对于上面的场景,建议我应该使用什么 - 在同一个进程或多个进程中进行线程?
请指出我的思维过程中是否遗漏了任何案例。
答案 0 :(得分:0)
首先,恕我直言,你不应该考虑进程和线程级别的解决方案。 除此之外,您应首先提出一个没有任何可扩展性,性能和高可用性问题的解决方案。
例如,据我所知,您将使用REST客户端使用第三方外部服务。所以你需要一个http客户端层。 然后,很可能您会将传入的数据转换为您自己的数据结构。 最后,您需要一个数据库层来保存转换后的数据。
获得解决方案后,您可以对其进行测试,并确定哪一层需要性能改进,可扩展性和高可用性调整。
因为"巨大的"在"庞大的数据"很模糊不仅是数据的大小,而且还有处理这些数据所需的持续时间"巨大的数据"也很重要。如果你需要在1天内处理100 GB的数据,这可能不是什么大问题,但每分钟处理100MB就可以了。
因此,作为我迄今为止学到的一般优化规则,在对优化和可扩展性进行任何更改之前,您应该清楚地了解每个解决方案并找出问题点。否则你可能会花费这么多不必要的时间来优化错误的部分,最后你会想出一个不可扩展且过期的解决方案。