PowerDotNet平台化軟體架構設計與實現系列(08):快取平台

幾乎所有後端應用都會或多或少用到快取,尤其是分散式快取服務,以及和本地快取構造的二級快取。根據我們一貫的節約程式碼的風格,為了復用的目標,抽象出快取平台,進行快取管理。

考慮到很多公司都會自己造或者直接拿來主義使用各種各樣的開源快取輪子,本文介紹的就簡單一點,聊下主要思路和實現思想就行,滅哈哈。

環境準備

1、(必須).Net Framework4.5+

2、(必須)關係型資料庫MySQL或SqlServer或PostgreSQL或MariaDB四選一

3、(必須)PowerDotNet資料庫管理平台,主要使用DBKey功能

4、(必須)PowerDotNet配置中心Power.ConfigCenter

5、(必須)PowerDotNet註冊中心Power.RegistryCenter

6、(必須)PowerDotNet基礎數據平台Power.BaseData

7、(必須)PowerDotNet人員管理平台Power.HCRM,後續文章詳細介紹

8、(必須)Redis

一、分散式快取

PowerDotNet默認支援的分散式快取是Redis(參考了CacheCloud,但是和它管理快取的思路不完全一樣,PowerDotNet的快取設計主要是基於「分區」的分組復用),並可以繼續抽象,預留擴展介面,後續可以支援更多分散式快取選型,比如Memcached等。

1、Redis集群

2、Redis伺服器

針對集群中的每台快取伺服器,可以精準定位,處理快取。

管理系統支援一些場景的快取設置場景,如查詢、刪除、添加、統計。

比如常見的查看鍵值對:

查看詳細(含TTL):

再比如說添加,支援Redis的5大基本類型string、list、set、zset和hash:

管理後台很大程度上完全可以替代一些分散式快取管理客戶端軟體。

注意,如果使用了cachecloud,集群可從cachecloud數據表machine_room表同步過來,伺服器可從cachecloud數據表machine_info和server同步過來,如何同步,在PowerDotNet中數據同步平台是最好的選擇。

3、快取分組

對於大中型企業來說,分散式快取經常需要按照業務團隊進行分組管理。

PowerDotNet完美支援按照系統和應用進行快取Route綁定,做到按組管理。

先定義CacheRoute,一個CacheRoute等同於一個快取分組:

將CacheRoute綁定到具體應用,這樣業務系統只要調用封裝好的公共SDK(分散式快取客戶端SDK命名為Power.Cache)就能自動獲取分散式快取能力,甚至不用寫任何配置,直接在配置中心,點點按鈕搞定一切,實在是太省心了。

二、二級快取

在配置中心進行配置,就可以順利實現如下五種組合:

1、僅本地快取

2、本地快取加分散式快取構成二級快取,本地快取優先

3、僅分散式快取

4、本地快取加分散式快取構成二級快取,分散式快取優先

5、不開啟任何快取

不過第5種建議不要用,引入公共快取組件做無用功也太沒意思,咩哈哈,想的太周到了,這都是多年業務開發經驗總結啊。

有了快取平台,快取管理更加人性化,排查和定位問題更加方便。

當然,Redis的部署、運維和遷移更是重中之重,哪怕用了cachecloud,還是會有團隊遇到Redis各種使用問題。

根據個人所在公司的經驗,快取常見的幾種問題排查下來,基本都是大規模集群下配置或者參數設置使用不當,或者快取客戶端沒有做好,雖然絕大多數情況下都是運維背鍋,作為核心開發人員也要認清使用好Redis非常不容易,Redis作為基礎設施,一出問題幾乎都是大問題,這都是真實經驗教訓。

參考:

//redis.io

//www.redis.cn

//github.com/sohutv/cachecloud

//www.redis.cn/commands.html

//github.com/sripathikrishnan/redis-rdb-tools

//stackexchange.github.io/StackExchange.Redis

//github.com/ctstone/csredis

//github.com/uglide/RedisDesktopManager