分布式对象存储笔记

实现一个单机版本的对象存储

package mainimport ("io""log""net/http""os""strings"
)func Handler(w http.ResponseWriter, r *http.Request) {m := r.Methodif m == http.MethodPut {put(w, r)return}if m == http.MethodGet {get(w, r)return}w.WriteHeader(http.StatusMethodNotAllowed)
}func get(w http.ResponseWriter, r *http.Request) {f, e := os.Open("C:/Users/HodgeKou/go/src/distribute_file_system/chapter1" + "/object/" + strings.Split(r.URL.EscapedPath(), "/") [2])if e != nil {log.Println(e)w.WriteHeader(http.StatusNotFound)return}defer f.Close()io.Copy(w, f)
}func put(w http.ResponseWriter, r *http.Request) {f, e := os.Create("C:/Users/HodgeKou/go/src/distribute_file_system/chapter1" + "/object/" + strings.Split(r.URL.EscapedPath(), "/") [2])if e != nil {log.Println(e)w.WriteHeader(http.StatusInternalServerError)return}defer f.Close()io.Copy(f, r.Body)
}func main() {http.HandleFunc("/object/", object.Handler)log.Fatal(http.ListenAndServe("127.0.0.1:8080", nil))
}

Test

Test put数据

C:\Users\HodgeKou\go\src\distribute_file_system>curl -v 127.0.0.1:8080/object/1234.txt -XPUT -d "add test"
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to 127.0.0.1 (127.0.0.1) port 8080 (#0)
> PUT /objects/123.txt HTTP/1.1
> Host: 127.0.0.1:8080
> User-Agent: curl/7.55.1
> Accept: */*
> Content-Length: 4
> Content-Type: application/x-www-form-urlencoded
>
* upload completely sent off: 4 out of 4 bytes
< HTTP/1.1 405 Method Not Allowed
< Date: Thu, 09 Apr 2020 06:18:51 GMT
< Content-Length: 0
<
* Connection #0 to host 127.0.0.1 left intact

Test get数据

C:\Users\HodgeKou\go\src\distribute_file_system>curl -v 127.0.0.1:8080/object/1234.txt
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to 127.0.0.1 (127.0.0.1) port 8080 (#0)
> GET /object/1234.txt HTTP/1.1
> Host: 127.0.0.1:8080
> User-Agent: curl/7.55.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Thu, 09 Apr 2020 07:20:36 GMT
< Content-Type: text/plain; charset=utf-8
< Transfer-Encoding: chunked
<
add test* Connection #0 to host 127.0.0.1 left intact

分布式是写出来的(一)相关推荐

  1. 分布式是写出来的(五)

    数据冗余策略 RS(Reed Solomon Coding)纠删码 在存储系统中,需要采用数据冗余技术来保证数据的可靠性,相比使用多副本复制机外,使用纠删码能够以更小的数据冗余度获得更高的数据可靠性. ...

  2. 分布式是写出来的(三)

    添加元数据服务 元数据服务就是对元数据提供存取功能的服务.元数据就是系统定义的基本信息,比如一张相片的名字,版本,拍摄时间,散列值等.客户端和接口服务之间根据对象的名字来引用一个对象,一个对象可以有多 ...

  3. 分布式是写出来的(六)

    断点下载 GET 当服务端收到GET请求,服务端不会把整个对象返回给客户端,服务端首先做SEEK,查找客户端提供的Range: bytes=first的字节数,从0-first的内容服务端直接丢弃,那 ...

  4. 分布式是写出来的(四)

    数据去重 为了防止同一份数据上传多次,我们需要进行hash值校验. 启动服务时,扫描所有文件,计算sha256值,存储在hash表中. 上传文件时,在put请求中添加自己计算的sha256值,hash ...

  5. 分布式是写出来的(二)

    从单机存储进化为接口和存储的分离 概述 接口服务层对外提供REST服务,数据服务层提供数据存储功能.两者之间通过消息队列进行通信,数据服务层的所有数据服务注册dataServer Exchange, ...

  6. 大数据产品开发流程规范_大数据技术思想入门(三):分布式文件存储的流程

    如果你不喜欢阅读文字的话,可以选择滑到最后看 视频讲解 哟~~~ 进程和 RPC 在上一篇文章中,我们讲解了要解决好大数据集的存储问题,需要引入一个主从结构的集群,其中,主服务器用于存储元数据,从服务 ...

  7. Ping CAP CTO、Codis作者谈redis分布式解决方案和分布式KV存储

    此文根据[QCON高可用架构群]分享内容,由群内[编辑组]志愿整理,转发请注明出处. 苏东旭,Ping CAP CTO,Codis作者 开源项目Codis的co-author黄东旭,之前在豌豆荚从事i ...

  8. Apache RocketMQ在我司的最佳实践--智慧政务场景下的分布式消息与分布式事务

    <本文已参与 RocketMQ Summit 优秀案例征文活动,点此了解详情> 缘起 对于Apache RocketMQ的了解,追溯起来,可以说是从开源初始,就认识到了它.那时候的它,还是 ...

  9. 年轻人,看看 Redisson 分布式锁—可重入锁吧!太重要了

    作者 | 李祥    责编 | 张文 来源 | 企鹅杏仁技术站(ID:xingren-tech) 引言 作为后端开发,对于所谓的线程安全.高并发等一系列名词肯定都不会陌生,相关的一些概念及技术框架是面 ...

最新文章

  1. 5GS 协议栈 — Overview
  2. 大战设计模式【17】—— 建造者模式
  3. 【工业控制】UV打印机喷头波形和墨水关系
  4. python测试函数怎么写_Python - 函数
  5. 跟我一起学.NetCore之.NetCore概述
  6. linux c通过文件描述符以及write和read方法对文件进行读写
  7. pg 定时删除_postgresql AutoVacuum系统自动清理进程
  8. 计算机视觉论文-2021-06-15
  9. 关于IE6下用Jquery attr('onclick')问题
  10. Python yield generator
  11. 制打印如下所示的n行数字金字塔_关于央行数字货币的技术猜测
  12. 教你win7免费升级到win10系统教程
  13. dw添加下拉菜单_dreamweaver cs6中网页制作一个带有列表下拉菜单的详细操作方法...
  14. vue项目实现百度离线地图开发
  15. Iphone手机,调用微信支付JSAPI缺少参数 timeStamp
  16. Word+PS制作拼音表格
  17. linux 如何解压z01文件
  18. 大型情感连续剧,从焫鷄到咸鱼
  19. android app被系统回收后重启异常的解决方法
  20. 计算机硬盘没显示,移动硬盘不显示在我的电脑

热门文章

  1. vue笔记(三)生命周期、组件(嵌套)、数据传递
  2. 关于导入oracle10g的数据到sqlserver2005里的方案总结
  3. CCF - 201403-3 - 命令行选项
  4. Java多线程——不变性与安全发布
  5. 自己初学时的随笔记录
  6. 【poj2464】树状数组
  7. 000 快速排序算法
  8. QI实例-改变空间参考
  9. struts2学习笔记二--准备struts2的学习和开发环境
  10. 乐刻运动 app android,乐刻运动