摘要:
我們選擇的中國軟件杯賽題為基於百度飛槳的實現行人追蹤。主要功能要求為實現單攝像頭目標追蹤,形成可交互運行的軟件,用戶可自行上傳視頻實現行人追蹤,同時軟件可以實時輸出圖像中的人數。基於深度學習的行人跟蹤,是安防場景的重要研究領域,通過提供的訓練數據集進行訓練,最后實現對行人追蹤軟件的開發。本文以該系統為例,主要論述了雲原生架構在項目中的具體應用。
我們參加中國軟件杯,進行基於百度飛槳的實現行人追蹤賽題參賽,最終形成相應的軟件,從而實現實現單攝像頭目標追蹤,形成可交互運行的軟件,用戶可自行上傳視頻實現行人追蹤,同時軟件可以實時輸出圖像中的人數等功能。本文主要以該軟件為例,主要論述了雲原生架構在項目中的具體應用。
雲原生架構以微服務和容器技術為代表,有服務化、強韌性、可觀測性和自動化四類設計原則。通過服務化的設計原則,應用被分解為多個服務,可分別選擇不同的技術,單個服務模塊很容易開發、理解和維護,無需協調其他服務對本服務的影響;通過強韌性的設計原則,微服務可以分布式雲化部署,負載均衡管理請求的分發,避免單機失敗對整體服務的影響,以及彈性調整資源容量;通過可觀測性的設計原則,能夠對系統進行健康檢查、指標監控、日志管理和鏈路追蹤,提高系統運維、管理和排錯能力;通過自動化的設計原則,可實現系統的自動化部署、自動化擴展伸縮、自動化運維、持續交付和集成,有效減少人工操作的工作量。
架構分析:
雲原生架構的目的是使企業能夠在公有雲,私有雲或者混合雲等動態環境中構建和運行可擴展的應用。代表技術包括容器,服務網格,微服務,不可變基礎設施和聲明式API。這些技術能夠構建容錯性好、易於管理和便於觀察的松耦合系統。結合可靠的自動化手段,雲原生技術使工程師們能夠輕松地對系統作出頻繁和可預測的重大變更。
我們同過百度飛漿的平台AIStudio,實現多鏡頭的行人識別功能,通過百度AIStudio平台進行相應的訓練,逐步提高識別的准確性以及穩定性。
雲原生架構主要對業務場景、隔離故障、容錯、自動恢復等非功能性要求考慮較多,通過雲原生架構可實現彈性資源的要求、跨機房的高可用、數據高可用。
敏捷基礎設施要求像機器等基礎資源,能夠支持開發人員、運維人員和業務人員通過代碼隨時拉取、隨時釋放,同時以接口的方式提供彈性、按需的計算和存儲能力,且是自動化。我的理解就是實現代碼的封裝,利用接口提高代碼的利用率。
傳統單體應用中,開發人員的代碼包含3部分:業務代碼、三方軟件、處理非功能特性的代碼,其中只有業務代碼是核心,是對業務真正帶來價值的。雲原生架構大大減少了業務代碼開發人員的技術關注范圍。
雲原生應用:
雲原生核心是雲原生應用,范圍包括雲原生應用生命周期過程的理論、工具和方法。雲原生十二因素是判斷是否是雲原生的基本原則,也是實現雲原生應用的基本理論指導。
雲原生架構的應用可以最大程度利用雲服務和提升軟件交付能力,加快軟件開發,表現在以下3個方面:
1.代碼結構發生巨大變化。 雲把三方軟硬件的能力升級成了服務,開發人員的開發復雜度和運維人員的運維工作量都得到極大降低。
2.非功能性特性的大量委托。 非功能性特性是沒有給業務帶來直接業務價值,但通常又是必不可少的特性,比如高可用能力、容災能力、安全特性、可運維性、易用性、可測試性、灰度發布能力等等。大量非功能性特性,特別是分布式環境下復雜非功能性問題,被雲產品處理掉了。以高可用為例:
虛機:當虛機檢測到底層硬件異常時,自動幫助應用做熱遷移,應用對整個遷移過程都不會有任何感知;
容器:容器通過監控檢查探測到進程狀態異常,從而實施異常節點的下線、新節點上線和生產流量的切換等操作,整個過程自動完成而無需運維人員干預;
雲服務:應用可以把“有狀態”部分都交給了雲服務(如緩存、數據庫、對象存儲等),由於雲服務本身具備極強的高可用能力,那么應用本身會變成更薄的“無狀態”應用,因為高可用故障帶來的業務中斷會降至分鍾級。
3.高度自動化的軟件交付。
雲原生應用,就是天生具備雲計算基因,以雲計算的思想構建並適用於雲計算環境的應用。它應該具備我們提到的特性:可以通過網絡訪問、遠端部署執行、可擴展彈性伸縮、共享、按需使用自主服務、高可用、可遠程監控計費審計、標准化交付與位置無關等。
我們后期將會實現行人跟蹤軟件的開發以及用戶可以使用軟件上傳視頻,實現單攝像頭下的目標追蹤。
總結:
目前我們實現了對行人的追蹤功能以及多類型的識別功能,目前遇到的困難就是識別的准確性有待提高,以及對類別的判斷不是很好,我們將通過訓練不斷的提高識別的准確性。