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作为基础设施,一出问题几乎都是大问题,这都是真实经验教训。
参考:
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
PowerDotNet平台化软件架构设计与实现系列(08):缓存平台的更多相关文章
- PowerDotNet平台化软件架构设计与实现系列(03):系统应用平台
为了复用和解耦,快速开发更多的系统和应用,我们对自己经常说的"系统"和"应用"进行更高级的提取和抽象. 十多年前入行,辗转至今,写过很多很多应用,个人喜欢分门别 ...
- PowerDotNet平台化软件架构设计与实现系列(01):基础数据平台
本系列我将主要通过图片和少许文字讲解通过个人自研的PowerDotNet进行快速开发平台化软件产品. PowerDotNet不仅仅是包含像Newtonsoft.Json.Dapper.Quartz.R ...
- PowerDotNet平台化软件架构设计与实现系列(02):数据库管理平台
为了DB复用和简化管理,我们对常见应用依赖的DB模块进行更高级的提取和抽象. 虽然一些ORM可以简化DB开发,但是我们还是需要进行改进和优化,否则应用越多,后期管理运维越混乱. 根据常见开发需要,数据 ...
- PowerDotNet平台化软件架构设计与实现系列(05):ETCD分布式键值存储平台
ETCD目前在PowerDotNet已经被用于注册中心和配置管理(常见的配置中心在PowerDotNet中仅仅是一个小小的模块而已)中,作为基础设施的重要组成部分,ETCD的重要性不言而喻. 本文简单 ...
- PowerDotNet平台化软件架构设计与实现系列(13):应用监控平台
本文再写一篇和具体业务逻辑几乎无关的公共服务应用监控平台.PowerDotNet自研的应用监控平台系统,是服务治理的重要拼图,和服务治理平台配合使用效果更好. 监控开源产品非常丰富,站在巨人的肩膀上, ...
- PowerDotNet平台化软件架构设计与实现系列(11):日志平台
所有后端应用几乎都会记录日志,日志系统可以统一抽象出来提供服务. 最近被Log4j2的安全漏洞刷屏了,作为开发人员的我只能咩哈哈几次表示日志处理太难了,只有折腾过的人才知道这里面的艰辛啊. 在实现Po ...
- PowerDotNet平台化软件架构设计与实现系列(12):HCRM人员管理平台
技术服务于业务,良好的技术设计和实现能够大幅提升业务质量和效率. PowerDotNet已经形成了自己的开发风格,很多项目已被应用于生产环境,可行性可用性可靠性都得到了生产环境验证. 编程是非常讲究动 ...
- PowerDotNet平台化软件架构设计与实现系列(06):定时任务调度平台
定时任务是后端系统开发中少不了的一个基本必备技能. 传统的实现定时任务的方式有很多种,比如直接使用操作系统的Timer和TaskSchedule,或者基于Quartz.HangFire.xxl-job ...
- PowerDotNet平台化软件架构设计与实现系列(07):数据同步平台
上文介绍定时任务调度平台的时候提到,定时任务调度平台的类模式一般用于处理耗时较长的任务.但是根据经验,有些耗时较长的任务,可以通过简化业务逻辑.分页.批量多次处理,改造为耗时较小的适合使用RESTfu ...
随机推荐
- Go语言核心36讲(Go语言实战与应用十五)--学习笔记
37 | strings包与字符串操作 Go 语言不但拥有可以独立代表 Unicode 字符的类型rune,而且还有可以对字符串值进行 Unicode 字符拆分的for语句. 除此之外,标准库中的un ...
- Codeforces 870F - Path(数论+分类讨论+正难则反)
Codeforces 题目传送门 & 洛谷题目传送门 首先考虑 \(d(u,v)\) 是个什么东西,分情况讨论: \(u\not\perp v\),\(d(u,v)=1\) \(u\perp ...
- 1D RKDG to shallow water equations
RKDG to shallow water equations 1.Governing Equations \[\frac{\partial U}{\partial t} + \frac{\parti ...
- 【机器学习与R语言】4-决策树
目录 1.决策树原理 2.决策树应用示例 2.1)收集数据 2.2)探索和准备数据 2.3)训练模型 2.4)评估模型性能 2.5)提高模型性能 通过自适应增强算法(boosting) 将惩罚因子分配 ...
- 【Python小试】计算蛋白序列中指定氨基酸所占的比例
编码 from __future__ import division def get_aa_percentage(protein, aa_list=['A','I','L','M','F','W',' ...
- linux下定位异常消耗的线程实战分析
前言: 之前分享过一篇Linux开发coredump文件分析实战分享 ,今天再来分享一篇实战文章. 在我们嵌入式linux开发过程中,开发过程中我们经常会使用多进程.多线程开发.那么多线程使用过程中, ...
- Office2020-2021 离线安装教程
首先:先安装两个 net .再安装 office 如下: DownFile:https://pan.baidu.com/s/19iykxwofXK36wWY5w4GVFg codenum:6666
- hive向mysql导入数据sqoop命令出错
报错信息: java.lang.Exception: java.io.IOException: java.lang.ClassNotFoundException: info at org.apache ...
- MapReduce02 序列化
目录 MapReduce 序列化 概述 自定义序列化 常用数据序列化类型 int与IntWritable转化 Text与String 序列化读写方法 自定义bean对象实现序列化接口(Writable ...
- A Child's History of England.3
So, Julius Caesar came sailing over to this Island of ours, with eighty vessels and twelve thousand ...