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进行拦截,返回缓存或者删除缓存。

对于缓存会有以下疑问

  1. 数据一致性:对于服务是分布式部署在各台服务器上, 缓存存储读取也应该支持分布式,所以应该选择支持分布式的缓存框架,如:redis,couchbase,membercache

  2. 缓存命中率:在无命中的情况下,无法直接通过缓存获取到想要的数据,而直接通过调用远程服务获取数据,这样就会增加响应时间和影响吞吐量,所以我们必须引用工具进行监控

缓存降级

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中间件和缓存降级相关推荐

  1. 基于.NET CORE微服务框架 -谈谈surging API网关

    1.前言 对于最近surging更新的API 网关大家也有所关注,也收到了不少反馈提出是否能介绍下Api网关,那么我们将在此篇文章中谈谈surging Api 网关 开源地址:https://gith ...

  2. 基于.NET CORE微服务框架 -谈谈surging的服务容错降级

    一.前言 对于不久开源的surging受到不少.net同学的青睐,也受到.net core学习小组的关注,邀请加入.NET China Foundation 以方便国内.net core开源项目的推广 ...

  3. 基于.NET CORE微服务框架 -浅析如何使用surging

    1.前言 surging受到大家这么强烈的关注,我感到非常意外,比如有同僚在公司的分享会上分享surging, 还有在博客拿其它的RPC框架,微服务做对比等等,这些举动都让我感觉压力很大,毕竟作为个人 ...

  4. 基于thrift的微服务框架

    前一阵开源过一个基于spring-boot的rest微服务框架,今天再来一篇基于thrift的微服务加框,thrift是啥就不多了,大家自行百度或参考我之前介绍thrift的文章, thrift不仅支 ...

  5. python sanic orm_基于sanic的微服务框架 - 架构分析

    感谢@songcser分享的<基于sanic的微服务基础架构>https://github.com/songcser/sanic-ms 最近正在学习微服务,发现这个repo不错,但不完整, ...

  6. Java框架jboot_Jboot v3.0.3 正式版发布,基于 JFinal 的微服务框架

    Jboot是一个基于JFinal.JFinal-Undertow.Dubbo等开发的微服务框架,帮助开发者降低微服务开发门槛.同时完美支持在idea.eclipse下多maven模块,对java代码. ...

  7. 几个基于jvm 的微服务框架

    一个简单的整理,留待深入学习 micronaut http://micronaut.io/ sparkjava http://saprkjava.com spring cloud http://pro ...

  8. 基于.net的微服务架构下的开发测试环境运维实践

    眼下,做互联网应用,最火的架构是微服务,最热的研发管理就是DevOps, 没有之一.微服务.DevOps已经被大量应用,它们已经像传说中的那样,可以无所不能.特来电云平台,通过近两年多的实践,发现完全 ...

  9. python的flask微服务-flask微服务框架的初步接触

    测试2个关联的系统接口时,经常会遇到被测试系统或被测app的处理内部处理流程会依赖另一个系统的接口返回结果,这时, 常用的做法就是写一个模拟测试桩,用作返回请求时的结果.java可以用servicel ...

最新文章

  1. 四月青少年编程组队学习(Python一级)Task01
  2. 项目实施中应该注意的事项
  3. 无法打开物理文件 X.mdf。操作系统错误 5:5(拒绝访问。)
  4. 经典排序算法python回顾之一 交换排序
  5. 冒泡排序 oj - Google 搜索
  6. boost::hana::slice用法的测试程序
  7. R eentrantLock的源码分析
  8. r语言将百分数化为小数_C语言入门学习(一)
  9. pytorch自定义新层demo_从头学pytorch(十一):自定义层
  10. python代码生成器_Python金融应用之基金业绩评价体系构建
  11. 检测提取图像中的直线(基于霍夫变换)
  12. Win10 SAS9.4缺少增强型编辑器
  13. 各种Demo下载网址
  14. 《微信背后的产品观》一书
  15. win7系统如何一键清理系统垃圾【系统天地】
  16. c# 接管系统鼠标_4个阶段的方法来接管大型,混乱的IT系统
  17. 四月送书活动获奖名单
  18. 5种最热门编程语言的优缺点
  19. 基于Java的员工管理系统
  20. Java JDK 安装方法---阿哲专属版

热门文章

  1. VS2010下的多线程窗口
  2. hibernate.cfg.xml的一些事
  3. C# 线程问题之死锁
  4. PowerToys插件扩展(类似Alfred)
  5. 微服务组件记事本:Skywalking执行效果 · 多图篇
  6. 50K求聘.NET,我们是认真的!
  7. C#开源项目:SiMay远程控制管理系统
  8. Swagger扩展为你添油加气
  9. 【翻译】.NET 5 Preview 1 发布
  10. 国产自主研发编程语言火了,同行十二年,不知Python是木兰?