FireHe 发表于 2015-11-6 19:09:33

想建立一套数据服务器,请各位高手指点一下需要的资源...

现在有一个项目,用于设备上传数据到数据库存储。

第一个阶段

设备2万到5万的数量规模,通过HTTP每次上传的数据量大约100Byte。一天上传一次。所有设备几乎都是集中在5分钟内传完。
上传的数据需要保留3个月。

我计划采用阿里云的服务,但不知道这样需要用什么样规模的数据库?什么规模的服务器?什么样的程序架构?

第二个阶段

设备上传频率调整为每分钟一次,其他不变。

能否考虑在上面的基础上扩展?

FireHe 发表于 2015-11-6 19:10:39

{:lol:}搞惯了单片机。算一下数据库的条数,感觉很恐怖,无所适从了

aozima 发表于 2015-11-6 19:15:56

直接用阿里的数据库,先随便买个入门的,等容量不够了再加。
在线升级容量的,多省事。

FireHe 发表于 2015-11-6 19:27:57

aozima 发表于 2015-11-6 19:15
直接用阿里的数据库,先随便买个入门的,等容量不够了再加。
在线升级容量的,多省事。 ...

主要考虑几个方面的问题

1、数据库的选型,MySQL不知道搞不搞得定这个

算起来,三个月60万~150万条数据了。不过数据查询倒是很简单,一天查不了几次。

但数据量倒没多大,第一阶段总量才60MB~150MB

2、系统代码的架构,第一阶段需要并发处理。5分钟内会有5万个设备上传,这样是否需要做什么处理?

3、服务器带宽和并发数需要多少?

redroof 发表于 2015-11-6 20:23:28

FireHe 发表于 2015-11-6 19:27
主要考虑几个方面的问题

1、数据库的选型,MySQL不知道搞不搞得定这个


默认的mySql好像不支持直接用http上传数据,你还得弄几个VPS来收HTTP请求,然后VPS自己负责写入数据库。
这样,VPS顺便可以缓冲瞬间突发的数据,顺便也降低了对数据库的并发要求。

FireHe 发表于 2015-11-6 22:50:03

redroof 发表于 2015-11-6 20:23
默认的mySql好像不支持直接用http上传数据,你还得弄几个VPS来收HTTP请求,然后VPS自己负责写入数据库。
...

肯定是需要服务器软件啦

但这个数据上传时间很集中,算起来这个并发数量很大啊

5分钟5W个连接,对于服务器也是不小的挑战。对于数据库也是个难题。

Vmao 发表于 2015-11-6 23:30:57

golangor   nodejs

gxnnhy 发表于 2015-11-7 01:29:13

阿里云,按量购买,你的流量很小,每年服务器租用只要450。数据量太小,直接用SQLite

工业酒精 发表于 2015-11-7 04:20:33

这个需求其实和数据量关系不大,因为每个数据才100Byte

5分钟5W的连接,还算OK的,算下来每秒也就166个请求,不管大量。

但是不建议程序直接往数据库里面写,因为虽然算下来每秒只有166个请求,但是很可能集中在前几秒并发访问。

建议:
1、程序获得数据后,往消息队列中放,然后有后端程序消费队列写入数据库。所以需要ECS、RDS和Message Service;
2、因为设备和服务器之间只有一次数据交换,所以服务器尽量是接收完请求后立即主动关闭连接,释放资源。需要调整linux几个tcp参数的;
3、设备端最好有重试机制,第一次失败后,隔几秒重新上传;

john78 发表于 2015-11-7 07:03:59

服务器用什么语言php?

redroof 发表于 2015-11-7 08:29:57

FireHe 发表于 2015-11-6 22:50
肯定是需要服务器软件啦

但这个数据上传时间很集中,算起来这个并发数量很大啊


平均一秒不到两百个连接,http的数据量并不大。当然,对数据库的写入事务来说有点多,很多数据库一秒钟写不了200个事务。最好用消息队列来缓冲一下,以便可以批量写入。
不放心了你先拿web测试工具试一下

FireHe 发表于 2015-11-7 15:39:37

redroof 发表于 2015-11-7 08:29
平均一秒不到两百个连接,http的数据量并不大。当然,对数据库的写入事务来说有点多,很多数据库一秒钟写 ...

主要是不太可能平均,峰值可能会出现每秒上千甚至上万。数据量不大,但是连接数的量挺大的,瞬间PV上万哦。

ywhbn 发表于 2015-11-7 18:18:50

用公有云服务的好处就是这些都不用自己操心 {:biggrin:}
楼主看一下阿里云的ACE

redroof 发表于 2015-11-7 18:42:23

FireHe 发表于 2015-11-7 15:39
主要是不太可能平均,峰值可能会出现每秒上千甚至上万。数据量不大,但是连接数的量挺大的,瞬间PV上万哦 ...

连接数多少都归ecs管,这种并发连接是无状态的,你用它自带的负载均衡就行了,多个ecs一起上。
ecs收下数据去写数据库,这个时候需要一个消息队列来缓冲一下,以便让数据库可以批量写。一大群ecs并发去写数据库的效率很低的。交给一个单独的ecs去批量写会快的多

redroof 发表于 2015-11-7 19:25:48

FireHe 发表于 2015-11-7 15:39
主要是不太可能平均,峰值可能会出现每秒上千甚至上万。数据量不大,但是连接数的量挺大的,瞬间PV上万哦 ...

另外,你是小米什么的专门做秒杀吗?否则为什么不想办法来平均一下负载?
就算所有设备都规定为每天几点整上传数据,实际你稍微加个随机数,在正负三分钟内微调一下,几万个设备就均匀分布在六分钟内了。每秒钟几百个数据量很小的http请求,单个ecs都能撑下来。

FireHe 发表于 2015-11-7 20:52:29

redroof 发表于 2015-11-7 19:25
另外,你是小米什么的专门做秒杀吗?否则为什么不想办法来平均一下负载?
就算所有设备都规定为每天几点 ...

感谢 redroof 的热心指导

这个平均负载是有做的。但是只能平均负载的计划上传时间,由于网络延时、操作延时等因素,实际的集中情况会比理论上高。我只是考虑得比较保守,相对数据夸张了

从目前的了解来看,楼上诸位推荐的方案都是非常靠谱的方案。阿里云这方面确实做得很到位呀。几乎都不用自己想这些事情了。我原来还以为要自己建立服务器自己做,几乎要打退堂鼓了。

redroof 发表于 2015-11-7 22:24:46

FireHe 发表于 2015-11-7 20:52
感谢 redroof 的热心指导

这个平均负载是有做的。但是只能平均负载的计划上传时间,由于网络延时、操作 ...

放心吧,有几万个客户端了,大家的网络延时会抵消掉的。有人延时大,也有延时小的。
一个低配的ecs,对付每秒几百个请求很容易。请求再多可以上负载均衡。注意:单机一旦超过5兆的带宽,价格就明显上涨,就是让你尽量用大量的低配机器,而不是少量高配的。
批量写数据库,一秒钟写入几万条很轻松的。完全够你用。

FireHe 发表于 2015-11-8 11:54:29

redroof 发表于 2015-11-7 22:24
放心吧,有几万个客户端了,大家的网络延时会抵消掉的。有人延时大,也有延时小的。
一个低配的ecs,对付 ...

谢谢redroof

我再去深入了解一下
页: [1]
查看完整版本: 想建立一套数据服务器,请各位高手指点一下需要的资源...