git https://github.com/alibaba/Sentinel   https://github.com/dubbo/dubbo-sentinel-support
dubbo http://dubbo.incubator.apache.org/zh-cn/index.html
wiki https://github.com/alibaba/Sentinel/wiki/%E4%B8%BB%E9%A1%B5
介绍 https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D
启动配置项 https://github.com/alibaba/Sentinel/wiki/%E5%90%AF%E5%8A%A8%E9%85%8D%E7%BD%AE%E9%A1%B9
Wanted: Who is using Sentinel https://github.com/alibaba/Sentinel/issues/18
开贡献指南源 https://github.com/alibaba/Sentinel/wiki/%E5%BC%80%E6%BA%90%E8%B4%A1%E7%8C%AE%E6%8C%87%E5%8D%97

Sentinel: Dubbo 服务的流量哨兵 http://dubbo.incubator.apache.org/zh-cn/blog/sentinel-introduction-for-dubbo.html

官方blog https://github.com/alibaba/Sentinel/wiki/相关-Blog

https://github.com/alibaba/sentinel-awesome

https://github.com/alibaba/Sentinel/wiki/在生产环境中使用-Sentinel-控制台

纠错
http://dubbo.incubator.apache.org/zh-cn/blog/sentinel-introduction-for-dubbo.html
一种用书状结构展示资源的调用链路=>树状

https://github.com/alibaba/Sentinel/wiki/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8
private static void initDegradeRule() {
List<SystemRule> rules = new ArrayList<>();
SystemRule rule = new SystemRule();
rule.setHighestSystemLoad(10);
rules.add(rule);
DegradeRuleManager.loadRules(rules);
}

DegradeRuleManager.loadRules(rules);=》SystemRuleManager.loadRules(rules);

提问
1.QPS 模式的限流,当每秒的请求量超过设定的阈值时会自动拒绝请求 跟 dubbo线程池满抛异常,也相当于拒绝了请求,这种线程池满抛异常是否也达到了目标?

查询更改规则
运行下面命令,则会返回现有生效的规则:

curl http://localhost:8719/getRules?type=<XXXX>
其中,type=flow 以 JSON 格式返回现有的限流规则;degrade 则返回现有生效的降级规则列表;system 则返回系统保护规则。

同时也可以通过下面命令来修改已有规则:

curl http://localhost:8719/setRules?type=<XXXX>&data=<DATA>
其中,type 可以输入 flow、degrade 等方式来制定更改的规则种类,data 则是对应的 JSON 格式的规则。

定制自己的持久化规则
上面的规则配置,都是存在内存中的。即如果应用重启,这个规则就会失效。因此我们提供了开放的接口,您可以通过实现 DataSource 接口的方式,来自定义规则的存储数据源。通常我们的建议有:

整合动态配置系统,如 etcd、Nacos,动态地实时刷新配置规则
结合 DB、VCS 等来实现该规则
配合 Sentinel Dashboard 使用
更多详情请参考动态规则配置。

规则生效的效果
除了在业务代码逻辑上看到规则生效,我们也可以通过下面简单的方法,来校验规则生效的效果:

暴露的HTTP接口:通过运行下面命令 curl http://localhost:8719/cnode?id=<资源名称>,观察返回的数据。如果规则生效,在返回的数据栏中的 block 以及 block(m) 中会有显示
日志:Sentinel 提供秒级的资源运行日志以及限流日志,详情可以参考: 日志

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

https://github.com/kimmking/activemq-sentinel-demo

sentinel-demo-dubbo的两个例子:
demo1流控规则(QPS)配在provider端,consumer端捕获到的Exception是RpcException;
demo2流控规则(Thread)配在consumer端,consumer端捕获到的是SentinelRpcException;

-Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=demo-provider
先启FooProviderBootstrap,再启FooConsumerBootstrap

[
{
"resource": "com.alibaba.csp.sentinel.demo.dubbo.FooService:sayHello(java.lang.String)",
"controlBehavior": 0,
"count": 12.0,
"grade": 1,
"limitApp": "default",
"strategy": 0
}
]

[
{
"resource": "five",
"controlBehavior": 2,
"count": 100,
"grade": 1,
"limitApp": "default",
"strategy": 0
}
]

private void initFlowControlRule(String resource) {

if (ruleMap.containsKey(resource)) {

return;

}

FlowRule rule = new FlowRule();

rule.setResource(resource);

// Indicates the interval between two adjacent requests is 200 ms.

rule.setCount(20);

rule.setGrade(RuleConstant.FLOW_GRADE_QPS);

rule.setLimitApp("default");

// Enable rate limiting (uniform). This can ensure fixed intervals between two adjacent calls.

// In this example, intervals between two incoming calls (message consumption) will be 200 ms constantly.

//        rule.setControlBehavior(RuleConstant.CONTROL_BEHAVIOR_DEFAULT);

rule.setControlBehavior(RuleConstant.CONTROL_BEHAVIOR_RATE_LIMITER);

// If more requests are coming, they'll be put into the waiting queue.

// The queue has a queueing timeout. Requests that may exceed the timeout will be immediately blocked.

// In this example, the max timeout is 5s.

rule.setMaxQueueingTimeMs(500 * 1000);

FlowRuleManager.loadRules(Collections.singletonList(rule));

}

//        final String remoteAddress = "127.0.0.1:2181";

//        final String path = "/Sentinel-Demo/SYSTEM-CODE-DEMO-FLOW";

//

//        DataSource<String, List<FlowRule>> flowRuleDataSource = new ZookeeperDataSource<>(remoteAddress, path,

//                source -> JSON.parseObject(source, new TypeReference<List<FlowRule>>() {}));

//        FlowRuleManager.register2Property(flowRuleDataSource.getProperty());

//        final String remoteAddress = "127.0.0.1:2181";
// final String path = "/Sentinel-Demo/SYSTEM-CODE-DEMO-FLOW";
//
// DataSource<String, List<FlowRule>> flowRuleDataSource = new ZookeeperDataSource<>(remoteAddress, path,
// source -> JSON.parseObject(source, new TypeReference<List<FlowRule>>() {}));
// FlowRuleManager.register2Property(flowRuleDataSource.getProperty());
//        String key = messageSend.getDestination().getQualifiedName();
String key = messageSend.getDestination().getPhysicalName();

[{"controlBehavior":2,"count":2000.0,"grade":1,"limitApp":"default","maxQueueingTimeMs":500000,"resource":"five_send","strategy":0,"warmUpPeriodSec":10}
,{"controlBehavior":1,"count":333.0,"grade":1,"limitApp":"default","maxQueueingTimeMs":500000,"resource":"one_send","strategy":0,"warmUpPeriodSec":10}
,{"controlBehavior":2,"count":2000.0,"grade":1,"limitApp":"default","maxQueueingTimeMs":500000,"resource":"five_receive","strategy":0,"warmUpPeriodSec":10} ]

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1.InitExecutor.doInit();是否需要在初始化时手工调用
=> 不需要,sentinel-core包的Env类通过static块调用了;
demo工程中的InitExecutor.doInit();是为了不让进程退出。 2.InitExecutor.doInit();已调用,但通过http访问规则失败
=> 检查是否缺少sentinel-transport-simple-http依赖,InitExecutor.doInit()中的ServiceLoader.load(InitFunc.class)加载需要。 3.在程序中加入sentinel的埋点,如果不配规则的话有没有什么副作用

  没有 这就是我们鼓励的做法
  写代码的时候只需要考虑哪些地方需要保护
  规则以后看情况随时加

 4.flow等3个规则现在没有状态属性对吗? 比如一个规则想禁用,但不想删除。 以后会不会考虑加入规则启用/禁用开关 或者是说需要自己在存储时去实现规则的启用/禁用

不行 不这么做的原因是 为了节省客户端的内存 这些规则的管理 fangzaidashboard去做 客户端只接受有效的规则

xxxRuleManager加载的都是有效的规则,在存储端去实现禁用的规则

5.请问这种方式能区分应用吗? 两个不同的应用,各配了1个流控规则,用http请求发现只返回了1个规则,在控制台能看到2个
=> 不同应用配置不同端口 6.rocketmq的削峰填谷 对比 sentinel的削峰填谷

rocketmq在服务端 来削峰填谷
sentinel客户端来做这件事情
rocket mq dubbo是生态圈的大树
我们所有的开源产品 都围绕这个大树 但又开放 拥抱别的主流框架
产品产品之间 没有强依赖
mq可以用sentinel 也可以用hystrix来熔断降级
同理 sentienl可以用于mq也可以用于kafaka

rocketmq在服务端来削峰填谷
sentinel客户端来做这件事情
rocket mq dubbo是生态圈的大树
我们所有的开源产品 都围绕这个大树 但又开放 拥抱别的主流框架
产品产品之间 没有强依赖
mq可以用sentinel 也可以用hystrix来熔断降级
同理sentienl可以用于mq也可以用于kafaka

说实话,mq削峰填谷以前都没有听说。
个人理解,mq作为消息中间件,通过消息产生/消费这种异步模型实现解耦,并且有一定的消息堆积能力;
而sentinel定位于高可用流量防护和系统保护框架,是通过程序埋点和内部算法,比如匀速等控制速率发送来实现
流量的削峰填谷的,比如rocketmq demo里,是在接收消息时进行的sentinel埋点;

通过mq缓存生产者的消息波峰,消费者根据自身的能力进行消费。消费者可以根据自身的消息处理速度进行消息的拉取。
对,我理解的mq削峰填谷也是这样的。可后面那句,消费者可以根据自身的消息处理速度进行消息的拉取,这sentinel就派上用场了吧
我也是这么理解的,消费者能消费多快就拉多快
不就是根据自身消费速度来拉取么?不需要额外使用sentinel吧?

消费者能消费多快就拉多快,这种可能有问题,因为它没有控制。而消费者可能调下游的服务,造成负载过高
所以场景是消费者的下游还有服务才需要sentinel?

一般消费者是一个业务流程的开始,除非很简单,如果是微服务结构的话一般都有调用链的。 如果没有下游,那可以一起想想本身有需要控制的场景
有流控就有一个保护机制,总比没有好吧。而且规则可以修改不重启、我觉得这是sentinel方便的地方,轻巧

7.flow rule 匀速器使用场景

QPS超出排队,默认排队超时时间500ms,

在需要削峰填谷,控制处理速率的地方使用;

count 代表1s内希望通过的数量,对应两个请求之间的时间间隔就是 1000ms/count,count 要根据系统能承受的负载来设;超时时间建议不要设的非常大;

sentinel在mq的应用场景
1.发送消息 2.消费消息
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1.dashborad,浏览器打开,报angular未定义
=> js、css等资源是通过cdn下载的,需要联网,检查是否是内网环境 2.阿里的sentinel和Redis里的sentinel区别
阿里的sentinel=>高可用防护的流量管理框架 https://github.com/alibaba/Sentinel
redis的sentinel=>主要是用来监控和切换用的

3.build spring-cloud-alibaba-sentinel的时候报这个错:java.io.IOException: Cannot run program "egrep" CreateProcess error=2,系统找不到指定的文件
mvn build 4.如果系统保护规则和限流规则和熔断规则 都配置的情况下 优先级是怎么走呢
限流规则先于降级规则生效,顺序参见:DefaultSlotsChainBuilder中的注册顺序

5.TimeUtil线程CPU切换开销
这个并发高的时候减少native的调用
小的时候估计就正如你说的, 有损耗
因为计算QPS要把一秒划成1000份 1/1000 秒
然后相同毫秒级别的请求 放到一个窗口里.
变相减少竞争
要不然锁竞争太厉害
这个监控上是一个通用的做法
不能用System.currentTimeMillisce会有严重的并发问题。所以监控上都会用这个做法来计数 并发场景下 System.currentTimeMillis() 的性能问题 http://buru.iteye.com/blog/1779991
高并发场景下System.currentTimeMillis()的性能问题优化 https://www.xttblog.com/?p=2289
webmasters / 高并发场景下 System.currentTimeMillis() 的性能优化 https://gitee.com/webmasters/codes/b1ighnzof07catx3qs4y551System.currentTimeMillis()性能分析 https://www.jianshu.com/p/3fbe607600a5

6.

com.taobao.csp.sentinel.dashboard.datasource.entity.MetricEntity

private Long passedQps;

private Long successQps;

private Long blockedQps;

private Long exception;

这几个属性怎么定义?它们之间是什么关系?与qps又是什么关系?

谁可以解释一下,谢谢

passedQps+blockedQps=successQps+exception=qps?

PASSEDQPS+BLOCKEDQPSS是近来的流量
successqps是出去的流量
把系统想想成一个水管
一个是入口 一个是出口

exception是 凡是调用了 tracer.trace(e)的统计
如果你不调用 也就 不会统计
主要是统计业务逻辑

7.我有一个问题,数据库连接池资源,要怎么保护呢? 比如有多个读和写的api,如果读请求占据了所有的请求,导致写请求饥饿。 我看sentinel有关联流量控制,不知道实际生产环境中是怎么实践的?


一般关联xianliu 就是用于这个厂及国内
场景
另外把一些可能的慢Sql,加上并发保护

-------------------------------------------------------------------------------------

-Dcsp.sentinel.dashboard.server=consoleIp:port // 控制台ip和端口
-Dcsp.sentinel.api.port=8719 // 客户端api监控端口,默认8719,单机多个应用需要配置不同的端口 
-Dproject.name=xxx // 应用名称 
----------------------------------------------------------------------------------------
常用:
控制台没有显示我的应用或者没有监控展示如何排查
https://github.com/alibaba/Sentinel/wiki/FAQ#q-sentinel-%E6%8E%A7%E5%88%B6%E5%8F%B0%E6%B2%A1%E6%9C%89%E6%98%BE%E7%A4%BA%E6%88%91%E7%9A%84%E5%BA%94%E7%94%A8%E6%88%96%E8%80%85%E6%B2%A1%E6%9C%89%E7%9B%91%E6%8E%A7%E5%B1%95%E7%A4%BA%E5%A6%82%E4%BD%95%E6%8E%92%E6%9F%A5

sentinel备忘的更多相关文章

  1. GIS部分理论知识备忘随笔

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.高斯克吕格投影带换算 某坐标的经度为112度,其投影的6度带和3度带 ...

  2. python序列,字典备忘

    初识python备忘: 序列:列表,字符串,元组len(d),d[id],del d[id],data in d函数:cmp(x,y),len(seq),list(seq)根据字符串创建列表,max( ...

  3. Vi命令备忘

    备忘 Ctrl+u:向文件首翻半屏: Ctrl+d:向文件尾翻半屏: Ctrl+f:向文件尾翻一屏: Ctrl+b:向文件首翻一屏: Esc:从编辑模式切换到命令模式: ZZ:命令模式下保存当前文件所 ...

  4. ExtJs4常用配置方法备忘

    viewport布局常用属性 new Ext.Viewport({ layout: "border", renderTo: Ext.getBody(), defaults: { b ...

  5. [备忘] Automatically reset Windows Update components

    这两天遇到Windows 10的更新问题,官方有一个小工具,可以用来修复Windows Update的问题,备忘如下 https://support.microsoft.com/en-us/kb/97 ...

  6. ECMAScript 5(ES5)中bind方法简介备忘

    一直以来对和this有关的东西模糊不清,譬如call.apply等等.这次看到一个和bind有关的笔试题,故记此文以备忘. bind和call以及apply一样,都是可以改变上下文的this指向的.不 ...

  7. MFC通过txt查找文件并进行复制-备忘

    MFC基于对话框的Demo txt中每行一个23位的卡号. 文件夹中包含以卡号命名的图像文件.(fpt或者bmp文件) 要求遍历文件夹,找到txt中卡号所对应的图像文件,并复制出来. VC6.0写的. ...

  8. php 相关模块备忘

    在安装php的时候,不管是编译安装: ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc -- ...

  9. 『备忘』HttpWebRequest 在 POST 提交时, 标头(Headers)丢失原因

    近来研究 HttpWebRequest —— 辅助类完成时,POST JSON数据 总会 丢失标头(Headers). HttpWebRequest POST JSON数据,分如下几步: > 将 ...

随机推荐

  1. wepy 开发小程序, 为什么设置pages路径的时候总是找不到 js 文件?

    1,路径先检查仔细了 2,别说话,重新run 3,可能是版本问题,重新搭工程

  2. “最不合格”的SAP应聘者: 从大学生到SAP成都研究院开发工程师

    让我们把时光之轮倒拨回2006年,SAP成都研究院刚刚成立的时候,有一位年轻的电子科技大学研究生,网名雷米兰(这名字一看就是AC米兰铁杆粉丝),加入了SAP成都研究院并被派遣到SAP德国总部进行实习. ...

  3. 操作xml文件

    http://www.cnblogs.com/ 一.xml文件体系如下: <?xml version="1.0" encoding="utf-8" ?&g ...

  4. oracle to_Char fm 函数

    近期在使用oracle to_char函数处理浮点数时发现有坑,这里做个小结: 网上可以找到关于to_char中使用fm9990.0099中的相关解释: 0表示:如果参数(double或者float类 ...

  5. kolla-ansible 部署多region

    目录 kolla-ansible 部署多region 一.前言 二.部署架构 三.部署细节 1.部署RegionOne 2.部署RegionTwo kolla-ansible 部署多region 一. ...

  6. apache安装phpMyAdmin

    安装phpMyAdmin 我这里是LAMP环境 安装httpd,和phpMyAdmin,数据库可以yum安装看你自己情况选择安装方式 $ yum -y install httpd phpMyAdmin ...

  7. VS---《在VS2010中 使用C++创建和使用DLL》(003)

    VS---<在VS2010中 使用C++创建和使用DLL>(003) 这里实现一下,之前写好的一个工程(定义一个函数f + main函数调用),转成DLL.调用DLL测试.在两个工程里,分 ...

  8. Git远程分支和refs文件具体解释

    推送远程分支到同一个server 比方首先建立gitserver,顺便clone出两个副本 mkdir server cd server git init --bare cd .. git clone ...

  9. Caused by: com.mchange.v2.resourcepool.TimeoutException: A client timed out while waiting to acquire a resource from com.mchange.v2.resourcepool.BasicResourcePool@1483de4 -- timeout at awaitAvailable(

    Caused by: com.mchange.v2.resourcepool.TimeoutException: A client timed out while waiting to acquire ...

  10. dynamic类型

    dynamic类型在运行时做类型检查 可用于变量类型.方法参数和返回值类型 示例 dynamic person = new Student { Name = "张三", Age = ...