Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何在microservice架构(并发管道)中从一台服务器下载多个文件并同时上载到另一台服务器_Scala_Io_Jvm_Pipe_Scale - Fatal编程技术网

Scala 如何在microservice架构(并发管道)中从一台服务器下载多个文件并同时上载到另一台服务器

Scala 如何在microservice架构(并发管道)中从一台服务器下载多个文件并同时上载到另一台服务器,scala,io,jvm,pipe,scale,Scala,Io,Jvm,Pipe,Scale,我正在编写一个(scala/jvm)微服务,它是CI解决方案的一部分。 它的工作是从云上的一些外部构建工具下载构建的工件,并将它们上传到可以使用它们的存储库,例如docker注册表或maven风格的存储库,如Nexus 每个构建都有很多这样的文件,而且总是有很多这样的构建,所以要解决的问题是规模问题 我的微服务与事件队列(kafka)集成在一起,因此可以轻松地将任务异步分配给工作人员 我正在寻找管理我的资源的最佳方法:集群节点、线程、io、内存、存储—处理所有文件的下载和上载,最好不将每个文件的

我正在编写一个(scala/jvm)微服务,它是CI解决方案的一部分。
它的工作是从云上的一些外部构建工具下载构建的工件,并将它们上传到可以使用它们的存储库,例如docker注册表或maven风格的存储库,如Nexus

每个构建都有很多这样的文件,而且总是有很多这样的构建,所以要解决的问题是规模问题

我的微服务与事件队列(kafka)集成在一起,因此可以轻松地将任务异步分配给工作人员

我正在寻找管理我的资源的最佳方法:集群节点、线程、io、内存、存储—处理所有文件的下载和上载,最好不将每个文件的全部内容存储在本地文件或内存中,而只是通过管道从源服务器传输到目标服务器

我不确定实际编写管道代码本身的最佳方法是什么,也不确定如何最好地使用工人

我在考虑通过在输入服务器上执行get操作、在目标服务器上执行post操作以及在流之间创建一个内存管道(带有一些缓冲区)来为每个文件分配一个事件到管道,并在每个worker中为该文件分配一个事件。 在这种情况下,输入服务器和目标服务器可能会有不同的传输速度,我不确定这是否是一个问题。我认为这应该通过操作系统级别的TCP/IP来解决,而不需要应用程序来处理。我认为,如果我为下载客户端和上传客户端使用不同的线程池,我可以期望使用非阻塞io来执行管道

或者,我可以做一些完全其他的事情,做一些生产者/消费者的工作,其中一些工人下载文件,而其他人上传文件?这意味着更多的存储和共享存储,以及这个微服务的定制配置,我对此并不感到兴奋

欢迎提出任何其他建议/见解。
最终的解决方案(希望)应该是健壮的、可扩展的,并且尽可能简单。

您确定源云服务在近期/中期不会提供“将文件导出到Nexus”解决方案吗?如果是这样的话,您的解决方案可能不必是完全有效的

我会看FS2的这份工作