Repository: alibaba/Sentinel
Pull request #2923 (2022-10-25 08:59:28)

build(deps): Bump dubbo from 2.7.3 to 2.7.18 in /sentinel-demo/sentinel-demo-apache-dubbo
Bumps [dubbo](https://github.com/apache/dubbo) from 2.7.3 to 2.7.18.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/apache/dubbo/releases">dubbo's releases</a>.</em></p>
<blockquote>
<h2>dubbo-2.7.18</h2>
<h2>What's Changed</h2>
<ul>
<li>[2.7] Remove useless toString in Timeout Filter by <a href="https://github.com/AlbumenJ"><code>@​AlbumenJ</code></a> in <a href="https://github-redirect.dependabot.com/apache/dubbo/pull/10531">apache/dubbo#10531</a></li>
<li>Fixes <a href="https://github-redirect.dependabot.com/apache/dubbo/issues/9913">#9913</a>, rmi protocol supoort group and version by <a href="https://github.com/xielongfei"><code>@​xielongfei</code></a> in <a href="https://github-redirect.dependabot.com/apache/dubbo/pull/9951">apache/dubbo#9951</a></li>
<li>[2.7] Update hessian version by <a href="https://github.com/AlbumenJ"><code>@​AlbumenJ</code></a> in <a href="https://github-redirect.dependabot.com/apache/dubbo/pull/10630">apache/dubbo#10630</a></li>
<li>Fix <a href="https://github-redirect.dependabot.com/apache/dubbo/issues/10631">#10631</a> Fix PojoUtils support localdatetime,lcaldate,localtime serializable and deserialize by <a href="https://github.com/wuwen5"><code>@​wuwen5</code></a> in <a href="https://github-redirect.dependabot.com/apache/dubbo/pull/10632">apache/dubbo#10632</a></li>
</ul>
<h2>Dependency Upgrade</h2>
<ul>
<li>Upgrade hessian-lite version: 3.2.12 -&gt; 3.2.13 <a href="https://github-redirect.dependabot.com/apache/dubbo/pull/10630">apache/dubbo#10630</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/xielongfei"><code>@​xielongfei</code></a> made their first contribution in <a href="https://github-redirect.dependabot.com/apache/dubbo/pull/9951">apache/dubbo#9951</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/apache/dubbo/compare/dubbo-2.7.17...dubbo-2.7.18">https://github.com/apache/dubbo/compare/dubbo-2.7.17...dubbo-2.7.18</a></p>
<h2>dubbo-2.7.17</h2>
<h2>What's Changed</h2>
<ul>
<li>Interrupt current thread when InterruptException occur by <a href="https://github.com/happytimor"><code>@​happytimor</code></a> in <a href="https://github-redirect.dependabot.com/apache/dubbo/pull/10164">apache/dubbo#10164</a></li>
<li>Remove to rpcInvocation string by <a href="https://github.com/AlbumenJ"><code>@​AlbumenJ</code></a> in <a href="https://github-redirect.dependabot.com/apache/dubbo/pull/10460">apache/dubbo#10460</a></li>
<li>Fix Nacos aggregate listen by <a href="https://github.com/AlbumenJ"><code>@​AlbumenJ</code></a> in <a href="https://github-redirect.dependabot.com/apache/dubbo/pull/10467">apache/dubbo#10467</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/apache/dubbo/compare/dubbo-2.7.16...dubbo-2.7.17">https://github.com/apache/dubbo/compare/dubbo-2.7.16...dubbo-2.7.17</a></p>
<h2>dubbo-2.7.16</h2>
<h2>Feature</h2>
<ul>
<li>Feat: consumer support specify serialization type by <a href="https://github.com/jessin20161124"><code>@​jessin20161124</code></a> in <a href="https://github-redirect.dependabot.com/apache/dubbo/pull/9550">apache/dubbo#9550</a></li>
<li>Feat: telnet invoke command with context argument.  by <a href="https://github.com/stonelion"><code>@​stonelion</code></a> in <a href="https://github-redirect.dependabot.com/apache/dubbo/pull/9974">apache/dubbo#9974</a></li>
</ul>
<h2>Bugfix</h2>
<ul>
<li>Fix callback timeout by <a href="https://github.com/wuwen5"><code>@​wuwen5</code></a> in <a href="https://github-redirect.dependabot.com/apache/dubbo/pull/9463">apache/dubbo#9463</a></li>
<li>Fixes <a href="https://github-redirect.dependabot.com/apache/dubbo/issues/9086">#9086</a> to solve race condition issue. by <a href="https://github.com/zrlw"><code>@​zrlw</code></a> in <a href="https://github-redirect.dependabot.com/apache/dubbo/pull/9588">apache/dubbo#9588</a></li>
<li>Fix a problem where tag routing does not work when using static tags by <a href="https://github.com/wuwen5"><code>@​wuwen5</code></a> in <a href="https://github-redirect.dependabot.com/apache/dubbo/pull/9512">apache/dubbo#9512</a></li>
<li>Fix the problem of wrong number of retries in failback mode by <a href="https://github.com/juzi214032"><code>@​juzi214032</code></a> in <a href="https://github-redirect.dependabot.com/apache/dubbo/pull/9525">apache/dubbo#9525</a></li>
<li>Fix <a href="https://github.com/DubboReference"><code>@​DubboReference</code></a> parameters do not put into methodParameters correctly by <a href="https://github.com/wangzhenxyz1"><code>@​wangzhenxyz1</code></a> in <a href="https://github-redirect.dependabot.com/apache/dubbo/pull/9599">apache/dubbo#9599</a></li>
<li>Fix getAttchments return copy map problem. by <a href="https://github.com/horizonzy"><code>@​horizonzy</code></a> in <a href="https://github-redirect.dependabot.com/apache/dubbo/pull/9571">apache/dubbo#9571</a></li>
<li>Fix ExtensionLoader can not inject by type properly. by <a href="https://github.com/wangzhenxyz1"><code>@​wangzhenxyz1</code></a> in <a href="https://github-redirect.dependabot.com/apache/dubbo/pull/9187">apache/dubbo#9187</a></li>
<li>Fix lazy client share_executor is null by <a href="https://github.com/owen200008"><code>@​owen200008</code></a> in <a href="https://github-redirect.dependabot.com/apache/dubbo/pull/9701">apache/dubbo#9701</a></li>
<li>Fix concurrent modification exception of stated urls by <a href="https://github.com/chickenlj"><code>@​chickenlj</code></a> in <a href="https://github-redirect.dependabot.com/apache/dubbo/pull/9779">apache/dubbo#9779</a></li>
<li>Set registry id to auto-generated metada by <a href="https://github.com/chickenlj"><code>@​chickenlj</code></a> in <a href="https://github-redirect.dependabot.com/apache/dubbo/pull/9782">apache/dubbo#9782</a></li>
<li>Fix forking npe by <a href="https://github.com/codeimport"><code>@​codeimport</code></a> in <a href="https://github-redirect.dependabot.com/apache/dubbo/pull/9613">apache/dubbo#9613</a></li>
<li>Fix 2.7 multi registry by <a href="https://github.com/chickenlj"><code>@​chickenlj</code></a> in <a href="https://github-redirect.dependabot.com/apache/dubbo/pull/9787">apache/dubbo#9787</a></li>
<li>Fix stubevent can't work by <a href="https://github.com/xxxcrel"><code>@​xxxcrel</code></a> in <a href="https://github-redirect.dependabot.com/apache/dubbo/pull/9825">apache/dubbo#9825</a></li>
<li>Fix <a href="https://github-redirect.dependabot.com/apache/dubbo/issues/9847">#9847</a> by <a href="https://github.com/wangchengming666"><code>@​wangchengming666</code></a> in <a href="https://github-redirect.dependabot.com/apache/dubbo/pull/9848">apache/dubbo#9848</a></li>
<li>Fix issue#9953 by <a href="https://github.com/106umao"><code>@​106umao</code></a> in <a href="https://github-redirect.dependabot.com/apache/dubbo/pull/9978">apache/dubbo#9978</a></li>
<li>fix issue#9922, merge the provider side parameters exclude tag by <a href="https://github.com/zhaoguhong"><code>@​zhaoguhong</code></a> in <a href="https://github-redirect.dependabot.com/apache/dubbo/pull/9933">apache/dubbo#9933</a></li>
<li>Fix ZookeeperDynamicConfiguration remove cache listener mistake by <a href="https://github.com/wangchengming666"><code>@​wangchengming666</code></a> in <a href="https://github-redirect.dependabot.com/apache/dubbo/pull/10106">apache/dubbo#10106</a></li>
<li>Fix metadata-report support a separate configuration username and password by <a href="https://github.com/zhaoguhong"><code>@​zhaoguhong</code></a> in <a href="https://github-redirect.dependabot.com/apache/dubbo/pull/9921">apache/dubbo#9921</a></li>
<li>Fix can't authenticate by username and password when use Nacos by <a href="https://github.com/xxxcrel"><code>@​xxxcrel</code></a> in <a href="https://github-redirect.dependabot.com/apache/dubbo/pull/9941">apache/dubbo#9941</a></li>
<li>Fixed the problem that the service was offline for a long time without re-registration by <a href="https://github.com/icodening"><code>@​icodening</code></a> in <a href="https://github-redirect.dependabot.com/apache/dubbo/pull/10182">apache/dubbo#10182</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/apache/dubbo/blob/3.1/CHANGES.md">dubbo's changelog</a>.</em></p>
<blockquote>
<h1>Release Notes</h1>
<p>Please refer to <a href="https://github.com/apache/dubbo/releases">https://github.com/apache/dubbo/releases</a> for notes of future releases.</p>
<h2>2.7.6</h2>
<h3>Features</h3>
<ul>
<li>Support Service Authentication <a href="https://github-redirect.dependabot.com/apache/dubbo/issues/5461">apache/dubbo#5461</a></li>
</ul>
<h3>Enhancement</h3>
<ul>
<li>Removing the internal JDK API from FileSystemDynamicConfiguration</li>
<li>Refactor the APT test-cases implementation of dubbo-metadata-processor in Java 9+</li>
<li>Remove feature envy</li>
<li>JsonRpcProtocol support Generalization</li>
<li>Reduce object allocation for ProtocolUtils.serviceKey</li>
<li>Reduce object allocation for ContextFilter.invoke</li>
</ul>
<h3>Bugfixes</h3>
<ul>
<li>Fixed bugs reported from 2.7.5 or lower versions, check <a href="https://github.com/apache/dubbo/milestone/30">2.7.6 milestone</a> for details.</li>
</ul>
<h3>Compatibility</h3>
<ol>
<li>Filter refactor, the callback method <code>onResponse</code> annotated as <a href="https://github.com/Deprecated"><code>@​Deprecated</code></a> has been removed, users of lower versions that
have extended Filter implementations and enabled Filter callbacks should be careful of this change.</li>
<li>RpcContext added some experimental APIs to support generic Object transmission.</li>
</ol>
<h2>2.7.5</h2>
<h3>Features</h3>
<ul>
<li>Support HTTP/2 through gRPC, offers all features supported by HTTP/2 and gRPC
<ul>
<li>Stream communication: client stream, server stream and bi-stream.</li>
<li>Reactive stream style RPC call.</li>
<li>Back pressure based on HTTP/2 flow-control mechanism.</li>
<li>TLS secure transport layer.</li>
<li>Define service using IDL</li>
</ul>
</li>
<li>Protobuf support for native Dubbo
<ul>
<li>Define service using IDL</li>
<li>Protobuf serialization</li>
</ul>
</li>
<li>TLS for netty4 server</li>
<li>New SPI for dynamically adding extra parameters into provider URL, especially env parameters.</li>
<li><strong>[BETA]</strong> Brand new Service Discovery mechanism: Service Reflection - instance (application) level service discovery.</li>
<li><strong>[BETA]</strong> Brand new API for bootstraping Dubbo projects</li>
</ul>
<h3>Performance Tuning</h3>
<ul>
<li>Overall performance improved by nearly 30% compared to v2.7.3 (by QPS in certain circumstances)</li>
<li>Improved consumer side thread model to avoid thread allocation and context switch, especially useful for services serving big traffic.</li>
</ul>
<h3>Enhancement</h3>
<ul>
<li>Load balance strategy among multiple registries:
<ul>
<li>Preferred</li>
<li>Same zone first</li>
</ul>
</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/apache/dubbo/commit/fddf601b2b0fac7055dd87338efda2c6182dce1a"><code>fddf601</code></a> Merge branch 'apache-master' into 2.7.18-release</li>
<li><a href="https://github.com/apache/dubbo/commit/c676fb9b72c016c4f93fef5d773e032d74043693"><code>c676fb9</code></a> Fix PojoUtils support localdatetime,lcaldate,localtime serializable and deser...</li>
<li><a href="https://github.com/apache/dubbo/commit/7f977e06797408984c1cb326779dbe6d72baa323"><code>7f977e0</code></a> Update NOTICE</li>
<li><a href="https://github.com/apache/dubbo/commit/1f66075d62d15fe441235a20e6b4afa2404aaf8f"><code>1f66075</code></a> Prepare 2.7.18 release</li>
<li><a href="https://github.com/apache/dubbo/commit/688177fb05930b98f7acd22705404aaf4946bbf8"><code>688177f</code></a> [2.7] Update hessian version (<a href="https://github-redirect.dependabot.com/apache/dubbo/issues/10630">#10630</a>)</li>
<li><a href="https://github.com/apache/dubbo/commit/bcf97647ca69775031d356d93f9e0e5f1254ccdd"><code>bcf9764</code></a> Fixes <a href="https://github-redirect.dependabot.com/apache/dubbo/issues/9913">#9913</a>, rmi protocol supoort group and version (<a href="https://github-redirect.dependabot.com/apache/dubbo/issues/9951">#9951</a>)</li>
<li><a href="https://github.com/apache/dubbo/commit/81fabc73f37b9b8d5f6ef62c2569f6ef4c42e5a0"><code>81fabc7</code></a> Remove useless toString in Timeout Filter (<a href="https://github-redirect.dependabot.com/apache/dubbo/issues/10531">#10531</a>)</li>
<li><a href="https://github.com/apache/dubbo/commit/b5b478cf05e6db1842b8d5afe4563a80cb87dfc9"><code>b5b478c</code></a> update to 2.7.18-SNAPSHOT</li>
<li><a href="https://github.com/apache/dubbo/commit/d8f9768fe5f8192d690e5d09a40d19ed062932d5"><code>d8f9768</code></a> Merge branch 'apache-master' into 2.7.17-release</li>
<li><a href="https://github.com/apache/dubbo/commit/66e5d084a8fb100e45faf771bbe865aa15d67b45"><code>66e5d08</code></a> Fix pom configuration</li>
<li>Additional commits viewable in <a href="https://github.com/apache/dubbo/compare/dubbo-2.7.3...dubbo-2.7.18">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=org.apache.dubbo:dubbo&package-manager=maven&previous-version=2.7.3&new-version=2.7.18)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
- `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language
- `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language
- `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language
- `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language

You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/alibaba/Sentinel/network/alerts).

</details>


Patch:
diff --git a/README.md b/README.md
index 3612307f..8e5fdf5a 100755
--- a/README.md
+++ b/README.md
@@ -11,29 +11,30 @@
 ## Introduction
 
 As distributed systems become increasingly popular, the reliability between services is becoming more important than ever before.
-Sentinel takes "flow" as breakthrough point, and works on multiple fields including **flow control**,
-**traffic shaping**, **circuit breaking** and **system adaptive protection**, to guarantee reliability and resilience for microservices.
+Sentinel takes "flow" as breakthrough point, and works on multiple fields including **flow control**, **traffic shaping**,
+**concurrency limiting**, **circuit breaking** and **system adaptive overload protection**,
+to guarantee reliability and resilience for microservices.
 
 Sentinel has the following features:
 
 - **Rich applicable scenarios**: Sentinel has been wildly used in Alibaba, and has covered almost all the core-scenarios in Double-11 (11.11) Shopping Festivals in the past 10 years, such as “Second Kill” which needs to limit burst flow traffic to meet the system capacity, message peak clipping and valley fills, circuit breaking for unreliable downstream services, cluster flow control, etc.
 - **Real-time monitoring**: Sentinel also provides real-time monitoring ability. You can see the runtime information of a single machine in real-time, and the aggregated runtime info of a cluster with less than 500 nodes.
-- **Widespread open-source ecosystem**: Sentinel provides out-of-box integrations with commonly-used frameworks and libraries such as Spring Cloud, Dubbo and gRPC. You can easily use Sentinel by simply add the adapter dependency to your services.
-- **Polyglot support**: Sentinel has provided native support for Java, [Go](https://github.com/alibaba/sentinel-golang) and [C++](https://github.com/alibaba/sentinel-cpp).
+- **Widespread open-source ecosystem**: Sentinel provides out-of-box integrations with commonly-used frameworks and libraries such as Spring Cloud, gRPC, Apache Dubbo and Quarkus. You can easily use Sentinel by simply add the adapter dependency to your services.
+- **Polyglot support**: Sentinel has provided native support for Java, [Go](https://github.com/alibaba/sentinel-golang), [C++](https://github.com/alibaba/sentinel-cpp) and [Rust](https://github.com/sentinel-group/sentinel-rust).
 - **Various SPI extensions**: Sentinel provides easy-to-use SPI extension interfaces that allow you to quickly customize your logic, for example, custom rule management, adapting data sources, and so on.
 
 Features overview:
 
 ![features-of-sentinel](./doc/image/sentinel-features-overview-en.png)
 
-The community is working on the specification of traffic governance and fault-tolerance.
+The community is also working on **the specification of traffic governance and fault-tolerance**.
 Please refer to [OpenSergo](https://opensergo.io/) for details.
 
 ## Documentation
 
 See the [Sentinel Website](https://sentinelguard.io/) for the official website of Sentinel.
 
-See the [中文文档](https://sentinelguard.io/zh-cn/docs/logs.html) for document in Chinese.
+See the [中文文档](https://sentinelguard.io/zh-cn/docs/introduction.html) for document in Chinese.
 
 See the [Wiki](https://github.com/alibaba/Sentinel/wiki) for full documentation, examples, blog posts, operational details and other information.
 
diff --git a/doc/awesome-sentinel.md b/doc/awesome-sentinel.md
index 68a1db37..adb8fd1b 100644
--- a/doc/awesome-sentinel.md
+++ b/doc/awesome-sentinel.md
@@ -22,14 +22,18 @@ You can also add to [sentinel-group/sentinel-awesome](https://github.com/sentine
 - Sentinel 1.6.0 网关流控新特性介绍-Eric Zhao (Dubbo Tech Day-201905-Beijing): [PDF](https://github.com/sentinel-group/sentinel-awesome/blob/master/slides/Sentinel%201.6.0%20网关流控新特性介绍-Eric%20Zhao-DTED-201905.pdf)
 - Sentinel 微服务流控降级实践-Eric Zhao (Dubbo Tech Day-201907-Shenzhen): [PDF](https://github.com/sentinel-group/sentinel-awesome/blob/master/slides/Sentinel%20微服务流控降级实践-Eric%20Zhao-DTED-201907.pdf)
 - Sentinel 1.7.0 新特性展望-Eric Zhao (Dubbo Tech Day-201910-Chengdu): [PDF](https://github.com/sentinel-group/sentinel-awesome/blob/master/slides/Sentinel%201.7.0%20新特性展望-Eric%20Zhao-DTED-201910.pdf)
+- 《微服务容易挂？Sentinel Go 让微服务稳如磐石》-Eric Zhao (Spring Cloud Alibaba Meetup 1205 杭州站): [PDF](https://github.com/sentinel-group/sentinel-awesome/blob/master/slides/SCA%20Meetup%20Hangzhou-20201205-Sentinel%20Go-Eric%20Zhao.pdf)
+- Sentinel 2.0 流量治理全面升级-Eric Zhao (2022中间件开发者大会): [PDF](https://github.com/mse-group/Slides/blob/main/中间件开发者大会/10%20-%20赵奕豪(宿何)%20-Sentinel%202.0%20流量治理全面升级.pdf)
 
-## Tutorials
+## Tutorials/Samples
 
 - [Sentinel Guides](https://github.com/sentinel-group/sentinel-guides)
 
-## Demos
+## Polyglot Support
 
-- [sentinel-zuul-example](https://github.com/tigerMoon/sentinel-zuul-sample): A simple project integration Sentinel to Spring Cloud Zuul which provides Service and API Path level flow control management by [tiger](https://github.com/tigerMoon)
+- <img src="https://raw.githubusercontent.com/sentinel-group/sentinel-awesome/master/sentinel_favicon.ico" title="Sentinel official" height="16px"> [Sentinel Go](https://github.com/alibaba/sentinel-golang)
+- <img src="https://raw.githubusercontent.com/sentinel-group/sentinel-awesome/master/sentinel_favicon.ico" title="Sentinel official" height="16px"> [Sentinel C++](https://github.com/alibaba/sentinel-cpp)
+- <img src="https://raw.githubusercontent.com/sentinel-group/sentinel-awesome/master/sentinel_favicon.ico" title="Sentinel official" height="16px"> [Sentinel Rust](https://github.com/sentinel-group/sentinel-rust)
 
 ## Extensions / Integrations
 
@@ -72,5 +76,8 @@ You can also add to [sentinel-group/sentinel-awesome](https://github.com/sentine
   - [Sentinel 深入浅出之原理篇 DegradeSlot](https://www.jianshu.com/p/e910d4840e4a)
 - [Alibaba Sentinel RESTful 接口流控处理优化](https://www.jianshu.com/p/96f5980d9798) by [luanlouis](https://github.com/luanlouis)
 - [Sentinel 控制台前端开发环境搭建](https://www.cnblogs.com/cdfive2018/p/11084001.html) by [cdfive](https://github.com/cdfive)
+- [Sentinel 如何接入 OpenTracing](https://juejin.im/post/5de32fe46fb9a071a828feeb) by [Zhang Shun](https://github.com/ZShUn)
 - [阿里 Sentinel 源码解析](https://www.javadoop.com/post/sentinel) by [Javadoop](https://www.javadoop.com)
+- [阿里巴巴开源限流降级神器 Sentinel 大规模生产级应用实践](https://mp.weixin.qq.com/s/AjHCUmygTr78yo9yMxMEyg) by 步崖
 - [Introduction to Alibaba Sentinel](https://www.baeldung.com/java-sentinel-intro) by [Amit Bhave](https://github.com/Amitbhave)
+- [Sentinel Go 毫秒级统计数据结构揭秘](https://sentinelguard.io/zh-cn/blog/sentinel-go-internal-data-structure.html) by [Binbin Zhang](https://github.com/binbin0325)
diff --git a/pom.xml b/pom.xml
index 94a32cd0..cd36ec72 100755
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
 
     <groupId>com.alibaba.csp</groupId>
     <artifactId>sentinel-parent</artifactId>
-    <version>1.8.6</version>
+    <version>2.0.0-SNAPSHOT</version>
     <packaging>pom</packaging>
 
     <name>${project.artifactId}</name>
diff --git a/sentinel-adapter/pom.xml b/sentinel-adapter/pom.xml
index 7bb99df5..bb8d2bf7 100755
--- a/sentinel-adapter/pom.xml
+++ b/sentinel-adapter/pom.xml
@@ -7,7 +7,7 @@
     <parent>
         <groupId>com.alibaba.csp</groupId>
         <artifactId>sentinel-parent</artifactId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <artifactId>sentinel-adapter</artifactId>
     <packaging>pom</packaging>
diff --git a/sentinel-adapter/sentinel-apache-dubbo-adapter/pom.xml b/sentinel-adapter/sentinel-apache-dubbo-adapter/pom.xml
index 2c2ceb36..3f3ff34a 100644
--- a/sentinel-adapter/sentinel-apache-dubbo-adapter/pom.xml
+++ b/sentinel-adapter/sentinel-apache-dubbo-adapter/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-adapter</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-adapter/sentinel-apache-dubbo3-adapter/pom.xml b/sentinel-adapter/sentinel-apache-dubbo3-adapter/pom.xml
index f39ff256..0e69b2d4 100644
--- a/sentinel-adapter/sentinel-apache-dubbo3-adapter/pom.xml
+++ b/sentinel-adapter/sentinel-apache-dubbo3-adapter/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-adapter</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-adapter/sentinel-apache-httpclient-adapter/pom.xml b/sentinel-adapter/sentinel-apache-httpclient-adapter/pom.xml
index 868a8b3e..14f8dfcf 100644
--- a/sentinel-adapter/sentinel-apache-httpclient-adapter/pom.xml
+++ b/sentinel-adapter/sentinel-apache-httpclient-adapter/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-adapter</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-adapter/sentinel-api-gateway-adapter-common/pom.xml b/sentinel-adapter/sentinel-api-gateway-adapter-common/pom.xml
index 2fde8d70..d56fd3fe 100644
--- a/sentinel-adapter/sentinel-api-gateway-adapter-common/pom.xml
+++ b/sentinel-adapter/sentinel-api-gateway-adapter-common/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-adapter</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-adapter/sentinel-dubbo-adapter/pom.xml b/sentinel-adapter/sentinel-dubbo-adapter/pom.xml
index e5eed254..18fb4c50 100755
--- a/sentinel-adapter/sentinel-dubbo-adapter/pom.xml
+++ b/sentinel-adapter/sentinel-dubbo-adapter/pom.xml
@@ -6,7 +6,7 @@
     <parent>
         <groupId>com.alibaba.csp</groupId>
         <artifactId>sentinel-adapter</artifactId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>sentinel-dubbo-adapter</artifactId>
diff --git a/sentinel-adapter/sentinel-grpc-adapter/pom.xml b/sentinel-adapter/sentinel-grpc-adapter/pom.xml
index d1f72898..04566d53 100755
--- a/sentinel-adapter/sentinel-grpc-adapter/pom.xml
+++ b/sentinel-adapter/sentinel-grpc-adapter/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-adapter</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>sentinel-grpc-adapter</artifactId>
diff --git a/sentinel-adapter/sentinel-jax-rs-adapter/pom.xml b/sentinel-adapter/sentinel-jax-rs-adapter/pom.xml
index 2692043c..6bc1d62e 100755
--- a/sentinel-adapter/sentinel-jax-rs-adapter/pom.xml
+++ b/sentinel-adapter/sentinel-jax-rs-adapter/pom.xml
@@ -6,7 +6,7 @@
     <parent>
         <groupId>com.alibaba.csp</groupId>
         <artifactId>sentinel-adapter</artifactId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
 
     <artifactId>sentinel-jax-rs-adapter</artifactId>
diff --git a/sentinel-adapter/sentinel-motan-adapter/pom.xml b/sentinel-adapter/sentinel-motan-adapter/pom.xml
index 59e40978..ff721678 100644
--- a/sentinel-adapter/sentinel-motan-adapter/pom.xml
+++ b/sentinel-adapter/sentinel-motan-adapter/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-adapter</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>sentinel-motan-adapter</artifactId>
diff --git a/sentinel-adapter/sentinel-okhttp-adapter/pom.xml b/sentinel-adapter/sentinel-okhttp-adapter/pom.xml
index 881fb7c6..99626ff6 100644
--- a/sentinel-adapter/sentinel-okhttp-adapter/pom.xml
+++ b/sentinel-adapter/sentinel-okhttp-adapter/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-adapter</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-adapter/sentinel-quarkus-adapter/pom.xml b/sentinel-adapter/sentinel-quarkus-adapter/pom.xml
index c9524c29..ae46cc6d 100755
--- a/sentinel-adapter/sentinel-quarkus-adapter/pom.xml
+++ b/sentinel-adapter/sentinel-quarkus-adapter/pom.xml
@@ -6,7 +6,7 @@
     <parent>
         <groupId>com.alibaba.csp</groupId>
         <artifactId>sentinel-adapter</artifactId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
 
     <artifactId>sentinel-quarkus-adapter-parent</artifactId>
diff --git a/sentinel-adapter/sentinel-quarkus-adapter/sentinel-annotation-quarkus-adapter-deployment/pom.xml b/sentinel-adapter/sentinel-quarkus-adapter/sentinel-annotation-quarkus-adapter-deployment/pom.xml
index a0e06e41..7255f9da 100644
--- a/sentinel-adapter/sentinel-quarkus-adapter/sentinel-annotation-quarkus-adapter-deployment/pom.xml
+++ b/sentinel-adapter/sentinel-quarkus-adapter/sentinel-annotation-quarkus-adapter-deployment/pom.xml
@@ -6,7 +6,7 @@
     <parent>
         <groupId>com.alibaba.csp</groupId>
         <artifactId>sentinel-quarkus-adapter-parent</artifactId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
diff --git a/sentinel-adapter/sentinel-quarkus-adapter/sentinel-annotation-quarkus-adapter-runtime/pom.xml b/sentinel-adapter/sentinel-quarkus-adapter/sentinel-annotation-quarkus-adapter-runtime/pom.xml
index d8b8a976..6f785d50 100644
--- a/sentinel-adapter/sentinel-quarkus-adapter/sentinel-annotation-quarkus-adapter-runtime/pom.xml
+++ b/sentinel-adapter/sentinel-quarkus-adapter/sentinel-annotation-quarkus-adapter-runtime/pom.xml
@@ -6,7 +6,7 @@
     <parent>
         <groupId>com.alibaba.csp</groupId>
         <artifactId>sentinel-quarkus-adapter-parent</artifactId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
diff --git a/sentinel-adapter/sentinel-quarkus-adapter/sentinel-jax-rs-quarkus-adapter-deployment/pom.xml b/sentinel-adapter/sentinel-quarkus-adapter/sentinel-jax-rs-quarkus-adapter-deployment/pom.xml
index 87e94bc0..997fe16d 100644
--- a/sentinel-adapter/sentinel-quarkus-adapter/sentinel-jax-rs-quarkus-adapter-deployment/pom.xml
+++ b/sentinel-adapter/sentinel-quarkus-adapter/sentinel-jax-rs-quarkus-adapter-deployment/pom.xml
@@ -6,7 +6,7 @@
     <parent>
         <groupId>com.alibaba.csp</groupId>
         <artifactId>sentinel-quarkus-adapter-parent</artifactId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
diff --git a/sentinel-adapter/sentinel-quarkus-adapter/sentinel-jax-rs-quarkus-adapter-runtime/pom.xml b/sentinel-adapter/sentinel-quarkus-adapter/sentinel-jax-rs-quarkus-adapter-runtime/pom.xml
index fa64bf4e..bd511cde 100644
--- a/sentinel-adapter/sentinel-quarkus-adapter/sentinel-jax-rs-quarkus-adapter-runtime/pom.xml
+++ b/sentinel-adapter/sentinel-quarkus-adapter/sentinel-jax-rs-quarkus-adapter-runtime/pom.xml
@@ -6,7 +6,7 @@
     <parent>
         <groupId>com.alibaba.csp</groupId>
         <artifactId>sentinel-quarkus-adapter-parent</artifactId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
diff --git a/sentinel-adapter/sentinel-quarkus-adapter/sentinel-native-image-quarkus-adapter-deployment/pom.xml b/sentinel-adapter/sentinel-quarkus-adapter/sentinel-native-image-quarkus-adapter-deployment/pom.xml
index 0ede9923..5305ffc2 100644
--- a/sentinel-adapter/sentinel-quarkus-adapter/sentinel-native-image-quarkus-adapter-deployment/pom.xml
+++ b/sentinel-adapter/sentinel-quarkus-adapter/sentinel-native-image-quarkus-adapter-deployment/pom.xml
@@ -6,7 +6,7 @@
     <parent>
         <groupId>com.alibaba.csp</groupId>
         <artifactId>sentinel-quarkus-adapter-parent</artifactId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
diff --git a/sentinel-adapter/sentinel-quarkus-adapter/sentinel-native-image-quarkus-adapter-runtime/pom.xml b/sentinel-adapter/sentinel-quarkus-adapter/sentinel-native-image-quarkus-adapter-runtime/pom.xml
index 25659ba4..4258e958 100644
--- a/sentinel-adapter/sentinel-quarkus-adapter/sentinel-native-image-quarkus-adapter-runtime/pom.xml
+++ b/sentinel-adapter/sentinel-quarkus-adapter/sentinel-native-image-quarkus-adapter-runtime/pom.xml
@@ -6,7 +6,7 @@
     <parent>
         <groupId>com.alibaba.csp</groupId>
         <artifactId>sentinel-quarkus-adapter-parent</artifactId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
diff --git a/sentinel-adapter/sentinel-reactor-adapter/pom.xml b/sentinel-adapter/sentinel-reactor-adapter/pom.xml
index 340fa047..66f87827 100644
--- a/sentinel-adapter/sentinel-reactor-adapter/pom.xml
+++ b/sentinel-adapter/sentinel-reactor-adapter/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-adapter</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-adapter/sentinel-sofa-rpc-adapter/pom.xml b/sentinel-adapter/sentinel-sofa-rpc-adapter/pom.xml
index 928803a8..b3939ed4 100644
--- a/sentinel-adapter/sentinel-sofa-rpc-adapter/pom.xml
+++ b/sentinel-adapter/sentinel-sofa-rpc-adapter/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-adapter</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-adapter/sentinel-spring-cloud-gateway-adapter/pom.xml b/sentinel-adapter/sentinel-spring-cloud-gateway-adapter/pom.xml
index 45c8a220..39f2abc0 100644
--- a/sentinel-adapter/sentinel-spring-cloud-gateway-adapter/pom.xml
+++ b/sentinel-adapter/sentinel-spring-cloud-gateway-adapter/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-adapter</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-adapter/sentinel-spring-webflux-adapter/pom.xml b/sentinel-adapter/sentinel-spring-webflux-adapter/pom.xml
index e4ec2bf8..63798508 100644
--- a/sentinel-adapter/sentinel-spring-webflux-adapter/pom.xml
+++ b/sentinel-adapter/sentinel-spring-webflux-adapter/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-adapter</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-adapter/sentinel-spring-webmvc-adapter/pom.xml b/sentinel-adapter/sentinel-spring-webmvc-adapter/pom.xml
index eadb0c2c..0e3cd405 100644
--- a/sentinel-adapter/sentinel-spring-webmvc-adapter/pom.xml
+++ b/sentinel-adapter/sentinel-spring-webmvc-adapter/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <groupId>com.alibaba.csp</groupId>
         <artifactId>sentinel-adapter</artifactId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-adapter/sentinel-web-servlet/pom.xml b/sentinel-adapter/sentinel-web-servlet/pom.xml
index 3023b4f0..8718d8ec 100755
--- a/sentinel-adapter/sentinel-web-servlet/pom.xml
+++ b/sentinel-adapter/sentinel-web-servlet/pom.xml
@@ -6,7 +6,7 @@
     <parent>
         <groupId>com.alibaba.csp</groupId>
         <artifactId>sentinel-adapter</artifactId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
 
     <artifactId>sentinel-web-servlet</artifactId>
diff --git a/sentinel-adapter/sentinel-zuul-adapter/pom.xml b/sentinel-adapter/sentinel-zuul-adapter/pom.xml
index acdc00ef..6a806e81 100755
--- a/sentinel-adapter/sentinel-zuul-adapter/pom.xml
+++ b/sentinel-adapter/sentinel-zuul-adapter/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-adapter</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>sentinel-zuul-adapter</artifactId>
diff --git a/sentinel-adapter/sentinel-zuul2-adapter/pom.xml b/sentinel-adapter/sentinel-zuul2-adapter/pom.xml
index 42dfe594..5ca3cf1f 100644
--- a/sentinel-adapter/sentinel-zuul2-adapter/pom.xml
+++ b/sentinel-adapter/sentinel-zuul2-adapter/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-adapter</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-benchmark/pom.xml b/sentinel-benchmark/pom.xml
index c11a3d7e..a8a3d0fe 100644
--- a/sentinel-benchmark/pom.xml
+++ b/sentinel-benchmark/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-parent</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-cluster/pom.xml b/sentinel-cluster/pom.xml
index 82ceb19c..e65a9587 100644
--- a/sentinel-cluster/pom.xml
+++ b/sentinel-cluster/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-parent</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <packaging>pom</packaging>
diff --git a/sentinel-cluster/sentinel-cluster-client-default/pom.xml b/sentinel-cluster/sentinel-cluster-client-default/pom.xml
index aecfe869..83f2bd26 100644
--- a/sentinel-cluster/sentinel-cluster-client-default/pom.xml
+++ b/sentinel-cluster/sentinel-cluster-client-default/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-cluster</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-cluster/sentinel-cluster-common-default/pom.xml b/sentinel-cluster/sentinel-cluster-common-default/pom.xml
index d541733c..73f38832 100644
--- a/sentinel-cluster/sentinel-cluster-common-default/pom.xml
+++ b/sentinel-cluster/sentinel-cluster-common-default/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-cluster</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-cluster/sentinel-cluster-server-default/pom.xml b/sentinel-cluster/sentinel-cluster-server-default/pom.xml
index 5524ca3c..e4890ebf 100644
--- a/sentinel-cluster/sentinel-cluster-server-default/pom.xml
+++ b/sentinel-cluster/sentinel-cluster-server-default/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-cluster</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-cluster/sentinel-cluster-server-envoy-rls/pom.xml b/sentinel-cluster/sentinel-cluster-server-envoy-rls/pom.xml
index 347ad168..09231216 100644
--- a/sentinel-cluster/sentinel-cluster-server-envoy-rls/pom.xml
+++ b/sentinel-cluster/sentinel-cluster-server-envoy-rls/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-cluster</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
@@ -65,7 +65,7 @@
         <dependency>
             <groupId>org.yaml</groupId>
             <artifactId>snakeyaml</artifactId>
-            <version>1.26</version>
+            <version>1.32</version>
         </dependency>
 
         <dependency>
diff --git a/sentinel-core/pom.xml b/sentinel-core/pom.xml
index 6437a4c1..ed8b8d79 100755
--- a/sentinel-core/pom.xml
+++ b/sentinel-core/pom.xml
@@ -6,7 +6,7 @@
     <parent>
         <groupId>com.alibaba.csp</groupId>
         <artifactId>sentinel-parent</artifactId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <artifactId>sentinel-core</artifactId>
     <packaging>jar</packaging>
diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/Constants.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/Constants.java
index ed861a3c..5dc23568 100755
--- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/Constants.java
+++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/Constants.java
@@ -31,7 +31,7 @@ import com.alibaba.csp.sentinel.util.VersionUtil;
  */
 public final class Constants {
 
-    public static final String SENTINEL_VERSION = VersionUtil.getVersion("1.8.6");
+    public static final String SENTINEL_VERSION = VersionUtil.getVersion("2.0.0");
 
     public final static int MAX_CONTEXT_NAME_SIZE = 2000;
     public final static int MAX_SLOT_CHAIN_SIZE = 6000;
@@ -80,6 +80,7 @@ public final class Constants {
     public static final int ORDER_AUTHORITY_SLOT = -6000;
     public static final int ORDER_SYSTEM_SLOT = -5000;
     public static final int ORDER_FLOW_SLOT = -2000;
+    public static final int ORDER_DEFAULT_CIRCUIT_BREAKER_SLOT = -1500;
     public static final int ORDER_DEGRADE_SLOT = -1000;
 
     private Constants() {}
diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/eagleeye/EagleEye.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/eagleeye/EagleEye.java
index ce593fca..15e94e0a 100755
--- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/eagleeye/EagleEye.java
+++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/eagleeye/EagleEye.java
@@ -198,7 +198,7 @@ public final class EagleEye {
         return new StatLoggerBuilder(loggerName);
     }
 
-    static void setEagelEyeSelfAppender(EagleEyeAppender appender) {
+    static void setEagleEyeSelfAppender(EagleEyeAppender appender) {
         selfAppender = appender;
     }
 
diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/degrade/DefaultCircuitBreakerRuleManager.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/degrade/DefaultCircuitBreakerRuleManager.java
new file mode 100644
index 00000000..03d1ca8f
--- /dev/null
+++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/degrade/DefaultCircuitBreakerRuleManager.java
@@ -0,0 +1,229 @@
+/*
+ * Copyright 1999-2022 Alibaba Group Holding Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.alibaba.csp.sentinel.slots.block.degrade;
+
+import com.alibaba.csp.sentinel.log.RecordLog;
+import com.alibaba.csp.sentinel.property.DynamicSentinelProperty;
+import com.alibaba.csp.sentinel.property.PropertyListener;
+import com.alibaba.csp.sentinel.property.SentinelProperty;
+import com.alibaba.csp.sentinel.slots.block.RuleConstant;
+import com.alibaba.csp.sentinel.slots.block.degrade.circuitbreaker.CircuitBreaker;
+import com.alibaba.csp.sentinel.slots.block.degrade.circuitbreaker.ExceptionCircuitBreaker;
+import com.alibaba.csp.sentinel.slots.block.degrade.circuitbreaker.ResponseTimeCircuitBreaker;
+import com.alibaba.csp.sentinel.util.AssertUtil;
+import com.alibaba.csp.sentinel.util.StringUtil;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * The rule manager for universal default circuit breaker rule.
+ *
+ * @author wuwen
+ * @author Eric Zhao
+ * @since 2.0.0
+ */
+public final class DefaultCircuitBreakerRuleManager {
+
+    public static final String DEFAULT_KEY = "*";
+
+    private static volatile Map<String, List<CircuitBreaker>> circuitBreakers = new ConcurrentHashMap<>();
+
+    private static volatile Set<DegradeRule> rules = new HashSet<>();
+
+    /**
+     * Resources in this set will not be affected by default rules.
+     */
+    private static final Set<String> excludedResource = ConcurrentHashMap.newKeySet();
+
+    private static final DefaultCircuitBreakerRuleManager.RulePropertyListener LISTENER
+        = new DefaultCircuitBreakerRuleManager.RulePropertyListener();
+    private static SentinelProperty<List<DegradeRule>> currentProperty = new DynamicSentinelProperty<>();
+
+    static {
+        currentProperty.addListener(LISTENER);
+    }
+
+    /**
+     * Listen to the {@link SentinelProperty} for default circuit breaker rules.
+     *
+     * @param property the property to listen.
+     */
+    public static void register2Property(SentinelProperty<List<DegradeRule>> property) {
+        AssertUtil.notNull(property, "property cannot be null");
+        synchronized (LISTENER) {
+            RecordLog.info("Registering new property to DefaultCircuitBreakerRuleManager");
+            currentProperty.removeListener(LISTENER);
+            property.addListener(LISTENER);
+            currentProperty = property;
+        }
+    }
+
+    static List<CircuitBreaker> getDefaultCircuitBreakers(String resourceName) {
+        if (rules == null || rules.isEmpty()) {
+            return null;
+        }
+        List<CircuitBreaker> circuitBreakers = DefaultCircuitBreakerRuleManager.circuitBreakers.get(resourceName);
+        if (circuitBreakers == null && !rules.isEmpty() && !excludedResource.contains(resourceName)) {
+            circuitBreakers = new ArrayList<>();
+            for (DegradeRule rule : rules) {
+                circuitBreakers.add(DefaultCircuitBreakerRuleManager.newCircuitBreakerFrom(rule));
+            }
+            DefaultCircuitBreakerRuleManager.circuitBreakers.put(resourceName, circuitBreakers);
+            return circuitBreakers;
+        }
+        return circuitBreakers;
+    }
+
+    /**
+     * Exclude the resource that does not require default rules.
+     *
+     * @param resourceName the name of resource that does not require default rules
+     */
+    public static void addExcludedResource(String resourceName) {
+        if (StringUtil.isEmpty(resourceName)) {
+            return;
+        }
+        excludedResource.add(resourceName);
+    }
+
+    public static void removeExcludedResource(String resourceName) {
+        if (StringUtil.isEmpty(resourceName)) {
+            return;
+        }
+        excludedResource.remove(resourceName);
+    }
+
+    public static void clearExcludedResource() {
+        excludedResource.clear();
+    }
+
+    /**
+     * Load default circuit breaker rules, former rules will be replaced.
+     *
+     * @param rules new rules to load.
+     */
+    public static boolean loadRules(List<DegradeRule> rules) {
+        try {
+            return currentProperty.updateValue(rules);
+        } catch (Throwable e) {
+            RecordLog.error("[DefaultCircuitBreakerRuleManager] Unexpected error when loading default rules", e);
+            return false;
+        }
+
+    }
+
+    public static boolean isValidDefaultRule(DegradeRule rule) {
+        if (!DegradeRuleManager.isValidRule(rule)) {
+            return false;
+        }
+        return rule.getResource().equals(DEFAULT_KEY);
+    }
+
+    /**
+     * Create a circuit breaker instance from provided circuit breaking rule.
+     *
+     * @param rule a valid circuit breaking rule
+     * @return new circuit breaker based on provided rule; null if rule is invalid or unsupported type
+     */
+    private static CircuitBreaker newCircuitBreakerFrom(/*@Valid*/ DegradeRule rule) {
+        switch (rule.getGrade()) {
+            case RuleConstant.DEGRADE_GRADE_RT:
+                return new ResponseTimeCircuitBreaker(rule);
+            case RuleConstant.DEGRADE_GRADE_EXCEPTION_RATIO:
+            case RuleConstant.DEGRADE_GRADE_EXCEPTION_COUNT:
+                return new ExceptionCircuitBreaker(rule);
+            default:
+                return null;
+        }
+    }
+
+    private static CircuitBreaker getExistingSameCbOrNew(/*@Valid*/ DegradeRule rule) {
+        List<CircuitBreaker> cbs = getCircuitBreakers(rule.getResource());
+        if (cbs == null || cbs.isEmpty()) {
+            return newCircuitBreakerFrom(rule);
+        }
+        for (CircuitBreaker cb : cbs) {
+            if (rule.equals(cb.getRule())) {
+                // Reuse the circuit breaker if the rule remains unchanged.
+                return cb;
+            }
+        }
+        return newCircuitBreakerFrom(rule);
+    }
+
+    static List<CircuitBreaker> getCircuitBreakers(String resourceName) {
+        return circuitBreakers.get(resourceName);
+    }
+
+    private static class RulePropertyListener implements PropertyListener<List<DegradeRule>> {
+
+        private synchronized void reloadFrom(List<DegradeRule> list) {
+
+            if (list == null || list.isEmpty()) {
+                // clearing all rules
+                DefaultCircuitBreakerRuleManager.circuitBreakers = new ConcurrentHashMap<>();
+                DefaultCircuitBreakerRuleManager.rules = new HashSet<>();
+                return;
+            }
+
+            Set<DegradeRule> rules = new HashSet<DegradeRule>();
+            for (DegradeRule rule : list) {
+                if (!isValidDefaultRule(rule)) {
+                    RecordLog.warn(
+                        "[DefaultCircuitBreakerRuleManager] Ignoring invalid rule when loading new rules: {}", rule);
+                } else {
+                    if (StringUtil.isBlank(rule.getLimitApp())) {
+                        rule.setLimitApp(RuleConstant.LIMIT_APP_DEFAULT);
+                    }
+                    // TODO: Set a special ID for default circuit breaker rule (so that it could be identified)
+
+                    rules.add(rule);
+                }
+            }
+
+            Map<String, List<CircuitBreaker>> cbMap = new ConcurrentHashMap<String, List<CircuitBreaker>>(8);
+            for (String resourceNameKey : DefaultCircuitBreakerRuleManager.circuitBreakers.keySet()) {
+                List<CircuitBreaker> cbs = new ArrayList<CircuitBreaker>();
+                for (DegradeRule rule : rules) {
+                    CircuitBreaker cb = getExistingSameCbOrNew(rule);
+                    cbs.add(cb);
+                }
+                cbMap.put(resourceNameKey, cbs);
+            }
+
+            DefaultCircuitBreakerRuleManager.rules = rules;
+            DefaultCircuitBreakerRuleManager.circuitBreakers = cbMap;
+        }
+
+        @Override
+        public void configUpdate(List<DegradeRule> conf) {
+            reloadFrom(conf);
+            RecordLog.info("[DefaultCircuitBreakerRuleManager] Default circuit breaker rules has been updated to: {}",
+                rules);
+        }
+
+        @Override
+        public void configLoad(List<DegradeRule> conf) {
+            reloadFrom(conf);
+            RecordLog.info("[DefaultCircuitBreakerRuleManager] Default circuit breaker rules loaded: {}", rules);
+        }
+    }
+}
diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/degrade/DefaultCircuitBreakerSlot.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/degrade/DefaultCircuitBreakerSlot.java
new file mode 100644
index 00000000..1362c2b3
--- /dev/null
+++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/degrade/DefaultCircuitBreakerSlot.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright 1999-2022 Alibaba Group Holding Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.alibaba.csp.sentinel.slots.block.degrade;
+
+import com.alibaba.csp.sentinel.Constants;
+import com.alibaba.csp.sentinel.Entry;
+import com.alibaba.csp.sentinel.context.Context;
+import com.alibaba.csp.sentinel.node.DefaultNode;
+import com.alibaba.csp.sentinel.slotchain.AbstractLinkedProcessorSlot;
+import com.alibaba.csp.sentinel.slotchain.ProcessorSlot;
+import com.alibaba.csp.sentinel.slotchain.ResourceWrapper;
+import com.alibaba.csp.sentinel.slots.block.BlockException;
+import com.alibaba.csp.sentinel.slots.block.degrade.circuitbreaker.CircuitBreaker;
+import com.alibaba.csp.sentinel.spi.Spi;
+
+import java.util.List;
+
+/**
+ * <p>A {@link ProcessorSlot} dedicates to universal default circuit breaker.</p>
+ *
+ * @author wuwen
+ * @since 2.0.0
+ */
+@Spi(order = Constants.ORDER_DEFAULT_CIRCUIT_BREAKER_SLOT)
+public class DefaultCircuitBreakerSlot extends AbstractLinkedProcessorSlot<DefaultNode> {
+
+    @Override
+    public void entry(Context context, ResourceWrapper resourceWrapper, DefaultNode node, int count,
+                      boolean prioritized, Object... args) throws Throwable {
+        performChecking(context, resourceWrapper);
+
+        fireEntry(context, resourceWrapper, node, count, prioritized, args);
+    }
+
+    private void performChecking(Context context, ResourceWrapper r) throws BlockException {
+        // If user has set a degrade rule for the resource, the default rule will not be activated
+        if (DegradeRuleManager.hasConfig(r.getName())) {
+            return;
+        }
+
+        List<CircuitBreaker> circuitBreakers = DefaultCircuitBreakerRuleManager.getDefaultCircuitBreakers(r.getName());
+
+        if (circuitBreakers == null || circuitBreakers.isEmpty()) {
+            return;
+        }
+
+        for (CircuitBreaker cb : circuitBreakers) {
+            if (!cb.tryPass(context)) {
+                throw new DegradeException(cb.getRule().getLimitApp(), cb.getRule());
+            }
+        }
+    }
+
+    @Override
+    public void exit(Context context, ResourceWrapper r, int count, Object... args) {
+        Entry curEntry = context.getCurEntry();
+        if (curEntry.getBlockError() != null) {
+            fireExit(context, r, count, args);
+            return;
+        }
+
+        if (DegradeRuleManager.hasConfig(r.getName())) {
+            fireExit(context, r, count, args);
+            return;
+        }
+
+        List<CircuitBreaker> circuitBreakers = DefaultCircuitBreakerRuleManager.getDefaultCircuitBreakers(r.getName());
+
+        if (circuitBreakers == null || circuitBreakers.isEmpty()) {
+            fireExit(context, r, count, args);
+            return;
+        }
+
+        if (curEntry.getBlockError() == null) {
+            // passed request
+            for (CircuitBreaker circuitBreaker : circuitBreakers) {
+                circuitBreaker.onRequestComplete(context);
+            }
+        }
+
+        fireExit(context, r, count, args);
+    }
+}
diff --git a/sentinel-core/src/main/resources/META-INF/services/com.alibaba.csp.sentinel.slotchain.ProcessorSlot b/sentinel-core/src/main/resources/META-INF/services/com.alibaba.csp.sentinel.slotchain.ProcessorSlot
index afd97771..867777ce 100644
--- a/sentinel-core/src/main/resources/META-INF/services/com.alibaba.csp.sentinel.slotchain.ProcessorSlot
+++ b/sentinel-core/src/main/resources/META-INF/services/com.alibaba.csp.sentinel.slotchain.ProcessorSlot
@@ -6,4 +6,5 @@ com.alibaba.csp.sentinel.slots.statistic.StatisticSlot
 com.alibaba.csp.sentinel.slots.block.authority.AuthoritySlot
 com.alibaba.csp.sentinel.slots.system.SystemSlot
 com.alibaba.csp.sentinel.slots.block.flow.FlowSlot
-com.alibaba.csp.sentinel.slots.block.degrade.DegradeSlot
\ No newline at end of file
+com.alibaba.csp.sentinel.slots.block.degrade.DegradeSlot
+com.alibaba.csp.sentinel.slots.block.degrade.DefaultCircuitBreakerSlot
\ No newline at end of file
diff --git a/sentinel-dashboard/pom.xml b/sentinel-dashboard/pom.xml
index ae973fe7..8d02cdc8 100644
--- a/sentinel-dashboard/pom.xml
+++ b/sentinel-dashboard/pom.xml
@@ -6,7 +6,7 @@
     <parent>
         <groupId>com.alibaba.csp</groupId>
         <artifactId>sentinel-parent</artifactId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
 
     <artifactId>sentinel-dashboard</artifactId>
diff --git a/sentinel-demo/pom.xml b/sentinel-demo/pom.xml
index 05596cd1..847dcda1 100755
--- a/sentinel-demo/pom.xml
+++ b/sentinel-demo/pom.xml
@@ -6,7 +6,7 @@
     <parent>
         <groupId>com.alibaba.csp</groupId>
         <artifactId>sentinel-parent</artifactId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <artifactId>sentinel-demo</artifactId>
     <packaging>pom</packaging>
diff --git a/sentinel-demo/sentinel-demo-annotation-cdi-interceptor/pom.xml b/sentinel-demo/sentinel-demo-annotation-cdi-interceptor/pom.xml
index c41156bd..111d3016 100644
--- a/sentinel-demo/sentinel-demo-annotation-cdi-interceptor/pom.xml
+++ b/sentinel-demo/sentinel-demo-annotation-cdi-interceptor/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-demo</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-demo/sentinel-demo-annotation-spring-aop/pom.xml b/sentinel-demo/sentinel-demo-annotation-spring-aop/pom.xml
index 7a558d36..9cff0271 100644
--- a/sentinel-demo/sentinel-demo-annotation-spring-aop/pom.xml
+++ b/sentinel-demo/sentinel-demo-annotation-spring-aop/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-demo</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-demo/sentinel-demo-apache-dubbo/pom.xml b/sentinel-demo/sentinel-demo-apache-dubbo/pom.xml
index 3d3c7891..5a7e5630 100644
--- a/sentinel-demo/sentinel-demo-apache-dubbo/pom.xml
+++ b/sentinel-demo/sentinel-demo-apache-dubbo/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-demo</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
@@ -15,7 +15,7 @@
         <dependency>
             <groupId>org.apache.dubbo</groupId>
             <artifactId>dubbo</artifactId>
-            <version>2.7.3</version>
+            <version>2.7.18</version>
         </dependency>
 
         <!-- Dubbo provides qos plugin and is enable by default. -->
diff --git a/sentinel-demo/sentinel-demo-apache-httpclient/pom.xml b/sentinel-demo/sentinel-demo-apache-httpclient/pom.xml
index e05beef5..9d319940 100644
--- a/sentinel-demo/sentinel-demo-apache-httpclient/pom.xml
+++ b/sentinel-demo/sentinel-demo-apache-httpclient/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-demo</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-demo/sentinel-demo-apollo-datasource/pom.xml b/sentinel-demo/sentinel-demo-apollo-datasource/pom.xml
index ba6e73ec..69b6e886 100644
--- a/sentinel-demo/sentinel-demo-apollo-datasource/pom.xml
+++ b/sentinel-demo/sentinel-demo-apollo-datasource/pom.xml
@@ -5,7 +5,7 @@
   <parent>
     <artifactId>sentinel-demo</artifactId>
     <groupId>com.alibaba.csp</groupId>
-    <version>1.8.6</version>
+    <version>2.0.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-demo/sentinel-demo-basic/pom.xml b/sentinel-demo/sentinel-demo-basic/pom.xml
index 2ae67ff6..69fa8966 100755
--- a/sentinel-demo/sentinel-demo-basic/pom.xml
+++ b/sentinel-demo/sentinel-demo-basic/pom.xml
@@ -6,7 +6,7 @@
     <parent>
         <groupId>com.alibaba.csp</groupId>
         <artifactId>sentinel-demo</artifactId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <artifactId>sentinel-demo-basic</artifactId>
 
diff --git a/sentinel-demo/sentinel-demo-basic/src/main/java/com/alibaba/csp/sentinel/demo/system/SystemGuardDemo.java b/sentinel-demo/sentinel-demo-basic/src/main/java/com/alibaba/csp/sentinel/demo/system/SystemGuardDemo.java
index f0e1ddff..d42eaf90 100755
--- a/sentinel-demo/sentinel-demo-basic/src/main/java/com/alibaba/csp/sentinel/demo/system/SystemGuardDemo.java
+++ b/sentinel-demo/sentinel-demo-basic/src/main/java/com/alibaba/csp/sentinel/demo/system/SystemGuardDemo.java
@@ -87,7 +87,6 @@ public class SystemGuardDemo {
     }
 
     private static void initSystemRule() {
-        List<SystemRule> rules = new ArrayList<SystemRule>();
         SystemRule rule = new SystemRule();
         // max load is 3
         rule.setHighestSystemLoad(3.0);
@@ -100,7 +99,6 @@ public class SystemGuardDemo {
         // max parallel working thread is 10
         rule.setMaxThread(10);
 
-        rules.add(rule);
         SystemRuleManager.loadRules(Collections.singletonList(rule));
     }
 
diff --git a/sentinel-demo/sentinel-demo-cluster/pom.xml b/sentinel-demo/sentinel-demo-cluster/pom.xml
index 68e2525b..5b6f0e0f 100644
--- a/sentinel-demo/sentinel-demo-cluster/pom.xml
+++ b/sentinel-demo/sentinel-demo-cluster/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-demo</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-embedded/pom.xml b/sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-embedded/pom.xml
index 6850463f..0c20d9e2 100644
--- a/sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-embedded/pom.xml
+++ b/sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-embedded/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-demo-cluster</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-server-alone/pom.xml b/sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-server-alone/pom.xml
index db4f62a8..7a6f4790 100644
--- a/sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-server-alone/pom.xml
+++ b/sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-server-alone/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-demo-cluster</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-demo/sentinel-demo-command-handler/pom.xml b/sentinel-demo/sentinel-demo-command-handler/pom.xml
index fb98b4f1..d4ccbe9e 100644
--- a/sentinel-demo/sentinel-demo-command-handler/pom.xml
+++ b/sentinel-demo/sentinel-demo-command-handler/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-demo</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-demo/sentinel-demo-dubbo/pom.xml b/sentinel-demo/sentinel-demo-dubbo/pom.xml
index 63ff6524..206c98ff 100644
--- a/sentinel-demo/sentinel-demo-dubbo/pom.xml
+++ b/sentinel-demo/sentinel-demo-dubbo/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-demo</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-demo/sentinel-demo-dynamic-file-rule/pom.xml b/sentinel-demo/sentinel-demo-dynamic-file-rule/pom.xml
index 56dab37b..cf88eb07 100755
--- a/sentinel-demo/sentinel-demo-dynamic-file-rule/pom.xml
+++ b/sentinel-demo/sentinel-demo-dynamic-file-rule/pom.xml
@@ -6,7 +6,7 @@
     <parent>
         <groupId>com.alibaba.csp</groupId>
         <artifactId>sentinel-demo</artifactId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <artifactId>sentinel-demo-dynamic-file-rule</artifactId>
 
diff --git a/sentinel-demo/sentinel-demo-etcd-datasource/pom.xml b/sentinel-demo/sentinel-demo-etcd-datasource/pom.xml
index 2002332d..bbb9ea1a 100644
--- a/sentinel-demo/sentinel-demo-etcd-datasource/pom.xml
+++ b/sentinel-demo/sentinel-demo-etcd-datasource/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-demo</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-demo/sentinel-demo-jax-rs/pom.xml b/sentinel-demo/sentinel-demo-jax-rs/pom.xml
index 7f99f354..1249061a 100644
--- a/sentinel-demo/sentinel-demo-jax-rs/pom.xml
+++ b/sentinel-demo/sentinel-demo-jax-rs/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-demo</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-demo/sentinel-demo-log-logback/pom.xml b/sentinel-demo/sentinel-demo-log-logback/pom.xml
index 1a93c70d..4bbac84b 100644
--- a/sentinel-demo/sentinel-demo-log-logback/pom.xml
+++ b/sentinel-demo/sentinel-demo-log-logback/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-demo</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-demo/sentinel-demo-motan/pom.xml b/sentinel-demo/sentinel-demo-motan/pom.xml
index f54bfc2c..ec3a5c25 100644
--- a/sentinel-demo/sentinel-demo-motan/pom.xml
+++ b/sentinel-demo/sentinel-demo-motan/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-demo</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>sentinel-demo-motan</artifactId>
diff --git a/sentinel-demo/sentinel-demo-nacos-datasource/pom.xml b/sentinel-demo/sentinel-demo-nacos-datasource/pom.xml
index 3be61015..112a1edc 100644
--- a/sentinel-demo/sentinel-demo-nacos-datasource/pom.xml
+++ b/sentinel-demo/sentinel-demo-nacos-datasource/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-demo</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-demo/sentinel-demo-okhttp/pom.xml b/sentinel-demo/sentinel-demo-okhttp/pom.xml
index 572693b0..aacba35c 100644
--- a/sentinel-demo/sentinel-demo-okhttp/pom.xml
+++ b/sentinel-demo/sentinel-demo-okhttp/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-demo</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-demo/sentinel-demo-parameter-flow-control/pom.xml b/sentinel-demo/sentinel-demo-parameter-flow-control/pom.xml
index de900023..e1bd52d4 100644
--- a/sentinel-demo/sentinel-demo-parameter-flow-control/pom.xml
+++ b/sentinel-demo/sentinel-demo-parameter-flow-control/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-demo</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-demo/sentinel-demo-quarkus/pom.xml b/sentinel-demo/sentinel-demo-quarkus/pom.xml
index 78a9f926..2ba49746 100644
--- a/sentinel-demo/sentinel-demo-quarkus/pom.xml
+++ b/sentinel-demo/sentinel-demo-quarkus/pom.xml
@@ -6,7 +6,7 @@
     <parent>
         <artifactId>sentinel-demo</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-demo/sentinel-demo-rocketmq/pom.xml b/sentinel-demo/sentinel-demo-rocketmq/pom.xml
index d09d51a5..9c59fb87 100755
--- a/sentinel-demo/sentinel-demo-rocketmq/pom.xml
+++ b/sentinel-demo/sentinel-demo-rocketmq/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <groupId>com.alibaba.csp</groupId>
         <artifactId>sentinel-demo</artifactId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-demo/sentinel-demo-slot-spi/pom.xml b/sentinel-demo/sentinel-demo-slot-spi/pom.xml
index 49a3f80b..5b30cdda 100644
--- a/sentinel-demo/sentinel-demo-slot-spi/pom.xml
+++ b/sentinel-demo/sentinel-demo-slot-spi/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-demo</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-demo/sentinel-demo-slotchain-spi/pom.xml b/sentinel-demo/sentinel-demo-slotchain-spi/pom.xml
index d9a968a2..90b30d0e 100644
--- a/sentinel-demo/sentinel-demo-slotchain-spi/pom.xml
+++ b/sentinel-demo/sentinel-demo-slotchain-spi/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-demo</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-demo/sentinel-demo-sofa-rpc/pom.xml b/sentinel-demo/sentinel-demo-sofa-rpc/pom.xml
index db44164a..f7584cb6 100644
--- a/sentinel-demo/sentinel-demo-sofa-rpc/pom.xml
+++ b/sentinel-demo/sentinel-demo-sofa-rpc/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-demo</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-demo/sentinel-demo-spring-cloud-gateway/pom.xml b/sentinel-demo/sentinel-demo-spring-cloud-gateway/pom.xml
index 5081a033..d5d3e4e8 100644
--- a/sentinel-demo/sentinel-demo-spring-cloud-gateway/pom.xml
+++ b/sentinel-demo/sentinel-demo-spring-cloud-gateway/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-demo</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-demo/sentinel-demo-spring-webflux/pom.xml b/sentinel-demo/sentinel-demo-spring-webflux/pom.xml
index 6dc0939d..36a3a0a6 100644
--- a/sentinel-demo/sentinel-demo-spring-webflux/pom.xml
+++ b/sentinel-demo/sentinel-demo-spring-webflux/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-demo</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-demo/sentinel-demo-spring-webmvc/pom.xml b/sentinel-demo/sentinel-demo-spring-webmvc/pom.xml
index 1fffb745..c0bb7ef7 100644
--- a/sentinel-demo/sentinel-demo-spring-webmvc/pom.xml
+++ b/sentinel-demo/sentinel-demo-spring-webmvc/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-demo</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-demo/sentinel-demo-transport-spring-mvc/pom.xml b/sentinel-demo/sentinel-demo-transport-spring-mvc/pom.xml
index 58443537..0064ae84 100644
--- a/sentinel-demo/sentinel-demo-transport-spring-mvc/pom.xml
+++ b/sentinel-demo/sentinel-demo-transport-spring-mvc/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-demo</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-demo/sentinel-demo-zookeeper-datasource/pom.xml b/sentinel-demo/sentinel-demo-zookeeper-datasource/pom.xml
index 73954bd5..08207937 100644
--- a/sentinel-demo/sentinel-demo-zookeeper-datasource/pom.xml
+++ b/sentinel-demo/sentinel-demo-zookeeper-datasource/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-demo</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-demo/sentinel-demo-zuul-gateway/pom.xml b/sentinel-demo/sentinel-demo-zuul-gateway/pom.xml
index 58265b2f..cd84b382 100644
--- a/sentinel-demo/sentinel-demo-zuul-gateway/pom.xml
+++ b/sentinel-demo/sentinel-demo-zuul-gateway/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-demo</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-demo/sentinel-demo-zuul2-gateway/pom.xml b/sentinel-demo/sentinel-demo-zuul2-gateway/pom.xml
index dfe052fc..a3e110d9 100644
--- a/sentinel-demo/sentinel-demo-zuul2-gateway/pom.xml
+++ b/sentinel-demo/sentinel-demo-zuul2-gateway/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-demo</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-extension/pom.xml b/sentinel-extension/pom.xml
index ca52300f..e90a39a3 100755
--- a/sentinel-extension/pom.xml
+++ b/sentinel-extension/pom.xml
@@ -6,7 +6,7 @@
     <parent>
         <groupId>com.alibaba.csp</groupId>
         <artifactId>sentinel-parent</artifactId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <artifactId>sentinel-extension</artifactId>
     <packaging>pom</packaging>
@@ -25,6 +25,7 @@
         <module>sentinel-datasource-eureka</module>
         <module>sentinel-annotation-cdi-interceptor</module>
         <module>sentinel-metric-exporter</module>
+        <module>sentinel-datasource-opensergo</module>
     </modules>
 
 </project>
diff --git a/sentinel-extension/sentinel-annotation-aspectj/pom.xml b/sentinel-extension/sentinel-annotation-aspectj/pom.xml
index d818ca3f..46dcc284 100644
--- a/sentinel-extension/sentinel-annotation-aspectj/pom.xml
+++ b/sentinel-extension/sentinel-annotation-aspectj/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-extension</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-extension/sentinel-annotation-cdi-interceptor/pom.xml b/sentinel-extension/sentinel-annotation-cdi-interceptor/pom.xml
index af8a8f93..4489c92f 100644
--- a/sentinel-extension/sentinel-annotation-cdi-interceptor/pom.xml
+++ b/sentinel-extension/sentinel-annotation-cdi-interceptor/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-extension</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-extension/sentinel-datasource-apollo/pom.xml b/sentinel-extension/sentinel-datasource-apollo/pom.xml
index 19bb031f..56ef112b 100644
--- a/sentinel-extension/sentinel-datasource-apollo/pom.xml
+++ b/sentinel-extension/sentinel-datasource-apollo/pom.xml
@@ -5,7 +5,7 @@
   <parent>
     <artifactId>sentinel-extension</artifactId>
     <groupId>com.alibaba.csp</groupId>
-    <version>1.8.6</version>
+    <version>2.0.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-extension/sentinel-datasource-consul/pom.xml b/sentinel-extension/sentinel-datasource-consul/pom.xml
index aff6cf44..05e64cdd 100644
--- a/sentinel-extension/sentinel-datasource-consul/pom.xml
+++ b/sentinel-extension/sentinel-datasource-consul/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-extension</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-extension/sentinel-datasource-etcd/pom.xml b/sentinel-extension/sentinel-datasource-etcd/pom.xml
index d34c5e85..d14c93da 100644
--- a/sentinel-extension/sentinel-datasource-etcd/pom.xml
+++ b/sentinel-extension/sentinel-datasource-etcd/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-extension</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-extension/sentinel-datasource-eureka/pom.xml b/sentinel-extension/sentinel-datasource-eureka/pom.xml
index 2318bd88..01811011 100644
--- a/sentinel-extension/sentinel-datasource-eureka/pom.xml
+++ b/sentinel-extension/sentinel-datasource-eureka/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-extension</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-extension/sentinel-datasource-extension/pom.xml b/sentinel-extension/sentinel-datasource-extension/pom.xml
index cf74203d..bc0fce99 100755
--- a/sentinel-extension/sentinel-datasource-extension/pom.xml
+++ b/sentinel-extension/sentinel-datasource-extension/pom.xml
@@ -6,7 +6,7 @@
     <parent>
         <groupId>com.alibaba.csp</groupId>
         <artifactId>sentinel-extension</artifactId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
 
     <artifactId>sentinel-datasource-extension</artifactId>
diff --git a/sentinel-extension/sentinel-datasource-nacos/pom.xml b/sentinel-extension/sentinel-datasource-nacos/pom.xml
index fba01334..effad922 100644
--- a/sentinel-extension/sentinel-datasource-nacos/pom.xml
+++ b/sentinel-extension/sentinel-datasource-nacos/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-extension</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-extension/sentinel-datasource-opensergo/README.md b/sentinel-extension/sentinel-datasource-opensergo/README.md
new file mode 100644
index 00000000..f28f287c
--- /dev/null
+++ b/sentinel-extension/sentinel-datasource-opensergo/README.md
@@ -0,0 +1,26 @@
+# Sentinel OpenSergo data-source
+
+Sentinel OpenSergo data-source provides integration with OpenSergo.
+The data source leverages [OpenSergo Java SDK](https://github.com/opensergo/opensergo-java-sdk) to implement subscribe (push) model.
+
+## Usage
+
+To use Sentinel OpenSergo data-source, you'll need to add the following Maven dependency:
+
+```xml
+<dependency>
+    <groupId>com.alibaba.csp</groupId>
+    <artifactId>sentinel-datasource-opensergo</artifactId>
+    <version>x.y.z</version>
+</dependency>
+```
+
+Then you can create an `OpenSergoDataSourceGroup` and subscribe Sentinel rules. For example:
+
+```java
+OpenSergoDataSourceGroup openSergo = new OpenSergoDataSourceGroup(host, port, namespace, appName);
+openSergo.start();
+
+// Subscribe flow rules from OpenSergo control plane, and propagate to Sentinel rule manager.
+FlowRuleManager.register2Property(openSergo.subscribeFlowRules());
+```
\ No newline at end of file
diff --git a/sentinel-extension/sentinel-datasource-opensergo/pom.xml b/sentinel-extension/sentinel-datasource-opensergo/pom.xml
new file mode 100644
index 00000000..a074d8e0
--- /dev/null
+++ b/sentinel-extension/sentinel-datasource-opensergo/pom.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>sentinel-extension</artifactId>
+        <groupId>com.alibaba.csp</groupId>
+        <version>2.0.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>sentinel-datasource-opensergo</artifactId>
+
+    <properties>
+        <java.source.version>1.8</java.source.version>
+        <java.target.version>1.8</java.target.version>
+
+        <opensergo.sdk.version>0.1.0-beta1</opensergo.sdk.version>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.alibaba.csp</groupId>
+            <artifactId>sentinel-datasource-extension</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>io.opensergo</groupId>
+            <artifactId>opensergo-java-sdk</artifactId>
+            <version>${opensergo.sdk.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/sentinel-extension/sentinel-datasource-opensergo/src/main/java/com/alibaba/csp/sentinel/datasource/OpenSergoDataSourceGroup.java b/sentinel-extension/sentinel-datasource-opensergo/src/main/java/com/alibaba/csp/sentinel/datasource/OpenSergoDataSourceGroup.java
new file mode 100644
index 00000000..c07c6a5e
--- /dev/null
+++ b/sentinel-extension/sentinel-datasource-opensergo/src/main/java/com/alibaba/csp/sentinel/datasource/OpenSergoDataSourceGroup.java
@@ -0,0 +1,299 @@
+/*
+ * Copyright 1999-2022 Alibaba Group Holding Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.alibaba.csp.sentinel.datasource;
+
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import com.alibaba.csp.sentinel.log.RecordLog;
+import com.alibaba.csp.sentinel.property.DynamicSentinelProperty;
+import com.alibaba.csp.sentinel.property.SentinelProperty;
+import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRule;
+import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
+import com.alibaba.csp.sentinel.util.AssertUtil;
+
+import io.opensergo.ConfigKind;
+import io.opensergo.OpenSergoClient;
+import io.opensergo.proto.fault_tolerance.v1.CircuitBreakerStrategy;
+import io.opensergo.proto.fault_tolerance.v1.FaultToleranceRule;
+import io.opensergo.proto.fault_tolerance.v1.RateLimitStrategy;
+import io.opensergo.proto.fault_tolerance.v1.ThrottlingStrategy;
+import io.opensergo.subscribe.OpenSergoConfigSubscriber;
+import io.opensergo.subscribe.SubscribeKey;
+
+/**
+ * <p>Data-source group for subscribing Sentinel rules from OpenSergo control plane.</p>
+ *
+ * @author Eric Zhao
+ */
+public class OpenSergoDataSourceGroup {
+
+    private final OpenSergoClient openSergoClient;
+
+    private final String namespace;
+    private final String app;
+
+    /**
+     * (SentinelRuleKind, SentinelProperty)
+     */
+    private final ConcurrentMap<String, SentinelProperty> dataSourceMap = new ConcurrentHashMap<>();
+
+    private final ConcurrentMap<ConfigKind, SubscribeKey> subscribeKeyMap = new ConcurrentHashMap<>();
+    private final ConcurrentMap<String, Boolean> sentinelRuleSubscribeMap = new ConcurrentHashMap<>();
+
+    private final OpenSergoRuleAggregator ruleAggregator;
+
+    private final AtomicBoolean started = new AtomicBoolean(false);
+
+    /**
+     * @param host      host of OpenSergo Control Plane
+     * @param port      port of OpenSergo Control Plane
+     * @param namespace namespace to subscribe
+     * @param app       appName to subscribe
+     */
+    public OpenSergoDataSourceGroup(String host, int port, String namespace, String app) {
+        AssertUtil.notEmpty(namespace, "namespace cannot be empty");
+        AssertUtil.notEmpty(app, "app cannot be empty");
+        this.openSergoClient = new OpenSergoClient(host, port);
+        this.namespace = namespace;
+        this.app = app;
+        this.ruleAggregator = new OpenSergoRuleAggregator(dataSourceMap);
+
+        initializeDataSourceMap();
+    }
+
+    private void initializeDataSourceMap() {
+        dataSourceMap.put(OpenSergoSentinelConstants.KIND_FLOW_RULE, new DynamicSentinelProperty<List<FlowRule>>());
+        dataSourceMap.put(OpenSergoSentinelConstants.KIND_CIRCUIT_BREAKER_RULE,
+            new DynamicSentinelProperty<List<DegradeRule>>());
+    }
+
+    public void start() throws Exception {
+        if (started.compareAndSet(false, true)) {
+            openSergoClient.start();
+
+            prepareForBaseSubscription();
+        }
+    }
+
+    public void close() throws Exception {
+        if (started.compareAndSet(true, false)) {
+            for (Entry<ConfigKind, SubscribeKey> e : subscribeKeyMap.entrySet()) {
+                openSergoClient.unsubscribeConfig(e.getValue());
+                RecordLog.info("Unsubscribing OpenSergo config for target: {}", e.getValue());
+            }
+
+            openSergoClient.close();
+        }
+    }
+
+    private void prepareForBaseSubscription() {
+        SubscribeKey key = new SubscribeKey(namespace, app, ConfigKind.FAULT_TOLERANCE_RULE);
+
+        openSergoClient.subscribeConfig(key, new OpenSergoFaultToleranceRuleSubscriber(ruleAggregator));
+        subscribeKeyMap.put(ConfigKind.FAULT_TOLERANCE_RULE, key);
+
+        RecordLog.info("Subscribing OpenSergo base fault-tolerance rules for target <{}, {}>", namespace, app);
+    }
+
+    public boolean hasSubscribedFor(String sentinelRuleKind) {
+        if (sentinelRuleKind == null) {
+            return false;
+        }
+        return sentinelRuleSubscribeMap.getOrDefault(sentinelRuleKind, false);
+    }
+
+    /**
+     * <p>Subscribe Sentinel flow rules from OpenSergo control plane.</p>
+     *
+     * @return {@link SentinelProperty} of Sentinel flow rules
+     */
+    public synchronized SentinelProperty<List<FlowRule>> subscribeFlowRules() {
+        if (!started.get()) {
+            throw new IllegalStateException("OpenSergo data-source not started");
+        }
+
+        boolean subscribed = hasSubscribedFor(OpenSergoSentinelConstants.KIND_FLOW_RULE);
+        SentinelProperty<List<FlowRule>> property = dataSourceMap.get(OpenSergoSentinelConstants.KIND_FLOW_RULE);
+        if (subscribed) {
+            return property;
+        }
+
+        OpenSergoSentinelFlowRuleSubscriber subscriber = new OpenSergoSentinelFlowRuleSubscriber(ruleAggregator);
+
+        SubscribeKey rlsKey = new SubscribeKey(namespace, app, ConfigKind.RATE_LIMIT_STRATEGY);
+        openSergoClient.subscribeConfig(rlsKey, subscriber);
+        subscribeKeyMap.put(ConfigKind.RATE_LIMIT_STRATEGY, rlsKey);
+        RecordLog.info("Subscribing OpenSergo config for target: {}", rlsKey);
+
+        SubscribeKey tsKey = new SubscribeKey(namespace, app, ConfigKind.THROTTLING_STRATEGY);
+        openSergoClient.subscribeConfig(tsKey, subscriber);
+        subscribeKeyMap.put(ConfigKind.THROTTLING_STRATEGY, tsKey);
+        RecordLog.info("Subscribing OpenSergo config for target: {}", tsKey);
+
+        SubscribeKey concurrencyLimitKey = new SubscribeKey(namespace, app, ConfigKind.CONCURRENCY_LIMIT_STRATEGY);
+        openSergoClient.subscribeConfig(concurrencyLimitKey, subscriber);
+        subscribeKeyMap.put(ConfigKind.CONCURRENCY_LIMIT_STRATEGY, concurrencyLimitKey);
+        RecordLog.info("Subscribing OpenSergo config for target: {}", concurrencyLimitKey);
+
+        sentinelRuleSubscribeMap.put(OpenSergoSentinelConstants.KIND_FLOW_RULE, true);
+
+        return property;
+    }
+
+    /**
+     * <p>Subscribe Sentinel degrade rules from OpenSergo control plane.</p>
+     *
+     * @return {@link SentinelProperty} of Sentinel degrade rules
+     */
+    public synchronized SentinelProperty<List<DegradeRule>> subscribeDegradeRules() {
+        if (!started.get()) {
+            throw new IllegalStateException("OpenSergo data-source not started");
+        }
+
+        boolean subscribed = hasSubscribedFor(OpenSergoSentinelConstants.KIND_CIRCUIT_BREAKER_RULE);
+        SentinelProperty<List<DegradeRule>> property = dataSourceMap.get(
+            OpenSergoSentinelConstants.KIND_CIRCUIT_BREAKER_RULE);
+        if (subscribed) {
+            return property;
+        }
+
+        SubscribeKey subscribeKey = new SubscribeKey(namespace, app, ConfigKind.CIRCUIT_BREAKER_STRATEGY);
+        openSergoClient.subscribeConfig(subscribeKey,
+            new OpenSergoSentinelCircuitBreakerRuleSubscriber(ruleAggregator));
+        subscribeKeyMap.put(ConfigKind.CIRCUIT_BREAKER_STRATEGY, subscribeKey);
+        RecordLog.info("Subscribing OpenSergo config for target: {}", subscribeKey);
+
+        sentinelRuleSubscribeMap.put(OpenSergoSentinelConstants.KIND_CIRCUIT_BREAKER_RULE, true);
+
+        return property;
+    }
+
+    /**
+     * <p>Subscribe Sentinel flow rules from OpenSergo control plane.</p>
+     */
+    public synchronized void unsubscribeFlowRules() {
+        boolean subscribed = hasSubscribedFor(OpenSergoSentinelConstants.KIND_FLOW_RULE);
+        if (!subscribed) {
+            return;
+        }
+
+        SubscribeKey rlsKey = subscribeKeyMap.remove(ConfigKind.RATE_LIMIT_STRATEGY);
+        boolean rlRemoved = openSergoClient.unsubscribeConfig(rlsKey);
+        SubscribeKey tsKey = subscribeKeyMap.remove(ConfigKind.THROTTLING_STRATEGY);
+        boolean tsRemoved = openSergoClient.unsubscribeConfig(tsKey);
+        SubscribeKey concurrencyLimitKey = subscribeKeyMap.remove(ConfigKind.CONCURRENCY_LIMIT_STRATEGY);
+        boolean clRemoved = openSergoClient.unsubscribeConfig(concurrencyLimitKey);
+
+        sentinelRuleSubscribeMap.remove(OpenSergoSentinelConstants.KIND_FLOW_RULE);
+
+        // NOTE: unsubscribe operation does not affect existing rules in SentinelProperty.
+    }
+
+    public synchronized void unsubscribeDegradeRules() {
+        boolean subscribed = hasSubscribedFor(OpenSergoSentinelConstants.KIND_CIRCUIT_BREAKER_RULE);
+        if (!subscribed) {
+            return;
+        }
+
+        SubscribeKey cbKey = subscribeKeyMap.remove(ConfigKind.CIRCUIT_BREAKER_STRATEGY);
+        boolean cbRemoved = openSergoClient.unsubscribeConfig(cbKey);
+
+        sentinelRuleSubscribeMap.remove(OpenSergoSentinelConstants.KIND_CIRCUIT_BREAKER_RULE);
+
+        // NOTE: unsubscribe operation does not affect existing rules in SentinelProperty.
+    }
+
+    public String getNamespace() {
+        return namespace;
+    }
+
+    public String getApp() {
+        return app;
+    }
+
+    static class OpenSergoFaultToleranceRuleSubscriber implements OpenSergoConfigSubscriber {
+
+        private final OpenSergoRuleAggregator ruleAggregator;
+
+        public OpenSergoFaultToleranceRuleSubscriber(OpenSergoRuleAggregator ruleAggregator) {
+            this.ruleAggregator = ruleAggregator;
+        }
+
+        @Override
+        public boolean onConfigUpdate(SubscribeKey subscribeKey, Object data) {
+            if (subscribeKey.getKind() != ConfigKind.FAULT_TOLERANCE_RULE || !(data instanceof List)) {
+                // type or data mismatch
+                return false;
+            }
+            return ruleAggregator.updateFaultToleranceRuleList((List<FaultToleranceRule>) data);
+        }
+    }
+
+    /**
+     * Subscriber for OpenSergo strategies related to Sentinel flow rules.
+     */
+    static class OpenSergoSentinelFlowRuleSubscriber implements OpenSergoConfigSubscriber {
+
+        private final OpenSergoRuleAggregator ruleAggregator;
+
+        public OpenSergoSentinelFlowRuleSubscriber(OpenSergoRuleAggregator ruleAggregator) {
+            this.ruleAggregator = ruleAggregator;
+        }
+
+        @Override
+        public boolean onConfigUpdate(SubscribeKey subscribeKey, Object data) {
+            if (!(data instanceof List)) {
+                // data mismatch
+                return false;
+            }
+
+            switch (subscribeKey.getKind()) {
+                case RATE_LIMIT_STRATEGY:
+                    return ruleAggregator.updateRateLimitStrategy((List<RateLimitStrategy>) data);
+                case THROTTLING_STRATEGY:
+                    return ruleAggregator.updateThrottlingStrategy((List<ThrottlingStrategy>) data);
+                case CONCURRENCY_LIMIT_STRATEGY:
+                    // TODO
+                    return false;
+                default:
+                    // Type mismatch
+                    return false;
+            }
+        }
+    }
+
+    static class OpenSergoSentinelCircuitBreakerRuleSubscriber implements OpenSergoConfigSubscriber {
+
+        private final OpenSergoRuleAggregator ruleAggregator;
+
+        public OpenSergoSentinelCircuitBreakerRuleSubscriber(OpenSergoRuleAggregator ruleAggregator) {
+            this.ruleAggregator = ruleAggregator;
+        }
+
+        @Override
+        public boolean onConfigUpdate(SubscribeKey subscribeKey, Object data) {
+            if (subscribeKey.getKind() != ConfigKind.CIRCUIT_BREAKER_STRATEGY || !(data instanceof List)) {
+                // type or data mismatch
+                return false;
+            }
+            return ruleAggregator.updateCircuitBreakerStrategy((List<CircuitBreakerStrategy>) data);
+        }
+    }
+}
diff --git a/sentinel-extension/sentinel-datasource-opensergo/src/main/java/com/alibaba/csp/sentinel/datasource/OpenSergoRuleAggregator.java b/sentinel-extension/sentinel-datasource-opensergo/src/main/java/com/alibaba/csp/sentinel/datasource/OpenSergoRuleAggregator.java
new file mode 100644
index 00000000..cc0390ee
--- /dev/null
+++ b/sentinel-extension/sentinel-datasource-opensergo/src/main/java/com/alibaba/csp/sentinel/datasource/OpenSergoRuleAggregator.java
@@ -0,0 +1,303 @@
+/*
+ * Copyright 1999-2022 Alibaba Group Holding Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.alibaba.csp.sentinel.datasource;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import com.alibaba.csp.sentinel.log.RecordLog;
+import com.alibaba.csp.sentinel.property.SentinelProperty;
+import com.alibaba.csp.sentinel.slots.block.RuleConstant;
+import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRule;
+import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
+
+import io.opensergo.ConfigKind;
+import io.opensergo.proto.fault_tolerance.v1.CircuitBreakerStrategy;
+import io.opensergo.proto.fault_tolerance.v1.ConcurrencyLimitStrategy;
+import io.opensergo.proto.fault_tolerance.v1.FaultToleranceRule;
+import io.opensergo.proto.fault_tolerance.v1.FaultToleranceRule.FaultToleranceRuleTargetRef;
+import io.opensergo.proto.fault_tolerance.v1.RateLimitStrategy;
+import io.opensergo.proto.fault_tolerance.v1.ThrottlingStrategy;
+import io.opensergo.util.TimeUnitUtils;
+
+/**
+ * @author Eric Zhao
+ */
+public class OpenSergoRuleAggregator {
+
+    /**
+     * (SentinelRuleKind, SentinelProperty)
+     */
+    private final Map<String, SentinelProperty> dataSourceMap;
+
+    public OpenSergoRuleAggregator(Map<String, SentinelProperty> dataSourceMap) {
+        this.dataSourceMap = Collections.unmodifiableMap(dataSourceMap);
+    }
+
+    /**
+     * (strategyKindSimpleName, [rules that contain this kind of strategy])
+     */
+    private volatile Map<String, List<FaultToleranceRule>> ftRuleMapByStrategyKind = new HashMap<>();
+    /**
+     * (name, rateLimitStrategy)
+     */
+    private volatile Map<String, RateLimitStrategy> rateLimitStrategyMap = new HashMap<>();
+    private volatile Map<String, ThrottlingStrategy> throttlingStrategyMap = new HashMap<>();
+    private volatile Map<String, ConcurrencyLimitStrategy> concurrencyLimitStrategyMap = new HashMap<>();
+    private volatile Map<String, CircuitBreakerStrategy> circuitBreakerStrategyMap = new HashMap<>();
+
+    public synchronized boolean updateFaultToleranceRuleList(List<FaultToleranceRule> rules) {
+        Map<String, List<FaultToleranceRule>> map = new HashMap<>(4);
+
+        if (rules != null && !rules.isEmpty()) {
+            for (FaultToleranceRule rule : rules) {
+                Set<String> kinds = rule.getStrategiesList().stream()
+                    .map(e -> e.getKind()).collect(Collectors.toSet());
+                kinds.forEach(kindName -> map.computeIfAbsent(kindName, v -> new ArrayList<>()).add(rule));
+            }
+        }
+        this.ftRuleMapByStrategyKind = map;
+
+        // TODO: check whether the rules have been changed
+        handleFlowRuleUpdate();
+        handleCircuitBreakerRuleUpdate();
+
+        return true;
+    }
+
+    public synchronized boolean updateRateLimitStrategy(List<RateLimitStrategy> strategies) {
+        Map<String, RateLimitStrategy> map = new HashMap<>(4);
+        if (strategies != null && !strategies.isEmpty()) {
+            strategies.forEach(s -> map.put(s.getName(), s));
+        }
+        this.rateLimitStrategyMap = map;
+
+        return handleFlowRuleUpdate();
+    }
+
+    public synchronized boolean updateThrottlingStrategy(List<ThrottlingStrategy> strategies) {
+        Map<String, ThrottlingStrategy> map = new HashMap<>(4);
+        if (strategies != null && !strategies.isEmpty()) {
+            strategies.forEach(s -> map.put(s.getName(), s));
+        }
+        this.throttlingStrategyMap = map;
+
+        return handleFlowRuleUpdate();
+    }
+
+    public synchronized boolean updateCircuitBreakerStrategy(List<CircuitBreakerStrategy> strategies) {
+        Map<String, CircuitBreakerStrategy> map = new HashMap<>(4);
+        if (strategies != null && !strategies.isEmpty()) {
+            strategies.forEach(s -> map.put(s.getName(), s));
+        }
+        this.circuitBreakerStrategyMap = map;
+
+        return handleCircuitBreakerRuleUpdate();
+    }
+
+    private boolean handleFlowRuleUpdate() {
+        List<FlowRule> rules = new ArrayList<>();
+
+        List<FlowRule> rulesFromRateLimitStrategies = assembleFlowRulesFromRateLimitStrategies(
+            ftRuleMapByStrategyKind.get(ConfigKind.RATE_LIMIT_STRATEGY.getSimpleKindName()), rateLimitStrategyMap);
+        List<FlowRule> rulesFromThrottlingStrategies = assembleFlowRulesFromThrottlingStrategies(
+            ftRuleMapByStrategyKind.get(ConfigKind.THROTTLING_STRATEGY.getSimpleKindName()), throttlingStrategyMap);
+
+        rules.addAll(rulesFromRateLimitStrategies);
+        rules.addAll(rulesFromThrottlingStrategies);
+
+        // Update rules to upstream data-source.
+        return dataSourceMap.get(OpenSergoSentinelConstants.KIND_FLOW_RULE).updateValue(rules);
+    }
+
+    private boolean handleCircuitBreakerRuleUpdate() {
+        List<DegradeRule> rules = assembleDegradeRulesFromCbStrategies(
+            ftRuleMapByStrategyKind.get(ConfigKind.CIRCUIT_BREAKER_STRATEGY.getSimpleKindName()),
+            circuitBreakerStrategyMap);
+
+        // Update rules to upstream data-source.
+        return dataSourceMap.get(OpenSergoSentinelConstants.KIND_CIRCUIT_BREAKER_RULE).updateValue(rules);
+    }
+
+    private List<FlowRule> assembleFlowRulesFromRateLimitStrategies(List<FaultToleranceRule> ftRules,
+                                                                    Map<String, RateLimitStrategy> rateLimitStrategyMap) {
+        List<FlowRule> rules = new ArrayList<>();
+        if (ftRules == null || ftRules.isEmpty()) {
+            return rules;
+        }
+        for (FaultToleranceRule ftRule : ftRules) {
+            List<RateLimitStrategy> strategies = ftRule.getStrategiesList().stream()
+                .filter(e -> e.getKind().equals(ConfigKind.RATE_LIMIT_STRATEGY.getSimpleKindName()))
+                .map(e -> rateLimitStrategyMap.get(e.getName()))
+                .filter(Objects::nonNull)
+                .collect(Collectors.toList());
+            if (strategies.isEmpty()) {
+                continue;
+            }
+
+            for (FaultToleranceRuleTargetRef targetRef : ftRule.getTargetsList()) {
+                String resourceName = targetRef.getTargetResourceName();
+
+                for (RateLimitStrategy strategy : strategies) {
+                    FlowRule flowRule = new FlowRule(resourceName);
+                    try {
+                        flowRule = fillFlowRuleWithRateLimitStrategy(flowRule, strategy);
+                        if (flowRule != null) {
+                            rules.add(flowRule);
+                        }
+                    } catch (Exception ex) {
+                        RecordLog.warn("Ignoring OpenSergo RateLimitStrategy due to covert failure, "
+                            + "resourceName={}, strategy={}", resourceName, strategy);
+                    }
+                }
+            }
+        }
+        return rules;
+    }
+
+    private List<FlowRule> assembleFlowRulesFromThrottlingStrategies(List<FaultToleranceRule> ftRules,
+                                                                     Map<String, ThrottlingStrategy> throttlingStrategyMap) {
+        List<FlowRule> rules = new ArrayList<>();
+        if (ftRules == null || ftRules.isEmpty()) {
+            return rules;
+        }
+        for (FaultToleranceRule ftRule : ftRules) {
+            List<ThrottlingStrategy> strategies = ftRule.getStrategiesList().stream()
+                .filter(e -> e.getKind().equals(ConfigKind.THROTTLING_STRATEGY.getSimpleKindName()))
+                .map(e -> throttlingStrategyMap.get(e.getName()))
+                .filter(Objects::nonNull)
+                .collect(Collectors.toList());
+            if (strategies.isEmpty()) {
+                continue;
+            }
+
+            for (FaultToleranceRuleTargetRef targetRef : ftRule.getTargetsList()) {
+                String resourceName = targetRef.getTargetResourceName();
+
+                for (ThrottlingStrategy strategy : strategies) {
+                    FlowRule flowRule = new FlowRule(resourceName);
+                    fillFlowRuleWithThrottlingStrategy(flowRule, strategy);
+                    rules.add(flowRule);
+                }
+            }
+        }
+        return rules;
+    }
+
+    private List<DegradeRule> assembleDegradeRulesFromCbStrategies(List<FaultToleranceRule> ftRules,
+                                                                   Map<String, CircuitBreakerStrategy> strategyMap) {
+        List<DegradeRule> rules = new ArrayList<>();
+        if (ftRules == null || ftRules.isEmpty()) {
+            return rules;
+        }
+        for (FaultToleranceRule ftRule : ftRules) {
+            List<CircuitBreakerStrategy> strategies = ftRule.getStrategiesList().stream()
+                .filter(e -> e.getKind().equals(ConfigKind.CIRCUIT_BREAKER_STRATEGY.getSimpleKindName()))
+                .map(e -> strategyMap.get(e.getName()))
+                .filter(Objects::nonNull)
+                .collect(Collectors.toList());
+            if (strategies.isEmpty()) {
+                continue;
+            }
+
+            for (FaultToleranceRuleTargetRef targetRef : ftRule.getTargetsList()) {
+                String resourceName = targetRef.getTargetResourceName();
+
+                for (CircuitBreakerStrategy strategy : strategies) {
+                    DegradeRule degradeRule = new DegradeRule(resourceName);
+                    try {
+                        degradeRule = fillDegradeRuleWithCbStrategy(degradeRule, strategy);
+                        if (degradeRule != null) {
+                            rules.add(degradeRule);
+                        }
+                    } catch (Exception ex) {
+                        RecordLog.warn("Ignoring OpenSergo CircuitBreakerStrategy due to covert failure, "
+                            + "resourceName={}, strategy={}", resourceName, strategy);
+                    }
+                }
+            }
+        }
+        return rules;
+    }
+
+    private FlowRule fillFlowRuleWithRateLimitStrategy(FlowRule rule, RateLimitStrategy strategy) {
+        if (rule == null || strategy == null) {
+            return rule;
+        }
+        rule.setCount(strategy.getThreshold());
+        rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
+        // TODO: support global rate limiting (limitMode=Global).
+        rule.setClusterMode(false);
+        // Relation strategy.
+        rule.setStrategy(RuleConstant.STRATEGY_DIRECT);
+        // Control behavior.
+        rule.setControlBehavior(RuleConstant.CONTROL_BEHAVIOR_DEFAULT);
+
+        return rule;
+    }
+
+    private FlowRule fillFlowRuleWithThrottlingStrategy(FlowRule rule, ThrottlingStrategy strategy) {
+        if (rule == null || strategy == null) {
+            return rule;
+        }
+
+        // round-up
+        double countPerSec = Math.ceil(1000.0 / strategy.getMinIntervalMillisOfRequests());
+        rule.setCount(countPerSec);
+        rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
+        rule.setClusterMode(false);
+        rule.setStrategy(RuleConstant.STRATEGY_DIRECT);
+        rule.setControlBehavior(RuleConstant.CONTROL_BEHAVIOR_RATE_LIMITER);
+        rule.setMaxQueueingTimeMs((int) strategy.getQueueTimeoutMillis());
+
+        return rule;
+    }
+
+    private DegradeRule fillDegradeRuleWithCbStrategy(DegradeRule rule, CircuitBreakerStrategy strategy) {
+        if (rule == null || strategy == null) {
+            return rule;
+        }
+        switch (strategy.getStrategy()) {
+            case STRATEGY_SLOW_REQUEST_RATIO:
+                rule.setGrade(RuleConstant.DEGRADE_GRADE_RT);
+                rule.setSlowRatioThreshold(strategy.getTriggerRatio());
+                // maxAllowedRt
+                rule.setCount(strategy.getSlowCondition().getMaxAllowedRtMillis());
+                break;
+            case STRATEGY_ERROR_REQUEST_RATIO:
+                rule.setGrade(RuleConstant.DEGRADE_GRADE_EXCEPTION_RATIO);
+                rule.setCount(strategy.getTriggerRatio());
+                break;
+            default:
+                throw new IllegalArgumentException("unknown strategy type: " + strategy.getStrategy());
+        }
+        int recoveryTimeoutSec = (int) (TimeUnitUtils.convertToMillis(strategy.getRecoveryTimeout(),
+            strategy.getRecoveryTimeoutTimeUnit()) / 1000);
+        rule.setTimeWindow(recoveryTimeoutSec);
+        int statIntervalMs = (int) TimeUnitUtils.convertToMillis(strategy.getStatDuration(),
+            strategy.getStatDurationTimeUnit());
+        rule.setStatIntervalMs(statIntervalMs);
+        rule.setMinRequestAmount(strategy.getMinRequestAmount());
+        return rule;
+    }
+
+}
diff --git a/sentinel-extension/sentinel-datasource-opensergo/src/main/java/com/alibaba/csp/sentinel/datasource/OpenSergoSentinelConstants.java b/sentinel-extension/sentinel-datasource-opensergo/src/main/java/com/alibaba/csp/sentinel/datasource/OpenSergoSentinelConstants.java
new file mode 100644
index 00000000..eb147040
--- /dev/null
+++ b/sentinel-extension/sentinel-datasource-opensergo/src/main/java/com/alibaba/csp/sentinel/datasource/OpenSergoSentinelConstants.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright 1999-2022 Alibaba Group Holding Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.alibaba.csp.sentinel.datasource;
+
+/**
+ * @author Eric Zhao
+ */
+public final class OpenSergoSentinelConstants {
+
+    public static final String KIND_FLOW_RULE = "FlowRule";
+    public static final String KIND_CIRCUIT_BREAKER_RULE = "DegradeRule";
+    public static final String KIND_SYSTEM_ADAPTIVE_RULE = "SystemRule";
+    public static final String KIND_PARAM_FLOW_RULE = "ParamFlowRule";
+
+    private OpenSergoSentinelConstants() {}
+}
diff --git a/sentinel-extension/sentinel-datasource-redis/pom.xml b/sentinel-extension/sentinel-datasource-redis/pom.xml
index 2c5f05be..0f1f3127 100644
--- a/sentinel-extension/sentinel-datasource-redis/pom.xml
+++ b/sentinel-extension/sentinel-datasource-redis/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-extension</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-extension/sentinel-datasource-spring-cloud-config/pom.xml b/sentinel-extension/sentinel-datasource-spring-cloud-config/pom.xml
index a237cc9b..c889f735 100644
--- a/sentinel-extension/sentinel-datasource-spring-cloud-config/pom.xml
+++ b/sentinel-extension/sentinel-datasource-spring-cloud-config/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-extension</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-extension/sentinel-datasource-zookeeper/pom.xml b/sentinel-extension/sentinel-datasource-zookeeper/pom.xml
index fb2c6a7c..4c175cab 100644
--- a/sentinel-extension/sentinel-datasource-zookeeper/pom.xml
+++ b/sentinel-extension/sentinel-datasource-zookeeper/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-extension</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-extension/sentinel-metric-exporter/pom.xml b/sentinel-extension/sentinel-metric-exporter/pom.xml
index 84dc2334..e02cc518 100644
--- a/sentinel-extension/sentinel-metric-exporter/pom.xml
+++ b/sentinel-extension/sentinel-metric-exporter/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-extension</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     
diff --git a/sentinel-extension/sentinel-parameter-flow-control/pom.xml b/sentinel-extension/sentinel-parameter-flow-control/pom.xml
index 463e60cb..43a349d2 100644
--- a/sentinel-extension/sentinel-parameter-flow-control/pom.xml
+++ b/sentinel-extension/sentinel-parameter-flow-control/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-extension</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-logging/pom.xml b/sentinel-logging/pom.xml
index c461ee48..742510b1 100755
--- a/sentinel-logging/pom.xml
+++ b/sentinel-logging/pom.xml
@@ -6,7 +6,7 @@
     <parent>
         <groupId>com.alibaba.csp</groupId>
         <artifactId>sentinel-parent</artifactId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <artifactId>sentinel-logging</artifactId>
     <packaging>pom</packaging>
diff --git a/sentinel-logging/sentinel-logging-slf4j/pom.xml b/sentinel-logging/sentinel-logging-slf4j/pom.xml
index d897fa48..7e9a2c19 100644
--- a/sentinel-logging/sentinel-logging-slf4j/pom.xml
+++ b/sentinel-logging/sentinel-logging-slf4j/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-logging</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-transport/pom.xml b/sentinel-transport/pom.xml
index 9ec20cc5..0513f9e5 100755
--- a/sentinel-transport/pom.xml
+++ b/sentinel-transport/pom.xml
@@ -6,7 +6,7 @@
     <parent>
         <groupId>com.alibaba.csp</groupId>
         <artifactId>sentinel-parent</artifactId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <artifactId>sentinel-transport</artifactId>
     <description>The transport module of Sentinel</description>
diff --git a/sentinel-transport/sentinel-transport-common/pom.xml b/sentinel-transport/sentinel-transport-common/pom.xml
index d5e12fd6..5fbe5333 100755
--- a/sentinel-transport/sentinel-transport-common/pom.xml
+++ b/sentinel-transport/sentinel-transport-common/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <groupId>com.alibaba.csp</groupId>
         <artifactId>sentinel-transport</artifactId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <packaging>jar</packaging>
diff --git a/sentinel-transport/sentinel-transport-netty-http/pom.xml b/sentinel-transport/sentinel-transport-netty-http/pom.xml
index a830a2d0..6c592ca0 100755
--- a/sentinel-transport/sentinel-transport-netty-http/pom.xml
+++ b/sentinel-transport/sentinel-transport-netty-http/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <groupId>com.alibaba.csp</groupId>
         <artifactId>sentinel-transport</artifactId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>sentinel-transport-netty-http</artifactId>
diff --git a/sentinel-transport/sentinel-transport-simple-http/pom.xml b/sentinel-transport/sentinel-transport-simple-http/pom.xml
index 63fd3e52..63485cb7 100755
--- a/sentinel-transport/sentinel-transport-simple-http/pom.xml
+++ b/sentinel-transport/sentinel-transport-simple-http/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-transport</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/sentinel-transport/sentinel-transport-spring-mvc/pom.xml b/sentinel-transport/sentinel-transport-spring-mvc/pom.xml
index a9a97641..6a91495b 100644
--- a/sentinel-transport/sentinel-transport-spring-mvc/pom.xml
+++ b/sentinel-transport/sentinel-transport-spring-mvc/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sentinel-transport</artifactId>
         <groupId>com.alibaba.csp</groupId>
-        <version>1.8.6</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 


Test patch:
diff --git a/sentinel-core/src/test/java/com/alibaba/csp/sentinel/slots/DefaultSlotChainBuilderTest.java b/sentinel-core/src/test/java/com/alibaba/csp/sentinel/slots/DefaultSlotChainBuilderTest.java
index ecdea6da..9527dc39 100644
--- a/sentinel-core/src/test/java/com/alibaba/csp/sentinel/slots/DefaultSlotChainBuilderTest.java
+++ b/sentinel-core/src/test/java/com/alibaba/csp/sentinel/slots/DefaultSlotChainBuilderTest.java
@@ -18,6 +18,7 @@ package com.alibaba.csp.sentinel.slots;
 import com.alibaba.csp.sentinel.slotchain.AbstractLinkedProcessorSlot;
 import com.alibaba.csp.sentinel.slotchain.ProcessorSlotChain;
 import com.alibaba.csp.sentinel.slots.block.authority.AuthoritySlot;
+import com.alibaba.csp.sentinel.slots.block.degrade.DefaultCircuitBreakerSlot;
 import com.alibaba.csp.sentinel.slots.block.degrade.DegradeSlot;
 import com.alibaba.csp.sentinel.slots.block.flow.FlowSlot;
 import com.alibaba.csp.sentinel.slots.clusterbuilder.ClusterBuilderSlot;
@@ -67,6 +68,9 @@ public class DefaultSlotChainBuilderTest {
         next = next.getNext();
         assertTrue(next instanceof FlowSlot);
 
+        next = next.getNext();
+        assertTrue(next instanceof DefaultCircuitBreakerSlot);
+
         next = next.getNext();
         assertTrue(next instanceof DegradeSlot);
 
diff --git a/sentinel-core/src/test/java/com/alibaba/csp/sentinel/slots/block/degrade/CircuitBreakingIntegrationTest.java b/sentinel-core/src/test/java/com/alibaba/csp/sentinel/slots/block/degrade/CircuitBreakingIntegrationTest.java
index eb9dac79..ebf49077 100755
--- a/sentinel-core/src/test/java/com/alibaba/csp/sentinel/slots/block/degrade/CircuitBreakingIntegrationTest.java
+++ b/sentinel-core/src/test/java/com/alibaba/csp/sentinel/slots/block/degrade/CircuitBreakingIntegrationTest.java
@@ -44,16 +44,17 @@ public class CircuitBreakingIntegrationTest extends AbstractTimeBasedTest {
 
     @Before
     public void setUp() {
-        DegradeRuleManager.loadRules(new ArrayList<DegradeRule>());
+        DegradeRuleManager.loadRules(new ArrayList<>());
     }
 
     @After
-    public void tearDown() throws Exception {
-        DegradeRuleManager.loadRules(new ArrayList<DegradeRule>());
+    public void tearDown() {
+        DegradeRuleManager.loadRules(new ArrayList<>());
+        DefaultCircuitBreakerRuleManager.loadRules(new ArrayList<>());
     }
 
     @Test
-    public void testSlowRequestMode() throws Exception {
+    public void testSlowRequestMode() {
         CircuitBreakerStateChangeObserver observer = mock(CircuitBreakerStateChangeObserver.class);
         setCurrentMillis(System.currentTimeMillis() / 1000 * 1000);
         int retryTimeoutSec = 5;
@@ -115,7 +116,69 @@ public class CircuitBreakingIntegrationTest extends AbstractTimeBasedTest {
     }
 
     @Test
-    public void testExceptionRatioMode() throws Exception {
+    public void testSlowRequestModeUseDefaultRule() {
+        CircuitBreakerStateChangeObserver observer = mock(CircuitBreakerStateChangeObserver.class);
+        setCurrentMillis(System.currentTimeMillis() / 1000 * 1000);
+        int retryTimeoutSec = 5;
+        int maxRt = 50;
+        int statIntervalMs = 20000;
+        int minRequestAmount = 10;
+        String res = "CircuitBreakingIntegrationTest_testSlowRequestModeUseDefaultRule";
+        EventObserverRegistry.getInstance().addStateChangeObserver(res, observer);
+
+        DefaultCircuitBreakerRuleManager.loadRules(Arrays.asList(
+                new DegradeRule(DefaultCircuitBreakerRuleManager.DEFAULT_KEY).setTimeWindow(retryTimeoutSec).setCount(maxRt)
+                        .setStatIntervalMs(statIntervalMs).setMinRequestAmount(minRequestAmount)
+                        .setSlowRatioThreshold(0.8d).setGrade(0)));
+
+        // Try first N requests where N = minRequestAmount.
+        for (int i = 0; i < minRequestAmount; i++) {
+            if (i < 7) {
+                assertTrue(entryAndSleepFor(res, maxRt + ThreadLocalRandom.current().nextInt(10, 20)));
+            } else {
+                assertTrue(entryAndSleepFor(res, maxRt + ThreadLocalRandom.current().nextInt(-20, -10)));
+            }
+        }
+
+        // Till now slow ratio should be 70%.
+        assertTrue(entryAndSleepFor(res, maxRt + ThreadLocalRandom.current().nextInt(10, 20)));
+        assertTrue(entryAndSleepFor(res, maxRt + ThreadLocalRandom.current().nextInt(10, 20)));
+        assertTrue(entryAndSleepFor(res, maxRt + ThreadLocalRandom.current().nextInt(10, 20)));
+        assertTrue(entryAndSleepFor(res, maxRt + ThreadLocalRandom.current().nextInt(10, 20)));
+        assertTrue(entryAndSleepFor(res, maxRt + ThreadLocalRandom.current().nextInt(10, 20)));
+        assertTrue(entryAndSleepFor(res, maxRt + ThreadLocalRandom.current().nextInt(10, 20)));
+        // Circuit breaker has transformed to OPEN since here.
+        verify(observer)
+                .onStateChange(eq(State.CLOSED), eq(State.OPEN), any(DegradeRule.class), anyDouble());
+        assertEquals(State.OPEN, DefaultCircuitBreakerRuleManager.getDefaultCircuitBreakers(res).get(0).currentState());
+        assertFalse(entryAndSleepFor(res, 1));
+
+        sleepSecond(1);
+        assertFalse(entryAndSleepFor(res, 1));
+        sleepSecond(retryTimeoutSec);
+        // Test HALF-OPEN to OPEN.
+        assertTrue(entryAndSleepFor(res, maxRt + ThreadLocalRandom.current().nextInt(10, 20)));
+
+        verify(observer)
+                .onStateChange(eq(State.OPEN), eq(State.HALF_OPEN), any(DegradeRule.class), nullable(Double.class));
+        verify(observer)
+                .onStateChange(eq(State.HALF_OPEN), eq(State.OPEN), any(DegradeRule.class), anyDouble());
+        // Wait for next retry timeout;
+        reset(observer);
+        sleepSecond(retryTimeoutSec + 1);
+        assertTrue(entryAndSleepFor(res, maxRt - ThreadLocalRandom.current().nextInt(10, 20)));
+        verify(observer)
+                .onStateChange(eq(State.OPEN), eq(State.HALF_OPEN), any(DegradeRule.class), nullable(Double.class));
+        verify(observer)
+                .onStateChange(eq(State.HALF_OPEN), eq(State.CLOSED), any(DegradeRule.class), nullable(Double.class));
+        // Now circuit breaker has been closed.
+        assertTrue(entryAndSleepFor(res, maxRt + ThreadLocalRandom.current().nextInt(10, 20)));
+
+        EventObserverRegistry.getInstance().removeStateChangeObserver(res);
+    }
+
+    @Test
+    public void testExceptionRatioMode() {
         CircuitBreakerStateChangeObserver observer = mock(CircuitBreakerStateChangeObserver.class);
         setCurrentMillis(System.currentTimeMillis() / 1000 * 1000);
         int retryTimeoutSec = 5;
@@ -169,7 +232,7 @@ public class CircuitBreakingIntegrationTest extends AbstractTimeBasedTest {
     }
 
     @Test
-    public void testExceptionCountMode() throws Throwable {
+    public void testExceptionCountMode() {
         // TODO
     }
     
@@ -188,7 +251,7 @@ public class CircuitBreakingIntegrationTest extends AbstractTimeBasedTest {
     }
     
     @Test
-    public void testMultipleHalfOpenedBreakers() throws Exception {
+    public void testMultipleHalfOpenedBreakers() {
         CircuitBreakerStateChangeObserver observer = mock(CircuitBreakerStateChangeObserver.class);
         setCurrentMillis(System.currentTimeMillis() / 1000 * 1000);
         int retryTimeoutSec = 2;
diff --git a/sentinel-core/src/test/java/com/alibaba/csp/sentinel/slots/block/degrade/DefaultCircuitBreakerRuleManagerTest.java b/sentinel-core/src/test/java/com/alibaba/csp/sentinel/slots/block/degrade/DefaultCircuitBreakerRuleManagerTest.java
new file mode 100644
index 00000000..13c9a605
--- /dev/null
+++ b/sentinel-core/src/test/java/com/alibaba/csp/sentinel/slots/block/degrade/DefaultCircuitBreakerRuleManagerTest.java
@@ -0,0 +1,228 @@
+/*
+ * Copyright 1999-2022 Alibaba Group Holding Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.alibaba.csp.sentinel.slots.block.degrade;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import com.alibaba.csp.sentinel.slots.block.RuleConstant;
+import com.alibaba.csp.sentinel.slots.block.degrade.circuitbreaker.CircuitBreaker;
+import com.alibaba.csp.sentinel.slots.block.degrade.circuitbreaker.CircuitBreakerStrategy;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+
+/**
+ * @author Eric Zhao
+ */
+public class DefaultCircuitBreakerRuleManagerTest {
+
+    private final String RESOURCE_NAME = "method_";
+
+    @Before
+    public void setUp() throws Exception {
+        List<DegradeRule> rules = new ArrayList<DegradeRule>();
+        DegradeRule rule = new DegradeRule(DefaultCircuitBreakerRuleManager.DEFAULT_KEY)
+            .setGrade(CircuitBreakerStrategy.SLOW_REQUEST_RATIO.getType())
+            .setCount(50)
+            .setTimeWindow(10)
+            .setSlowRatioThreshold(0.6)
+            .setMinRequestAmount(100)
+            .setStatIntervalMs(20000);
+        assertTrue(DegradeRuleManager.isValidRule(rule));
+        rules.add(rule);
+        DefaultCircuitBreakerRuleManager.loadRules(rules);
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        DefaultCircuitBreakerRuleManager.loadRules(new ArrayList<DegradeRule>());
+        DegradeRuleManager.loadRules(new ArrayList<DegradeRule>());
+    }
+
+    @Test
+    public void testIsValidRule() {
+        DegradeRule rule1 = new DegradeRule("xx")
+            .setCount(0.1d)
+            .setGrade(RuleConstant.DEGRADE_GRADE_EXCEPTION_RATIO)
+            .setTimeWindow(2);
+
+        DegradeRule rule2 = new DegradeRule(DefaultCircuitBreakerRuleManager.DEFAULT_KEY)
+            .setCount(0.1d)
+            .setGrade(RuleConstant.DEGRADE_GRADE_EXCEPTION_RATIO)
+            .setTimeWindow(2);
+
+        assertFalse(DefaultCircuitBreakerRuleManager.isValidDefaultRule(rule1));
+        assertTrue(DefaultCircuitBreakerRuleManager.isValidDefaultRule(rule2));
+    }
+
+    @Test
+    public void testGetDefaultCircuitBreakers() {
+        String resourceName = RESOURCE_NAME + "I";
+
+        assertFalse(DegradeRuleManager.hasConfig(resourceName));
+
+        List<CircuitBreaker> defaultCircuitBreakers1 = DefaultCircuitBreakerRuleManager.getDefaultCircuitBreakers(
+            resourceName);
+        assertNotNull(defaultCircuitBreakers1);
+
+        List<CircuitBreaker> defaultCircuitBreakers2 = DefaultCircuitBreakerRuleManager.getDefaultCircuitBreakers(
+            resourceName);
+        assertSame(defaultCircuitBreakers1, defaultCircuitBreakers2);
+    }
+
+    @Test
+    public void testGetDefaultCircuitBreakersWhileAddingCustomizedRule() {
+        String resourceNameI = RESOURCE_NAME + "I";
+        List<DegradeRule> rules = new ArrayList<DegradeRule>();
+        DegradeRule rule = new DegradeRule(resourceNameI)
+            .setGrade(CircuitBreakerStrategy.SLOW_REQUEST_RATIO.getType())
+            .setCount(50)
+            .setTimeWindow(10)
+            .setSlowRatioThreshold(0.6)
+            .setMinRequestAmount(100)
+            .setStatIntervalMs(20000);
+        rules.add(rule);
+        DegradeRuleManager.loadRules(rules);
+
+        assertTrue(DegradeRuleManager.hasConfig(resourceNameI));
+
+        String resourceNameII = RESOURCE_NAME + "II";
+        List<DegradeRule> rules2 = new ArrayList<DegradeRule>();
+        DegradeRule rule2 = new DegradeRule(resourceNameII)
+            .setGrade(CircuitBreakerStrategy.SLOW_REQUEST_RATIO.getType())
+            .setCount(50)
+            .setTimeWindow(10)
+            .setSlowRatioThreshold(0.6)
+            .setMinRequestAmount(100)
+            .setStatIntervalMs(20000);
+        rules2.add(rule2);
+        DegradeRuleManager.loadRules(rules2);
+        assertFalse(DegradeRuleManager.hasConfig(resourceNameI));
+        assertNotNull(DefaultCircuitBreakerRuleManager.getDefaultCircuitBreakers(resourceNameI));
+
+        DegradeRuleManager.loadRules(rules);
+        DefaultCircuitBreakerRuleManager.addExcludedResource(resourceNameII);
+        assertFalse(DegradeRuleManager.hasConfig(resourceNameII));
+        assertNull(DefaultCircuitBreakerRuleManager.getDefaultCircuitBreakers(resourceNameII));
+
+    }
+
+    @Test
+    public void testGetDefaultCircuitBreakersWhileRemovingCustomizedRule() {
+        String resourceNameI = RESOURCE_NAME + "I";
+        DefaultCircuitBreakerRuleManager.addExcludedResource(resourceNameI);
+        List<DegradeRule> rules = new ArrayList<DegradeRule>();
+        DegradeRule rule = new DegradeRule(resourceNameI)
+            .setGrade(CircuitBreakerStrategy.SLOW_REQUEST_RATIO.getType())
+            .setCount(50)
+            .setTimeWindow(10)
+            .setSlowRatioThreshold(0.6)
+            .setMinRequestAmount(100)
+            .setStatIntervalMs(20000);
+        rules.add(rule);
+        DegradeRuleManager.loadRules(rules);
+
+        assertTrue(DegradeRuleManager.hasConfig(resourceNameI));
+        assertNull(DefaultCircuitBreakerRuleManager.getDefaultCircuitBreakers(resourceNameI));
+
+        //remove customized rule and do not recover default rule
+        List<DegradeRule> rules2 = new ArrayList<DegradeRule>();
+        DegradeRuleManager.loadRules(rules2);
+        assertFalse(DegradeRuleManager.hasConfig(resourceNameI));
+        assertNull(DefaultCircuitBreakerRuleManager.getDefaultCircuitBreakers(resourceNameI));
+
+        //recover default rule
+        DefaultCircuitBreakerRuleManager.removeExcludedResource(resourceNameI);
+        assertFalse(DegradeRuleManager.hasConfig(resourceNameI));
+        assertNotNull(DefaultCircuitBreakerRuleManager.getDefaultCircuitBreakers(resourceNameI));
+
+    }
+
+    @Test
+    public void testLoadRules() {
+        DegradeRule rule = mock(DegradeRule.class);
+        List<DegradeRule> ruleList = new ArrayList<DegradeRule>();
+        ruleList.add(rule);
+        assertTrue(DefaultCircuitBreakerRuleManager.loadRules(ruleList));
+        assertFalse(DefaultCircuitBreakerRuleManager.loadRules(ruleList));
+    }
+
+    @Test
+    public void testLoadRulesUseDifferentCircuitBreakers() throws Exception {
+        String resA = "resA";
+        String resB = "resB";
+        List<CircuitBreaker> cbsForResourceA = DefaultCircuitBreakerRuleManager.getDefaultCircuitBreakers(resA);
+        assertNotNull(cbsForResourceA);
+        List<CircuitBreaker> cbsForResourceB = DefaultCircuitBreakerRuleManager.getDefaultCircuitBreakers(resB);
+        assertNotNull(cbsForResourceB);
+        assertNotEquals(cbsForResourceA, cbsForResourceB);
+        Field cbsField;
+        try {
+            cbsField = DefaultCircuitBreakerRuleManager.class.getDeclaredField("circuitBreakers");
+        } catch (NoSuchFieldException e) {
+            e.printStackTrace();
+            throw new Exception();
+        }
+        cbsField.setAccessible(true);
+        Map<String, List<CircuitBreaker>> cbs = (Map<String, List<CircuitBreaker>>) cbsField.get(
+            DefaultCircuitBreakerRuleManager.class);
+        assertEquals(2, cbs.size());
+
+        List<DegradeRule> rules = new ArrayList<DegradeRule>();
+        DegradeRule rule = new DegradeRule(DefaultCircuitBreakerRuleManager.DEFAULT_KEY)
+            //rule is different in strategy
+            .setGrade(CircuitBreakerStrategy.ERROR_RATIO.getType())
+            .setCount(0.1d)
+            .setTimeWindow(10)
+            .setSlowRatioThreshold(0.6)
+            .setMinRequestAmount(100)
+            .setStatIntervalMs(20000);
+        assertTrue(DegradeRuleManager.isValidRule(rule));
+        rules.add(rule);
+        DefaultCircuitBreakerRuleManager.loadRules(rules);
+        try {
+            cbsField = DefaultCircuitBreakerRuleManager.class.getDeclaredField("circuitBreakers");
+        } catch (NoSuchFieldException e) {
+            e.printStackTrace();
+            throw new Exception();
+        }
+        cbsField.setAccessible(true);
+        Map<String, List<CircuitBreaker>> newCbs = (Map<String, List<CircuitBreaker>>) cbsField.get(
+            DefaultCircuitBreakerRuleManager.class);
+        assertEquals(2, newCbs.size());
+        assertNotEquals(cbs, newCbs);
+
+        List<CircuitBreaker> resACbs = newCbs.get(resA);
+        assertNotNull(resACbs);
+        List<CircuitBreaker> resBCbs = newCbs.get(resB);
+        assertNotNull(resBCbs);
+        assertNotEquals(resACbs, resBCbs);
+    }
+
+}
diff --git a/sentinel-core/src/test/java/com/alibaba/csp/sentinel/slots/block/degrade/DefaultCircuitBreakerSlotTest.java b/sentinel-core/src/test/java/com/alibaba/csp/sentinel/slots/block/degrade/DefaultCircuitBreakerSlotTest.java
new file mode 100644
index 00000000..74481d38
--- /dev/null
+++ b/sentinel-core/src/test/java/com/alibaba/csp/sentinel/slots/block/degrade/DefaultCircuitBreakerSlotTest.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright 1999-2022 Alibaba Group Holding Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.alibaba.csp.sentinel.slots.block.degrade;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+
+import com.alibaba.csp.sentinel.EntryType;
+import com.alibaba.csp.sentinel.context.Context;
+import com.alibaba.csp.sentinel.slotchain.ResourceWrapper;
+import com.alibaba.csp.sentinel.slotchain.StringResourceWrapper;
+import com.alibaba.csp.sentinel.slots.block.degrade.circuitbreaker.CircuitBreakerStrategy;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.mockito.Mockito.mock;
+
+/**
+ * @author Eric Zhao
+ */
+public class DefaultCircuitBreakerSlotTest {
+
+    @Before
+    public void setUp() throws Exception {
+        List<DegradeRule> rules = new ArrayList<DegradeRule>();
+        DegradeRule rule = new DegradeRule(DefaultCircuitBreakerRuleManager.DEFAULT_KEY)
+                .setGrade(CircuitBreakerStrategy.SLOW_REQUEST_RATIO.getType())
+                .setCount(50)
+                .setTimeWindow(10)
+                .setSlowRatioThreshold(0.6)
+                .setMinRequestAmount(100)
+                .setStatIntervalMs(20000);
+        rules.add(rule);
+        DefaultCircuitBreakerRuleManager.loadRules(rules);
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        DefaultCircuitBreakerRuleManager.loadRules(new ArrayList<DegradeRule>());
+    }
+
+    @Test
+    public void testPerformChecking() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
+        DefaultCircuitBreakerSlot defaultCircuitBreakerSlot = mock(DefaultCircuitBreakerSlot.class);
+        Context context = mock(Context.class);
+        String resA = "resA";
+        Method pCMethod = DefaultCircuitBreakerSlot.class.getDeclaredMethod("performChecking", Context.class, ResourceWrapper.class);
+        pCMethod.setAccessible(true);
+        pCMethod.invoke(defaultCircuitBreakerSlot, context, new StringResourceWrapper(resA, EntryType.IN));
+    }
+
+}
diff --git a/sentinel-core/src/test/java/com/alibaba/csp/sentinel/spi/SpiLoaderTest.java b/sentinel-core/src/test/java/com/alibaba/csp/sentinel/spi/SpiLoaderTest.java
index 7eb8f13e..2aa1c921 100644
--- a/sentinel-core/src/test/java/com/alibaba/csp/sentinel/spi/SpiLoaderTest.java
+++ b/sentinel-core/src/test/java/com/alibaba/csp/sentinel/spi/SpiLoaderTest.java
@@ -22,6 +22,7 @@ import com.alibaba.csp.sentinel.slotchain.ProcessorSlot;
 import com.alibaba.csp.sentinel.slotchain.SlotChainBuilder;
 import com.alibaba.csp.sentinel.slots.DefaultSlotChainBuilder;
 import com.alibaba.csp.sentinel.slots.block.authority.AuthoritySlot;
+import com.alibaba.csp.sentinel.slots.block.degrade.DefaultCircuitBreakerSlot;
 import com.alibaba.csp.sentinel.slots.block.degrade.DegradeSlot;
 import com.alibaba.csp.sentinel.slots.block.flow.FlowSlot;
 import com.alibaba.csp.sentinel.slots.clusterbuilder.ClusterBuilderSlot;
@@ -29,6 +30,7 @@ import com.alibaba.csp.sentinel.slots.logger.LogSlot;
 import com.alibaba.csp.sentinel.slots.nodeselector.NodeSelectorSlot;
 import com.alibaba.csp.sentinel.slots.statistic.StatisticSlot;
 import com.alibaba.csp.sentinel.slots.system.SystemSlot;
+
 import org.junit.Before;
 import org.junit.Test;
 
@@ -98,13 +100,14 @@ public class SpiLoaderTest {
         prototypeSlotClasses.add(NodeSelectorSlot.class);
         prototypeSlotClasses.add(ClusterBuilderSlot.class);
 
-        List<Class<? extends ProcessorSlot>> singletonSlotClasses = new ArrayList<>(6);
+        List<Class<? extends ProcessorSlot>> singletonSlotClasses = new ArrayList<>(7);
         singletonSlotClasses.add(LogSlot.class);
         singletonSlotClasses.add(StatisticSlot.class);
         singletonSlotClasses.add(AuthoritySlot.class);
         singletonSlotClasses.add(SystemSlot.class);
         singletonSlotClasses.add(FlowSlot.class);
         singletonSlotClasses.add(DegradeSlot.class);
+        singletonSlotClasses.add(DefaultCircuitBreakerSlot.class);
 
         for (int i = 0; i < slots1.size(); i++) {
             ProcessorSlot slot1 = slots1.get(i);
@@ -148,7 +151,7 @@ public class SpiLoaderTest {
         assertNotNull(sortedSlots);
 
         // Total 8 default slot in sentinel-core
-        assertEquals(8, sortedSlots.size());
+        assertEquals(9, sortedSlots.size());
 
         // Verify the order of slot
         int index = 0;
@@ -159,6 +162,7 @@ public class SpiLoaderTest {
         assertTrue(sortedSlots.get(index++) instanceof AuthoritySlot);
         assertTrue(sortedSlots.get(index++) instanceof SystemSlot);
         assertTrue(sortedSlots.get(index++) instanceof FlowSlot);
+        assertTrue(sortedSlots.get(index++) instanceof DefaultCircuitBreakerSlot);
         assertTrue(sortedSlots.get(index++) instanceof DegradeSlot);
     }
 
@@ -176,7 +180,7 @@ public class SpiLoaderTest {
         ProcessorSlot slot = SpiLoader.of(ProcessorSlot.class).loadLowestPriorityInstance();
         assertNotNull(slot);
 
-        // NodeSelectorSlot is lowest order priority with @Spi(order = -1000) among all slots
+        // DegradeSlot is lowest order priority with @Spi(order = -1000) among all slots
         assertTrue(slot instanceof DegradeSlot);
     }
 
@@ -218,7 +222,8 @@ public class SpiLoaderTest {
 
     @Test
     public void testLoadInstanceByAliasName() {
-        ProcessorSlot slot = SpiLoader.of(ProcessorSlot.class).loadInstance("com.alibaba.csp.sentinel.slots.statistic.StatisticSlot");
+        ProcessorSlot slot = SpiLoader.of(ProcessorSlot.class).loadInstance(
+            "com.alibaba.csp.sentinel.slots.statistic.StatisticSlot");
         assertNotNull(slot);
         assertTrue(slot instanceof StatisticSlot);
     }
@@ -227,7 +232,7 @@ public class SpiLoaderTest {
     public void testToString() {
         SpiLoader spiLoader = SpiLoader.of(ProcessorSlot.class);
         assertEquals("com.alibaba.csp.sentinel.spi.SpiLoader[com.alibaba.csp.sentinel.slotchain.ProcessorSlot]"
-                , spiLoader.toString());
+            , spiLoader.toString());
     }
 
     /**