天天看點

【Soul源碼閱讀】16.啟動多台admin,多個網關,形成一個叢集1.啟動多台 soul-admin2.啟動多台 soul-bootstrap3.啟動多台業務系統4.驗證同步

目錄

1.啟動多台 soul-admin

2.啟動多台 soul-bootstrap

3.啟動多台業務系統

4.驗證同步

4.1 負載均衡

4.2 資料同步

1.啟動多台 soul-admin

修改配置檔案,把可以開啟允許并行執行的複選框。

application.yml

server:
  port: 9095

server:
  port: 9096      
【Soul源碼閱讀】16.啟動多台admin,多個網關,形成一個叢集1.啟動多台 soul-admin2.啟動多台 soul-bootstrap3.啟動多台業務系統4.驗證同步

啟動後狀态:

【Soul源碼閱讀】16.啟動多台admin,多個網關,形成一個叢集1.啟動多台 soul-admin2.啟動多台 soul-bootstrap3.啟動多台業務系統4.驗證同步

2.啟動多台 soul-bootstrap

跟上面的一樣,修改配置檔案,打開并行執行的開關。

application-local.yml

server:

  port: 9195

server:

  port: 9196

使用預設的同步資料政策 websocket,需要配置多個 soul-admin 的位址:

sync:
    websocket :
         urls: ws://localhost:9095/websocket,ws://localhost:9096/websocket
      
【Soul源碼閱讀】16.啟動多台admin,多個網關,形成一個叢集1.啟動多台 soul-admin2.啟動多台 soul-bootstrap3.啟動多台業務系統4.驗證同步

啟動後狀态:

【Soul源碼閱讀】16.啟動多台admin,多個網關,形成一個叢集1.啟動多台 soul-admin2.啟動多台 soul-bootstrap3.啟動多台業務系統4.驗證同步

3.啟動多台業務系統

我們使用 examples 中自帶的 soul-examples-http,啟動兩個節點。

修改配置檔案 application.yml

server:

  port: 8188

  address: 0.0.0.0

soul:

  http:

    adminUrl: http://localhost:9095

    port: 8188

    contextPath: /http

    appName: http

    full: false

server:

  port: 8189

  address: 0.0.0.0

soul:

  http:

    adminUrl: http://localhost:9095

    port: 8189

    contextPath: /http

    appName: http

    full: false

這裡的 adminUrl 配置一個 soul-admin 即可,連接配接上一個之後,隻要能把資料同步過去,其他的節點也都可以通過資料庫拿到同步後的資料。

【Soul源碼閱讀】16.啟動多台admin,多個網關,形成一個叢集1.啟動多台 soul-admin2.啟動多台 soul-bootstrap3.啟動多台業務系統4.驗證同步

啟動後狀态:

【Soul源碼閱讀】16.啟動多台admin,多個網關,形成一個叢集1.啟動多台 soul-admin2.啟動多台 soul-bootstrap3.啟動多台業務系統4.驗證同步

4.驗證同步

4.1 負載均衡

【插件清單】【divide】【選擇器清單】【修改】

【Soul源碼閱讀】16.啟動多台admin,多個網關,形成一個叢集1.啟動多台 soul-admin2.啟動多台 soul-bootstrap3.啟動多台業務系統4.驗證同步
【Soul源碼閱讀】16.啟動多台admin,多個網關,形成一個叢集1.啟動多台 soul-admin2.啟動多台 soul-bootstrap3.啟動多台業務系統4.驗證同步

2個 soul-bootstrap 節點,配置都一緻,預設權重 weight 為50,我們調用幾次接口,驗證負載均衡。

連續調用6次 http://localhost:9195/http/order/findById?id=95 GET 請求,可以在 soul-bootstrap:9195 console 列印如下日志:

可以看到 "The request urlPath is" 輪流調用 8188 和 8189 兩個業務服務節點,因為 weight 都是50,調用比例為 1:1,結果就跟輪詢調用一樣。

2021-01-31 03:48:06.507  INFO 15860 --- [-work-threads-3] o.d.soul.plugin.base.AbstractSoulPlugin  : divide selector success match , selector name :/http
2021-01-31 03:48:06.509  INFO 15860 --- [-work-threads-3] o.d.soul.plugin.base.AbstractSoulPlugin  : divide rule success match , rule name :/http/order/findById
2021-01-31 03:48:06.510  INFO 15860 --- [-work-threads-3] o.d.s.plugin.httpclient.WebClientPlugin  : The request urlPath is http://10.0.0.2:8189/order/findById?id=95, retryTimes is 0
2021-01-31 03:48:06.594 ERROR 15860 --- [-work-threads-4] o.d.s.plugin.base.utils.FallbackUtils    : can not match selector data: divide
2021-01-31 03:48:07.440  INFO 15860 --- [-work-threads-6] o.d.soul.plugin.base.AbstractSoulPlugin  : divide selector success match , selector name :/http
2021-01-31 03:48:07.440  INFO 15860 --- [-work-threads-6] o.d.soul.plugin.base.AbstractSoulPlugin  : divide rule success match , rule name :/http/order/findById
2021-01-31 03:48:07.440  INFO 15860 --- [-work-threads-6] o.d.s.plugin.httpclient.WebClientPlugin  : The request urlPath is http://10.0.0.2:8188/order/findById?id=95, retryTimes is 0
2021-01-31 03:48:07.493 ERROR 15860 --- [-work-threads-7] o.d.s.plugin.base.utils.FallbackUtils    : can not match selector data: divide
2021-01-31 03:48:07.759  INFO 15860 --- [-work-threads-9] o.d.soul.plugin.base.AbstractSoulPlugin  : divide selector success match , selector name :/http
2021-01-31 03:48:07.760  INFO 15860 --- [-work-threads-9] o.d.soul.plugin.base.AbstractSoulPlugin  : divide rule success match , rule name :/http/order/findById
2021-01-31 03:48:07.760  INFO 15860 --- [-work-threads-9] o.d.s.plugin.httpclient.WebClientPlugin  : The request urlPath is http://10.0.0.2:8189/order/findById?id=95, retryTimes is 0
2021-01-31 03:48:07.779 ERROR 15860 --- [work-threads-10] o.d.s.plugin.base.utils.FallbackUtils    : can not match selector data: divide
2021-01-31 03:48:08.044  INFO 15860 --- [work-threads-12] o.d.soul.plugin.base.AbstractSoulPlugin  : divide selector success match , selector name :/http
2021-01-31 03:48:08.044  INFO 15860 --- [work-threads-12] o.d.soul.plugin.base.AbstractSoulPlugin  : divide rule success match , rule name :/http/order/findById
2021-01-31 03:48:08.045  INFO 15860 --- [work-threads-12] o.d.s.plugin.httpclient.WebClientPlugin  : The request urlPath is http://10.0.0.2:8188/order/findById?id=95, retryTimes is 0
2021-01-31 03:48:08.072 ERROR 15860 --- [work-threads-13] o.d.s.plugin.base.utils.FallbackUtils    : can not match selector data: divide
2021-01-31 03:48:08.388  INFO 15860 --- [work-threads-15] o.d.soul.plugin.base.AbstractSoulPlugin  : divide selector success match , selector name :/http
2021-01-31 03:48:08.388  INFO 15860 --- [work-threads-15] o.d.soul.plugin.base.AbstractSoulPlugin  : divide rule success match , rule name :/http/order/findById
2021-01-31 03:48:08.389  INFO 15860 --- [work-threads-15] o.d.s.plugin.httpclient.WebClientPlugin  : The request urlPath is http://10.0.0.2:8189/order/findById?id=95, retryTimes is 0
2021-01-31 03:48:08.410 ERROR 15860 --- [work-threads-16] o.d.s.plugin.base.utils.FallbackUtils    : can not match selector data: divide
2021-01-31 03:48:08.744  INFO 15860 --- [work-threads-18] o.d.soul.plugin.base.AbstractSoulPlugin  : divide selector success match , selector name :/http
2021-01-31 03:48:08.744  INFO 15860 --- [work-threads-18] o.d.soul.plugin.base.AbstractSoulPlugin  : divide rule success match , rule name :/http/order/findById
2021-01-31 03:48:08.744  INFO 15860 --- [work-threads-18] o.d.s.plugin.httpclient.WebClientPlugin  : The request urlPath is http://10.0.0.2:8188/order/findById?id=95, retryTimes is 0
2021-01-31 03:48:08.763 ERROR 15860 --- [work-threads-19] o.d.s.plugin.base.utils.FallbackUtils    : can not match selector data: divide
           

我們再連續調用6次 http://localhost:9196/http/order/findById?id=95 GET 請求,可以在 soul-bootstrap:9196 console 列印如下日志:

同樣可以看到 "The request urlPath is" 輪流調用 8188 和 8189 兩個業務服務節點。

2021-01-31 03:51:50.681  INFO 17340 --- [work-threads-25] o.d.soul.plugin.base.AbstractSoulPlugin  : divide selector success match , selector name :/http
2021-01-31 03:51:50.686  INFO 17340 --- [work-threads-25] o.d.soul.plugin.base.AbstractSoulPlugin  : divide rule success match , rule name :/http/order/findById
2021-01-31 03:51:50.688  INFO 17340 --- [work-threads-25] o.d.s.plugin.httpclient.WebClientPlugin  : The request urlPath is http://10.0.0.2:8188/order/findById?id=95, retryTimes is 0
2021-01-31 03:51:50.726 ERROR 17340 --- [-work-threads-1] o.d.s.plugin.base.utils.FallbackUtils    : can not match selector data: divide
2021-01-31 03:51:51.352  INFO 17340 --- [-work-threads-3] o.d.soul.plugin.base.AbstractSoulPlugin  : divide selector success match , selector name :/http
2021-01-31 03:51:51.352  INFO 17340 --- [-work-threads-3] o.d.soul.plugin.base.AbstractSoulPlugin  : divide rule success match , rule name :/http/order/findById
2021-01-31 03:51:51.352  INFO 17340 --- [-work-threads-3] o.d.s.plugin.httpclient.WebClientPlugin  : The request urlPath is http://10.0.0.2:8189/order/findById?id=95, retryTimes is 0
2021-01-31 03:51:51.375 ERROR 17340 --- [-work-threads-4] o.d.s.plugin.base.utils.FallbackUtils    : can not match selector data: divide
2021-01-31 03:51:51.595  INFO 17340 --- [-work-threads-6] o.d.soul.plugin.base.AbstractSoulPlugin  : divide selector success match , selector name :/http
2021-01-31 03:51:51.595  INFO 17340 --- [-work-threads-6] o.d.soul.plugin.base.AbstractSoulPlugin  : divide rule success match , rule name :/http/order/findById
2021-01-31 03:51:51.595  INFO 17340 --- [-work-threads-6] o.d.s.plugin.httpclient.WebClientPlugin  : The request urlPath is http://10.0.0.2:8188/order/findById?id=95, retryTimes is 0
2021-01-31 03:51:51.625 ERROR 17340 --- [-work-threads-7] o.d.s.plugin.base.utils.FallbackUtils    : can not match selector data: divide
2021-01-31 03:51:51.800  INFO 17340 --- [-work-threads-9] o.d.soul.plugin.base.AbstractSoulPlugin  : divide selector success match , selector name :/http
2021-01-31 03:51:51.800  INFO 17340 --- [-work-threads-9] o.d.soul.plugin.base.AbstractSoulPlugin  : divide rule success match , rule name :/http/order/findById
2021-01-31 03:51:51.800  INFO 17340 --- [-work-threads-9] o.d.s.plugin.httpclient.WebClientPlugin  : The request urlPath is http://10.0.0.2:8189/order/findById?id=95, retryTimes is 0
2021-01-31 03:51:51.819 ERROR 17340 --- [work-threads-10] o.d.s.plugin.base.utils.FallbackUtils    : can not match selector data: divide
2021-01-31 03:51:51.996  INFO 17340 --- [work-threads-12] o.d.soul.plugin.base.AbstractSoulPlugin  : divide selector success match , selector name :/http
2021-01-31 03:51:51.997  INFO 17340 --- [work-threads-12] o.d.soul.plugin.base.AbstractSoulPlugin  : divide rule success match , rule name :/http/order/findById
2021-01-31 03:51:51.997  INFO 17340 --- [work-threads-12] o.d.s.plugin.httpclient.WebClientPlugin  : The request urlPath is http://10.0.0.2:8188/order/findById?id=95, retryTimes is 0
2021-01-31 03:51:52.017 ERROR 17340 --- [work-threads-13] o.d.s.plugin.base.utils.FallbackUtils    : can not match selector data: divide
2021-01-31 03:51:52.210  INFO 17340 --- [work-threads-15] o.d.soul.plugin.base.AbstractSoulPlugin  : divide selector success match , selector name :/http
2021-01-31 03:51:52.210  INFO 17340 --- [work-threads-15] o.d.soul.plugin.base.AbstractSoulPlugin  : divide rule success match , rule name :/http/order/findById
2021-01-31 03:51:52.211  INFO 17340 --- [work-threads-15] o.d.s.plugin.httpclient.WebClientPlugin  : The request urlPath is http://10.0.0.2:8189/order/findById?id=95, retryTimes is 0
2021-01-31 03:51:52.232 ERROR 17340 --- [work-threads-16] o.d.s.plugin.base.utils.FallbackUtils    : can not match selector data: divide
           

4.2 資料同步

在 9095 修改權重,然後調用接口,檢視是否按照修改後的權重發送請求:

8188 weight 30,8189 weight 60。

從日志中可以看到,調用1次8188,就會調用2次8189,符合預期比例 30:60=1:2。

2021-01-31 04:14:58.252  INFO 15860 --- [work-threads-24] o.d.soul.plugin.base.AbstractSoulPlugin  : divide selector success match , selector name :/http
2021-01-31 04:14:58.252  INFO 15860 --- [work-threads-24] o.d.soul.plugin.base.AbstractSoulPlugin  : divide rule success match , rule name :/http/order/findById
2021-01-31 04:14:58.252  INFO 15860 --- [work-threads-24] o.d.s.plugin.httpclient.WebClientPlugin  : The request urlPath is http://10.0.0.2:8188/order/findById?id=95, retryTimes is 0
2021-01-31 04:14:58.276 ERROR 15860 --- [work-threads-25] o.d.s.plugin.base.utils.FallbackUtils    : can not match selector data: divide
2021-01-31 04:14:58.543  INFO 15860 --- [-work-threads-1] o.d.soul.plugin.base.AbstractSoulPlugin  : divide selector success match , selector name :/http
2021-01-31 04:14:58.544  INFO 15860 --- [-work-threads-1] o.d.soul.plugin.base.AbstractSoulPlugin  : divide rule success match , rule name :/http/order/findById
2021-01-31 04:14:58.544  INFO 15860 --- [-work-threads-1] o.d.s.plugin.httpclient.WebClientPlugin  : The request urlPath is http://10.0.0.2:8189/order/findById?id=95, retryTimes is 0
2021-01-31 04:14:58.574 ERROR 15860 --- [-work-threads-3] o.d.s.plugin.base.utils.FallbackUtils    : can not match selector data: divide
2021-01-31 04:14:59.127  INFO 15860 --- [-work-threads-4] o.d.soul.plugin.base.AbstractSoulPlugin  : divide selector success match , selector name :/http
2021-01-31 04:14:59.127  INFO 15860 --- [-work-threads-4] o.d.soul.plugin.base.AbstractSoulPlugin  : divide rule success match , rule name :/http/order/findById
2021-01-31 04:14:59.127  INFO 15860 --- [-work-threads-4] o.d.s.plugin.httpclient.WebClientPlugin  : The request urlPath is http://10.0.0.2:8189/order/findById?id=95, retryTimes is 0
2021-01-31 04:14:59.155 ERROR 15860 --- [-work-threads-6] o.d.s.plugin.base.utils.FallbackUtils    : can not match selector data: divide
2021-01-31 04:14:59.359  INFO 15860 --- [-work-threads-7] o.d.soul.plugin.base.AbstractSoulPlugin  : divide selector success match , selector name :/http
2021-01-31 04:14:59.360  INFO 15860 --- [-work-threads-7] o.d.soul.plugin.base.AbstractSoulPlugin  : divide rule success match , rule name :/http/order/findById
2021-01-31 04:14:59.360  INFO 15860 --- [-work-threads-7] o.d.s.plugin.httpclient.WebClientPlugin  : The request urlPath is http://10.0.0.2:8188/order/findById?id=95, retryTimes is 0
2021-01-31 04:14:59.394 ERROR 15860 --- [-work-threads-9] o.d.s.plugin.base.utils.FallbackUtils    : can not match selector data: divide
2021-01-31 04:14:59.559  INFO 15860 --- [work-threads-10] o.d.soul.plugin.base.AbstractSoulPlugin  : divide selector success match , selector name :/http
2021-01-31 04:14:59.559  INFO 15860 --- [work-threads-10] o.d.soul.plugin.base.AbstractSoulPlugin  : divide rule success match , rule name :/http/order/findById
2021-01-31 04:14:59.559  INFO 15860 --- [work-threads-10] o.d.s.plugin.httpclient.WebClientPlugin  : The request urlPath is http://10.0.0.2:8189/order/findById?id=95, retryTimes is 0
2021-01-31 04:14:59.587 ERROR 15860 --- [work-threads-12] o.d.s.plugin.base.utils.FallbackUtils    : can not match selector data: divide
2021-01-31 04:15:14.866  INFO 15860 --- [work-threads-13] o.d.soul.plugin.base.AbstractSoulPlugin  : divide selector success match , selector name :/http
2021-01-31 04:15:14.866  INFO 15860 --- [work-threads-13] o.d.soul.plugin.base.AbstractSoulPlugin  : divide rule success match , rule name :/http/order/findById
2021-01-31 04:15:14.866  INFO 15860 --- [work-threads-13] o.d.s.plugin.httpclient.WebClientPlugin  : The request urlPath is http://10.0.0.2:8189/order/findById?id=95, retryTimes is 0