原创 AppBoxFuture: Raft快照及日誌截斷回收

  AppBoxFuture的存儲引擎依賴Raft一致性協議來保證各個分區副本的一致性,如果不處理Raft日誌將不斷增長,因此需要特定的機制(定期或每處理一定數量的日誌)來回收那些無用的日誌數據。通過學習Raft協議內的Log Compac

原创 告別單體架構,迎接分佈式時代!

  隨着互聯網+、智能製造等大數據應用的發展,傳統的企業信息化單體架構必定繞不過以下兩個坎: 單機資源瓶勁造成系統響應慢,需要高成本升級硬件來解決; 單機故障造成系統不可用,需要較長的時間來恢復故障。   所以將來的企業信息化基礎架構必

原创 AppBoxFuture: 123挨個站-數據按序存儲

  最近幾天在優化存儲的編碼規則,順帶把之前設計了但未實現的倒排序一併實現了。由於所有數據(元數據、實體、索引等)都映射至RocksDB的Key-Value存儲,所以必須擴展RocksDB的自定義比較器(Comparator)來實現自定義K

原创 用ECharts繪製Prometheus圖表,實現類似Grafana的自定義Dashboard

  大家一般都是用Grafana自定義Dashboard來監控Prometheus數據的,作者這次嘗試用ECharts來繪製Prometheus數據圖表,一方面可以減少依賴,另一方面可以將監控界面靈活的集成進應用系統。至於如何在被監測機器上

原创 我造了個好大的"輪子",居然還不是"圓"的!

  我造的這個"輪子"指的是集低代碼開發與運維爲一體的平臺,爲什麼說它不是"圓"的,因爲它有些與衆不同,甚至可以說是有些另類。至於爲什麼造這個"輪子",以及另類在什麼地方且聽我慢慢道來。 一、痛苦的編碼歲月   我是一個70後碼農,開發過不

原创 AppBoxFuture: 二級索引及索引掃描查詢數據

  數據庫索引對於數據查詢的重要性不可言喻,因此作者在存儲層實現了二級索引,以及利用索引進行掃描的功能。目前僅實現了分區表與非分區表的本地索引(數據與索引共用一個Raft組管理),全局索引及反向索引待以後再實現。 一、存儲結構:   在介紹

原创 我是如何基於二階段遞交及悲觀鎖實現分佈式事務的

  由於框架一開始的定位就是需要支持強一致性分佈式存儲,所以如何實現分佈式事務成爲一個大挑戰。作者學習了CockroachDB及TiDB等數據庫的實現方式後,決定參考TiDB的實現方式,但不同於使用樂觀方式而是採用悲觀鎖方式,遇到事務衝突採

原创 AppBoxFuture: 大數據表分區的3種策略

  之前的文章“分而治之”在介紹大表分區時,作者尚未實現不同的分區策略,即只能按指定的分區鍵進行分區。這次作者完善了一下分區策略,在規劃大表分區時可以按Hash或者時間範圍進行分區,所以本篇介紹不同的分區策略適用的場景,同時介紹一下表掃描時

原创 AppBoxFuture(九): 組織結構與權限體系

  權限體系是用於約束用戶訪問或操作資源的權利,這裏的“資源”可以指數據,也可以指特定的功能(如審覈訂單)。通常的權限體系設計是基於角色的訪問控制方式,用戶通過角色與權限進行關聯。作者的實現方式稍微有些不同,通過組織結構樹與權限進行關聯,這

原创 AppBoxFuture(八): 另類的ORM實現

  通常的ORM實現基於配置或註釋,由反射或Emit生成相應的Sql語句,然後將Sql發送給數據庫解析Sql字符串生成AST再交給優化器處理後執行,返回的數據再經由反射或Emit轉換爲相應的實體實例。作者認爲上述方式主要存在以下兩個問題:

原创 AppBoxFuture(七): 分佈式外鍵約束

  關係數據庫與NoSql其中的一個主要區別是具備完整的外鍵約束,雖說現在一些大廠在設計數據存儲結構時禁止使用外鍵約束,靠業務邏輯來保證數據完整性,但考慮到是人就會犯錯,爲了保證關鍵業務數據的完整性,所以作者還是決定在存儲引擎層面實現外鍵約

原创 AppBoxFuture(六): 前端組件化開發

  前面幾篇都是在介紹結構化與非結構化的數據存儲,本篇換換口味介紹一下框架是如何實現前端組件化開發的。首先得感謝Vue、ElementUI等優秀的前端開源項目,這些項目幫助作者快速實現了框架的兩個前端工程(IDE及Web應用)的開發。   

原创 AppBoxFuture(五): 分佈式文件存儲-Store Everything

  本來本篇是想介紹前端組件化開發用戶界面,發現框架還未實現文件存儲,原本計劃是後續設計開發的,索性把計劃提前,所以本篇將介紹基於Raft實現分佈式的文件存儲引擎。 一. 實現思路   既然是分佈式存儲,就需要解決以下幾個關鍵問題: 如何

原创 AppBoxFuture(四). 隨需而變-Online Schema Change

  需求變更是信息化過程中的家常便飯,而在變更過程中如何儘可能小的影響在線業務是比較頭疼的事情。舉個車聯網監控的例子:原終端設備上傳車輛的經緯度數據,新的終端設備支持同時上傳速度數據,而舊的車輛狀態表數據量超過億級,此時如果Alter ta

原创 AppBoxFuture(三): 分而治之

  系統數據量達到一定程度後必將採用分庫分表的方式來提高系統性能,但傳統的分庫分表方式也必將帶來更高的開發複雜程度。新一代的NewSql及NoSql數據庫由於天生的分佈式存儲基因,既保證了能夠橫向擴展,又可以避免較高的開發複雜程度。App