1. 程式人生 > >一站式分散式快取解決方案codisX

一站式分散式快取解決方案codisX

1 研究背景

分散式快取是各大公司業務系統必不可少的元件,目前市面上開源的分散式快取解決方案主要有redis cluster和codis,在進行了一系列調研之後,redis cluster現階段的模組耦合使得我最後放棄了這一方案,轉向了codis。在使用過程中,發現了一些codis的不足之處。因此筆者在官方codis的基礎上(基於最新版本3.2.2),修改了原始碼,做出了codisX。

  1. 真正的彈性伸縮,擴容時只需要在fe中新增server並且自動resharding,無需任何元件重啟
  2. fe中可以實時監控各個server的執行狀態,也可以更改master和slave的角色
  3. 相容原生的redis操作,業務開發人員無需學習成本
  4. 業務開發人員不需要考慮分片問題,就像使用單機一樣使用codis
  5. 不同的業務系統可以通過同一套zk的不同路徑去區分(擔心zk效能問題就多餘了,codis正常執行的過程中,無論是proxy連線池還是dashboard都根本不會走zk的)

2 codisX的設計思路

codis的官方作者一開始是想要實現一個KV資料庫,也就是強調資料一致性,是CP的系統,在一組server(包括master和slave)都宕機的情況下,服務是不可用的。但是很多場景快取只是用來加速的,也就是說,對於快取的需求應該是AP的,無需高度的一致性,而是需要滿足高的可用性。在這種情況下,一組server是不需要slave的(我這麼說不是說有slave不行,而是slave的存在沒什麼必要,有那個機器還不如去充當另一個group的master)。當一臺server宕機又恢復之後資料取不到也無所謂。

基於以上思考,就要動手修改codis原始碼了。借鑑了cassandra的設計模式,在slot級別實現了一致性雜湊,一個group的server宕機之後,請求會根據雜湊環打到下一個節點上,根據墨菲定律,最壞的情況是下一個節點的server也掛了,因此在proxy的配置檔案中,提供了最大重試次數的選項,如果超過了這個閾值還是失敗,就向業務系統返回異常,由業務系統自行處理。至於你的系統對快取的需求是CP還是AP的,只需要在dashboard的配置檔案中修改一下配置,指定working mode就可以了。

# Set work mode for codis cluster (only accept 'CP'
& 'AP',default is 'CP'). working_mode = "AP"

注意,在AP模式下,如下圖所示配置各個group的權重,點選confirm,會按照一致性雜湊自動分配

這裡寫圖片描述

另外,codis的主從讀寫分離規則中,replica group是包含master的。對於redis這種本身就是最終一致性的工具,本來如果你考慮實現讀寫分離的時候,就表明你認為減輕master的壓力比追求資料的強一致性要重要,因此在請求隨機路由的情況下,如果還是可能打到master是不必要的,這一點在codisX中做了改進。

kubernetes應該是現在比較理想的容器管理解決方案了,在官方實現的kubernetes scale方案中,server的伸縮方案還是基於CP的考慮的,前面我們已經說過了,在AP的模式下,scale過程中,group中要一個slave屬於浪費機器的舉動。當然土豪請自動忽略這句話。因此修改了codis基於k8s的scale方案,在叢集指定AP的工作模式下,擴容的時候,ReplicaController只會在新的group中放置一臺server。當然這一切對於使用者來說都是透明的,使用者無需關心這一點,而是通過指令碼自動識別的。

3 總結一下

codisX實現的新功能:

  1. 可以提供CP和AP兩種分散式快取服務模式,無論你的業務系統對於把快取當作資料庫使用還是單純為了加速訪問,都可以滿足你的需求
  2. 修改了讀寫分離邏輯
  3. 修改了基於kubernetes的scale方式,自動根據工作模式去修改擴容的方式,這一切對於運維人員或者使用者來說是完全透明的
  4. 其它一些小的修改

目前codisX執行在我們公司的推送和閘道器日誌統計平臺,每天日誌量過億,表現還是可以的。

歡迎各位高手試用和理性吐槽,如果有問題的話,可以找我反饋,我也會進行一些日常的維護

相關推薦

一站式分散式快取解決方案codisX

1 研究背景 分散式快取是各大公司業務系統必不可少的元件,目前市面上開源的分散式快取解決方案主要有redis cluster和codis,在進行了一系列調研之後,redis cluster現階段的模組耦合使得我最後放棄了這一方案,轉向了codis。在使用過程中

分散式快取重建併發衝突問題以及zookeeper分散式解決方案(7)

分散式重建快取的併發衝突問題 重建快取:比如我們這裡,資料在所有的快取中都不存在了(LRU演算法弄掉了),就需要重新查詢資料寫入快取,重建快取 分散式的重建快取,在不同的機器上,不同的服務例項中,去做上面的事情,就會出現多個機器分散式重建去讀取相同的資料,然

gulp-rev:專案部署快取解決方案

引言:   前端工程化部署比較重要考慮的一個問題是快取 ,可以參考 《變態的靜態資源快取與更新》。   使用gulp-rev解決的就是《變態的靜態資源快取與更新》提出的問題。 rev會做什麼:   根據靜態資源內容,生成md5簽名,打包出來的檔名會加上m

[轉載]使用訊息佇列實現分散式事務-公認較為理想的分散式事務解決方案

前陣子從支付寶轉賬1萬塊錢到餘額寶,這是日常生活的一件普通小事,但作為網際網路研發人員的職業病,我就思考支付寶扣除1萬之後,如果系統掛掉怎麼辦,這時餘額寶賬戶並沒有增加1萬,資料就會出現不一致狀況了。 上述場景在各個型別的系統中都能找到相似影子,比如在電商系統中,當有使用者下單後,除了在訂單表插

快取解決方案—Redis

一、Redis,Jedis,Spring Data Redis   1.1 Redis   redis是一款開源的Key-value資料庫,執行在記憶體中,由ANSIC編寫。企業開發通常使用Redis來實現快取。同類產品還有memcache、memcached、MongoDB等。   1.2 Jedis

有贊透明多級快取解決方案(TMC)

#一、引子 ##1-1. TMC 是什麼 TMC ,即“透明多級快取( Transparent Multilevel Cache )”,是有贊 PaaS 團隊給公司內應用提供的整體快取解決方案。 TMC 在通用“分散式快取解決方案(如 CodisProxy + Redis ,如有贊自研分散式快取系統 za

快取穿透、快取併發、熱點快取解決方案

快取穿透、快取併發、熱點快取 一、前言 在之前的一篇快取穿透、快取併發、快取失效之思路變遷文章中介紹了關於快取穿透、併發的一些常用思路,但是個人感覺文章中沒有明確一些思路的使用場景,本文繼續將繼續深化與大家共同探討,同時也非常感謝這段時間給我提寶貴建議的朋友們。 說明:本文中提到

Elastic-Job-分散式排程解決方案

Elastic-Job是一個分散式排程解決方案,由兩個相互獨立的子專案Elastic-Job-Lite和Elastic-Job-Cloud組成。 Elastic-Job-Lite定位為輕量級無中心化解決方案,使用jar包的形式提供分散式任務的協調服務。   官方

分散式事務解決方案---------LCN

1.過多的原理我就不一一介紹了,我就用一個例項來展示LCN分散式事務解決方案的應用。 tx-lcn https://gitee.com/wangliang1991/tx-lcn springcloud-demo版本的demo https://github.com/codingapi/

聊聊微服務架構及分散式事務解決方案

分散式事務場景如何設計系統架構及解決資料一致性問題,個人理解最終方案把握以下原則就可以了,那就是:大事務=小事務(原子事務)+非同步(訊息通知),解決分散式事務的最好辦法其實就是不考慮分散式事務,將一個大的業務進行拆分,整個大的業務流程,轉化成若干個小的業務流程,然後通過設計補償流程從而考慮最終一致性。什麼是

Spring Cloud分散式事務解決方案

開源專案 我們利用訊息佇列實現了分散式事務的最終一致性解決方案,請大家圍觀。可以參考Github CoolMQ原始碼,專案支援網站: http://rabbitmq.org.cn,最新文章或實現會更新在上面 二 前言 阿里2017雲棲大會《破解世界性技術難題!GTS

微信頁面入口檔案被快取解決方案

快取對於前端頁面來說,是加速頁面載入的利器之一,但也同時帶來了很多問題,比如新版本釋出之後,怎麼替換客戶端上的快取檔案呢?大家一般的的解決方案主要有以下幾種形式, 一般情況 1、新增版本號,在靜態資原始檔的引用連結後面新增版本號,這樣每次釋出的時候更新版本號,就能讓叫客戶端載入新的資原始檔,避免再次使用快取的

zabbix分散式監控解決方案

Zabbix介紹 Zabbix 是一個基於WEB介面的提供分散式系統監視以及網路監視功能的企業級的開源解決方案。 對於一個運維人員來說,不論是傳統運維還是自動化運維,保證線上業務整體能夠穩定執行是相當重要的,所以運維需要時長實時的關注到伺服器的執行情況,關注各項指標是否正常,那麼這裡就用

Spring Cloud Sleuth 分散式跟蹤解決方案

Spring Cloud Sleuth Adrian Cole,Spencer Gibb,Marcin Grzejszczak,Dave Syer Dalston.RELEASE Spring Cloud Sleuth為Spring Cloud實現分散式跟蹤解決

系統分庫之後的分散式事物解決方案

前言 本人目前就職於一家網際網路支付公司,在公司這幾年主要的工作是做支付賬務這一模組。賬務系統為了支撐上游高併發的業務請求,我們使用了分庫分表的方式來提升系統性能,但是分庫分表之後,隨之而來的一個比較棘手的問題就是分散式事務的問題。正好最近正在準備公司內部的職級

更多免費初級中級高階大資料java視訊教程下載 加(微***信((號keepper,請備註java或掃下面2二3維4碼第31: 2017年7月最新微服務架構的分散式事務解決方案價值1399

更多免費初級中級高階大資料java視訊教程下載 加(微***信((號keepper,請備註java或掃下面2二3維4碼第31: 2017年7月最新微服務架構的分散式事務解決方案價值1399java視訊教程01 課程介紹.wmvjava視訊教程02 解決方案的效果演示(結合支付系統真實應用場景).mp4java

JAVA架構師課程(大資料,分散式事物解決方案,大型網際網路專案,大型金融專案,高併發叢集解決方案)實戰開發[技術 activeMQ,zookeeper,http,支付,團購,dubbox,stom]

在IT圈子裡,真正達到軟體架構師能力和水平的,一般的年薪在30-50w,甚至50w+,資深的或者高階的架構師,年薪在50-80萬,水平更高的,薪水也就更多了,可以稱得上是金領了。   因此,一直以來,有很多朋友都在朝軟體架構師這個方向努力發展。但由於沒有人領路,一些朋友

Spring系列學習之Spring Cloud Sleuth分散式跟蹤解決方案

英文原文:https://spring.io/projects/spring-cloud-sleuth 目錄 概述 特性 Spring Boot配置 快速開始 學習 文件 示例 概述 Spring Cloud Sleuth為Spring Cloud實施分散

分散式事務解決方案之訊息最終一致性(可靠訊息服務)下篇

背景:1.支付成功 通知訂單完成2.訂單完成,通知會計記賬上游訂單服務,必須開放可查詢訂單狀態介面,判斷訊息是否可以傳送下游會計消費成功後,必須回撥訊息服務,ACK操作(約束:冪等性。 例如:訊息id等)流程:訂單服務: 預儲存訊息 -> 訂單完成 ->

分散式監控解決方案zabbix02-使用agent監控其他linux

一。 zabbix操作和配置   zabbix常用的操作為 系統使用者許可權管理 虛擬主機 監控項 觸發器 監控模板等 1》使用者和許可權    以下是許可權配置的幾個概念    主機組:被監控的主機的集合 同一類模板建立的主機 主機組配置參考官方文件    使用者組:某個