融云國(guó)產(chǎn)化適配排坑指南

  融云支持國(guó)產(chǎn)化的初心,可追溯到2017年進(jìn)入政企市場(chǎng)之日起。時(shí)至今日,融云已成為國(guó)產(chǎn)化支持最完善、徹底的企業(yè)之一。

(融云國(guó)產(chǎn)化適配范圍)

  基于豐富的國(guó)產(chǎn)化經(jīng)驗(yàn),「超鏈接實(shí)驗(yàn)室」首期課程《國(guó)產(chǎn)化之路——國(guó)產(chǎn)化適配的那些坑》于3月30日正式開(kāi)播。融云服務(wù)端研發(fā)架構(gòu)師陳祥從服務(wù)端國(guó)產(chǎn)化適配、客戶(hù)端國(guó)產(chǎn)化適配、以及國(guó)產(chǎn)化部署交付等三個(gè)部分為主要切入點(diǎn),詳細(xì)講述了融云在國(guó)產(chǎn)化適配過(guò)程中曾遭遇的難題,并提出了一系列經(jīng)過(guò)融云多次驗(yàn)證的解決方案,希望正走在“國(guó)產(chǎn)化之路”上的伙伴們可以以此為鑒,少走彎路。

  國(guó)產(chǎn)數(shù)據(jù)庫(kù)下命名沖突怎么辦?

  中間件編譯失敗怎么辦?

  客戶(hù)端截屏功能?法正常使?怎么辦?

  ······

  完整版視頻請(qǐng)移步【融云 RongCloud】回復(fù)“超鏈接實(shí)驗(yàn)室”觀看~助您尋找答案~

  沒(méi)時(shí)間看視頻?

  沒(méi)關(guān)系,小編為您整理了本期干貨集錦

  后臺(tái)回復(fù)【超鏈接實(shí)驗(yàn)室】可領(lǐng)取PPT。

  01

  服務(wù)端國(guó)產(chǎn)化適配

  ◆關(guān)系型數(shù)據(jù)庫(kù)表名/字段名建議全?寫(xiě)且避免以單個(gè)單詞命名

  ?持SQL的數(shù)據(jù)庫(kù)?般由存儲(chǔ)服務(wù)(Service)、存儲(chǔ)引擎(Engine)組成,分析器進(jìn)?SQL語(yǔ)句的詞法和語(yǔ)法分析,執(zhí)?器負(fù)責(zé)與存儲(chǔ)引擎交互,國(guó)產(chǎn)關(guān)系數(shù)據(jù)庫(kù)分析器層?均遵循SQL規(guī)范,但在存儲(chǔ)引擎上各不相同。主流國(guó)產(chǎn)關(guān)系數(shù)據(jù)庫(kù)人大?倉(cāng)、達(dá)夢(mèng)、神舟通用、南大通用雖然都?持SQL,但并不意味MySQL上執(zhí)?沒(méi)有問(wèn)題的SQL語(yǔ)句在國(guó)產(chǎn)數(shù)據(jù)庫(kù)上執(zhí)行同樣沒(méi)有問(wèn)題。

  融云建議:關(guān)系型數(shù)據(jù)庫(kù)表名/字段名建議全?寫(xiě),并且避免以單個(gè)單詞命名(在極端情況下可以將其列為開(kāi)發(fā)規(guī)范明令禁止)。

  全?寫(xiě)可以避免因?yàn)閿?shù)據(jù)庫(kù)大小寫(xiě)敏感設(shè)置所導(dǎo)致的找不到庫(kù)/表/字段的情況的發(fā)生;不以單個(gè)單詞命名表/字段,則基本可以避免關(guān)鍵字沖突問(wèn)題。

  ◆使用jdk-8u192作為Java運(yùn)行環(huán)境

  為了保障高性能,融云協(xié)同辦公產(chǎn)品的所有接入接口服務(wù)均使用Netty(Netty提供異步的、事件驅(qū)動(dòng)的網(wǎng)絡(luò)應(yīng)用程序框架和工具,用以快速開(kāi)發(fā)高性能、高可靠性的網(wǎng)絡(luò)服務(wù)器和客戶(hù)端程序)。問(wèn)題是,Netty依賴(lài)的第三方包較多,因此出現(xiàn)不支持ARM / MIPS的可能性較大,容易遭遇HTTPS處理失敗等問(wèn)題。

  經(jīng)過(guò)多方嘗試,建議:使用jdk-8u192作為Java運(yùn)行環(huán)境,并在對(duì)應(yīng)架構(gòu)下重新編譯。

  需要補(bǔ)充說(shuō)明的是,2019年1月起Oracle對(duì)JDK8進(jìn)?收費(fèi),8u192是2018年的最后?個(gè)版本更新,可以繼續(xù)免費(fèi)使用下去。但是從2019年1月開(kāi)始,如果還想獲取JDK的更新,則需要付費(fèi)訂閱。

  ◆性能測(cè)試應(yīng)覆蓋主要國(guó)產(chǎn)CPU型號(hào)

(公眾號(hào)后臺(tái)回復(fù)【超鏈接實(shí)驗(yàn)室】獲得講師PPT)

  從國(guó)產(chǎn)芯片現(xiàn)狀可以看出,國(guó)產(chǎn)化CPU以精簡(jiǎn)指令集陣營(yíng)居多,并且,在實(shí)際交付中,我們所能夠碰到的國(guó)產(chǎn)CPU也是以精簡(jiǎn)指令集類(lèi)型居多。例如:ARM架構(gòu)的鯤鵬/?騰系列、MIPS架構(gòu)的?芯(龍芯后續(xù)會(huì)主推LoongArch架構(gòu))等。由于復(fù)雜指令集和精簡(jiǎn)指令集的設(shè)計(jì)初衷不同,導(dǎo)致精簡(jiǎn)指令集CPU在性能上與復(fù)雜指令集存在較大差異(相同規(guī)格復(fù)雜指令集的CPU性能高于精簡(jiǎn)指令集CPU)。

  融云建議:在實(shí)際的交付部署中,根據(jù)不同的性能指標(biāo)進(jìn)行部署資源估算。而關(guān)于性能測(cè)試覆蓋范圍,融云建議以下幾種:

  鯤鵬920 / 920S、飛騰2000 / 2000+、龍芯3B3000 / 4000,搭配的操作系統(tǒng):統(tǒng)信V20及麒麟V10。x86架構(gòu)的海光CPU,性能上可以認(rèn)為與其他同等規(guī)格的x86 CPU相近即可。

  02

  客戶(hù)端國(guó)產(chǎn)化適配

  多數(shù)的國(guó)產(chǎn)系統(tǒng)都分桌面版和服務(wù)版,對(duì)于客戶(hù)端的國(guó)產(chǎn)化適配,我們只針對(duì)桌?版來(lái)看待和解決問(wèn)題,桌?客戶(hù)端在國(guó)產(chǎn)化適配中,容易遭遇如下問(wèn)題:

  ◆不同操作系統(tǒng)打包規(guī)范不同導(dǎo)致桌?客戶(hù)端各種?問(wèn)題

  主要問(wèn)題如:卸載后圖標(biāo)未被清理、托盤(pán)顯示2個(gè)圖標(biāo)、托盤(pán)不閃爍等。

  融云建議:先找到國(guó)產(chǎn)操作系統(tǒng)廠(chǎng)商咨詢(xún),索要打包規(guī)范,然后依據(jù)規(guī)范再進(jìn)行打包(這里需要說(shuō)明的是,各大廠(chǎng)商非常重視自身生態(tài)發(fā)展,所以對(duì)于咨詢(xún)的態(tài)度是十分開(kāi)放的,可以大膽咨詢(xún))。

  ◆不同操作系統(tǒng)libc版本不?致導(dǎo)致桌面客戶(hù)端不能正常使用

  融云協(xié)同辦公產(chǎn)品客戶(hù)端協(xié)議棧使用C++作為開(kāi)發(fā)語(yǔ)言,同時(shí),插件也基于C++開(kāi)發(fā),而在客戶(hù)端國(guó)產(chǎn)化適配過(guò)程中,C++的協(xié)議棧、插件等因?yàn)椴煌僮飨到y(tǒng)libc版本不?致,也容易引發(fā)一系列問(wèn)題。

  經(jīng)過(guò)多次嘗試,衷心建議伙伴們:無(wú)論是ARM還是MIPS架構(gòu),都在麒麟系統(tǒng)上進(jìn)行編譯,因?yàn)橥患軜?gòu)下麒麟系統(tǒng)的libc版本比統(tǒng)信系統(tǒng)低,一般麒麟系統(tǒng)的libc版本為2.2.3,統(tǒng)信的則為2.2.8。這樣基本可以避免客戶(hù)端C++插件及組件的異常。

  ◆截屏模塊采用靜態(tài)編譯

  在國(guó)產(chǎn)化適配客戶(hù)端功能測(cè)試中,客戶(hù)端截屏功能?法正常使?是最早暴露的問(wèn)題之?,與前一問(wèn)題不同的是,這里只針對(duì)客戶(hù)端的插件范疇,給出另外一種解決方案。起初,融云截屏相關(guān)組件采用的是動(dòng)態(tài)編譯的?式,由于該?式與操作系統(tǒng)的依賴(lài)性較強(qiáng),經(jīng)常出現(xiàn)在這個(gè)系統(tǒng)下可用、在另外系統(tǒng)下不可?的情況。經(jīng)過(guò)探索,最終我們采用在靜態(tài)編譯QT的基礎(chǔ)上編譯截屏node?件的方式,成功解決了不同操作系統(tǒng)下客戶(hù)端截屏功能無(wú)法正常使用的問(wèn)題。

(公眾號(hào)后臺(tái)回復(fù)【超鏈接實(shí)驗(yàn)室】獲得講師PPT)

  03

  國(guó)產(chǎn)化部署交付

  幾乎所有的應(yīng)用業(yè)務(wù)系統(tǒng)都會(huì)使用和依賴(lài)?些中間件或者工具,例如:消息隊(duì)列中間件、緩存中間件、進(jìn)程管理工具等。在部署交付之前,常常都會(huì)預(yù)先把所有的部署資源提前準(zhǔn)備好,包括:服務(wù)自身的編譯包、中間件等,因?yàn)楝F(xiàn)場(chǎng)臨時(shí)編譯顯然不是明智之舉,做不到快速部署,也無(wú)法保證整個(gè)過(guò)程的可控。

(公眾號(hào)后臺(tái)回復(fù)【超鏈接實(shí)驗(yàn)室】獲得講師PPT)

  在部署資源準(zhǔn)備方面,國(guó)產(chǎn)化適配容易遭遇以下幾個(gè)問(wèn)題:

  ◆不同操作系統(tǒng)glibc版本不?致導(dǎo)致中間件編譯失敗

  在版本的選擇上,不可過(guò)高也不可過(guò)低,如果版本過(guò)高,那么在遇到低版本時(shí),?定會(huì)出問(wèn)題;而版本過(guò)低,又會(huì)出現(xiàn)找不到依賴(lài)的情況。因此,為了統(tǒng)?編譯,達(dá)到泛部署的目的,我們建議找到?個(gè)合適的版本進(jìn)行中間件的編譯,以適應(yīng)多數(shù)場(chǎng)景。對(duì)此融云針對(duì)麒麟、統(tǒng)信做了?量的摸索和嘗試,目前已達(dá)到預(yù)編譯部署資源在多數(shù)場(chǎng)景下的正常使用。

  ◆不同操作系統(tǒng)Path環(huán)境變量不同

  很多中間件在正常運(yùn)行時(shí)都依賴(lài)于系統(tǒng)環(huán)境變量的設(shè)置,可以通過(guò)軟鏈的方式去解決,這樣可以避免對(duì)系統(tǒng)Path環(huán)境變量的修改,畢竟作為國(guó)產(chǎn)操作系統(tǒng)的使用者,在理解及評(píng)估能力方面遠(yuǎn)不及廠(chǎng)商自身,不直接修改操作系統(tǒng)的環(huán)境變量,我們就能夠規(guī)避因?yàn)樾薷南到y(tǒng)的環(huán)境變量而引發(fā)其他問(wèn)題的風(fēng)險(xiǎn)。

  ◆不同操作系統(tǒng)rpm包存在差異

  通常在自動(dòng)化部署工具的實(shí)現(xiàn)上,大家都會(huì)用Python,Python自身依賴(lài)于Python rpm包,在不同操作系統(tǒng)下,rpm包存在差異,就可能會(huì)出現(xiàn)問(wèn)題,需要針對(duì)不同操作系統(tǒng)做對(duì)應(yīng)的處理。這里建議?家:優(yōu)先使?操作系統(tǒng)?商所提供的rpm包,其次是從OS的yum源獲取。

(免責(zé)聲明:本網(wǎng)站內(nèi)容主要來(lái)自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請(qǐng)進(jìn)一步核實(shí),并對(duì)任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對(duì)有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。
任何單位或個(gè)人認(rèn)為本網(wǎng)站中的網(wǎng)頁(yè)或鏈接內(nèi)容可能涉嫌侵犯其知識(shí)產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書(shū)面權(quán)利通知或不實(shí)情況說(shuō)明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會(huì)依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開(kāi)相關(guān)鏈接。 )