linux

大家好,小弟不才想向各位大神讨教点问题。

我现在遇到了这样一个问题:

       大概有600多个点(就是客户端)需要向server端(需要开发的程序)发送数据包(格式都是T(type)L(length)V(value)类型),每一个数据包都会带有0~5张的图片(每张300kb~500kb),都是长连接的,基本上1天下来会有200万左右的数据量,server端要把数据写入数据库并把图片保存到文件里。

        服务器是linux系统,8核cpu,16G内存

我初步的想法是:用一批线程去负责接收这600多个客户端发送来的数据,存到缓存里,,再开一批线程去处理数据,用一种管理机制(大概就是从缓存里取出一个数据包给处理线程1,再取出一个包给处理线程2,依次循环...)。

但是我感觉问题好多。
1:按照8核的cpu开8个接收线程8个处理线程(管理机制也得启动一个线程去分发数据包,可能还要开其他的检测线程)合适不合适?
2:如何让8个接收线程去接收600多个客户端的数据呢,每个数据包都是很大的,采用什么模型?select模型能行吗?
3:关于接收的数据存到缓存里这部分我有点糊涂,用队列吗?
4:管理机制从队列里取出一个数据包,怎么实现把这个包投递给线程?还有就是,投递数据包给线程的时候线程必须得是在挂起的状态(线程上一次数据已经处理完了,现在处理空闲状态)才能去投递,怎么知道这个线程是不是正在处理数据?
5:如果数据太多,接收线程一直在接收,处理线程处理不过来怎么办?
...........
还有很多问题。
小弟是个IT新手,现在用C++在做一些小型的客户端和服务端程序,对服务器的设计这方面很是头疼,还希望有大神指点,谢谢了。。。
    
       
|


你这种量级不是单机可以搞定的, 肯定要分布式存储,不管是kv还是文件系统。



    延伸阅读