dapr目前更新到了1.2版本,在之前4月份的时候来自阿里的开发工程师发起了一个dapr集成Alibaba Sentinel的提案,很快被社区加入到了1.2的里程碑中并且在1.2 release 相关升级文档里可以看到已经实现了对Alibaba Sentinel的支持。今天我们就讲讲我们如何通过Sentinel实现对我们接口的保护。

目录:
一、通过Dapr实现一个简单的基于.net的微服务电商系统

二、通过Dapr实现一个简单的基于.net的微服务电商系统(二)——通讯框架讲解

三、通过Dapr实现一个简单的基于.net的微服务电商系统(三)——一步一步教你如何撸Dapr

四、通过Dapr实现一个简单的基于.net的微服务电商系统(四)——一步一步教你如何撸Dapr之订阅发布

五、通过Dapr实现一个简单的基于.net的微服务电商系统(五)——一步一步教你如何撸Dapr之状态管理

六、通过Dapr实现一个简单的基于.net的微服务电商系统(六)——一步一步教你如何撸Dapr之Actor服务

七、通过Dapr实现一个简单的基于.net的微服务电商系统(七)——一步一步教你如何撸Dapr之服务限流

八、通过Dapr实现一个简单的基于.net的微服务电商系统(八)——一步一步教你如何撸Dapr之链路追踪

九、通过Dapr实现一个简单的基于.net的微服务电商系统(九)——一步一步教你如何撸Dapr之OAuth2授权 && 百度版Oauth2

十、通过Dapr实现一个简单的基于.net的微服务电商系统(十)——一步一步教你如何撸Dapr之绑定

十一、通过Dapr实现一个简单的基于.net的微服务电商系统(十一)——一步一步教你如何撸Dapr之自动扩/缩容

十二、通过Dapr实现一个简单的基于.net的微服务电商系统(十二)——istio+dapr构建多运行时服务网格

十三、通过Dapr实现一个简单的基于.net的微服务电商系统(十三)——istio+dapr构建多运行时服务网格之生产环境部署

十四、通过Dapr实现一个简单的基于.net的微服务电商系统(十四)——开发环境容器调试小技巧

十五、通过Dapr实现一个简单的基于.net的微服务电商系统(十五)——集中式接口文档实现

十六、通过Dapr实现一个简单的基于.net的微服务电商系统(十六)——dapr+sentinel中间件实现服务保护
附录:(如果你觉得对你有用,请给个star)
一、电商Demo地址

二、通讯框架地址

  dapr的发展确实很快,在4月份开始这个基于dapr1.0的系列在服务治理这块dapr还仅仅只能依靠基于middleware.http.ratelimit的对下游进行粗粒度的服务保护,或者基于app-max-concurrency来约束来自上游的并发数。仅仅两个小版本后dapr就通过component实现了对sentinel的支持,不得不说社区的反应速度还是很快的。那sentinel到底是个什么呢?在sentinel官网开篇的一句话简介里是这么描述的:“sentinel 是面向分布式服务架构的高可用防护组件,主要以流量为切入点,从流量控制、熔断降级、系统自适应保护等多个维度来帮助用户保障微服务的稳定性。”,所以sentinel提供的是分布式应用四大类基本需求中之一——网络需求这块的相关部分能力。也就是微服务常见的限流、熔断降级等服务保护能力,而dapr通过模块化的component让开发者可以快速集成sentinel只需要配置不同的规则约束告知dapr sidecar即可获取相关的下游服务保护能力。sentinel组件本身成熟度也挺高的,在阿里内部广泛使用了多年,并且对 Dubbo、Spring Cloud、gRPC、Zuul、Reactor、Quarkus 等框架都做了集成,所以目前我们可以放心的使用它。

  今天的案例我们简单的模拟一下使用sentinel的限流能力来对我们下游服务特定接口提供保护能力,依然使用我们目前这套电商demo来完成,由于sentinel是对下游服务进行保护,所以我们需要将相关的规则写入到我们的apigateway对应的sidecar中,这样确保来自于客户端的请求都会被正确的限制流量,接下来我们来限制一下对accountservice的accountquery/checkrolebasedaccesscontroler这个接口做流量限制,按照1秒10次的方式,component如下:

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: sentinel
namespace: dapreshop
spec:
type: middleware.http.sentinel
version: v1
metadata:
- name: appName
value: "accountflowrule"
- name: logDir
value: "/tmp"
- name: flowRules
value: >-
[
{
"resource": "POST:/v1.0/invoke/accountservice/method/accountquery/checkrolebasedaccesscontroler",
"threshold": 10,
"tokenCalculateStrategy": 0,
"controlBehavior": 0
}
]

  这条规则告诉dapr我们需要启动sentinel中间件,并且注入一条规则规定对下游资源(resource)的访问维持在10次/秒(threshold),其中流量控制器的Token计算策略(tokenCalculateStrategy)采用默认也就是以threshold作为阈值,超出的请求部分采用的策略(controlBehavior)是拒绝服务。接着我们创建一个Configuration并注入到我们的apigateway这个deployment中:

apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:
name: sentinelconfig
namespace: dapreshop
spec:
httpPipeline:
handlers:
- name: sentinel
type: middleware.http.sentinel
apiVersion: apps/v1
kind: Deployment
metadata:
name: apigateway
namespace: dapreshop
spec:
selector:
matchLabels:
app: apigateway
replicas: 1
template:
metadata:
labels:
app: apigateway
version: v1
annotations:
dapr.io/enabled: "true"
dapr.io/app-id: "apigateway"
dapr.io/app-port: "80"
dapr.io/config: "sentinelconfig"
......

  接着我们apply一下将compenent注册到dapr环境中,并且重启我们的apigateway。重启完成后我们查看一下apigateway sidecar的日志可以看到配置已经正确的注入进去了并且已经成功的enabled sentinel:

  接下来我们启动一个测试程序通过apigateway暴露到内网的地址来访问这个接口,其最终结果如下:

  可以看到sentinel成功的完成了对接口的保护工作,将我们的接口请求频率维持在了10次/秒的基础上。好了,今天的分享就到这里,照例欢迎转发 fork + star~

通过Dapr实现一个简单的基于.net的微服务电商系统(十六)——dapr+sentinel中间件实现服务保护的更多相关文章

  1. 通过Dapr实现一个简单的基于.net的微服务电商系统(十七)——服务保护之动态配置与热重载

    在上一篇文章里,我们通过注入sentinel component到apigateway实现了对下游服务的保护,不过受限于目前变更component需要人工的重新注入配置以及重启应用更新componen ...

  2. 通过Dapr实现一个简单的基于.net的微服务电商系统(十九)——分布式事务之Saga模式

    在之前的系列文章中聊过分布式事务的一种实现方案,即通过在集群中暴露actor服务来实现分布式事务的本地原子化.但是actor服务本身有其特殊性,场景上并不通用.所以今天来讲讲分布式事务实现方案之sag ...

  3. 通过Dapr实现一个简单的基于.net的微服务电商系统(十八)——服务保护之多级缓存

    很久没有更新dapr系列了.今天带来的是一个小的组件集成,通过多级缓存框架来实现对服务的缓存保护,依旧是一个简易的演示以及对其设计原理思路的讲解,欢迎大家转发留言和star 目录:一.通过Dapr实现 ...

  4. 通过Dapr实现一个简单的基于.net的微服务电商系统(二十)——Saga框架实现思路分享

    今天这篇博文的主要目的是分享一下我设计Saga的实现思路来抛砖引玉,其实Saga本身非常的类似于一个简单的工作流体系,相比工作流不一样的部分在于它没有工作流的复杂逻辑处理机制(比如会签),没有条件分支 ...

  5. 通过Dapr实现一个简单的基于.net的微服务电商系统(四)——一步一步教你如何撸Dapr之订阅发布

    之前的章节我们介绍了如何通过dapr发起一个服务调用,相信看过前几章的小伙伴已经对dapr有一个基本的了解了,今天我们来聊一聊dapr的另外一个功能--订阅发布 目录:一.通过Dapr实现一个简单的基 ...

  6. 通过Dapr实现一个简单的基于.net的微服务电商系统

    本来想在Dpar 1.0GA时发布这篇文章,由于其他事情耽搁了放到现在.时下微服务和云原生技术如何如荼,微软也不甘示弱的和阿里一起适时推出了Dapr(https://dapr.io/),园子里关于da ...

  7. 通过Dapr实现一个简单的基于.net的微服务电商系统(二)——通讯框架讲解

    首先感谢张队@geffzhang公众号转发了上一篇文章,希望广大.neter多多推广dapr,让云原生更快更好的在.net这片土地上落地生根. 目录:一.通过Dapr实现一个简单的基于.net的微服务 ...

  8. 通过Dapr实现一个简单的基于.net的微服务电商系统(三)——一步一步教你如何撸Dapr

    目录:一.通过Dapr实现一个简单的基于.net的微服务电商系统 二.通过Dapr实现一个简单的基于.net的微服务电商系统(二)--通讯框架讲解 三.通过Dapr实现一个简单的基于.net的微服务电 ...

  9. 通过Dapr实现一个简单的基于.net的微服务电商系统(五)——一步一步教你如何撸Dapr之状态管理

    状态管理和上一章的订阅发布都算是Dapr相较于其他服务网格框架来讲提供的比较特异性的内容,今天我们来讲讲状态管理. 目录:一.通过Dapr实现一个简单的基于.net的微服务电商系统 二.通过Dapr实 ...

随机推荐

  1. gitlab支持https最简单方法

    gitlab支持https方法 使用gitlab内部nginx直接支持https 通过外部nginx代理(本次使用的方法) 访问流程外部nginx--->gitlab的gitlab_workho ...

  2. spring boot 或 spring 集成 atomikos jta 完成多数据源事务管理

    前言:对于事务,spring 不提供自己的实现,只是定义了一个接口来供其他厂商实现,具体些的请看我的这篇文章: https://www.cnblogs.com/qiaoyutao/p/11289996 ...

  3. IDAPython类库---idautils.py的源码

    #--------------------------------------------------------------------- # IDAPython - Python plugin f ...

  4. PowerShell-1.入门及其常用

    PowerShell可以理解成是加强版的批处理,但是和批处理完全不同,比如可以调用API等.应用场景平时使用的用户机基本都支持了(出了XP). 常用情节:便捷快速开发,或者是**(因为不存在自己的PE ...

  5. Win64 驱动内核编程-31.枚举与删除映像回调

    枚举与删除映像回调 映像回调可以拦截 RING3 和 RING0 的映像加载.某些游戏保护会用此来拦截黑名单中的驱动加载,比如 XUETR.WIN64AST 的驱动.同理,在反游戏保护的过程中,也可以 ...

  6. Windows核心编程 第四章 进程(上)

    第4章 进 程     本章介绍系统如何管理所有正在运行的应用程序.首先讲述什么是进程,以及系统如何创建进程内核对象,以便管理每个进程.然后将说明如何使用相关的内核对象来对进程进行操作.接着,要介绍进 ...

  7. <JVM中篇:字节码与类的加载篇>01-Class字节码文件结构

    笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...

  8. WPF之事件绑定命令

    目录 事件绑定意义 无参数的事件绑定 带EventArgs参数的事件绑定 使用事件绑定 扩展:基于InvokeCommandAction源码的实现(推荐) 参考资料 事件绑定意义 一般事件的处理程序都 ...

  9. SparkSQL电商用户画像(二)之如何构建画像

    四. 如何构建电商用户画像 4.1 构建电商用户画像技术和流程 构建一个用户画像,包括数据源端数据收集.数据预处理.行为建模.构建用户画像 有些标签是可以直接获取到的,有些标签需要通过数据挖掘分析到! ...

  10. File & Directory

    新开一节IO(Input/Output)的用法. 这节主要讲一下操作文件和文件目录的两个静态类:File 和 Directory. 在进入正题之前,先理解一下相对路径和绝对路径这两个概念: 绝对路径, ...