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 ...
随机推荐
- [bzoj5291]链上二次求和
记$bi=b_{i-1}+ai$,$ci=c_{i-1}+bi$,那么答案就是$\sum_{i=l}^{r}\sum_{j=0}^{n-i}b_{j+i}-bj=(r-l+1)cn-\sum_{i=l ...
- WinRAR下载
https://www.win-rar.com 垃圾7Z有的解压不了.
- Dockerfile之CMD与Entrypoint使用要点
CMD与ENTRYPOINT都可以代表容器的启动命令,单丛语义上来理解,CMD是一个命令或者口令,而ENTRYPOINT则是一个入口(相当于容器启动时的入口),那么其实就可以理解为每当我们开启一个容器 ...
- [NOI2020] 超现实树
我们定义链树为:在该树上的任意节点,左右子树大小的最小值小于2. 举个例子: 那么我们思考,链树显然可以在叶子节点任意替换成其他子树. 那么在主链上,我们可以做到生成任意深度大于主链长度的树. 反过来 ...
- JSOI 2008 最小生成树计数
JSOI 2008 最小生成树计数 今天的题目终于良心一点辣 一个套路+模版题. 考虑昨天讲的那几个结论,我们有当我们只保留最小生成树中权值不超过 $ k $ 的边的时候形成的联通块是一定的. 我们可 ...
- Sums gym100753M
Sums gym100753M 同余最短路模板,然而这个东西貌似也可以做去年D1T2 首先我们选择一个模数作为基准,然后剩下的这样连边: 对于一个面值为 x 的硬币 ,当前在 u 这个点(感性理解一下 ...
- 学军中学csp-noip2020模拟5
Problem List(其实这几场全是附中出的) 这场比赛的题目相当有价值,特别是前两题,相当的巧妙. A.路径二进制 数据范围这么小,当然是搜索. \(30pts:\)大力搜索出奇迹,最后统计答案 ...
- 使用systemd将iptables规则在docker启动后自动导入
编写systemd文件 $ sudo vi /etc/systemd/system/iptables-import.service # /etc/systemd/system/iptables-imp ...
- 【PS算法理论探讨一】 Photoshop中两个32位图像混合的计算公式(含不透明度和图层混合模式)。
大家可以在网上搜索相关的主题啊,你可以搜索到一堆,不过似乎没有那一个讲的很全面,我这里抽空整理和测试一下数据,分享给大家. 我们假定有2个32位的图层,图层BG和图层FG,其中图层BG是背景层(位于下 ...
- absent, absolute
absent 1. A teacher asked in a class who killed Abraham Lincoln. A blonde said "It wasn't me, I ...