zoukankan      html  css  js  c++  java
  • 文件上传更新服务相关

    需求:
      客户端向服务端发送一次请求,请求是一系列配置文件的文件名、当前客户端所持有文件的版本号、期待服务端返回的数据形式(url或二进制数据)。当请求的配置文件有更新,服务端返回相应的url或二进制数据。之所以要分url和二进制数据,因为有的配置文件比较小且比较重要需要马上获取到数据;而有的配置文件稍微大一些,重要性比较低,可以在客户端拉线程慢慢下。

    最终实现:
      分为后台管理系统(负责文件上传)和数据更新服务。
      文件上传部分是用Vue.js+KOA实现。其中关于文件上传那块,浏览器端使用Ajax发送FormData;Node那块之前是用co-busboy模块处理文件,body-parser模块基于co-body不支持文件数据(TODO1:之后研究HTTP协议,需要回头看看这块代码),在官方示例中是用pipe将formData文件流直接导入磁盘文件中(TODO2:出现了文件数据成功写入本地磁盘却没有存入数据库的情况),但是当我想直接用变量保存文件数据时,上传多文件却只能接受到一个文件的数据(TODO3:查明原因,需要了解流的相关知识)。调用SQL语句存储数据时借鉴了ORM的设计思想以及js面向对象编程的思想(TODO4:ORM实现十分粗糙,需要优化)。由于文件大小有限,也没有(TODO5)考虑断点续传和秒传。
      更新服务大概思路是服务不断的扫描数据库,将新版本数据载入内存(数据总量不大),并暂时使用Nginx做文件服务器,后期接入CDN。达到快速响应的目的。

    收获:

      1)写后台管理系统的时候,最初是以文件的形式保存在服务器上,没有考虑文件备份、多机部署的问题。(TODO6:了解分布式文件存储系统),简单的方法就是用MYSQL保存文件数据,数据备份和多机部署方便,但这也只适合数据比较小的情况。最终还是要用分布式文件存储。(TODO7:Redis使用hmset等命令同样能达到目的),由于对性能要求不高,故没有采用Redis方案。

      2)学会了使用事务来进行多表(有关联性)操作

    TODO:

      TODO8:之前理解的文件服务是后端实时读取文件数据并返回数据,但这样不适合生产环境。需要参考和学习Nginx文件服务的实现机制

      TODO9:使用JS处理Pb协议

      

  • 相关阅读:
    【流处理】Kafka Stream-Spark Streaming-Storm流式计算框架比较选型
    【大数据】大数据处理-Lambda架构-Kappa架构
    【ElasticSearch】ES5新特性-keyword-text类型-查询区别
    【大数据】大数据-实时统计分析-方案选型
    【Spark】SparkStreaming-流处理-规则动态更新-解决方案
    【ElasticSearch】ElasticSearch-SQL插件
    【ElasticSearch】ElasticSearch-索引优化-自定义索引
    【算法】如何设计--高效的大数据匹配算法
    【Java】Springboot-Quartz-分布式任务调度
    网页提示[Not allowed to load local resource: file://XXXX]错误
  • 原文地址:https://www.cnblogs.com/cqq626/p/6536448.html
Copyright © 2011-2022 走看看