分布式对象存储 读书笔记(一) 开始
這是 <分布式對象存儲 原理架構(gòu)及Go語言實現(xiàn)>的學(xué)習(xí)筆記的第一篇
我們簡單的實現(xiàn)一個REST(表述性狀態(tài)傳遞,英文:Representational State Transfer)服務(wù)接口,用來單機存儲對象
單機版的REST接口極其簡單 只提供對象的PUT和GET方法 顧名思義 就是對象的存取方法
來看下代碼
1 func main() {
2 http.HandleFunc("/objects/", objects.Handler) //注冊HTTP處理函數(shù),如果有客戶端訪問本機的HTTP服務(wù)且URL是以"objects"開頭,那么就交由handler函數(shù)處理
3 log.Fatal(http.ListenAndServe(os.Getenv("LISTEN_ADDRESS"), nil)) //若出現(xiàn)錯誤 日志打印錯誤信息
4 }
View Code
1 func Handler(w http.ResponseWriter, r *http.Request) {
2 m := r.Method
3 if m == http.MethodPut {
4 // PUT請求進入下列函數(shù)處理
5 put(w, r)
6 return
7 }
8 if m == http.MethodGet {
9 // GET請求進入下列函數(shù)處理
10 get(w, r)
11 return
12 }
13 //其他請求 默認(rèn)返回不允許操作提示
14 w.WriteHeader(http.StatusMethodNotAllowed)
15 }
View Code
1 func put(w http.ResponseWriter, r *http.Request) {
2 //獲取代碼運行時設(shè)置的保存路徑(Getenv("STORAGE_ROOT"))下的objects文件夾
3 f, e := os.Create(os.Getenv("STORAGE_ROOT") + "/objects/" +
4 strings.Split(r.URL.EscapedPath(), "/")[2])
5 //strings.Split(r.URL.EscapedPath(), "/")[2] 分解http請求中的字符串 獲取要寫入的對象的名稱
6 if e != nil {
7 log.Println(e)
8 w.WriteHeader(http.StatusInternalServerError)
9 return
10 }
11 defer f.Close()
12 //將http請求的內(nèi)容寫入到本地磁盤中
13 io.Copy(f, r.Body)
14 }
15
16 func get(w http.ResponseWriter, r *http.Request) {
17 //獲取代碼運行時設(shè)置的保存路徑(Getenv("STORAGE_ROOT"))下的objects文件夾
18 f, e := os.Open(os.Getenv("STORAGE_ROOT") + "/objects/" +
19 strings.Split(r.URL.EscapedPath(), "/")[2])
20 //strings.Split(r.URL.EscapedPath(), "/")[2] 分解http請求中的字符串 獲取要讀取的對象的名稱
21 if e != nil {
22 //如果出現(xiàn)錯誤 日志打印錯誤 返回未找尋到狀態(tài)值
23 log.Println(e)
24 w.WriteHeader(http.StatusNotFound)
25 return
26 }
27 //延遲關(guān)閉 并且將讀取到的對象寫入到HTTP的主體W里 并且返回
28 defer f.Close()
29 io.Copy(w, f)
30 }
View Code
下面運行代碼
運行環(huán)境為 unbuntu
首先在存儲根目錄下創(chuàng)建相應(yīng)的objects文件夾
以監(jiān)聽本地地址端口12345 存儲根目錄為/tmp 運行g(shù)o代碼
再開啟一個終端 GET一個名為test的對象
由于沒有PUT對象 此時返回的是404 NOT FOUND
下面再PUT一個對象
再來嘗試打開test對象
OK 這次成功獲取之前PUT上去的那個對象的內(nèi)容了
下一個章節(jié)將加強可擴展性 當(dāng)前服務(wù)器無法滿足等性能指標(biāo)時 可以自如的調(diào)整擴展服務(wù)器集群
作 者: itdef
歡迎轉(zhuǎn)帖 請保持文本完整并注明出處
技術(shù)博客 http://www.cnblogs.com/itdef/
B站算法視頻題解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
歡迎c c++ 算法愛好者 windows驅(qū)動愛好者 服務(wù)器程序員溝通交流
如果覺得不錯,歡迎點贊,你的鼓勵就是我的動力
總結(jié)
以上是生活随笔為你收集整理的分布式对象存储 读书笔记(一) 开始的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 泰拉贝尔兑换码大全2023
- 下一篇: 炒股的知识