想建立一套数据服务器,请各位高手指点一下需要的资源...
现在有一个项目,用于设备上传数据到数据库存储。第一个阶段
设备2万到5万的数量规模,通过HTTP每次上传的数据量大约100Byte。一天上传一次。所有设备几乎都是集中在5分钟内传完。
上传的数据需要保留3个月。
我计划采用阿里云的服务,但不知道这样需要用什么样规模的数据库?什么规模的服务器?什么样的程序架构?
第二个阶段
设备上传频率调整为每分钟一次,其他不变。
能否考虑在上面的基础上扩展? {:lol:}搞惯了单片机。算一下数据库的条数,感觉很恐怖,无所适从了 直接用阿里的数据库,先随便买个入门的,等容量不够了再加。
在线升级容量的,多省事。 aozima 发表于 2015-11-6 19:15
直接用阿里的数据库,先随便买个入门的,等容量不够了再加。
在线升级容量的,多省事。 ...
主要考虑几个方面的问题
1、数据库的选型,MySQL不知道搞不搞得定这个
算起来,三个月60万~150万条数据了。不过数据查询倒是很简单,一天查不了几次。
但数据量倒没多大,第一阶段总量才60MB~150MB
2、系统代码的架构,第一阶段需要并发处理。5分钟内会有5万个设备上传,这样是否需要做什么处理?
3、服务器带宽和并发数需要多少? FireHe 发表于 2015-11-6 19:27
主要考虑几个方面的问题
1、数据库的选型,MySQL不知道搞不搞得定这个
默认的mySql好像不支持直接用http上传数据,你还得弄几个VPS来收HTTP请求,然后VPS自己负责写入数据库。
这样,VPS顺便可以缓冲瞬间突发的数据,顺便也降低了对数据库的并发要求。
redroof 发表于 2015-11-6 20:23
默认的mySql好像不支持直接用http上传数据,你还得弄几个VPS来收HTTP请求,然后VPS自己负责写入数据库。
...
肯定是需要服务器软件啦
但这个数据上传时间很集中,算起来这个并发数量很大啊
5分钟5W个连接,对于服务器也是不小的挑战。对于数据库也是个难题。 golangor nodejs 阿里云,按量购买,你的流量很小,每年服务器租用只要450。数据量太小,直接用SQLite 这个需求其实和数据量关系不大,因为每个数据才100Byte
5分钟5W的连接,还算OK的,算下来每秒也就166个请求,不管大量。
但是不建议程序直接往数据库里面写,因为虽然算下来每秒只有166个请求,但是很可能集中在前几秒并发访问。
建议:
1、程序获得数据后,往消息队列中放,然后有后端程序消费队列写入数据库。所以需要ECS、RDS和Message Service;
2、因为设备和服务器之间只有一次数据交换,所以服务器尽量是接收完请求后立即主动关闭连接,释放资源。需要调整linux几个tcp参数的;
3、设备端最好有重试机制,第一次失败后,隔几秒重新上传; 服务器用什么语言php? FireHe 发表于 2015-11-6 22:50
肯定是需要服务器软件啦
但这个数据上传时间很集中,算起来这个并发数量很大啊
平均一秒不到两百个连接,http的数据量并不大。当然,对数据库的写入事务来说有点多,很多数据库一秒钟写不了200个事务。最好用消息队列来缓冲一下,以便可以批量写入。
不放心了你先拿web测试工具试一下 redroof 发表于 2015-11-7 08:29
平均一秒不到两百个连接,http的数据量并不大。当然,对数据库的写入事务来说有点多,很多数据库一秒钟写 ...
主要是不太可能平均,峰值可能会出现每秒上千甚至上万。数据量不大,但是连接数的量挺大的,瞬间PV上万哦。
用公有云服务的好处就是这些都不用自己操心 {:biggrin:}
楼主看一下阿里云的ACE FireHe 发表于 2015-11-7 15:39
主要是不太可能平均,峰值可能会出现每秒上千甚至上万。数据量不大,但是连接数的量挺大的,瞬间PV上万哦 ...
连接数多少都归ecs管,这种并发连接是无状态的,你用它自带的负载均衡就行了,多个ecs一起上。
ecs收下数据去写数据库,这个时候需要一个消息队列来缓冲一下,以便让数据库可以批量写。一大群ecs并发去写数据库的效率很低的。交给一个单独的ecs去批量写会快的多 FireHe 发表于 2015-11-7 15:39
主要是不太可能平均,峰值可能会出现每秒上千甚至上万。数据量不大,但是连接数的量挺大的,瞬间PV上万哦 ...
另外,你是小米什么的专门做秒杀吗?否则为什么不想办法来平均一下负载?
就算所有设备都规定为每天几点整上传数据,实际你稍微加个随机数,在正负三分钟内微调一下,几万个设备就均匀分布在六分钟内了。每秒钟几百个数据量很小的http请求,单个ecs都能撑下来。 redroof 发表于 2015-11-7 19:25
另外,你是小米什么的专门做秒杀吗?否则为什么不想办法来平均一下负载?
就算所有设备都规定为每天几点 ...
感谢 redroof 的热心指导
这个平均负载是有做的。但是只能平均负载的计划上传时间,由于网络延时、操作延时等因素,实际的集中情况会比理论上高。我只是考虑得比较保守,相对数据夸张了
从目前的了解来看,楼上诸位推荐的方案都是非常靠谱的方案。阿里云这方面确实做得很到位呀。几乎都不用自己想这些事情了。我原来还以为要自己建立服务器自己做,几乎要打退堂鼓了。 FireHe 发表于 2015-11-7 20:52
感谢 redroof 的热心指导
这个平均负载是有做的。但是只能平均负载的计划上传时间,由于网络延时、操作 ...
放心吧,有几万个客户端了,大家的网络延时会抵消掉的。有人延时大,也有延时小的。
一个低配的ecs,对付每秒几百个请求很容易。请求再多可以上负载均衡。注意:单机一旦超过5兆的带宽,价格就明显上涨,就是让你尽量用大量的低配机器,而不是少量高配的。
批量写数据库,一秒钟写入几万条很轻松的。完全够你用。 redroof 发表于 2015-11-7 22:24
放心吧,有几万个客户端了,大家的网络延时会抵消掉的。有人延时大,也有延时小的。
一个低配的ecs,对付 ...
谢谢redroof
我再去深入了解一下
页:
[1]