Categories
程式開發

做軟件國產化,我們太難了


做軟件國產化,我們太難了 1

長期以來,中國信息產業“缺芯少魂”,“芯”指芯片,“魂”指操作系統。 2018年,中興事件後,國產芯片一時成為萬眾矚目的焦點,並引發一片網絡熱議。有網友評論,“這次被美國卡住的芯,一萬年也要搞出來”。

殊不知,即使造出來國產芯,還沒搞定國產操作系統。即使弄出國產操作系統,數據庫上依然受制於人。即使有了國產芯、國產操作系統,我們依然沒有解決最大問題——缺乏國產軟件的生態。這個生態聯繫緊密,“環環相扣”,底層是芯片、中間是操作系統、數據庫、中間件等,上層是大量的應用和服務。

為了建立一個健康的國產軟件生態,不僅要有國產芯片、國產操作系統和國產數據庫,而且還需要大量第三方應用和服務去適配它們。這樣,國產軟件生態才能“茁壯成長”。

涉足軟件國產化

一般來說,國產軟件可以分為三類:基礎軟件、通用軟件和垂直行業應用軟件。其中,基礎軟件包含操作系統、數據庫和中間件,並且它是IT行業發展的中流砥柱。但是,在操作系統和數據庫方面,這一直是我們的“軟肋”。

“狹義上的軟件國產化主要指操作系統和中間件的國產化。”DataPipeline CTO 陳肅說。

在其他領域,像手機App、企業應用軟件和企業服務軟件等雖然也屬於國產化軟件,但是它們過去一直在穩步發展。

近幾年,很多人是從比較火的國產數據庫/數據倉庫開始了解軟件國產化的。其中,代表性的國產數據庫有TiDB、GaussDB和SequoiaDB等。

國內云計算的應用和普及,有望成為國產數據庫發展的重要機遇。比如,國內云廠商針對雲環境應用的特點,推出開源數據庫的深度定制化版本和自研的數據庫/數據倉庫版本。

眾所周知,在2019年全球OLTP數據庫權威測試TPC-C中,阿里雲的OceanBase數據庫“一舉奪冠”,不僅打破Oracle維持9年的世界紀錄,而且讓更多人認識到國產數據庫的發展水平。

據悉,DataPipeline是一個批流一體數據融合平台,它主要為企業提供數據採集、API 數據接入、可視化運維管理和元數據管理等功能。其核心功能之一是完成異構數據庫的抽取、轉換、寫入。

陳肅表示,對DataPipeline而言,軟件國產化意味著不僅要適配國產數據庫和數據倉庫,而且要適配國產操作系統和硬件環境。 DataPipeline主要基於容器化部署,在國產操作系統、ARM硬件環境上有時會遇到一些兼容性和性能問題,因此要根據具體環境進行適配和調優。

與之相似,融雲則是另一家開展“軟件國產化”的企業,它的工作也是去適配國產操作系統、國產數據庫等。對融雲而言,軟件國產化不僅僅是適配,而且要保證在不同的國產操作系統中,它對網絡和數據庫層面的優化同樣生效,並確保性能層面與標準產品性能對齊。

需求驅動

無論是DataPipeline,還是融雲,它們之所以涉足軟件國產化,原因很簡單:客戶有需求

以DataPipeline為例,2016年,這家公司在客戶側感知到國產化需求的增加,開始根據收到的客戶需求數量進行優先級排序和研發。以市場為導向,如果只有個別用戶有需求,企業可能會當做定制化需求去適配。一旦它變成普遍需求,就需要進行產品化開發,“作為一家創業公司,我們的優勢之一是能快速對市場需求做出響應。”

同樣,在3年前,融雲開始走上國產化適配的道路。

融雲CTO楊攀向InfoQ記者透露,“我們做國產化,是因為客戶群體中有大量面向企事業單位、政府等機構的服務商。客戶需求最終驅動融雲啟動國產化工作。”

適配怎麼做?

對融雲和DataPipeline而言,它們面臨的第一個問題是確定適配目標。 “定目標”,這看上去很簡單,實則不易。

以國產操作系統為例,企業要先確定自己的應用或服務適配哪一個國產操作系統。而根據公開不完全統計,市面上,國產操作系統有十幾個,包括深度Linux(Deepin)、優麒麟(UbuntuKylin)、中標麒麟(NeoKylin)、中興新支點操作系統、銀河麒麟等。

這麼多操作系統,確定初期的適配目標非常重要,因為它關乎成敗。

一旦確定開始的適配目標,就會遇到第二個難題。

楊攀說,“在適配的操作系統具體版本上選擇很難,因為有各種版本,讓人眼花繚亂,比如通用版、高級版和安全版等。並且,除官網簡單說明外,各個版本間的具體區別很難獲取到詳細信息。 ”

如果是適配某個行業數據庫,企業較難從公開渠道獲取到數據庫最新發布版本和各版本差異。最後即使通過與售前人員聯繫獲得數據庫安裝文件,但在實際適配過程中依然有坑,“實際適配中,某些特性無法很好的支持,而產品技術人員也無法給出明確解釋,最終只能由適配人員從代碼層面著手解決。”

通過市場調研,融云了解到:在CPU芯片體系架構上,主要分為X86、ARM64、MIPS64;在國產操作系統上,市場佔有率較高的有中標麒麟、銀河麒麟等。在數據庫方面,除了考慮市場佔有率和品牌外,他們還考慮了特定行業的需求,“最終確定達夢、金倉、神通、南通”。

根據自身產品使用的語言、架構及中間件、適配評估的難度、週期和可行性方面,“我們確定的策略首先是X86 + 中標麒麟/銀河麒麟+ 達夢&金倉&神通&南通,其次是適配MIPS64,最後是ARM64體系。”楊攀說。

目前,融雲的適配工作有10餘人參與,包括服務端研發、PC端研發和DevOps以及部署實施等人員。在實際適配時,團隊人員主要分為三類:研發人員負責數據庫的適配,DevOps人員負責中間件在操作系統上的適配,集成測試人員負責適配後的整體測試。

軟件坑點和復雜性挑戰

適配工作不斷推進,“坑”也越來越多。以數據庫的適配為例,融雲遇到的挑戰是對標準SQL語法的理解一致性的問題。

據楊攀介紹,適配SQL時,不僅對utf8-mb4字符集的支持標準不統一,而且報錯時,隱式和顯式通知也各不相同。為解決該問題,他們投入大量測試資源,對用到utf-mb4的業務邏輯,最終通過業務層進行轉碼來適配。

在適配過程中,“軟件坑點”只是困難之一,最大的困難或許是適配複雜性

“產品依賴的一些組件需要進行OS層面的適配。例如,用C 開發的基礎組件,包括Nginx、Redis和OpenResty等,它們在編譯過程中需要依賴指定的glibc庫版本。因此,需要升級glibc庫操作才可以正常運行。“他說。

並且,國產操作系統版本較多,架構不一致,也會大大提升複雜度。同時,架構不一致也會帶來一系列問題,例如基礎組件依賴的OS內置底層開發環境glibc庫的版本不一致,需要升級、重新編譯或在部署產品過程中處理掉程序的所有相關依賴項,在多個操作系統上進行反複測試,最終達到適配。

此外,除融云自研服務外,依賴的中間件,比如Nginx、Redis、ActiveMQ等。對不同的系統內核和基礎組件版本,它們在運行時的表現有差異。這需要通過融雲完整的單元測試用例和性能測試框架去覆蓋功能及性能測試,從而發現潛在問題,“這部分工作也是整個適配過程中復雜度較高的工作內容”。

不過,在楊攀看來,數據庫和操作系統的適配工作所面臨的挑戰和復雜度是不一樣的。

操作系統的適配,由於涉及眾多組件,主要工作是在不影響性能的前提下,觀察整個融雲的服務端所有組件及服務在指定操作系統上能否更好的配合起來,良好運行。它更多的工作是進行調優以及驗證。

數據庫的適配,更多是對SQL語法的改寫和驗證。 “不僅功能性的驗證工作佔比相對多一些,而且代碼層面的工作量相對更多,且更加繁瑣”。

對DataPipeline而言,操作系統和硬件環境的適配更多是靠靈活的部署策略。比如,某些環境容器化運行不穩定,DataPipeline則提供非容器化的集群部署方式。

陳肅表示,工作量最大且最複雜的是將國產數據庫作為數據源和數據目的地進行適配。對於數據源,DataPipeline通常需要提供基於日誌的實時採集和基於JDBC的批量查詢兩種同步方式。但是,不同國產數據庫日誌記錄的原理各不相同,而且對第三方解析的友好支持程度也不同,因此需要投入比較多的精力去解決該問題,並應對一些特殊數據類型的處理。而在數據目的地端,他們面臨的主要挑戰是如何實現靈活高性能的寫入。這通常需要根據數據庫特性,提供實時和批量加載兩種方式。

雖然有諸多困難,但是在他看來,國產數據庫/數據倉庫有著自己的優勢

優勢一是架構的先進性。國產數據庫雖然起步較晚,但可以參考成熟產品並結合新理論進行架構方面的創新。國產數據庫在水平擴展和分佈式容錯等方面比較優秀,這是受益於架構先進性。

另外,這波國產化浪潮正好趕上人工智能的風口。在傳統數據庫運維中,最頭疼的是參數調優和故障恢復。以華為GaussDB為代表的一些國產數據庫,將智能化運維作為重要產品特性加以研發和應用,“這代表了未來方向”

第二個優勢是本地化服務。相比國外大廠,國內公司在靈活度、服務成本等方面都有一定優勢。另外,國產數據庫可根據國家政策對產品和服務進行調整的限制少、週期短,更容易滿足國家“安全可控信息技術”方面的法規要求。

10分鐘解決一個bug

在適配Oracle等傳統數據庫時,遇到問題時,DataPipeline主要靠官方技術文檔來解決。比如,如何提高寫入速度,只能通過不斷實驗進行調優。但是在適配國產數據庫時,“我們會和產品方建立比較密切的聯繫,有技術討論群,可以找到對方架構師甚至CTO討論問題。”陳肅說。

在2019年,有一次,客戶反饋某個國產數據庫目的地報了寫入異常,查看錯誤提示,得知問題是出於參數數量超過限定值。因為該數據庫是高度兼容MySQL,同樣的數據寫入MySQL卻沒有問題。

“我們於是把這個bug放到技術討論群裡進行反饋,10分鐘就得到答复,而bug也在第二週的例行發行版中得到修復。同時,確認該bug產生的原因後,我們立即在產品中做了限制,幫客戶繞過這個問題。”他說,“這樣的響應速度和交流便捷性,是我們在做傳統數據庫適配時無法想像的。這也是國產軟件的優勢之一。 ”

眾所周知,在所有行業中,金融行業是對數據庫一致性和可靠性的要求是最高的。傳統上,這個領域是Oracle、IBM等公司的“天下”。

在陳肅看來,截至目前,絕大多數銀行的交易系統依然是基於Oracle和DB2。

對銀行而言,核心交易系統的升級和替換是一件需要慎重考慮的事情。一方面,即使國產數據庫本身足夠優秀和穩定,也需要大量測試來保證遷移的平滑和遷移後的穩定;另一方面,大部分現有應用可能包含一些特定數據庫的方言,遷移到國產數據庫時,由於支持的方言不同,需要經歷一個適配過程。

因此,這兩點決定國產數據庫的存量替換工作在銀行核心系統上還有一個相對漫長的過程

對於國產數據庫/數據倉庫的使用,金融行業更多是從分析系統入手。有些國產數據庫,比如TiDB,它是支持OLTP和OLAP二合一的。在實際應用中,金融企業一般從數據倉庫應用入手,逐步在邊緣業務系統或新業務系統使用,最終進入核心系統。

與之相比,互聯網公司負擔較輕,“我們確實看到一些互聯網公司在比較激進地使用國產數據庫替代原有數據庫,尤其是在大規模的分佈式集群應用場景下“。

崛起的國產化軟件

無論是DataPipeline,還是融雲,它們只是無數適配企業的一個縮影。在其背後,我們看到的是國產化軟件正在崛起。

眾所周知,過去四十年,中國在白色家電、消費電子、通信技術、高速鐵路、生物醫藥等領域取得極大進步,甚至在某些領域處於世界領先。但是,在操作系統、數據庫等軟件系統偏底層的領域,始終主要依賴國外產品。隨著中國經濟體量的進一步增大,圍繞這些核心組件的產品+服務的市場規模不斷擴大。按照經濟規律,資本和社會資源就會逐漸流向這個領域,推動其發展和落地。

其次,國家層面對“安全可控信息技術”不斷深化的要求,催生出存量替換市場。據悉,早在2014和2015年,國家針對金融行業提出安全可控信息技術推進指南。操作系統、數據庫等核心組件是其中的重要組成。並且,隨著中美貿易戰的爆發,這項措施的必要性更加凸顯,這也促使“國產化”在更多部門和行業內加速推進。

此外,還有優秀的人才培養和人才回流。過去幾年,國內頭部公司培養和招募了國內外大量的優秀人才,其中包括從事操作系統、數據庫以及各類分佈式中間件的研發人員。並且,隨著IBM、Oracle在內的國外巨頭縮減國內研發中心,一些有豐富經驗的工程師相繼加入國內公司從事研發工作。