PowerDotNet平台化软件架构设计与实现系列(08):缓存平台

发布于 2022年 01月 24日 00:18

几乎所有后端应用都会或多或少用到缓存,尤其是分布式缓存服务,以及和本地缓存构造的二级缓存。根据我们一贯的节约代码的风格,为了复用的目标,抽象出缓存平台,进行缓存管理。

考虑到很多公司都会自己造或者直接拿来主义使用各种各样的开源缓存轮子,本文介绍的就简单一点,聊下主要思路和实现思想就行,咩哈哈。

环境准备

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作为基础设施,一出问题几乎都是大问题,这都是真实经验教训。

参考:

https://redis.io

http://www.redis.cn

https://github.com/sohutv/cachecloud

http://www.redis.cn/commands.html

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

https://stackexchange.github.io/StackExchange.Redis

https://github.com/ctstone/csredis

https://github.com/uglide/RedisDesktopManager

推荐文章