Pika 是 360 基礎架構團隊和 DBA 團隊聯合研發的一款高效、穩定、簡單可依賴的開源的 NoSQL 數據庫產品。徹底兼容 Redis 協議,支持 5 種數據結構(string,hash,list,set,zset),數據持久化到 RocksDB,相比於 Redis 內存的存儲方式,能極大減小服務器資源的佔用,加強了數據的可靠性。能夠採用單機和集羣兩種模式部署。Pika 項目 2015 年啓動,隨後在 Github 上開源,現有 3700 stars,35個 contributors,社區有大量的線上業務使 Pika。算法
對比 Redis
存儲容量: Redis 存儲到內存,硬件成本高,宕機恢復延遲高;Pika 借用 RocksDB 存儲到磁盤,單臺服務器所容納的數據量是 Redis 的幾十倍,宕機恢復速度快。數據庫
吞吐量: Redis QPS 更高,單臺服務器百萬級的 QPS;Pika QPS 相對較低,單服務器幾十萬,Redis 是 Pika 的 3~5 倍。服務器
訪問延遲: Redis 應該在 1ms 之內;Pika 延遲稍高,3ms 之內。數據結構
運維部署: Redis 支持單機主從和集羣兩種方式; Pika 也支持兩種方式部署。架構
適用場景
若是業務場景數據量比較大(> 50GB),數據可靠性要求高,那麼 Pika 能夠解決您的問題。運維
場景1:大規模數據處理系統的中間結果存儲分佈式
場景2:使用 Redis/Redis Cluster 作持久化存儲的業務系統性能
場景3:大型分佈式系統的元數據存儲spa
架構設計
Pika 能夠經過配置文件中的 instance-mode 配置項,設置爲 classic 和 sharding,來選擇運行經典模式(Classic)仍是分佈式模式(Sharding)的 Pika。架構設計
- 經典模式架構
經典模式(Classic): 即1主N從同步模式,1 個主實例存儲全部的數據,N 個從實例徹底鏡像同步主實例的數據,每一個實例支持多個 DBs。DB 默認從 0 開始,Pika 的配置項 databases 能夠設置最大 DB 數量。DB 在 Pika 上的物理存在形式是一個文件目錄。
- 分佈式模式架構
分佈式模式(Sharding): Sharding 模式下,將用戶存儲的數據集合稱爲 Table,每一個 Table 切分紅多個分片,每一個分片稱爲 Slot,對於某一個 KEY 的數據由哈希算法計算決定屬於哪一個 Slot。將全部 Slots 及其副本按照必定策略分散到全部的 Pika 實例中,每一個 Pika 實例有一部分主 Slot 和一部分從 Slot。在 Sharding 模式下,分主從的是 Slot 而再也不是 Pika 實例。Slot 在 Pika 上的物理存在形式是一個文件目錄。
總結
Pika 項目普遍應用到 360 內部和社區的重要項目中,節省了大量的資源。3.0 版本以後除了提升穩定性和性能以外,最主要的功能是支持了分佈式,能夠知足大規模的業務場景。