W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
減少注冊中心上服務的注冊數(shù)據(jù)
Dubbo provider 中的服務配置項有接近 30 個配置項。 排除注冊中心服務治理需要之外,很大一部分配置項是 provider 自己使用,不需要透傳給消費者。這部分數(shù)據(jù)不需要進入注冊中心,而只需要以 key-value 形式持久化存儲。
Dubbo consumer 中的配置項也有 20+個配置項。在注冊中心之中,服務消費者列表中只需要關注 application,version,group,ip,dubbo 版本等少量配置,其他配置也可以以 key-value 形式持久化存儲。
這些數(shù)據(jù)是以服務為維度注冊進入注冊中心,導致了數(shù)據(jù)量的膨脹,進而引發(fā)注冊中心(如 zookeeper)的網(wǎng)絡開銷增大,性能降低。
當前現(xiàn)狀一個簡單展示。通過這個展示,分析下為什么需要做簡化配置。
參考 sample 子工程: dubbo-samples-simplified-registry/dubbo-samples-simplified-registry-nosimple (跑 sample 前,先跑下 ZKClean 進行配置項清理)
dubbo-provider.xml配置
<dubbo:application name="simplified-registry-nosimple-provider"/> <dubbo:registry address="zookeeper://127.0.0.1:2181"/> <bean id="demoService" class="org.apache.dubbo.samples.simplified.registry.nosimple.impl.DemoServiceImpl"/> <dubbo:service async="true" interface="org.apache.dubbo.samples.simplified.registry.nosimple.api.DemoService" version="1.2.3" group="dubbo-simple" ref="demoService" executes="4500" retries="7" owner="vict" timeout="5300"/>
啟動 provider 的 main 方法之后,查看 zookeeper 的葉子節(jié)點(路徑為:/dubbo/org.apache.dubbo.samples.simplified.registry.nosimple.api.DemoService/providers 目錄下)的內(nèi)容如下:
dubbo%3A%2F%2F30.5.124.158%3A20880%2Forg.apache.dubbo.samples.simplified.registry.nosimple.api.DemoService %3Fanyhost%3Dtrue%26application%3Dsimplified-registry-xml-provider%26async%3Dtrue%26dubbo%3D 2.0.2%26**executes**%3D4500%26generic%3Dfalse%26group%3Ddubbo-simple%26interface%3D org.apache.dubbo.samples.simplified.registry.nosimple.api.DemoService%26methods%3D sayHello%26**owner**%3Dvict%26pid%3D2767%26**retries**%3D7%26revision%3D1.2.3%26side%3D provider%26**timeout**%3D5300%26timestamp%3D1542361152795%26valid%3Dtrue%26version%3D1.2.3
從加粗字體中能看到有:executes, retries, owner, timeout。但是這些字段不是每個都需要傳遞給 dubbo ops 或者 dubbo consumer。 同樣的,consumer 也有這個問題,可以在例子中啟動 Consumer 的 main 方法進行查看。
期望簡化進入注冊中心的 provider 和 consumer 配置數(shù)量。 期望將部分配置項以其他形式存儲。這些配置項需要滿足:不在服務調(diào)用鏈路上,同時這些配置項不在注冊中心的核心鏈路上(服務查詢,服務列表)。
簡化注冊中心的配置,只在 2.7 之后的版本中進行支持。 開啟 provider 或者 consumer 簡化配置之后,默認保留的配置項如下:
provider:
Constant Key | Key | remark |
---|---|---|
APPLICATION_KEY | application | |
CODEC_KEY | codec | |
EXCHANGER_KEY | exchanger | |
SERIALIZATION_KEY | serialization | |
CLUSTER_KEY | cluster | |
CONNECTIONS_KEY | connections | |
DEPRECATED_KEY | deprecated | |
GROUP_KEY | group | |
LOADBALANCE_KEY | loadbalance | |
MOCK_KEY | mock | |
PATH_KEY | path | |
TIMEOUT_KEY | timeout | |
TOKEN_KEY | token | |
VERSION_KEY | version | |
WARMUP_KEY | warmup | |
WEIGHT_KEY | weight | |
TIMESTAMP_KEY | timestamp | |
DUBBO_VERSION_KEY | dubbo | |
SPECIFICATION_VERSION_KEY | specVersion | 新增,用于表述dubbo版本,如2.7.0 |
consumer:
Constant Key | Key | remark |
---|---|---|
APPLICATION_KEY | application | |
VERSION_KEY | version | |
GROUP_KEY | group | |
DUBBO_VERSION_KEY | dubbo | |
SPECIFICATION_VERSION_KEY | specVersion | 新增,用于表述dubbo版本,如2.7.0 |
Constant Key 表示來自于類 org.apache.dubbo.common.Constants 的字段。
下面介紹幾種常用的使用方式。所有的 sample,都可以查看sample-2.7
sample 在 dubbo-samples-simplified-registry/dubbo-samples-simplified-registry-xml 工程下 (跑 sample 前,先跑下ZKClean 進行配置項清理)
dubbo.properties
dubbo.registry.simplified=true dubbo.registry.extra-keys=retries,owner
怎么去驗證呢?
provider端配置
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://dubbo.apache.org/schema/dubbo" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"> <!-- optional --> <dubbo:application name="simplified-registry-xml-provider"/> <dubbo:registry address="zookeeper://127.0.0.1:2181"/> <bean id="demoService" class="org.apache.dubbo.samples.simplified.registry.nosimple.impl.DemoServiceImpl"/> <dubbo:service async="true" interface="org.apache.dubbo.samples.simplified.registry.nosimple.api.DemoService" version="1.2.3" group="dubbo-simple" ref="demoService" executes="4500" retries="7" owner="vict" timeout="5300"/> </beans>
得到的 zookeeper 的葉子節(jié)點的值如下:
dubbo%3A%2F%2F30.5.124.149%3A20880%2Forg.apache.dubbo.samples.simplified.registry.nosimple.api.DemoService%3F application%3Dsimplified-registry-xml-provider%26dubbo%3D2.0.2%26group%3Ddubbo-simple%26**owner**%3D vict%26**retries**%3D7%26**timeout**%3D5300%26timestamp%3D1542594503305%26version%3D1.2.3
和上面的現(xiàn)有功能 sample進行對比,上面的 sample 中,executes, retries, owner, timeout 四個配置項都進入了注冊中心。但是本實例不是:
總結(jié):timeout,retries,owner 進入了注冊中心,而 executes 沒有進入。
consumer 端配置
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://dubbo.apache.org/schema/dubbo" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"> <!-- optional --> <dubbo:application name="simplified-registry-xml-consumer"/> <dubbo:registry address="zookeeper://127.0.0.1:2181" username="xxx" password="yyy" check="true"/> <dubbo:reference id="demoService" interface="org.apache.dubbo.samples.simplified.registry.nosimple.api.DemoService" owner="vvv" retries="4" actives="6" timeout="4500" version="1.2.3" group="dubbo-simple"/> </beans>
得到的 zookeeper 的葉子節(jié)點的值如下:
consumer%3A%2F%2F30.5.124.149%2Forg.apache.dubbo.samples.simplified.registry.nosimple.api.DemoService%3F actives%3D6%26application%3Dsimplified-registry-xml-consumer%26category%3D consumers%26check%3Dfalse%26dubbo%3D2.0.2%26group%3Ddubbo-simple%26owner%3Dvvv%26version%3D1.2.3
sample在dubbo-samples-simplified-registry/dubbo-samples-simplified-registry-annotation 工程下 (跑 sample 前,先跑下ZKClean 進行配置項清理)
privide 端 bean 配置:
// 等同于dubbo.properties配置,用@Bean形式進行配置 @Bean public RegistryConfig registryConfig() { RegistryConfig registryConfig = new RegistryConfig(); registryConfig.setAddress("zookeeper://127.0.0.1:2181"); registryConfig.setSimplified(true); registryConfig.setExtraKeys("retries,owner"); return registryConfig; }
// 暴露服務 @Service(version = "1.1.8", group = "d-test", executes = 4500, retries = 7, owner = "victanno", timeout = 5300) public class AnnotationServiceImpl implements AnnotationService { @Override public String sayHello(String name) { System.out.println("async provider received: " + name); return "annotation: hello, " + name; } }
和上面 sample 中的 dubbo.properties 的效果是一致的。結(jié)果如下:
總結(jié):timeout,retries,owner 進入了注冊中心,而 executes 沒有進入。
consumer 端 bean 配置:
@Bean public RegistryConfig registryConfig() { RegistryConfig registryConfig = new RegistryConfig(); registryConfig.setAddress("zookeeper://127.0.0.1:2181"); registryConfig.setSimplified(true); return registryConfig; }
消費服務:
@Component("annotationAction") public class AnnotationAction { @Reference(version = "1.1.8", group = "d-test", owner = "vvvanno", retries = 4, actives = 6, timeout = 4500) private AnnotationService annotationService; public String doSayHello(String name) { return annotationService.sayHello(name); } }
和上面 sample 中 consumer 端的配置是一樣的。結(jié)果如下:
如果一個應用中既有provider又有consumer,那么配置需要合并成:
@Bean public RegistryConfig registryConfig() { RegistryConfig registryConfig = new RegistryConfig(); registryConfig.setAddress("zookeeper://127.0.0.1:2181"); registryConfig.setSimplified(true); //只對provider生效 registryConfig.setExtraKeys("retries,owner"); return registryConfig; }
本版本還保留了大量的配置項,接下來的版本中,會逐漸刪除所有的配置項。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: