1. 程式人生 > >如何將現有的應用遷移到Choerodon豬齒魚(上)

如何將現有的應用遷移到Choerodon豬齒魚(上)

在數字化浪潮席捲之下,很多傳統行業的線上業務急速增長,其業務場景、使用者行為都發生了轉變,面對敏捷的業務和IT應變需求,如何快速地進行創新實驗,提高IT部門的總體運營效率,高效融合開發和運維的能力等一系列問題,已成為企業需要直面的挑戰。

2009年以來,DevOps越來越被重視,最開始是為了讓開發和運維人員更好地溝通協作,後來逐漸成為打通軟體產品交付過程中IT工具鏈和高效解決團隊成員協作溝通問題的有效理念。但DevOps的整體發展是獨木不成林的,現在已經有越來越多的技術支撐,微服務架構理念、容器技術等使得DevOps的實施變得更加容易。

我們研發團隊從內部產品研發需求出發,將敏捷管理、CI/CD、自動化測試、運營管理、基於SpringCloud的微服務架構、容器編排等相關開源工具整合為一個PaaS平臺,用來支援這些傳統企業的數字化轉型。

本文主要分析了專案研發團隊在開發過程中存在的一些問題,介紹了Choerodon豬齒魚對此的解決方法,最後解答了應用遷移到Choerodon豬齒魚平臺前的幾點疑慮。

主要分為以下幾個部分:

一、為什麼要使用Choerodon豬齒魚

  • 一般研發專案現狀分析
  • Choerodon豬齒魚能做哪些事情?

二、使用Choerodon豬齒魚之前的疑問

  • 程式語言
  • 容器化
  • 資料庫
  • 前後端分離
  • 微服務
  • 移動端支援
  • 公有云、混合雲

三、總結

為什麼要使用Choerodon豬齒魚

在Choerodon開發團隊接觸的大部分傳統企業中,他們面臨著業務創新的需求和壓力,同時也面臨著無法很好得使用新型技術和方法快速將創意轉化為產品的困境,IT團隊希望能夠利用Agile/DevOps、微服務和容器技術幫助業務進行快速創新,相關的開源工具非常多,而且工具鏈條很長,把它們整合應用起來對IT部門來說要求非常高,很多傳統的企業並不具備這樣的能力。

一般研發專案現狀分析

應對易變的需求能力弱

傳統的研發專案往往採用瀑布式的開發方式,從立項、需求、設計、開發,測試到最終運營管理,由於市場或者使用者的需求經常性發生變化,瀑布式模型的能力比較弱;當然,現在很多專案並不是完全遵循瀑布式的開發方式,在進入運營期當需求變化時,會進行靈活地處理,尤其是持續更新的產品。但這種情況仍缺乏明確的管理策略,更多的是“東補西湊”的“理念”,與敏捷開發還是有所不同。另外,開發人員往往沒有書面記錄使用者的變更需求,可能會導致無法追溯系統軟體變更的歷史

缺乏有效的分支管理與版本控制機制

現在越來越多的專案使用Git作為版本控制的工具,通過Git進行分支和Tag管理,大多數情況這個過程都由手工完成,缺乏相應的規範,對於分支和版本號的控制也很隨意,出現這樣的情況往往是大家對軟體交付過程中的軟體版本控制不夠重視,“只要確保軟體是最新的版本即可”,甚至是專案管理的漏洞或者缺陷。

多采用手工或者半自動的部署方式

能否實現自動化和高效地部署是衡量一個團隊工作能力的核心標誌之一。很多團隊採用手工的部署方式,有經驗的“老司機”都知道,部署過程往往都是拉取原始碼、編譯、構建,然後上傳到伺服器、停止伺服器、覆蓋程式碼,最後啟動,甚至還有各種系統設定等。每次部署都要經歷這個過程,小到一個Bug的修復,大到釋出一個大版本。這樣直接會導致部署頻率較低,進而降低使用者需求或者價值的交付頻率。

文件缺乏規範管理

文件是專案或者系統的積累和沉澱,包括專案初期的應用藍圖、架構圖、分階段實施計劃,以及開發過程中的設計文件、產品功能文件等。在系統開發前期,大家可能對於維護文件還是比較積極的,但是隨著產品不斷迭代,慢慢大家就會疏於更新文件,導致文件與功能沒有辦法銜接對照。

缺乏駕馭微服務架構的能力

近幾年微服務方興未艾,尤其是Spring Cloud架構的不斷成熟,以及Service Mesh的正式版本釋出。由於微服務架構體系涉及到的技術種類非常多,幾乎所有的微服務框架不能直接拿來使用,需要投入很大的人力物力進行前期研究、基礎系統框架的搭建,這對於很多傳統研發團隊來說是一件很難的事情。

軟硬體資源及交付過程缺乏統一管控

專案組在申請軟硬體資源時,缺乏統一管控,各專案組獨立部署,無法實現資源有效共享,資源利用率低,浪費嚴重。另外,在企業內部缺乏統一的支撐平臺,每個專案組從開發到上線,基本上都是從零開始,專案交付過程中的沉澱很少,功能模組無法複用,交付過程也缺乏統一,交付週期長,需求響應慢。

以上是Choerodon團隊在實踐過程中遇到看到的情況,這些情況的存在可能導致研發團隊效能的低下,進而影響到使用者需求和價值的交付。對於研發團隊效能的問題,國際上的一些組織也有相關的研究和定義,DORA 與 Google Cloud 合作釋出的 2018 年《DevOps 現狀報告》中,將團隊根據 DORA 的軟體交付效能基準劃分為三種類型:高效能、中效能與低效能團隊,以團隊產出來進行評價,釋出頻率、變更響應時間、服務恢復時間,以及變更故障率等指標作為劃分的參考標準。其劃分標準如下:

對於低效能團隊如何改進才能進一步釋放潛能,提高團隊的效率,DORA 的研究強調技術轉型實踐至關重要。這些重要的實踐包括版本控制,自動化部署,持續整合(CI),基於主幹的開發以及鬆耦合架構。 今年DORA還發現,有助於持續交付(CD)的實踐包括:使用監控和可觀察性解決方案,持續測試,將資料庫更改整合到這樣的軟體交付流程中,以及關注安全性。

Choerodon豬齒魚能做哪些事情?

對於一般軟體研發類專案,往往包含產品立項、需求分析、應用設計,以及開發 、測試、持續部署與釋出,生產運維等。本節將給大家闡述,Choerodon豬齒魚是如何支援整個研發過程的,以及採用哪些手段來提高軟體交付的效率。

 

產品立項

產品立項是啟動產品研發的第一個階段,最核心的工作是要確定產品的定位,包括目標使用者、使用者需要、產品名稱、產品型別、關鍵優點、主要競品、主要不同,以及相關成本投入、團隊建設等。此時,可以使用Choerodon豬齒魚的知識管理功能,方便的記錄產品立項階段的各種輸出文件。

需求分析

針對產品立項中的要求(例如使用者需要、關鍵優點)進行需求分析,做好使用者訪談等。此時,可以使用Choerodon豬齒魚的知識管理功能,方便的記錄需求分析的各種輸出文件。

應用設計

在應用設計階段,將設計應用藍圖,構建整體系統架構和指定分階段實施計劃等。此時,可以使用Choerodon豬齒魚的知識管理功能,方便地記錄應用設計階段的各種輸出文件。

知識管理是一個輕量級的強大Wiki平臺,允許使用者根據自己的特定需求自定義Wiki,為企業、IT團隊提供方便的專案協作平臺和強大的專案內容管理平臺,集中式管理產品相關內容等,例如需求收集、架構設計、功能設計、開發規範、命名規範、會議記錄、計劃安排等。

開發

在專案進入開發階段,主要進行程式碼開發、單元測試、分支管理和版本控制等。Choerodon的開發流水線採用Gitlab CI作為持續整合工具,研發團隊可以進行程式碼託管、分支管理、版本控制,有效簡化應用開發、縮短應用生命週期,快速迭代。

測試

在測試過程中,團隊需要進行測試用例管理、測試計劃和執行,以及測試分析等。Choerodon的測試管理為使用者提供敏捷化的持續測試工具,包括測試用例管理、測試迴圈、測試分析等,可以有效地提高軟體測試的效率和質量,提高測試的靈活性和視覺化水平,最終減少測試時間,讓使用者將主要精力放到軟體功能構建上。

持續部署與釋出

持續部署與釋出是採用自動化的手段,持續地釋出可部署的系統版本,並能夠實現方便自動地將系統版本部署到目標環境中。此過程可以藉助Choerodon豬齒魚的部署流水線,方便地管理各種使用Choerodon開發部署的應用服務和資源,包括一鍵部署、應用啟停、狀態監控,以及應容器管理等。

生產運維

在生產運維階段要對系統進行監控等,可以藉助Choerndon的運營管理服務,其提供一整套完整的運營管理工具,在軟體交付生產的各個環節建立資料收集和度量,監控主要包含開發類指標、伺服器日誌、應用系統日誌和微服務呼叫鏈等資訊;同時,提供各種分析報告,幫助使用者優化IT資源配置。

另外,還有專案管理,專案管理貫穿整個產品的研發週期,藉助Choerodon的敏捷管理服務,通過故事地圖、使用者故事來管理使用者故事和釋出計劃,通過迭代來管理衝刺,最後通過看板來視覺化衝刺的執行,讓需求、計劃、執行一目瞭然,使整個軟體開發流程管理規範化。

並且,Choerodon豬齒魚提供了一套基於Spring Cloud的微服務開發框架,在其中,做了大量的整合和封裝,預置了許可權、資料一致性、登入、前端UI 、審批、系統管理、個人中心等諸多模組,可以讓使用者專注基於業務的實現開發。

遷移之前的疑問

在遷移之前,系統架構師或者軟體工程師對Choerodon豬齒魚可能有一些疑問,例如,Choerodon是否有程式語言限制,對資料庫的支援情況怎麼樣,是否支援公有云等。下面就對於普遍的疑問,一一作答。

程式語言

Choerodon豬齒魚的核心部分是一個PaaS平臺,採用Sping Cloud微服務架構進行開發構建。根據Choerodon豬齒魚的設計思路,只要是能夠容器化的應用都可以使用Choerodon的PaaS平臺進行開發和部署,應用本身可以採用不同的程式語言,例如Java、C、C++、C#、Python、Go,以及由程式語言衍生出來的各種開發框架,例如Spring Cloud、Spring、Struts、Mybatis、Django、Flask、ReactJs、AngularJs等(這裡不一一列舉)。

容器化

Choerodon豬齒魚一個核心的特性是通過映象和容器實現“不可變架構”,不可變架構的好處是在程式開發階段生成的可部署版本是映象,在映象中已經做過系統需要的各種設定,可直接通過映象生成部署容器,不管是開發環境、測試環境還是正式環境,映象不可變化,即所有環境的系統設定是一致的,避免不一致導致的各種系統問題。

Choerodon的開發流水線結束生成後將生成版本化的映象和相關的配置檔案,在部署階段,直接將映象部署到Kubernetes叢集中,所以,如果要使用Choerodon豬齒魚的部署功能,應用程式必須容器化。

資料庫

軟體系統一般分為應用層(前端、後端)和資料庫層,以及部署相關,Choerodon豬齒魚主要覆蓋應用層,以及部署相關的容器層,現在還沒有覆蓋資料庫層的相關內容。對於資料庫層,使用者可以選擇自建或者是使用公有云的RDS服務。另外,程式中依然可以使用自動化的指令碼構建資料庫和初始化資料等,與原來沒有任何區別

前後端分離

目前很流行前後端分離的架構,例如後端使用SSM,前端採用React、Ant Design,移動端採用React Native等。Choerodon豬齒魚完全支援這樣的前後端分離架構,其實還是那句話“只要是能夠容器化的應用都可以使用Choerodon的PaaS平臺進行開發和部署”。

微服務

微服務是目前非常流行的技術之一,代表有Spring Cloud、Dubbo等。現在大家在談微服務的時候一定要加上Agile/DevOps,貌似微服務+Agile/DevOps是不可分割的整體。根據實踐經驗,微服務的實施和落地需要從專案管理,開發,部署,運營監控,以及容器化等多個方面來考慮和配套。Choerodon豬齒魚實際上是因微服務而生,有一整套完整的工具鏈條來支撐微服務的實施和落地。

移動應用支援

現在有各種移動應用技術,如React Native,Weex,PWA等。用這些或者別的框架開發的模組應用,只要能夠打包成一個檔案並且能夠在原生應用中使用的,就可以通過Choerodon豬齒魚進行移動微服務的版本跟蹤、釋出、回退甚至是根據不同主版本號進行個性化定製。

但是總應用的開發(一般用原生的Java或者OC或者Swift來開發原生應用)作為一個前置條件,是不通過微服務管理的(因為往往要涉及到應用的稽核、推送、上架等),所以這裡說的移動應用微服務化是指其中的模組應用。總應用只要能夠實現檔案的下載、覆蓋,版本的對比即可。

如果總應用開發完成,在日常開發中開發人員要做的只是獨立的模組開發,推送到Git庫,觸發CI,這時會生成模組的映象並推送,然後在Choerodon豬齒魚中選擇是否可見和版本管理,即可在手機的應用上檢視或者更新該模組。

公有云、混合雲

Choerodon豬齒魚是基於Kubernetes部署的,只要是能夠安裝部署Kubernetes就可以安裝使用豬齒魚,所以公有云、私有云或者混合雲,只要安裝了Kubernetes,就可以安裝使用Choerodon豬齒魚,另外,對於公有云中提供的RDS、NFS等服務Choerodon也可以使用,但是對於公有云提供的Kubernetes服務,阿里雲、騰訊雲的K8s服務是沒有問題的,AWS的K8s服務可能有問題,因為AWS的Kubernetes服務是經過客戶化的與開源版本的可能有所不同。

總 結

Choerodon豬齒魚採用DevOps的原則和敏捷模型來管理軟體的開發和運維,可以有效提高軟體交付的質量(比如:提高可用性,提高變更成功率,減少故障等),加快產品推向市場(比如:縮短開發週期時間和更高的部署頻率),並且提高組織的有效性(比如:將時間花在價值增加活動中,減少浪費,同時交付更多的價值至客戶手中),有效地幫助企業或者組織提升IT效能。

在第二篇文章《如何將現有的應用遷移到Choerodon豬齒魚(下)》中,將詳細的介紹將現有的應用遷移到Choerodon豬齒魚的詳細步驟。

關於Choerodon豬齒魚

Choerodon豬齒魚是一個開源企業服務平臺,是基於Kubernetes的容器編排和管理能力,整合DevOps工具鏈、微服務和移動應用框架,來幫助企業實現敏捷化的應用交付和自動化的運營管理的開源平臺,同時提供IoT、支付、資料、智慧洞察、企業應用市場等業務元件,致力幫助企業聚焦於業務,加速數字化轉型。

大家可以通過以下社群途徑瞭解豬齒魚的最新動態、產品特性,以及參與社群貢獻:

歡迎加入Choerodon豬齒魚社群,共同為企業數字化服務打造一個開放的生態平臺。