基于.NET CORE微服务框架 -谈谈Cache中间件和缓存降级
1、前言
surging受到不少.net同学的青睐,也提了不少问题,提的最多的是什么时候集成API 网关,在这里回答大家最近已经开始着手研发,应该在1,2个月内会有个初版API网关,其它像Token身份验证,限流降级等功能完成时间会往后推
最近也更新了surging新的版本
更新内容:
1. Cache中间件基于Redis 所依赖的第三方库已将servicestack.redis转成stackexchange
2. 增加缓存降级
3. 增加拦截缓存降级的例子
开源地址:https://github.com/dotnetcore/surging
2.软件环境
IDE:Visual Studio 2017 15.3 Preview ,vscode
框架:.NET core 2.0
vscode 技术支持:
周松柏(zsbfre)
3、Cache中间件的使用
在剥析surging的架构思想这篇文章中大致提了下Cache中间件,大家也对Cache中间件有了初步印象,这一节我们将谈谈怎么使用Cache中间件
1.创建配置文件
cacheSettings.json
{
"CachingSettings" : [
{
"Id" : "ddlCache" ,
"Class" : "Surging.Core.Caching.RedisCache.RedisContext,Surging.Core.Caching" ,
"Properties" : [
{
"Name" : "appRuleFile" ,
"Ref" : "rule"
},
{
"Name" : "dataContextPool" ,
"Ref" : "ddls_sample" ,
"Maps" : [
{
"Name" : "Redis" ,
"Properties" : [
{
"value" : "127.0.0.1:6379::1"
}
]
},
{
"Name" : "MemoryCache"
}
]
},
{
"Name" : "defaultExpireTime" ,
"value" : "120"
},
{
"Name" : "connectTimeout" ,
"Value" : "120"
},
{
"Name" : "minSize" ,
"Value" : "1"
},
{
"Name" : "maxSize" ,
"Value" : "10"
}
]
}
]
}
|
可以支持多个实例配置通过配置id来标识唯一,并且通过配置Maps,来初始化服务节点列表,通过哈希一致性来选择服务节点
配置参数列表
参数 |
作用 |
---|---|
CachingSettings |
包含多个实例的父级配置节 |
Id |
唯一标识 |
Class |
对于Context的适配 |
Properties | Cache 相关配置节 |
Maps |
配置服务节列表 |
minSize |
对象池最小数 |
maxSize |
objectpool最大数 |
2.代码配置
/// <summary>/// 配置缓存服务 /// </summary>public static void ConfigureCache(IConfigurationBuilder build){build.AddCacheFile("cacheSettings.json", optional: false);}
以上我们就完成了缓存中间件配置,接下来就可以通过以下代码进行调用
基于redis的缓存调用
cacheProvider = CacheContainer.GetInstances<ICacheProvider>(“ddlCache.Redis”);
|
基于MemoryCache的缓存调用
CacheContainer.GetInstances<ICacheProvider>("MemoryCache")
4、缓存降级
对于服务所返回的数据,有些是不需要经常修改,可以通过缓存返回数据,比如商品应用,商品分类,商品列表、用户信息,订单信息,购物车等,通过以上需求我们就要对于proxy进行拦截,返回缓存或者删除缓存。
对于缓存会有以下疑问
数据一致性:对于服务是分布式部署在各台服务器上, 缓存存储读取也应该支持分布式,所以应该选择支持分布式的缓存框架,如:redis,couchbase,membercache
缓存命中率:在无命中的情况下,无法直接通过缓存获取到想要的数据,而直接通过调用远程服务获取数据,这样就会增加响应时间和影响吞吐量,所以我们必须引用工具进行监控
缓存降级
surging的缓存降级就是针对于proxy进行拦截,如果有缓存数据,则返回缓存数据,否则调用Proceed方法调用远程服务。
在数据进行update,delete的时候就需要针对于依赖的缓存进行删除,可以通过proxy进行拦截的方式把缓存进行删除
缓存降级有以下优点
1.高性能:可以减少响应时间和提高吞吐量
2.高效:针对于业务逻辑的设计,无需考虑缓存,做到了无缝集成
以下通过示例来介绍如何使用
在业务接口方法上添加如下特性
[Command(Strategy= StrategyType.Failover,FailoverCluster =3,RequestCacheEnabled =true)] //RequestCacheEnabled =true 就是启用缓存
拦截获取缓存
[InterceptMethod(CachingMethod.Get, Key = "GetUser_id_{0}", Mode = CacheTargetType.Redis, Time = 480)]
拦截删除缓存
[InterceptMethod(CachingMethod.Remove, "GetUser_id_{0}", "GetUserName_name_{0}", Mode = CacheTargetType.Redis)]
应用[CacheKey]来标识缓存Key,如
public class UserModel{ [CacheKey(1)] public int UserId { get; set; } public string Name { get; set; } public int Age { get; set; }}
配置拦截器
.AddClientIntercepted(typeof(CacheProviderInterceptor))
5.测试
测试环境
CPU:Intel Core i7-4710MQ
内存:16G
硬盘:1T SSD+512G HDD
网络:局域网
开启redis测试结果如下:
停用Redis测试结果如下:
6、总结
已经开始研发API网关,近期更新只会修复BUG和提交单元测试。如感兴趣请多关注或者加入QQ群:615562965
相关文章
谷歌发布的首款基于HTTP/2和protobuf的RPC框架:GRPC
拥抱.NET Core,跨平台的轻量级RPC:Rabbit.Rpc
基于DotNet Core的RPC框架(一) DotBPE.RPC快速开始
基于.NET CORE微服务框架 -surging的介绍和简单示例 (开源)
剥析surging的架构思想
基于.NET CORE微服务框架 -谈谈surging的服务容错降级
原文地址:http://www.cnblogs.com/fanliang11/p/7256069.html
.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注
基于.NET CORE微服务框架 -谈谈Cache中间件和缓存降级相关推荐
- 基于.NET CORE微服务框架 -谈谈surging API网关
1.前言 对于最近surging更新的API 网关大家也有所关注,也收到了不少反馈提出是否能介绍下Api网关,那么我们将在此篇文章中谈谈surging Api 网关 开源地址:https://gith ...
- 基于.NET CORE微服务框架 -谈谈surging的服务容错降级
一.前言 对于不久开源的surging受到不少.net同学的青睐,也受到.net core学习小组的关注,邀请加入.NET China Foundation 以方便国内.net core开源项目的推广 ...
- 基于.NET CORE微服务框架 -浅析如何使用surging
1.前言 surging受到大家这么强烈的关注,我感到非常意外,比如有同僚在公司的分享会上分享surging, 还有在博客拿其它的RPC框架,微服务做对比等等,这些举动都让我感觉压力很大,毕竟作为个人 ...
- 基于thrift的微服务框架
前一阵开源过一个基于spring-boot的rest微服务框架,今天再来一篇基于thrift的微服务加框,thrift是啥就不多了,大家自行百度或参考我之前介绍thrift的文章, thrift不仅支 ...
- python sanic orm_基于sanic的微服务框架 - 架构分析
感谢@songcser分享的<基于sanic的微服务基础架构>https://github.com/songcser/sanic-ms 最近正在学习微服务,发现这个repo不错,但不完整, ...
- Java框架jboot_Jboot v3.0.3 正式版发布,基于 JFinal 的微服务框架
Jboot是一个基于JFinal.JFinal-Undertow.Dubbo等开发的微服务框架,帮助开发者降低微服务开发门槛.同时完美支持在idea.eclipse下多maven模块,对java代码. ...
- 几个基于jvm 的微服务框架
一个简单的整理,留待深入学习 micronaut http://micronaut.io/ sparkjava http://saprkjava.com spring cloud http://pro ...
- 基于.net的微服务架构下的开发测试环境运维实践
眼下,做互联网应用,最火的架构是微服务,最热的研发管理就是DevOps, 没有之一.微服务.DevOps已经被大量应用,它们已经像传说中的那样,可以无所不能.特来电云平台,通过近两年多的实践,发现完全 ...
- python的flask微服务-flask微服务框架的初步接触
测试2个关联的系统接口时,经常会遇到被测试系统或被测app的处理内部处理流程会依赖另一个系统的接口返回结果,这时, 常用的做法就是写一个模拟测试桩,用作返回请求时的结果.java可以用servicel ...
最新文章
- 四月青少年编程组队学习(Python一级)Task01
- 项目实施中应该注意的事项
- 无法打开物理文件 X.mdf。操作系统错误 5:5(拒绝访问。)
- 经典排序算法python回顾之一 交换排序
- 冒泡排序 oj - Google 搜索
- boost::hana::slice用法的测试程序
- R eentrantLock的源码分析
- r语言将百分数化为小数_C语言入门学习(一)
- pytorch自定义新层demo_从头学pytorch(十一):自定义层
- python代码生成器_Python金融应用之基金业绩评价体系构建
- 检测提取图像中的直线(基于霍夫变换)
- Win10 SAS9.4缺少增强型编辑器
- 各种Demo下载网址
- 《微信背后的产品观》一书
- win7系统如何一键清理系统垃圾【系统天地】
- c# 接管系统鼠标_4个阶段的方法来接管大型,混乱的IT系统
- 四月送书活动获奖名单
- 5种最热门编程语言的优缺点
- 基于Java的员工管理系统
- Java JDK 安装方法---阿哲专属版