pb級kv存儲
A. 什麼是kv資料庫
kv資料庫是指Key-value資料庫,是一種以鍵值對存儲數據的一種資料庫,類似java中的map。可以將整個資料庫理解為一個大的map,每個鍵都會對應一個唯一的值。
key-value分布式存儲系統查詢速度快、存放數據量大、支持高並發,非常適合通過主鍵進行查詢,但不能進行復雜的條件查詢。
如果輔以實時搜索引擎進行復雜條件檢索、全文檢索,就可以替代並發性能較低的MySQL等關系型資料庫,達到高並發、高性能,節省幾十倍伺服器數 量的目的。以MemcacheDB、Tokyo Tyrant為代表的key-value分布式存儲,在上萬並發連接下,輕松地完成高速查詢。
(1)pb級kv存儲擴展閱讀:
資料庫的安全直接關繫到整個資料庫系統的安全,其防護手段主要有以下八點:
1、使用正版資料庫管理系統並及時安裝相關補丁。
2、做好用戶賬戶管理,禁用默認超級管理員賬戶或者為超級管理員賬戶設置復雜密碼;為應用程序分別分配專用賬戶進行訪問;設置用戶登錄時間及登錄失敗次數限制, 防止暴力破解用戶密碼。
3、分配用戶訪問許可權時,堅持最小許可權分配原則,並限制用戶只能訪問特定資料庫,不能同時訪問其他資料庫。
4、修改資料庫默認訪問埠,使用防火牆屏蔽掉對 外開放的其他埠,禁止一切外部的埠探測行為。
5、對資料庫內存儲的重要數據、敏感數據進行加密存儲,防止資料庫備份或數據文件被盜而造成數據泄露。
6、設置好資料庫的備份策略,保證資料庫被破壞後能迅速恢復。
7、對資料庫內的系統存儲過程進行合理管理,禁用掉不必要的存儲過程,防止利用存儲過程進行資料庫探測與攻擊。
8、啟用資料庫審核功能,對資料庫進行全面的事件跟蹤和日誌記錄。
參考資料來源:
網路-Key-Value
網路-資料庫
B. 什麼是kv資料庫
一個解決方案是使用鍵值(Key-Value)存儲資料庫,這是一種NoSQL(非
關系型資料庫
)模型,其數據按照鍵值對的形式進行組織、索引和存儲。KV存儲非常適合不涉及過多數據關系業務關系的業務數據,同時能有效減少讀寫磁碟的次數,比
SQL資料庫
存儲擁有更好的讀寫性能。
C. kv褰㈠紡鏄浠涔堟剰鎬濓紵
KV褰㈠紡鏄鎸囬氳繃閿鍊煎規柟寮忔潵鎻忚堪鏁版嵁鎴栦俊鎮鐨勬牸寮忋傞氬父浣跨敤涓緇勯敭鍊煎規潵鎻忚堪涓涓瀹炰綋鎴栧硅薄錛岄敭琛ㄧず瀹炰綋鎴栧硅薄鐨勬煇涓灞炴ф垨鐗瑰緛錛屽艱〃紺鴻ュ睘鎬ф垨鐗瑰緛鐨勫叿浣撳箋傝繖縐嶆柟寮忓湪緙栫▼璇璦涓涔熺粡甯歌浣跨敤錛屼緥濡侸avaScript涓鐨勫硅薄灝辨槸浠ラ敭鍊煎圭殑褰㈠紡鏉ュ畾涔夌殑銆
KV褰㈠紡鍦ㄤ俊鎮瀛樺偍鍜屼紶閫掍腑闈炲父鏂逛究銆傚湪鏁版嵁搴撲腑錛屽彲浠ラ氳繃KV褰㈠紡鏉ュ瓨鍌ㄥ拰鏌ヨ㈡暟鎹錛屼竴浜汵oSQL鏁版嵁搴撲篃閲囩敤KV瀛樺偍鏂瑰紡銆傚湪鐢靛晢騫沖彴涓錛屽晢鍝佷俊鎮涔熼氬父浠KV鐨勫艦寮忚繘琛屽瓨鍌ㄥ拰灞曠ず錛岀敤鎴峰彲浠ラ氳繃鎼滅儲鎴栫瓫閫変笉鍚岀殑閿鍊煎規潵鏌ユ壘鍟嗗搧銆
KV褰㈠紡鍙浠ヨ騫挎硾搴旂敤鍦ㄥ悇縐嶉嗗煙涓銆傚湪緗戠粶浼犺緭涓錛孒TTP璇鋒眰鍜屽搷搴旂殑澶撮儴淇℃伅灝變互KV褰㈠紡榪涜屾惡甯﹀拰浼犻掋傚湪鐗╄仈緗戜腑錛岃懼囦俊鎮涔熷父浠KV鏍煎紡榪涜屼紶杈撳拰瀛樺偍銆傛ゅ栵紝鍦ㄤ竴浜涙暟鎹縐戝﹂嗗煙涓錛屽傛満鍣ㄥ︿範鍜屾暟鎹鎸栨帢涓錛孠V褰㈠紡鐨勬暟鎹涔熻騫挎硾搴旂敤浜庢ā鍨嬭緇冨拰棰勬祴銆
D. 什麼是kv資料庫
kv資料庫是指Key-value資料庫,是一種以鍵值對存儲數據的一種資料庫,類似java中的map。可以將整個資料庫理解為一個大的map,每個鍵都會對應一個唯一的值。
Key-value資料庫代表的有redis,Redis是一個Key-Value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string(字元串)、list(鏈表)、set(集合)和zset(有序集合)。
另外redis是一種內存型的資料庫,所以可以對外提供很好地讀寫操作,但是同樣也暴露出內存佔用高,數據持久化不易等問題。
(4)pb級kv存儲擴展閱讀
key-value資料庫的優點(以redis為例):
1、Redis將資料庫完全保存在內存中,僅使用磁碟進行持久化。
2、相比於其他鍵值資料庫,Redis有相對豐富的數據結構。
3、Redis可以將數據復制到任意數量的從機中。
5、快。每秒可以執行大約110000次設置(set)操作,每秒大約可執行81000次讀取(get)操作.
6、支持豐富的數據類型。Redis有5種數據類型。
7、操作具有原子性。所有Redis操作都是原子操作,這確保了兩個客戶端並發訪問,Redis伺服器能接收更新的值。
8、多實用工具。Redis可用於多種用例,如:緩存,消息隊列(支持發布和訂閱),應用程序中的任何短期數據,如:session等。
E. 海量分布式存儲系統Doris原理概述
Doris( https://github.com/itisaid/Doris )是一個海量分布式 KV 存儲系統,其設計目 標是支持中等規模高可用可伸縮的 KV 存儲集群。
Doris可以實現海量存儲,線性伸縮、平滑擴容,自動容錯、故障轉移,高並發,且運維成本低。部署規模,建議部署4-100+台伺服器。
Doris採用兩層架構,Client 和 DataServer+Store。
有四個核心組件,Client、DataServer、Store、Administration。
應用程序通過Client SDK進行Doris的訪問,
每台伺服器上部署一個Data Sever做伺服器的管理,每台伺服器上有自己的存儲Store,整個集群的數據存儲,每台機器獨立部署。數據通過路由選擇寫入到不同的機器中。
Administration為管理中心,提供配置、管理和監控。
config指,應用程序啟動一個Data Server,在啟動時要配置管理中心的ip地址,通關管理中心。管理中心會修改配置項感知到集群中加了新機器,對新機器管理,擴容等。待機器處於可用狀態,將該機器的配置項通知給KV Client。從而KV Client進行新的路由選擇。
擴容、下線機器等的控制台界面通過Management管理。
Monitor監控機器是否正常。
client寫數據,綁定產品的namespace(邏輯隔離),構成新key,路由到具體機器上讀寫。
路由解析演算法是設計的一個關鍵點,決定集群的管理方式,也決定了集群擴容的復雜性和難度。
Doris的演算法類似redis,有桶的概念,key映射到1w個虛擬節點,虛擬節點在映射到物理節點。
由於Doris設計時,用於4-100+規模的集群。因此,Doris分了1w個虛擬節點,當伺服器超過100會導致負載不均衡,1000會更差,相當於每一個集群上有10個虛擬節點,虛擬節點會有10%的影響。
擴容時,需要調節虛擬節點指向新的位置。具體過程為,暴利輪詢新節點添加後,一個伺服器上應該承載的虛擬節點個數,將超出的虛擬節點遷移到新機器即可。如上圖左圖有2個物理節點,擴容後,有3個物理節點,變為右圖。
為了保證高可用。doris所有服務分成2個組,兩組伺服器對等。兩個group是可以有不同數量的伺服器。
寫操作時,client的路由演算法在兩個group分別選2個伺服器,分別(同時)寫入,兩個伺服器全部返回後,再繼續向下進行。讀操作時,從兩個伺服器隨機選一個讀。這樣,提高可用性,數據持久性,不會丟失。
集群管理的重要角色Config Server,有一個功能是負責發現故障伺服器。
發現故障的方式有2種:
節點失效分為:瞬間失效、臨時失效、永久失效
應用伺服器向伺服器寫,如果寫失敗,為 瞬間失效 。接著應用伺服器進行3次重試。3次都失敗,通知管理伺服器,進行服務的失效判斷。
管理伺服器再寫一次,如果寫成功,認為是客戶端自己通信通信問題。如果寫入失敗,判斷為 臨時失效 ,通知所有client,伺服器失效,不要寫,也不讀。
如果2小時恢復,則節點為臨時失效。如果2小時沒有恢復,認為是 永久失效 。
如圖,如果節點2失效,進入臨時失效階段。
如圖,節點2臨時失效2個小時還未恢復,判定為永久失效。進入永久失效的恢復。
設計中,有臨時日誌節點(備份節點),有空白節點。實際使用中沒有節點3空白節點。原因:1 自動遷移有風險,還是需要手動遷移。2 幾年宕機1台,一直有一個空白節點standby浪費。一般晚上報警失效也沒有事情,第二天,找機器擴容即可。認為24小時之內,同樣編號的2台機器連續down掉,概率很低。
物理節點分成2個group,寫的時候,向2個group同時寫。當其中一個group擴容機器時,該group上的所有節點進入臨時失效狀態。停止讀寫,將數據遷移到新的伺服器上。
由於是虛擬節點的映射在調整,所以遷移是按照虛擬節點調整。為了遷移方便,虛擬節點物理化,一個虛擬節點對應一個文件。遷移時其實就是拷貝文件。這時,如果group1有節點失效也會出現不一致,但是,通常擴容的過程很快,因為,是scp拷貝文件,瓶頸為網路帶寬,通常幾十T數據,幾分鍾遷移完成,十來分鍾進行數據恢復。
F. etcd工作原理和部署指南
etcd是由CoreOS團隊發的一個分布式一致性的KV存儲系統,可用於服務注冊發現和共享配置,隨著CoreOS和Kubernetes等項目在開源社區日益火熱,它們項目中都用斗老塌到的etcd組件作為一個高可用強一致性的服務發現存儲倉庫,漸漸為開發人員所關注。在雲計算時代,如何讓服務快速透明地接入到計算集群中,如何讓共享配置信息快速被集群中的所有機器發現,更為重要的是,如何構建這樣一套高可用、安全、易於部署以及響應快速的服務集群,已經成為了迫切需要解決的問題。etcd為解決這類問題帶來了福音,本文將從etcd的應用場景開含檔始,深入解讀etcd的實現方式,以供開發者們更為充分地享用etcd所帶來的便利。
etcd推薦使用奇數作為集群節點個數。因為奇數個節點和其配對的偶數個節點相比,容錯能力相同,卻可以少一個節點。綜合考慮性能和容錯能力,etcd官方文檔推薦的etcd集群大小是3,5,7。由於etcd使用是Raft演算法,每次寫入數據需要有2N+1個節點同意可以寫入數據,所以部分節點由於網路或者其他不可靠因素延遲收到數據更新,但是最終數據會保持一致,高度可靠。隨著節點數目的增加,每次的寫入延遲會相應的線性遞增,除了節點數量會影響寫入數據的延遲,如果節點跟接節點之間的網路延遲,也會導致數據的延遲寫入。
結論:
1.節點數並非越多越好,過多的節點將會導致數據延遲寫入。
2.節點跟節點之間的跨機房,專線之間網路延遲,也將會導致數據延遲寫入。
3.受網路IO和磁碟IO的延遲
4.為了提高吞吐量,etcd通常將多個請求一次批量處理並提交Raft,
5.增加節點,讀性能會提升,寫性能會下降,減少節點,寫性能會提升。
參數說明:
這種方式就是 利用一個已有的 etcd 集群來提供 discovery 服務,從而搭建一個新的 etcd 集群。
假設已有的 etcd 集群的一個訪問地址是: myetcd.local ,那麼我們首先需要在已有 etcd 中創建一個特殊的 key,方法如下:
其中 value=3 表示本集群的大小,即: 有多少集群節點。而 就是用來做 discovery 的 token。
接下來你在 3 個節點上分別啟動 etcd 程序,並加上剛剛的 token。
加 token 的方式同樣也有 命令行參數 和 環境變數 兩種。
命令行參數:
環境變數
以 命令行參數 啟動方式為例:
可以使用etcd附帶的 基準 CLI工具完成基準測試etcd性能。
對於一些基準性能數字,我們考慮具有以下硬體配置的三個成員的etcd集群:
有了這個配置,etcd可以大致寫出:
示例命令是:
可線性讀取請求通過集群成員的法定人數達成一致以獲取最新數據。可序列化的讀取請求比線性讀取要便宜,因為它們由任何單個etcd成員提供,而不是成員法定人數,以換取可能的陳舊數據。etcd可以閱讀:
示例命令是:
我們鼓勵在新環境中首次安裝etcd集群時運行基準測試,以確保集群達到足夠的性能; 群集延遲和吞吐量可能會對較小的環境差異敏感。
以上測試部分翻譯空圓自官方文檔( https://coreos.com/etcd/docs/latest/op-guide/performance.html )