我有100多个视频流通道可以同时处理所有视频流。我需要捕获视频,生成缩略图,并将它们作为Web服务提供。为了生成缩略图,我可以使用JMF等(我注意到有另一篇文章谈论如何生成和访问:better quality thumbnails from larger image files)。但我担心的是:如何扩展? Java EE EJB还是简单的Java SE线程?什么是缺点和优点?如何使用EJB水平扩展?
我对可伸缩性问题并不熟悉,我非常感谢您提出的建议。
感谢。
答案 0 :(得分:4)
同意......线程应该有助于在单台机器上扩展。如果你想在不同的机器上扩展 - 使用Terracotta。
答案 1 :(得分:0)
Java SE Threads可以帮助您在单个机器上扩展,但如果您需要在不同的机器上横向扩展,EJB将是一种方法。
如果是我,我可能会将其分配到一个单独的Web服务层,该层可以根据需要在尽可能多的计算机上运行,然后在这些计算机之间进行负载平衡。
答案 2 :(得分:0)
在这种情况下,我没有看到使用EJB的理由。你必须问自己瓶颈在哪里。我的赌注是视频处理。我会描述你的应用程序,看看有多少线程可以处理,然后他们花费更多的时间等待他们的时间片而不是处理它们。在添加更多线程之后,将不会添加更多吞吐量。此时,您知道机器将执行的操作以及维持特定吞吐量所需的机器数量。你如何跨机器扩展是另一个问题。
答案 3 :(得分:0)
这是两个截然不同的问题。
捕获/处理听起来像渲染农场一样的问题。那些是水平缩放的。大多数解决方案涉及一系列作业,您甚至不需要在Java中执行此操作;找到你喜欢的简单解决方案。 “渲染农场ffmpeg”或类似的东西应该会在谷歌产生结果。
您的“作为Web服务提供服务”部分有些未定义。如果您希望这些视频可以访问,您可能只需将它们放在HTTP服务器上 - 这些可以轻松实现负载平衡,因此可以横向扩展 - 存储速度或网络带宽可能是您的第一个瓶颈。
答案 4 :(得分:0)
抛弃正式的J2EE堆栈。
相反,一个很好的消息队列,它将JMS与运行Y个线程的X个JVM作为消费者进行对话。