我有 100 多个视频流通道需要同时处理。我需要捕获视频、生成缩略图并将其作为 Web 服务提供。对于缩略图的生成,我可以使用 JMF 等(我注意到有另一篇文章讨论如何生成和访问: 较大图像文件中的质量更好的缩略图)。但我担心的是:如何扩展?Java EE EJB 还是简单的 Java SE 线程?有什么缺点和优点?如何使用EJB进行水平扩展?

我对可扩展性问题不太熟悉,非常感谢您的建议。

谢谢。

有帮助吗?

解决方案

同意......线程应该有助于在单台机器上扩展。如果你想在不同的机器上扩展 - 使用Terracotta。

其他提示

Java SE 线程可以帮助您在单台计算机上进行扩展,但如果您需要在不同的计算机上进行水平扩展,EJB 将是一种方法。

如果是我,我可能会把它外包给一个单独的 Web 服务层,该层可以根据需要在尽可能多的机器上运行,然后在这些机器之间进行负载平衡。

在这种情况下,我没有看到使用EJB的理由。你必须问自己瓶颈在哪里。我的赌注是视频处理。我会描述你的应用程序,看看有多少线程可以处理,然后他们花费更多的时间等待他们的时间片而不是处理它们。在添加更多线程之后,将不会添加更多吞吐量。此时,您知道机器将执行的操作以及维持特定吞吐量所需的机器数量。你如何跨机器扩展是另一个问题。

这是两个截然不同的问题。

捕获/处理听起来像渲染农场一样的问题。那些是水平缩放的。大多数解决方案涉及一系列作业,您甚至不需要在Java中执行此操作;找到你喜欢的简单解决方案。 “render farm ffmpeg”或类似的东西应该会在谷歌产生结果。

您的“作为Web服务提供服务”部分有些未定义。如果您希望这些视频可以访问,您可能只需将它们放在HTTP服务器上 - 这些可以轻松实现负载平衡,因此可以横向扩展 - 存储速度或网络带宽可能是您的第一个瓶颈。

抛弃正式的J2EE堆栈。

相反,一个很好的消息队列,它将JMS与运行Y个线程的X个JVM作为消费者进行对话。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top