RSF-Center,集羣模式下-協調數據結構

    RSF是一個輕量化的分佈式服務框架。支持點對點調用,也支持分佈式調用。典型的應用場景是,將同一個服務部署在多個Server上提供 request、response 消息通知。它的設計思想是:經過Netty實現對自有協議數據交互的封裝,支持高併發、高可靠的分佈式RPC框架,設計原理參考了淘寶HSF。 java

    RSF設計:http://my.oschina.net/u/1166271/blog/316686
    註冊中心設計:http://my.oschina.net/u/1166271/blog/477190
    RSF源碼地址:http://git.oschina.net/zycgit/rsf,本文中衆多範本配置均來自與源碼中的實際案例。 git

    本文主要介紹,RSF註冊中心在集羣模式下維護的 ZooKeeper節點數據結構,相信有了這個數據結構就不須要太費口舌去介紹RSF註冊中心集羣模式下如何管理集羣數據了。 shell

1、RSF-Center維護的 ZooKeeper 目錄結構

/rsf-center --------------------------- RSF-Center
    /servers -------------------------- 註冊中心集羣列表
        /192.168.1.11:2180 ------------ 服務器IP:消息通訊端口
        /info ------------------------- 詳細信息
        /auth ------------------------- 認證祕鑰,用來防止集羣以外的機器利用RSF傳輸協議僞造消息
        /version ---------------------- rsf-center版本
        /heartbeat -------------------- 服務器狀態(用來表示服務器狀態,在線仍是離線等)
    /leader --------------------------- Leader是誰
    /services ------------------------- 服務信息
        /group ------------------------ 服務所屬分組
            /name --------------------- 服務名稱
                /version -------------- 服務版本
                    /info ------------- 服務信息
                    /provider --------- 提供者列表
                        /192.168.1.11:2180
                        /192.168.1.11:2180
                        /192.168.1.11:2180
                    /consumer --------- 消費者列表
                        /192.168.1.11:2180
                        /192.168.1.11:2180
                        /192.168.1.11:2180
                    /flowcontrol ------ 流控規則
                    /rule ------------- 路由規則
                        /args-level --- 參數級路由規則
                        /method-level - 方法級路由規則
                        /service-level  服務級路由規則
    /config --------------------------- 默認規則設置
        /flowcontrol ------------------ 默認流控規則
        /rule ------------------------- 默認路由規則
            /args-level --------------- 參數級路由規則
            /method-level ------------- 方法級路由規則
            /service-level ------------ 服務級路由規則

2、註冊中心服務器數據

節點:/rsf-center/servers/192.168.1.11:2180/info
    該節點是用來保存,RSF-Center的信息,主要列出了註冊中心服務器的工做模式以及必要的端口數據。 服務器

<info>
    <workMode>master</workMode>					<!-- 工做模式:Master、Slave、Alone -->
    <inetAddress>192.168.1.11</inetAddress>			<!-- 註冊中心地址,RSF客戶端鏈接到這個地址 -->
    <rsf.bindPort>2180</rsf.bindPort>				<!-- 註冊中心端口,RSF客戶端鏈接到這個端口 -->
    <zooKeeper.sid>0</zooKeeper.sid>				<!-- 集羣中sid -->
    <zooKeeper.bindPort>2181</zooKeeper.bindPort>		<!-- 集羣中用於zk信息傳輸的端口 -->
    <zooKeeper.electionPort>2182</zooKeeper.electionPort>	<!-- 集羣中用於zk選舉的端口 -->
</info>

節點:/rsf-center/servers/192.168.1.11:2180/auth
    內容是一段隨機字符串,RSF-Center在接收來自其它RSF-Center的數據包時會使用該字符串進行校驗。 數據結構

xsfasjnfasldjhasdfiffaj
節點:/rsf-center/servers/192.168.1.11:2180/version
    表示註冊中心的程序版本
1.0.0

節點:/rsf-center/servers/192.168.1.11:2180/heartbeat
    表示最後一次該註冊中心在線時的心跳時間
併發

2016-02-02-22:22:22

節點:/rsf-center/leader
    表示當前Leader服務器是誰,做爲leader,負責一些重要的寫操做。 框架

192.168.1.11:2180

3、註冊中心服務信息數據

節點:/rsf-center/services/group/name/version/info
    假若有一個RSF服務,所屬分組爲:RSF,服務名稱爲:org.hasor.test.HelloWord,服務版本爲:1.0.0。那麼它的節點路徑是:
    /rsf-center/services/RSF/org.hasor.test.HelloWord/1.0.0/info
dom

<info>
    <bindID>[RSF]-org.hasor.test.HelloWord-1.0</bindID>	<!-- BindID -->
    <group>RSF</group>					<!-- Group -->
    <name>org.hasor.test.HelloWord</name>		<!-- Name -->
    <version>1.0</version>				<!-- Version -->
    <bindType>org.hasor.test.HelloWord</bindTypen>	<!-- Type -->
    <serviceList>					<!-- 接口信息 -->
        <method>org.hasor.test.HelloWord.hello(String,Long)</method>
        <method>org.hasor.test.HelloWord.hello(String,Long)</method>
        <method>org.hasor.test.HelloWord.hello(String,Long)</method>
    </serviceList>
</info>

節點:/rsf-center/services/group/name/version/provider/192.168.1.11:2180
    該節點是表示服務的提供者,假若有兩個服務提供者,就會有兩個這樣的節點。不一樣的是,對應最後一個節點的地址會不同。節點的數據內容格式以下:
分佈式

<info>
    <serializeType>java</serializeType>		<!-- 傳輸序列化協議 -->
    <client.timeout>6000</client.timeout>	<!-- rsf調用超時時間-->
    <queue.maxSize>4096</queue.maxSize>		<!-- 最大服務處理隊列長度 -->
</info>

節點:/rsf-center/services/group/name/version/consumer/192.168.1.11:2180
    該節點是表示服務的消費者,假若有多個服務提供者,就會有多個這樣的節點。不一樣的是,對應最後一個節點的地址會不同。節點的數據內容格式以下:
ide

<info>
    <serializeType>java</serializeType>			<!-- 傳輸序列化協議 -->
    <client.timeout>6000</client.timeout>		<!-- rsf調用超時時間-->
    <client.maximumRequest>200</client.maximumRequest>	<!-- 最大併發請求數 -->
</info>

節點:/rsf-center/services/group/name/version/flowcontrol
    該節點是用來保存服務自身的個性化流控規則配置信息,流控配置範本以下:

<controlSet>
    <!-- 單元化規則 -->
    <flowControl enable="true" type="unit">
        <threshold>0.3</threshold>			<!-- 本地機房佔比低於這個數時啓用跨機房 -->
        <exclusions>172.23.*,172.19.*</exclusions>	<!-- 當本機IP屬於下面這個網段時則不生效 -->
    </flowControl>
    <!-- 服務地址選取規則 -->
    <flowControl enable="true" type="random">
    </flowControl>
    <!-- QoS流量控制規則 -->
    <flowControl enable="true" type="Speed">
        <action>service</action>			<!-- 速率控制方式:每服務、每方法、每地址 -->
        <rate>5</rate>					<!-- 穩態速率 -->
        <peak>100</peak>				<!-- 峯值速率 -->
        <timeWindow>10</timeWindow>			<!-- 時間窗口 -->
    </flowControl>
</controlSet>

節點:/rsf-center/services/group/name/version/rule/service-level
    該節點是用來配置服務路由規則腳本,服務級,下面是腳本範本,腳本語言爲:groovy

def List<String> evalAddress(String serviceID,List<String> allAddress)  {
    //
    //[RSF]sorg.mytest.FooFacse-1.0.0 ---- Group=RSF, Name=sorg.mytest.FooFacse, Version=1.0.0
    if ( serviceID == "[RSF]test.net.hasor.rsf.services.EchoService-1.0.0" ) {
        return [
            "192.168.137.10:8000",
            "192.168.137.11:8000"
        ]
    }
    return null
}
節點:/rsf-center/services/group/name/version/rule/method-level
    該節點是用來配置服務路由規則腳本,方法級,下面是腳本範本,腳本語言爲:groovy
def Map<String,List<String>> evalAddress(String serviceID,List<String> allAddress)  {
    //
    //[RSF]sorg.mytest.FooFacse-1.0.0 ---- Group=RSF, Name=sorg.mytest.FooFacse, Version=1.0.0
    if ( serviceID == "[RSF]test.net.hasor.rsf.services.EchoService-1.0.0" ) {
        return [
            "sayEcho":[
                "192.168.137.10:8000",
                "192.168.137.11:8000"
            ],
            "testUserTag":[
                "192.168.2.3:8000",
                "192.168.3.4:8000",
                "192.168.4.5:8000"
            ]
        ]
    }
    return null
}


節點:/rsf-center/services/group/name/version/rule/args-level
    該節點是用來配置服務路由規則腳本,參數級,下面是腳本範本,腳本語言爲:groovy

def Map<String,Map<String,List<String>>> evalAddress(String serviceID,List<String> allAddress)  {
    //
    //[RSF]sorg.mytest.FooFacse-1.0.0 ---- Group=RSF, Name=sorg.mytest.FooFacse, Version=1.0.0
    if ( serviceID == "[RSF]test.net.hasor.rsf.services.EchoService-1.0.0" ) {
        return [
            "sayEcho":[
                "sayTo_etc1":[
                    "192.168.2.3:8000",
                    "192.168.3.4:8000",
                    "192.168.4.5:8000"
                ],
                "sayTo_etc2":[
                    "192.168.137.10:8000",
                    "192.168.137.11:8000"
                ]],
            "testUserTag":[
                "server_3":[
                    "192.168.1.3:8000"
                ],
                "server_4":[
                    "192.168.1.4:8000"
                ]
            ]
        ]
    }
    return null
}
相關文章
相關標籤/搜索