原创 etcd系列-----raft網絡層實現之rafthttp模塊

raftexample示例中, raftNode.serveRaft()方法中有一段使用的HTTP庫的代碼,實現如下: func (rc *raftNode) serveRaft() { url, err := url.Parse(r

原创 etcd系列-----後端數據存儲mvcc模塊

etcd於2016年6月發佈了v3. 0.0版本,從此進入了etcdv3時代。在etcdv2和etcdv3 中,使用的raft模塊變化不大,但使用的後端存儲有很多不同之處。v2版本的存儲是一版完全基於內存的存儲,它並沒有將數據實時地寫入到

原创 ZIP壓縮算法詳細分析及解壓實例解釋----其他關鍵點補充:deflate樹和deflate編碼、字符串匹配等

本文之前一篇壓縮算法中沒提到的一些關鍵知識點的補充ZIP壓縮算法詳細分析及解壓實例解釋 deflate樹及deflate編碼 我們知道交換哈夫曼樹的任意兩顆子樹依然還是哈夫曼樹,交換的過程雖然會改變葉子結點的huffman編碼,但是,不會

原创 深入理解GO語言:環境準備-----使用代碼編譯安裝方式來搭建go環境

打算做一期go內部函數實現原理講解,首先要搭建一套go的編譯環境,大家常見的都是直接使用官方發佈應編譯好的文件,這裏我們使用源碼編譯的方式來搭建go環境。 1、準備版本: https://studygolang.com/dl  下載所需要

原创 qos----令牌桶算法

令牌桶算法一般指的是單/雙速三色標記法。 srTCM的英文全稱是Single Rate Three Color Marker,單速率三顏色標記 該算法要預先在系統中設定三個參數,三個參數如下: Committed Information

原创 哈夫曼樹(Huffman tree)及哈夫曼編碼

基本術語 1、路徑和路徑長度 在一棵樹中存在着一個節點序列K1,K2,K3…Kj,使得Ki是Ki+1的雙親,則稱此節點序列是從K1~Kj的路徑,因爲樹中每個節點只有一個雙親節點,所以他也是這兩個之間的唯一路徑,從K1~Kj所經過的分支數稱

原创 ssd磁盤存儲原理及產生io抖動原因

作爲一名存儲工程師怎麼可以不瞭解存儲的物理介質呢,與磁盤相比,SSD具有很高的IO性能,但是和磁盤相比,SSD的性能穩定性不如磁盤好。在使用過程中,SSD的性能會發生變化,而不能保持很強的一致性。這是SSD的一個特性,性能會隨着時間、使用

原创 spdk探祕-----基本框架及bdev範例分析

Spdk框架介紹 存儲性能開發工具包(SPDK)提供了一組工具和庫,用於編寫高性能,可伸縮的用戶模式存儲應用程序。它通過使用一些關鍵技術實現了高性能: (1)、將所有必需的驅動程序移動到用戶空間,這樣可以避免系統調用並啓用應用程序的零拷貝

原创 一致性hash原理及在存儲中的應用

在做分佈式存儲方案設計時面臨的一個重要問題是如何記錄數據在多個存儲節點上的分佈情況。當前分佈式存儲在元數據管理上有兩種架構,去中心化和中心化。在去中心化的分佈式系統中元數據分佈通常通過計算得出,比如ceph和glusterfs,這種情況下

原创 spdk探祕-----塊設備開發指導

這裏的塊設備是一種存儲設備,它支持在固定大小的塊中讀寫數據。這些塊通常是512或4096字節。這些設備可能是軟件中的邏輯結構,或者對應於像NVMe ssd這樣的物理設備。 通用庫的公共頭文件是bdev.h,它是與任何類型的塊設備交互所需的

原创 spdk探祕-----reduce介紹

SPDK的reduce塊壓縮方案基於使用ssd存儲的壓縮塊,如果不是ssd磁盤也沒必要使用壓縮功能。壓縮過程會產生元數據,元數據也需要持久化保存。該元數據用於記錄邏輯空間到ssd盤上存儲壓縮數據的映射。數據壓縮功能對外體現爲一個壓縮的塊設

原创 超融合存儲探祕

讓我們一起看一下傳統虛擬化, 分佈式存儲架構下的計算環境下的系統體系結構,如下圖所示: 傳統存儲的特點是存儲集中化,分佈式存儲已經做到了去集中化,可以將存儲節點分散開。但是不管傳統存儲還是分佈式存儲在和計算節點向配合使用時都是獨立開來,

原创 數據結構:B樹、B+樹數據結構及操作代碼實現

B樹的定義: B樹(B-tree)是一種樹狀數據結構,它能夠存儲數據、對其進行排序並允許以O(log n)的時間複雜度運行進行查找、順序讀取、插入和刪除的數據結構。 B樹結構如下: 其中,m是B樹的階,m>=3,par是指向父節點指針。

原创 深入理解GO語言:GC原理及源碼分析

Go 中的runtime 類似 Java的虛擬機,它負責管理包括內存分配、垃圾回收、棧處理、goroutine、channel、切片(slice)、map 和反射(reflection)等。Go 的可執行文件都比相對應的源代碼文件要大很多

原创 go語言高級編程--------彙編語言部分學習筆記

計算機結構 在使用匯編語言之前必須要瞭解對應的CPU體系結構。下面是X86/AMD架構圖: 左邊是內存部分是常見的內存佈局。其中text一般對應代碼段,用於存儲要執行指令數據,代碼段一般是隻讀的。然後是rodata和data數據段,數據