V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
magine
V2EX  ›  Django

多个站点向一个站点发送数据

  •  1
     
  •   magine ·
    Ma233 · 2014-08-18 21:03:44 +08:00 · 3212 次点击
    这是一个创建于 3741 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近在写一个工程,基本功能是老师发布试卷到网关上运行的站点,学生用app获取网关上的试卷,答题后把答案发送到网关,网关压缩数据分包(暂时计划使用json)发送给总服务器,总服务器会做剩余处理。
    预计一个网关为100间教室提供服务,每间教室60个学生,每天提交3份答案,每份答案大小100个字符。(总计)
    主要有两点疑问:
    如何防止访问超时。(楼主之前写过一个站点可以用xls文件更新数据库,但是当xls超过500行时由于数据量过大就会等待响应超时,这次发送这种大批量数据,也是相当担心超时问题)
    除了json/xml还有哪些可以替代的数据交换方案,如果用json有没有什么分包方案?
    第 1 条附言  ·  2014-08-19 16:14:17 +08:00
    目前测试是先用一个网关,如果学校里接受了那就是好几个网关了,也就是多个多个站点向一个站点发送数据。
    答案会被暂存于网关上,如果不登陆站点查询,数据就会在凌晨后轮流分包发送,如果查询就直接去网关拉取对应数据。
    开发使用Django+Mysql(总)/SQLite(网关),测试时有厂家送来的网关,“总服务器”会在xenserver上临时搭建虚拟机。
    6 条回复    2014-08-19 16:37:07 +08:00
    shiny
        1
    shiny  
       2014-08-18 21:06:47 +08:00   ❤️ 1
    这个问题理解起来很费劲,好像使用异步队列能解决。
    akira
        2
    akira  
       2014-08-18 23:20:35 +08:00   ❤️ 1
    最坏的情况下,也就是6000个并发,每个链接提交100个字符, 等于600kb的数据。这个项目的难点根本不在数据入库的这里,而是在前面的gateway。

    如果是我设计的话,会设计成多个网关而不是一个,收到答案直接存本地文件或者干脆就直接丢内存,后面再来做处理提交到后端处理服务器。

    至于数据交换格式,那根本无伤大雅,随便你喜欢。
    Actrace
        3
    Actrace  
       2014-08-19 00:33:58 +08:00   ❤️ 1
    问题的根源是服务端性能.
    从架构上考虑,如果网关没有什么负载,那么瓶颈就在于"总服务器".
    但是实际情况可能更加复杂.你选择的处理语言,处理方式,数据库类型,甚至优化有没有做好,在相同的硬件上会体现出完全不同的负载能力.

    理论上数据库对批量查询会做出很好的处理.我感觉批量提交应该不是卡的根源~
    难道你用的是windows服务器?
    jsjscool
        4
    jsjscool  
       2014-08-19 14:08:37 +08:00   ❤️ 1
    500行超时……应该是服务端处理的问题。平时用PHPExcel处理文件上万行都很轻松。用户上传数据还可以选择csv格式。不过建议你用json。另外6000个算比较大的并发,可以考虑负载均衡。或者协调同学们上传作业的时间,避开高峰。
    magine
        5
    magine  
    OP
       2014-08-19 16:24:44 +08:00
    @shiny
    @akira
    @Actrace
    稍微追加了一下内容。
    其实是想问一下json分包是手动写分包方案,还是说Django有分包的模块。
    magine
        6
    magine  
    OP
       2014-08-19 16:37:07 +08:00
    @jsjscool

    第一次写站点,可能真有写得不好的方,所以稍微说一下我的做法,求斧正:
    先上传xls文件存入/tmp
    按行读取数据(每行14列),存入字典。
    对于每一次行读入:首先,查看‘类型’是否已存在,否则创建新‘类型’;然后,新建‘设备’,外键指向新建或已存在的‘类型’;其间会记录新建的‘类型’和‘设备’。
    读到xls行尾结束返回http。

    另外给一下代码链接(太长了放帖子里影响观看),不过是Django,嫌麻烦不看也可以啦~
    http://paste.ubuntu.com/8086908/
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4987 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 05:40 · PVG 13:40 · LAX 21:40 · JFK 00:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.