分布式是写出来的(一)
分布式对象存储笔记
实现一个单机版本的对象存储
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
分布式是写出来的(一)相关推荐
- 分布式是写出来的(五)
数据冗余策略 RS(Reed Solomon Coding)纠删码 在存储系统中,需要采用数据冗余技术来保证数据的可靠性,相比使用多副本复制机外,使用纠删码能够以更小的数据冗余度获得更高的数据可靠性. ...
- 分布式是写出来的(三)
添加元数据服务 元数据服务就是对元数据提供存取功能的服务.元数据就是系统定义的基本信息,比如一张相片的名字,版本,拍摄时间,散列值等.客户端和接口服务之间根据对象的名字来引用一个对象,一个对象可以有多 ...
- 分布式是写出来的(六)
断点下载 GET 当服务端收到GET请求,服务端不会把整个对象返回给客户端,服务端首先做SEEK,查找客户端提供的Range: bytes=first的字节数,从0-first的内容服务端直接丢弃,那 ...
- 分布式是写出来的(四)
数据去重 为了防止同一份数据上传多次,我们需要进行hash值校验. 启动服务时,扫描所有文件,计算sha256值,存储在hash表中. 上传文件时,在put请求中添加自己计算的sha256值,hash ...
- 分布式是写出来的(二)
从单机存储进化为接口和存储的分离 概述 接口服务层对外提供REST服务,数据服务层提供数据存储功能.两者之间通过消息队列进行通信,数据服务层的所有数据服务注册dataServer Exchange, ...
- 大数据产品开发流程规范_大数据技术思想入门(三):分布式文件存储的流程
如果你不喜欢阅读文字的话,可以选择滑到最后看 视频讲解 哟~~~ 进程和 RPC 在上一篇文章中,我们讲解了要解决好大数据集的存储问题,需要引入一个主从结构的集群,其中,主服务器用于存储元数据,从服务 ...
- Ping CAP CTO、Codis作者谈redis分布式解决方案和分布式KV存储
此文根据[QCON高可用架构群]分享内容,由群内[编辑组]志愿整理,转发请注明出处. 苏东旭,Ping CAP CTO,Codis作者 开源项目Codis的co-author黄东旭,之前在豌豆荚从事i ...
- Apache RocketMQ在我司的最佳实践--智慧政务场景下的分布式消息与分布式事务
<本文已参与 RocketMQ Summit 优秀案例征文活动,点此了解详情> 缘起 对于Apache RocketMQ的了解,追溯起来,可以说是从开源初始,就认识到了它.那时候的它,还是 ...
- 年轻人,看看 Redisson 分布式锁—可重入锁吧!太重要了
作者 | 李祥 责编 | 张文 来源 | 企鹅杏仁技术站(ID:xingren-tech) 引言 作为后端开发,对于所谓的线程安全.高并发等一系列名词肯定都不会陌生,相关的一些概念及技术框架是面 ...
最新文章
- 5GS 协议栈 — Overview
- 大战设计模式【17】—— 建造者模式
- 【工业控制】UV打印机喷头波形和墨水关系
- python测试函数怎么写_Python - 函数
- 跟我一起学.NetCore之.NetCore概述
- linux c通过文件描述符以及write和read方法对文件进行读写
- pg 定时删除_postgresql AutoVacuum系统自动清理进程
- 计算机视觉论文-2021-06-15
- 关于IE6下用Jquery attr('onclick')问题
- Python yield generator
- 制打印如下所示的n行数字金字塔_关于央行数字货币的技术猜测
- 教你win7免费升级到win10系统教程
- dw添加下拉菜单_dreamweaver cs6中网页制作一个带有列表下拉菜单的详细操作方法...
- vue项目实现百度离线地图开发
- Iphone手机,调用微信支付JSAPI缺少参数 timeStamp
- Word+PS制作拼音表格
- linux 如何解压z01文件
- 大型情感连续剧,从焫鷄到咸鱼
- android app被系统回收后重启异常的解决方法
- 计算机硬盘没显示,移动硬盘不显示在我的电脑