我有兴趣设计一个简单的基于局域网的服务器,该服务器可随时接受并处理来自局域网内有限数量的连接(< 25)。该服务器动态生成图像并以 ~40-50 MB/s 的速度将其传输到客户端。对于这种服务器的可用设计示例,您有什么建议/意见吗?多线程、多任务、需要牢记的其他设计范例?如果将此服务器扩展为接受来自互联网上任何地方的连接(> 10000),情况会怎样?参数会改变吗?有可用的示例吗?
这主要是编程类型的问题。我不是在寻找图像压缩或任何其他特定算法或传输。只是对整体设计的更高层次的了解。应该有多线程吗?什么类型的排队?哪种语言最适合?为什么?有没有可用的文献/书籍/文章等?(除了 comer)
感谢任何指点
答案1
又一个高级架构问题。哇,一天就问了两个。我感觉很特别。
是的。无论你做什么,都必须快速而轻松。
我可能会尝试使用事件驱动服务器。Node.js 似乎是一个不错的选择。
不要太担心同时连接的数量,或者数据传输速率。
正确的语言是你最了解的语言,但是拥有一些不错的 HTTP 库的语言也是不错的。
是的。如果设计需要,可能应该有多线程。看...您需要先设计软件,然后再考虑底层系统。
也许可以从一张大纸和一支铅笔开始,写下你想要它做的所有事情,直到 a) 没有东西了,或者 b) 没有铅笔了。
然后去研究如何做所有这些事情。
然后雇佣知道自己在做什么的人。听起来你好像想一次性把所有事情都做完,而且全都自己做。
答案2
所以你有一个服务器在生成东西,你正在寻找一个服务器来接受并使其在互联网上可用?通过 http?
使用基于网络的文件系统,接收文件很容易。根据生成机器的操作系统,在服务机器上安装 NFS 或 samba。在生成器上安装文件系统。在生成器上,运行程序并让它们在安装中写入映像,文件将自动在服务机器上可用(作为本地文件)。
如今,通过 http 提供本地静态文件相当容易,在 linux/bsd 上,我建议使用 nginx。您提到的并发性将很快推动您进入大带宽,具体取决于您进入 CDN 领域的数字。
注意:在这个设计中,您没有提及有关图像的元数据(生成了什么图像、在什么时候生成、其内容是什么等),以及如何触发生成。
答案3
任何参数都会改变吗?
是的。它不是服务器。你知道需要多少处理能力才能并行生成 10,000 张图像吗?考虑到 25 个客户端的带宽,仅带宽就需要 16 GB/s 到 20GB/s(因子 400)。
您这里谈论的可能是 400-500 台服务器。
答案4
“Gearman 是一个将工作外包给其他机器的系统,它将函数调用分派给更适合工作的机器,以并行方式工作,平衡大量函数调用的负载,或者在语言之间调用函数。”