分布式資料庫使用 Arthas 熱更新 dble-愛可生

2021-01-07 愛可生雲資料庫

關於 dble 小版本修改代碼的熱更新,主要調研了兩種工具:

arthasjrebel使用 arthas 更新小版本時,需要運維人員直接操作變更的 class 文件並修改,需要一套運維規範。

使用 jrebel 後,jrebel 可以對 dble 的 jar 包配置一個 class 目錄,jrebel 自動監聽 class 目錄中 class 文件的變化,監聽到變化後自動加載類,此外該軟體需要付費。

在進行小版本升級時,需要控制 dble 的版本號,因此每次熱更新時需要替換 Versions.class 文件維護 dble 的版本號,經測試,發現 jrebel 對靜態類的支持並不友好,實際測試沒有生效,相比較而言 arthas 則可以生效。因此下面主要對 arthas 在 dble 中的使用進行說明。

前置環境

jre,使用 dble 的 jre 即可搭建好的 3.20.10.0 版本 dble 環境

arthas 使用

安裝

下載最新版本即可,以下測試使用的是 3.4.5 版本

使用

執行下面的語句後,會進入 arthas 的交互界面:

$ java -jar arthas-boot.jar <dble_pid>

下面以在 dble 中簡單修改一行日誌為例:

在 3.20.10.0 版本的 dble 中,當輸入"optimize a; " 這種 dble 不認識的語句時,日誌中會輸出 「Unsupported statement:optimize a」 這樣的日誌,如下圖:

下面我們通過 arthas 修改這個日誌輸出,以下操作都是在 arthas 的命令行界面操作。

jad 反編譯

$ jad --source-only com.actiontech.dble.server.ServerQueryHandler > /tmp/ServerQueryHandler.java

下面是反編譯文件裡面截取的相關代碼片段:

case 254: {

LOGGER.info("Unsupported statement:" + sql);

this.service.writeErrMessage(1149, "Unsupported statement");

return;

}

sc 查找類加載器

$ sc -d com.actiontech.dble.server.ServerQueryHandler | grep classLoaderHash

classLoaderHash 18b4aac2

mc 內存編譯

在編譯之前可以將之前反編譯源碼文件裡的代碼修改掉,比如修改為如下片段:

LOGGER.info("Unsupported statement test test test test test:" + sql);

下面我們通過 mc 命令將修改後的反編譯源碼文件編譯為 class 文件。

mc 命令中 -c 後面的值 18b4aac2 即 sc 查找到的 ServerQueryHandler 類加載器的 hash 值。

redefine 熱更新代碼

其實在這裡我們也可以通過在本地修改對應版本的源文件,本地編譯好後上傳到路徑下,再執行 redefine,效果是一樣的:

$ redefine /tmp/com/actiontech/dble/server/ServerQueryHandler.class

redefine success, size: 1, classes:

com.actiontech.dble.server.ServerQueryHandler

到此為止,ServerQueryHandler 類的更新就結束了。下面我們來看下效果:

以上方式是通過 arthas 的交互界面的方式完成的,arthas 也可以通過非交互方式來執行命令:

$ java -jar arthas-boot.jar <dble_pid> -c "redefine /tmp/com/actiontech/dble/server/ServerQueryHandler.class" > /dev/null

通過此方式,可以更方便的通過腳本管理整個流程。

相關焦點

  • 詳解MySQL|MySQL中間件DBLE-第五章 後端資料庫相關特性-愛可生
    本期推送的內容為DBLE的高級特性:後端資料庫的相關特性。本節提綱本節內容是對後端的資料庫相關特性重點解析。後端資料庫的相關特性主要從讀寫分離、連接管理、上下文同步以及高可用故障切換四個方面拆分講解;讀寫分離與高可用故障切換是社區同學反饋中需求最大的部分,本節內容十分詳盡的講解了大家關注的關鍵技術點及相關處理細節,有助於增進對分布式應用的相關理解。
  • 分布式Jump Consistent Hash原理-愛可生
    前言之前愛可生開源社區公眾號發表了《dble 沿用 jumpstringhash,移除 Mycat 一致性 hash 原因解析》。隨後又發表了本文上篇,初步解釋了 Jump Consistent Hash 的原理。
  • 分布式 | DBLE Release Notes 詳細解讀 2.19.11.0
    [#1489] 在某視圖中使用另一個視圖的複雜查詢將得到錯誤「未找到列」[#275] 對不同全局表的union查詢,結果集未合併[#563] 在全局表上使用「自然聯接」時,結果不正確[#622] 非法「create table」語法對全局表執行成功[#775] 查詢[加載數據...]到全局表中,列_dble_op_time可能需要特殊的句柄
  • MySQL裡快速找到 binlog 中是否有大事務-愛可生
    本文關鍵字:大事務、binlog、Linux 問題 我們並不喜歡 MySQL 中出現大事務(更新很多數據的事務),大事務往往帶來很多維護的問題。
  • 分布式資料庫——未來行業應用主流資料庫
    1、分布式資料庫是適應新技術及行業應用發展的需要分布式資料庫可以認為是由位於不同位置的多個計算機節點通過網絡互相連接,共同組成一個完整的、全局的、邏輯上集中、物理上分布的資料庫。未來,傳統的基於單物理伺服器節點的資料庫將在更多的場景下被分布式資料庫取代,分布式資料庫應用前景將越來越廣。
  • 徹底搞清分布式資料庫
    首先,「分布式」:是從業務的角度的概念。 "分布式」是從業務角度出發的:即當我們想著「註冊」模塊需要更新或者出問題了,那麼我們不希望它影響存量用戶的「登陸」和「下單」模塊,這個時候,我們多希望他們不在一起多好,那麼當我們真的這麼做了,將各個業務模塊都分開,ok,那這就是「分布式」了。
  • 詳解NoSQL資料庫分布式算法的特點
    正是通過這些嘗試逐漸總結出了一些行之有效的資料庫構建方法。在這篇文章裡,我將針對NoSQL資料庫的分布式特點進行一些系統化的描述。  接下來我們將研究一些分布式策略,比如故障檢測中的複製,這些策略用黑體字標出,被分為三段:  •數據一致性。
  • 雲時代的分布式資料庫:阿里分布式資料庫服務DRDS
    為了支撐更大的訪問量和數據量,我們必然需要分布式資料庫系統,然而分布式系統又必然會面對強一致性所帶來的延遲提高的問題,因為網絡通信本身比單機內通信代價高很多,這種通信的代價就會直接增加系統單次提交的延遲。延遲提高會導致資料庫鎖持有時間變長,使得高衝突條件下分布式事務的性能不升反降(這個具體可以了解一下Amdahl定律),甚至性能距離單機資料庫都還有明顯的差距。
  • 為什麼雲原生+分布式是資料庫的未來?
    具體來講,雲原生分布式資料庫的以下幾個優點是其將成為未來趨勢的主要原因: 易用性 同雲計算非常易於使用一樣,雲原生資料庫也是非常易於使用的,由於是完全基於雲原生架構構建,所以它可以隨時隨地的從多前端訪問,提供雲服務的計算節點。
  • 線上問題排查利器Arthas
    悄悄的告訴你,arthas是支持正則表達式的,對於像我這種不愛記包名的懶人,無疑是個好消息,對於上面的例子,用下面的方式也是一樣的效果:[arthas@30314]$ sc *DemoUtilscom.ljy.test.util.DemoUtilsAffect(row-cnt:1) cost in 9 ms.
  • 如何使用Arthas進行JVM取證
    在無文件攻擊的概念越來越火熱的情況下,紅軍也急需能夠與之對抗的方式,而arthas應該可以成為其中的首選方案基本用法下載:https://github.com/alibaba/arthas/releases使用:java -jar arthas-boot.jar常用功能thread #列印線程 / 查看線程當前的堆棧jad #反編譯classsc
  • 細說分布式資料庫的過去、現在與未來
    一、分布式資料庫的歷史和現狀在此消彼長的情況下,單機資料庫越來越難以滿足用戶需求,即使是將數據保存下來這個最基本的需求。2、分布式資料庫所以2005年左右,人們開始探索分布式資料庫,帶起了NoSQL這波浪潮。這些資料庫解決的首要問題是單機上無法保存全部數據,其中以HBase/Cassadra/MongoDB為代表。
  • 達夢分布式資料庫演進
    既然,分布式資料庫的大量技術問題,早在「上古時代」就已經提出,並已有相當的基礎,那麼,為什麼分布式資料庫在90年代卻「偃旗息鼓」了?另一個非常重要的原因是,交易中間件的誕生和完善,大概是1985年到1995年,它的出現改變了應用程式訪問資料庫的訪問模式,信息系統從兩層結構變成三層結構,顯著改善了資料庫並發響應速度。  達夢認為,集中式資料庫技術的發展,充分發揮了硬體設備的能力,當時面對的問題,最終由硬體設備的發展+集中式資料庫組合解決,人們失去了繼續發展、使用分布式資料庫技術的理由。
  • pt-table-checksum 到底會不會影響MySQL業務性能-愛可生
    工具將隔離級別調整為了 RR 級別,事務的維護代價會比 RC 要高,不過後面我們會看到工具使用的每個事務都很小,加上之前提到 innodb 鎖等待時間調到很小,對線上業務產生的成本比較小。RR 級別是數據對比的基本要求。工具通過一系列操作,了解表的概況。工具是一個數據塊一個數據塊進行校驗,這裡獲取了第一個數據塊的下邊界。
  • 蘋果重新開源分布式資料庫FoundationDB,已在內部使用三年
    策劃編輯|Natalie編譯|核子可樂FoundationDB 是「一個能在多集群伺服器上存放大規模結構化數據的分布式資料庫」。該資料庫系統專注於高性能、高可擴展性和不錯的容錯能力。這意味著使用該資料庫的項目運行起來更高效且維護成本低。
  • 十分鐘看懂時序資料庫(V)- 分布式計算
    作為物聯網領域數據存儲的首選,時序資料庫也越來越多進入人們的視野,而早在2016年7月,百度雲在其天工物聯網平臺上發布了國內首個多租戶的分布式時序資料庫產品TSDB,成為支持其發展製造,交通,能源,智慧城市等產業領域的核心產品,同時也成為百度戰略發展產業物聯網的標誌性事件。
  • 還在為 Arthas 命令頭疼? 來看看這個插件吧!
    二、 自問自答2.1 你有在使用arthas ?你們公司怎麼使用的?對啊,我們的公司經常使用,在預發環境中使用arhas 排查問題、在測試環境使用arhtas 排查問題、性能調優參考。arthas 嗯,那麼按照上上面的bash 執行一下命令即可使用。
  • 巨杉資料庫SequoiaDB巨杉TechSequoiaDB 分布式事務實現原理簡介
    1分布式事務背景隨著分布式資料庫技術的發展越來越成熟,業內對於分布式資料庫的要求也由曾經只用滿足解決海量數據的存儲和讀取這類邊緣業務向核心交易業務轉變。分布式資料庫如果要滿足核心帳務類交易需求,則其需要完善分布式事務,向傳統關係型資料庫看齊。即分布式事務的實現也需要像傳統關係型資料庫的事務一樣滿足事務的標準要求及定義,即ACID特徵。分布式資料庫的數據是進行多機器多節點分散存儲的,這樣的存儲架構為實現分布式事務帶來了極大的難度。
  • 騰訊雲資料庫品牌戰略升級 「企業級分布式資料庫TDSQL」亮相
    12月24日,騰訊雲正式宣布其資料庫品牌TDSQL的全新戰略升級計劃及未來發展戰略。未來,騰訊雲原有的TDSQL、TBase、CynosDB三大產品線將統一升級為「騰訊雲企業級分布式資料庫TDSQL」。
  • 「技術乾貨」分布式 SQL:資料庫的未來發展方向
    這包括在資料庫中的多個分布式參與者之間均勻分布數據的能力。2.一致性分布式SQL資料庫必須在分布式環境中提供高度的隔離。在基於雲的世界中,默認的體系結構是分布式系統和微服務,由於多個運營商可能試圖處理同一數據,因此事務一致性變得困難。資料庫應該調解爭用,並提供與單實例資料庫相同的事務隔離級別。