网盘至今已经发展多年,依稀记得从12年开始的网络上出现了大量的网盘服务,比如以115网盘为代表的各类网盘,那个时候能叫得上号的公司都开展自己的网盘服务,在互联网服务中刷刷存在感,后来又纷纷倒闭,想想看,现在还存活的网盘服务还有哪些呢,百度网盘、华为云盘、腾讯微云等。这些大厂还在提供这些服务,那什么是网盘呢?这款产品真的离我们这么远吗?那倒未必,且看我们来详细体验网盘进化史。

网盘是啥?

这玩意真的是一个网络大盘子?那倒不是,其实这个也是云服务中的一种,其本来的面目准确的说这个应该是一个网络存储系统,其名为即NAS,Network Area Storage。这么高大上的名词暂时搁置一边,我们先将目光拉回来,思考一个问题,拍照之后我们的手机怎么存一张照片?快门咔嚓一声之后,感光模块形成图像,手机的CPU会对图像进行处理,形成一份文件,之后从内存中读取出来,保存在手机存储空间中后缀为.jpg。

这个过程看起来挺简单的,使用到的功能是计算机软件系统组成中的一部分称为文件管理系统,这个系统在至今仍是非常重要的存储管理工具,当然了这个工具和前面提到的NAS有着重要的借鉴意义,因为在这个将图片(文件)存到手机存储的过程,IT工程师们就起了个名字,本地存储。那么我们当本地存储满了之后怎么办咧,只能清除旧图片呀,不然怎么继续存?但是小仙女们是很傲娇的,照片这么珍贵,每一张都是精品怎么可以说删就删?既然手机存不了那么多,那就换手机啊,换个更大的不就行了?换更大的过程,存储工程师,起名为纵向升级,开发工程师则是说迭代升级,这些其实都是说同一件事。嗯,就这一点我也觉得IT人有点无聊了。那没钱怎么办呐,我还想各种升级啊!那我插存储卡行不行啊,一张卡8g、16g我买啊,嗯,在手机有拓展槽的前提下,确实可以这么做,在存储工程中,这个操作称为横向升级。可,问题又来了,现在有多少手机带扩展槽?不急不急,还有新的操作。

放云上

云在哪?天上呀,那图片怎么上天呀,通过网络呀,我们刚才看图会知道这个.jpg文件会从内存保存到本地上,现在会通过网络传输,不再到本地啦,跑去天上了,其实就是网络服务商(Internet Service Provider,比如百度,腾讯)的电脑(其实就是服务器)上。从手机到云这个传输和存到人家设备上的过程就需要依靠一个简单的网络,网络工程师们对这个过程起了个名字,网络区域存储Network Area Storage。

现今云的概念越来越充实,大家都可以使用的叫做公有云,只有你和你的朋友才可以用的叫做私有云,当然了,你同意部分空间分享给大家一起用就是叫做混合云啦。云无边无际,时而在东时而西,咱压根就不知道这些精美图片(文件)存放在哪。各位看官,你用起来放心嘛?
为何不自己动手来搭建一个云盘呢?

实现思路

计算机网络发展数十年,仍然离不开TCP/IP协议栈,网盘亦然,手机和云之间的底层连接仍然是一个TCP的服务端和客户端的沟通,这个沟通的过程起名三次握手。

这简单的三句对话,就是握手的过程啦(是不是有种打嘴炮的感觉~~),打过招呼之后当然就可以是发图(文件)啦,这在30年前肯定是这么做的, 但是呢,这个过程真的烦。发送和接收方都要考虑很多事情,比如,发送的图片会不会太大,太大了是不是可以切小一些,如果切小了的话对方,收到了怎么拼回去呀,我怎么知道对方有没有收到图啊……这些问题在每一份文件的传输过程都要考虑,你说烦不烦,反正考虑多了,肯定会秃的。于是网络工程师们经过多方努力,将这些交流过程全部打包,放在一个大盒子里面,称为http,好了,现在我们知道了http说tcp的传输升级版,青出于蓝而胜于蓝,http可以更加方便的发送文件了,要不要切小文件,发送多快这些事情统统不用考虑了,这产品给你办好了。
接着影响世界进程的程序猿来了,他们用双手,指挥http自动的发送发送和接受各种各样不可描述的文件。程序猿一多肯定会吵架,你看那个php不是最优秀的语言这个梗玩了多少年了,还不是在继续吵着,于是一群糟老头跳出来说,别吵,我们全部要遵守一个约定,你好,他好,大家好,才是真的好,约定名称为RESF,你们你要做的就是各自实现RESFful API,OK?
嘿,还别说交流规范一些,沟通成本低了,java、python、go……这些语言工具搭建的http服务端都可以好好说话了。然而,问题又来了,这群怪蜀黍,其他人怎么知道程序猿说的都是啥啊,呵,难怪说世界上只有10种人,一种懂二进制,一种不懂。我们只用这个就可以完成数据的传输发送,但没办法啊,生存还是要的,得把你们服务好了,才会心甘情愿给我们发工资啊。你们才是老板好不好Orz

我们通过终端,点击若干按钮就可以实现文件的远程上传和下载,然而面对非程序猿来说,这样的操作真的有些无奈的。

所以为了让你们看的舒服,操作愉快,体验和免费同在,程序猿们把这个过程又重新包装了一下,说这个是大盘子,你们啥东西都能放进去,保证安全,随时取用,空间暂时给你们2T,要是充钱,还能戴上皇冠,上传更快和下载更强

这些都是最终的开发工程师们代码的劳动成果,也是产品经理们的设计结晶,更是服务商提供的给用户的良好体验的作品,那,如果我们自己动手做一个是不是会很刺激呢?读到这里想必大家都会猜到了,其实所谓云盘对于应用开发来说就是随时等待你访问的服务器,犹如一位资深管家,随时等待各位看官的召唤,我们所要做的就是上网,登陆帐号剩下的操作,比如自动上传保存,文件持久化管理、重复文件的删除等操作,都由管家来完成。
好啦,网盘的进化史回顾大致就这样啦,说白了就是从本地磁盘到网络磁盘的过程的变迁,这个依赖于计算机网络的发展,设想一下,当5G时代的到来,在网络质量良好的前提下,我们的手机通通不用再需要存储了,拍照的话觉得喜欢直接就存到网盘上,想要回顾的话,就去网盘找,下载的应用直接就存网盘上啦,想要运行就去网盘上运行,这样的畅想其实就是所谓云桌面的应用啦,对于网速越来越快的,带宽越来越宽的畅想,嘻嘻,未来可期。

下回讲简单源码实现

啰啰嗦嗦说了这么多,下篇文章分享简单代码实现

转载于:https://blog.51cto.com/yerikyu/2361380

网盘进化史就这样(上)——原理简析相关推荐

  1. [转]仿163网盘无刷新文件上传系统

    原文链接:http://www.cnblogs.com/cloudgamer/archive/2008/10/20/1314766.html 这个仿163网盘无刷新文件上传系统,并没有用使用.net的 ...

  2. CRC原理简析——史上最清新脱俗简单易懂的CRC解析

    CRC原理简析 1. CRC校验原理 CRC校验原理根本思想就是先在要发送的帧后面附加一个数(这个就是用来校验的校验码,但要注意,这里的数也是二进制序列的,下同),生成一个新帧发送给接收端.当然,这个 ...

  3. Webpack模块化原理简析

    webpack模块化原理简析 1.webpack的核心原理 一切皆模块:在webpack中,css,html.js,静态资源文件等都可以视作模块:便于管理,利于重复利用: 按需加载:进行代码分割,实现 ...

  4. Android Handler与Looper原理简析

    一直感觉自己简直就是一个弱智,最近越来越感觉是这样了,真的希望自己有一天能够认同自己,认同自己. 本文转载于:https://juejin.im/post/59083d7fda2f60005d14ef ...

  5. grpc通信原理_gRPC原理简析

    gRPC原理简析 gRPC是由谷歌提出并开发的RPC协议,gRPC提供了一套机制,使得应用程序之间可以进行通信. 降级开发者的使用门槛,屏蔽网络协议,调用对端的接口就像是调用本地的函数一样.而gRPC ...

  6. Android V1及V2签名原理简析

    Android为了保证系统及应用的安全性,在安装APK的时候需要校验包的完整性,同时,对于覆盖安装的场景还要校验新旧是否匹配,这两者都是通过Android签名机制来进行保证的,本文就简单看下Andro ...

  7. 转子接地保护原理_发变组转子接地保护原理简析

    发变组转子接地保护原理简析 发电机转子接地故障是常见的故障之一, 发生一点接地, 对发电机本身并不直接构成危 害,此时可通过转移负荷,平稳停机后,再查故障点:若在此基础上又发生另外一点接地, 将会严重 ...

  8. Mysql锁机制及原理简析

    Mysql锁机制及原理简析 一.前言 1.什么是锁? 锁是计算机协调多个进程或线程并发访问某一资源的机制. 锁保证数据并发访问的一致性.有效性: 锁冲突也是影响数据库并发访问性能的一个重要因素. 锁是 ...

  9. Java的定时器Timer和定时任务TimerTask应用以及原理简析

    记录:272 场景:Java JDK自带的定时器Timer和定时任务TimerTask应用以及原理简析.在JDK工具包:java.util中可以找到源码,即java.util.Timer和java.u ...

最新文章

  1. Windows10 + VS2015 环境下对gdal2.0.1进行64bit编译小结
  2. 网站服务器日志都有哪些,网站服务器日志在哪里看?
  3. shell的一些常识
  4. c++ vector 保存指针
  5. Touch the AppCache manifest file
  6. php8更新,PHP 8 中新特性以及重大调整
  7. python Pipe
  8. 【转】ASP.NET 表单验证实现浅析
  9. linux下camera驱动分析_LINUX设备驱动模型分析之三 驱动模块相关(DRIVER)接口分析...
  10. 如何去掉WordPress分类目录url链接中的category,如何处理生成的作者链接
  11. 每日学习笔记(17)
  12. 基于JSP+Servlet校园二手交易平台
  13. Pyhton词云示例(移植-情人节专用版)
  14. 文本表达:解决BERT中的各向异性方法总结
  15. Ubuntu16.04安装网易云音乐后打不开
  16. 科学家量子计算机时间倒流,科学家用量子计算机让“时间倒流”?并没有真的做到...
  17. Delphi 编译的程序在win10中怎样默认以管理员身份运行
  18. matlab colarbar设置,matlab color bar 如何改变色调
  19. 如何把数据导入数据库
  20. 隐私全没了?30亿条个人信息被盗,BAT等96家公司全部中招

热门文章

  1. java 生成二维码和去除白边的方法
  2. ElasticSearch学习:文档的基本操作
  3. Python3源码编译和使用静态链接库lib动态链接库dll详细介绍
  4. 艾永亮:中国传统企业的“产品革命”
  5. 基坑计算理论m法弹性支点法_微型防腐螺旋管支挡结构的内力与变形规律
  6. Python办公自动化实战 01 | Python-docx库:Python与Word的完美结合1
  7. 苹果开发 笔记(80)升级IOS 9 和 XCode 7 引起的问题记录
  8. java 记录一下韩顺平QQ多用户聊天系统-离线消息发送问题invalid stream header: 7371007E
  9. 学习《机器学习100天》第24天 微积分的本质 (视频1-5)
  10. rediscrawlSpider使用-亚马逊图书案例