<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          京東技術(shù)主導(dǎo):全新架構(gòu)的分布式事務(wù)Hmily 2.1.1發(fā)布

          共 5267字,需瀏覽 11分鐘

           ·

          2020-10-01 05:14

          點(diǎn)擊上方藍(lán)色“程序猿DD”,選擇“設(shè)為星標(biāo)”

          回復(fù)“資源”獲取獨(dú)家整理的學(xué)習(xí)資料!

          來源 |?Dromara分布式事務(wù)

          時(shí)隔一年,Hmily發(fā)布全新架構(gòu)的2.1.1版本

          感謝朋友們一路以來的支持,讓大家久等了。在這一個(gè)版本中,我們團(tuán)隊(duì)重構(gòu)了整個(gè)項(xiàng)目,
          合理的劃分功能模塊,新增配置中心,調(diào)整底層存儲(chǔ)結(jié)構(gòu),解決疑難bug,以及其他新功能的支持,也吸收了更多開源社區(qū)的優(yōu)秀人才的加入。

          架構(gòu)全景圖


          功能

          • 高可靠性 :支持分布式場景下,事務(wù)異常回滾,超時(shí)異常恢復(fù),防止事務(wù)懸掛。

          • 易用性 :提供零侵入性式的?Spring-Boot,?Spring-Namespace?快速與業(yè)務(wù)系統(tǒng)集成。

          • 高性能 :去中心化設(shè)計(jì),與業(yè)務(wù)系統(tǒng)完全融合,天然支持集群部署。

          • 可觀測(cè)性 :Metrics多項(xiàng)指標(biāo)性能監(jiān)控,以及admin管理后臺(tái)UI展示。

          • 多種RPC :支持?Dubbo,?SpringCloud,Montan?,sofa-rpc等知名RPC框架。

          • 日志存儲(chǔ) :支持?mysql,?oracle,?mongodb,?redis,?zookeeper?等方式。

          • 復(fù)雜場景 :支持RPC嵌套調(diào)用事務(wù)。

          重構(gòu)部分

          • 在模塊劃分上

            • 抽離出開箱即用的SPI自定義模塊。

            • 定義事務(wù)日志多種存儲(chǔ)方式的SPI模塊。

            • 定義事務(wù)日志多種序列化方式的SPI模塊。

            • 新增配置中心,支持各種主流的配置中心(nacos,apollo,zookeeper等),并支持配置的動(dòng)態(tài)刷新。

            • 新增metrics模塊,用來監(jiān)控運(yùn)行時(shí)候的各種信息。

            • 抽離出核心的事務(wù)執(zhí)行模塊。

            • 抽離出多種RPC支持模塊。

            • 抽離出spring與spring boot 支持模塊。

          • 在依賴包版本上

            • guava升級(jí)到29.0

            • curator 升級(jí)到5.1.0

          • 在代碼質(zhì)量上

            • 嚴(yán)格的check-style代碼檢查,秉承優(yōu)雅,簡單易懂原則(talk is cheap ,show you code)。

          • 在開放性上

            • 社區(qū)奉行簡單,快樂,和諧基本原則

          • 在目標(biāo)上

            • 打造一款高可用,高性能,簡單易用金融級(jí)的分布式事務(wù)解決方案。

          解決疑難bug:

          • dubbo框架不支持注解方式的使用(spring-boot-starter-dubbo)。h

          • motan框架不支持注解方式的使用。

          • spring-cloud用戶如果使用feign與hystrix整合hmily時(shí)候的線程切換問題。

          • 極端情況下事務(wù)日志序列化異常。

          • try階段超時(shí)異常,導(dǎo)致事務(wù)懸掛bug。

          • confirm與cancel階段異常時(shí)候,事務(wù)未能正確恢復(fù)bug。

          • 在事務(wù)日志存儲(chǔ)上,支持同步與異步2種模式,供用戶選擇。

          用戶使用與升級(jí)指南

          對(duì)于hmily用戶來說,只需三個(gè)步驟,即可解決RPC服務(wù)調(diào)用之間的柔性事務(wù)

          • 引用hmily對(duì)各種rpc支持的jar包。

          • 添加hmily配置。

          • 在rpc接口方法上添加?@Hmily注解。

          依賴的變更

          用戶依賴的方式?jīng)]有更改,只需要將版本升級(jí)到2.1.0。下面舉dubbo微服務(wù)列子

          dubbo rpc微服務(wù)
          • dubbo接口服務(wù)依賴

          ?????<dependency>
          ??????????<groupId>org.dromaragroupId>
          ??????????<artifactId>hmily-annotationartifactId>
          ??????????<version>2.1.0version>
          ??????dependency>
          • dubbo服務(wù)提供者依賴(<2.7)

          ???????<dependency>
          ????????????<groupId>org.dromaragroupId>
          ????????????<artifactId>hmily-dubboartifactId>
          ???????????<version>2.1.0version>
          ????????dependency>

          ????or?

          ??????<dependency>
          ????????????<groupId>org.dromaragroupId>
          ????????????<artifactId>hmily-spring-boot-starter-dubboartifactId>
          ???????????<version>2.1.0version>
          ????????dependency>
          hmily配置的變更

          在新版2.1.0中,新增了hmily-config模塊,支持本地與注冊(cè)中心模式。用戶首先需要在項(xiàng)目resouce文件下新建一個(gè)名稱為hmily.yml的文件。默認(rèn)路徑為項(xiàng)目的?resource目錄下,也可以使用?-Dhmily.conf?指定,也可以把配置放在?user.dir?目錄下。優(yōu)先級(jí)別?-Dhmily.conf?>?user.dir?>resource。文件格式如下(一部分,以下是配置成本地模式):

          ??server:
          ????configMode:?local
          ????appName:?account-dubbo
          ??#??如果server.configMode?eq?local?的時(shí)候才會(huì)讀取到這里的配置信息.
          ??config:
          ????appName:?account-dubbo
          ????serializer:?kryo
          ????contextTransmittalMode:?threadLocal
          ????scheduledThreadMax:?16
          ????scheduledRecoveryDelay:?60
          ????scheduledCleanDelay:?60
          ????scheduledPhyDeletedDelay:?600
          ????scheduledInitDelay:?30
          ????recoverDelayTime:?60
          ????cleanDelayTime:?180
          ????limit:?200
          ????retryMax:?10
          ????bufferSize:?8192
          ????consumerThreads:?16
          ????asyncRepository:?true
          ????autoSql:?true
          ????phyDeleted:?true
          ????storeDays:?3
          ????repository:?mysql

          repository:
          ??database:
          ????driverClassName:?com.mysql.jdbc.Driver
          ????url?:?jdbc:mysql://127.0.0.1:3306/hmily?useUnicode=true&characterEncoding=utf8
          ????username:?root
          ????password:
          ????maxActive:?20
          ????minIdle:?10
          ????connectionTimeout:?30000
          ????idleTimeout:?600000
          ????maxLifetime:?1800000
          如果你想將配置文件放在`Nacos`配置中心:
          • 第一步:

          hmily:
          ??server:
          ????configMode:?nacos
          ????appName:?xxxxx
          ??#??如果server.configMode?eq?local?的時(shí)候才會(huì)讀取到這里的配置信息.

          remote:
          ??nacos:
          ????server:?192.168.3.22:8848
          ????dataId:?hmily.properties
          ????group:?DEFAULT_GROUP
          ????timeoutMs:?6000
          ????fileExtension:?yml
          ????passive:?true
          • 第二步:將hmily的配置,放在?nacos配置中心上

          如果你想將配置文件放在`Apollo`配置中心:
          • 第一步:

          hmily:
          ??server:
          ????configMode:?apollo
          ????appName:?xxxx
          ??#??如果server.configMode?eq?local?的時(shí)候才會(huì)讀取到這里的配置信息.

          remote:
          ??apollo:
          ????appId:?hmily-xxxxx
          ????configService:?http://192.168.3.22:8080
          ????namespace:?byin_hmily
          ????secret:
          ????fileExtension:?yml
          ????passive:?true
          ????env:?dev
          ????meta:?http://192.168.3.22:8080
          • 第二步:將hmily的配置,放在?apollo配置中心上

          還有其他的配置方式以及配置內(nèi)容的詳解,請(qǐng)參考:https://dromara.org/zh-cn/docs/hmily/config.html

          注解方式的使用的變更

          在之前的版本中,rpc接口與實(shí)現(xiàn)都只需要添加?@Hmily?注解, 現(xiàn)在需要進(jìn)行變更,在rpc接口方法上是添加?@Hmily,用來標(biāo)識(shí)這是一個(gè)hmily分布式事務(wù)的接口方法, 在接口的方法實(shí)現(xiàn)上則需要添加?@HmilyTCC,然后指定?confirm?與?cancel方法名稱.

          舉例(dubbo中say方法需要參與分布式事務(wù)):
          public?interface?HelloService?{

          ????@Hmily
          ????void?say(String?hello);
          }

          public?class?HelloServiceImpl?implements?HelloService??{

          ????@HmilyTCC(confirmMethod?=?"sayConfrim",?cancelMethod?=?"sayCancel")
          ????public?void?say(String?hello)?{
          ?????????System.out.println("hello?world");
          ????}

          ????public?void?sayConfrim(String?hello)?{
          ?????????System.out.println("?confirm?hello?world");
          ????}

          ????public?void?sayCancel(String?hello)?{
          ?????????System.out.println("?cancel?hello?world");
          ????}
          }
          舉例(springcloud中say方法需要參與分布式事務(wù)):
          • spring-cloud服務(wù)調(diào)用方FeignClient

          @FeignClient(value?=?"helle-service")
          public?interface?HelloService?{

          ????@Hmily
          ????@RequestMapping("/helle-service/sayHello")
          ????void?say(String?hello);
          }
          • spring-cloud服務(wù)提供方

          @RestController
          public?class?HelloController?{

          ????private?final?HelloService?helloService?;

          ????@Autowired
          ????public?AccountController(HelloService?helloService)?{
          ????????this.helloService=?helloService;
          ????}

          ????@RequestMapping("/sayHello")
          ????public?void?payment(String?hello)?{
          ????????return?helloService.say(hello);
          ????}

          }

          public?interface?HelloService?{

          ????void?say(String?hello);
          }

          public?class?HelloServiceImpl?implements?HelloService??{

          ????@HmilyTCC(confirmMethod?=?"sayConfrim",?cancelMethod?=?"sayCancel")
          ????public?void?say(String?hello)?{
          ?????????System.out.println("hello?world");
          ????}

          ????public?void?sayConfrim(String?hello)?{
          ?????????System.out.println("?confirm?hello?world");
          ????}

          ????public?void?sayCancel(String?hello)?{
          ?????????System.out.println("?cancel?hello?world");
          ????}
          }
          事務(wù)日志存儲(chǔ)結(jié)構(gòu)的更改

          在使用上,用戶使用或者升級(jí)不用關(guān)心,框架會(huì)默認(rèn)初始化好。

          下一個(gè)版本

          • 因?yàn)檎{(diào)整了架構(gòu),在其他模式的支持上將會(huì)變得更加容易,在下一個(gè)版本,將會(huì)發(fā)布TAC模式(try-auto-cancel)使用此模式,將大大簡化框架的使用程度,開發(fā)者不需要關(guān)心confirm以及cancel?方法的開發(fā),對(duì)老系統(tǒng)的改造提供了更好的兼容性,不用擔(dān)心額外的開發(fā)任務(wù),一切就交給hmily吧。

          • 將對(duì)brpc用戶進(jìn)行支持。

          • 將對(duì)tars-rpc用戶進(jìn)行支持。

          社區(qū)共建

          我們秉承和諧快樂,代碼至上的原則,如果你有想法,愿意和我們一起成長,一起貢獻(xiàn),快來加入我們吧!

          • github:https://github.com/dromara/hmily

          • gitee:https://gitee.com/shuaiqiyu/hmily

          • qq群:162614487


          往期推薦

          京東的熱點(diǎn)key探測(cè)系統(tǒng)發(fā)布,單機(jī) QPS 提升至 37 萬

          阿里巴巴公布“云釘一體”戰(zhàn)略:阿里云與釘釘全面融合

          華為提出十大數(shù)學(xué)挑戰(zhàn)!解出一個(gè)就是年薪百萬!

          干掉Navicat:正版 MySQL 官方客戶端真香!

          贈(zèng)書:算法與數(shù)據(jù)中臺(tái)“網(wǎng)約車業(yè)務(wù)實(shí)踐”

          這樣配置,讓你的 IDEA 好用到飛起來!

          推薦加入


          最近熱門內(nèi)容回顧? ?#技術(shù)人系列

          瀏覽 46
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  豆花视频免费版 | 久久久社区论坛 | 操大逼av| 伊人综合大香蕉 | 日本中文字幕一区 |