(1.上海大學 通信與信息工程學院,上海 200444; 2.中國科學院 上海高等研究院,上海 201210)
隨著信息技術的快速發展以及各行業智能化的變革,催生出工業領域各種大型的復雜軟件系統。需求的頻繁變更和應用的快速部署使得傳統軟件工程方法越來越難以適應復雜軟件系統的開發與維護。敏捷開發方法通過使用快速迭代、持續集成和過程自動化技術等方法,縮短了客戶反饋周期,從一定程度上緩解了復雜軟件系統(complex software systems, CSS)開發和維護的挑戰,但在復雜軟件系統的成長性構造和適應性演化方面,仍然缺少必要的技術和方法。復雜軟件系統的成員異構性使得系統本身封閉性較強,各系統之間協同困難,其復雜性、重量級等固有特性導致系統無法快速構建和復制。
復雜軟件系統[1]是指由大量局部自治軟件系統持續集成、相互耦合關聯而成的大型軟件系統。系統要素之間的耦合交互關系動態變化且日趨復雜,整個系統的行為難以通過各自治軟件系統特征的簡單疊加加以刻畫。復雜軟件系統呈現以下典型特征:
1)邊界開放性:復雜軟件系統是在人-機-物三元融合世界,通過各種主體的融合和社會化協作,實現不斷地自我創新和演化,這決定了復雜軟件系統必須是邊界開放的,必須能夠不斷融合新的主體的加入。
2)行為涌現性:涌現現象的本質特征是由小到大、由簡入繁。復雜軟件系統是基于一個個能夠完成簡單行為的獨立軟件、微服務或單元級信息物理系統(cyber physical systems, CPS),通過相互協作,完成各種復雜的智能場景。
3)自適應性:自適應性是指復雜軟件系統面對復雜的環境,通過感知-分析-決策-執行的自適應環,不斷地進行自我調節動態地逼近目標的能力。
4)持續演化性:持續演化性是指復雜軟件系統能夠在與環境和其它復雜軟件系統進行交互作用的過程中,通過“感知-分析-決策-執行”的數據智能環[2],不斷地“學習”或者“積累經驗”,并基于學習結果和經驗改變自身結構和行為模式,從而實現演變和進化的能力。

圖1 復雜軟件系統的成長性構造
區別于傳統的軟件開發,邊界開放性和行為涌現性決定了復雜軟件系統往往是在大量已經存在的自治系統基礎上“成長”而來,使得復雜軟件系統的開發者不僅要關注復雜軟件系統層面新的需求,還要兼顧到現有軟件和服務的現狀和它們之間的協作,并且這些軟件和服務很有可能來自于不同的組織。例如,在當前智慧城市環境下的智能復雜軟件系統的開發場景中,很多都需要調用來自第三方的地圖服務、圖像識別服務、語音服務等。因此,在復雜軟件系統的開發過程中實現軟件和服務資源的跨組織共享和協作,面向某一行業實現軟件、服務的共享和匯聚,將大大加速該行業的復雜軟件系統的開發能力和速度。
本文共分為六部分:第一部分為引言,闡述本文研究的相關背景并提出研究問題;第二部分為國內外相關研究進展;第三部分介紹了基于容器云和海云分形架構的復雜軟件系統成長性構造框架;第四部分介紹了面向工業領域的復雜軟件系統成長性構造實踐;第五部分給出了一個該框架在智慧園區領域的實踐案例。
復雜軟件系統研究一直是工程界研究熱點問題。隨著應用場景的轉換和自身復雜性的增加,軟件需要平滑擴展的能力和適應自身環境變化的能力,這就意味著它需要具備橫向、縱向擴展的能力以及根據這些變化來調整自身行為的能力[3]。因此,支持大規模系統的有效開發、靈活部署和持續演化的軟件開發方法和技術逐漸成為研究熱點, 例如超大規模系統的軟件工程[4],軟件在線演化使能技術[5]、面向復雜系統的“系統聯盟” 觀點[6]。工業領域中各種嵌入式監控軟件、工業路由器和各類傳感器相互交聯,協同完成計算、通信、分析等功能,是支撐工業互聯網的高效運轉的數字中樞[7]。因此,如何驅動復雜軟件系統的構造,是軟件領域研究者和工業實踐者當前面臨的重大挑戰。王懷民[1]等人認為,復雜系統具有成員異質、邊界開放、行為涌現、持續演化等特性。通過對復雜軟件系統的內涵、形成特征和基本性質進行研究,提出了復雜軟件系統的“成長性構造”和“適應性演化”法則,并認為與離線演化技術相比,在線演化技術更有意義,它能夠使系統在結構修改和功能調整期間持續提供服務[8]。湯磊[9]等人結合自身的實際經驗和復雜軟件系統的特點和基本性質,對“成長性構造”與“演化規則”進行了探討。復雜系統的構造離不開服務的支撐,在面向服務的計算中,服務是指對資源進行封裝的自治、平臺獨立的實體,其可以被描述、發布、發現和松散綁定。通過服務的抽象與封裝,快速、廉價、可互操作、可演化和大規模的分布式應用開發成為可能[10]。服務發現和服務動態組合實質上就是建立動態連接的一種手段。更進一步, 在復雜軟件系統中,可以從系統架構的層次來看待動態連接問題。例如,動態體系結構技術[11-12]通過引入軟件運行時體系結構模型, 并且將構件和連接子都建模為一階實體,通過運行時體系結構的變化來實現軟件的新陳代謝和動態連接。
綜上所述,復雜軟件系統具有“成長性構造”和“適應性演化”兩條規律。針對成長性構造法則,思考當前工業領域內復雜軟件系統難以擴展,企業強調本地數據安全性,需要高效部署私有云等實際問題,提出一種面向工業領域的復雜系統成長性構造框架。該框架使用容器云架構,以輕量化容器技術作為突破口,希望解決復雜軟件系統的解耦、擴展、自適應、快速構建等問題。
應對復雜軟件系統開發的挑戰,本文提出了基于容器云和海云分形架構的CSS成長性構造框架,如圖2所示。該框架的核心部分包括容器云操作系統和公共服務資源。

圖2復雜軟件系統成長性構造框架
容器云操作系統為容器云提供分布式操作系統,它統一管理組成容器云的分布式服務器集群,屏蔽底層管理細節,諸如容錯、調度、通信等,讓開發人員認為分布式服務器集群在邏輯上是一臺服務器。它和單機Linux一樣要解決五大類操作系統必需的功能,即資源分配、進程管理、任務調度、進程間通信和文件系統,可分別由Docker、Mesos、Marathon/Chronos、RabbitMQ和HDFS/Ceph來解決。
容器云操作系統包括容器云管理控制臺、容器管理、路由管理、資源管理、資源編排、消息總線、服務總線、持久化管理等。其中,容器云管理控制臺負責管理云平臺的硬件資源、服務器上部署安裝的軟件資源、租戶信息、域名信息等;容器管理基于Docker Hub進行構建,可以提供高性能可伸縮的容器應用管理,支持用Docker容器進行應用生命周期管理;路由管理由Nginx和Bamboo構成,可以將終端用戶請求路由到對應的服務器實例,并且提供應用動態注冊以及負載均衡的功能;資源管理與調度是整個容器云操作系統的核心,采用Mesos作為其分布式資源管理框架,主要功能是管理應用實例的生命周期,匯報應用的運行狀態;消息總線負責分布式系統中所有功能模塊之間消息的通信與傳輸,采用RabbitMQ,該模塊需要支持pub/sub模式;服務總線基于Marathon進行構建,負責不同子系統之間的遠程調用,能夠為開發人員和運維人員提供統一的管理接口;持久化管理采用主流的分布式存儲框架Ceph,可以保證數據的高可用性與高可靠性。各個模塊的組合可以充分保證系統提供動態滿足應用需求的能力,保證其具有很好的彈性、靈活性以及可擴展性。
公共服務資源包括公共鏡像庫、資源目錄服務、容器云安裝包、Devops、安全管理、運行維護管理等。
公共鏡像庫包含所有預定義的鏡像文件、安裝包和配置文件,并提供類似于Dockerhub的功能,能夠自動化測試、開源應用、公共注冊外,還提供了restful API,讓其他公有或私有鏡像庫可以下載或上傳Docker鏡像資源。
資源目錄服務作為CSS成長性構造框架中的統一目錄服務,提供數據目錄、服務目錄等服務,為復雜軟件系統及其成員組件間實現標準化的數據交換和開放服務調用。復雜軟件系統中的各成員自己決定要開放的數據資源和服務資源,使用標準的元數據將相關資源登記到數據目錄和服務目錄中,使得其它的復雜軟件系統和成員可以通過目錄服務,發現和使用開放的數據資源和服務資源,最終實現基于標準方式完成數據交換和服務整合。
容器云安裝包是容器云管理控制臺的安裝文件,分形租戶能夠在控制臺自動化設置容器云管理模塊,從公共鏡像庫中下載好相關鏡像后,分形租戶能夠獲得和公有云完全相同的容器云能力。
DevOps提供復雜軟件系統的開發測試能力,通過提供的類似Github的協作平臺,使能開發者可以協同定義設計復雜軟件系統。此外,它還為復雜軟件系統及其包含的各種主體提供微服務架構支持,使其能夠以微服務的方式封裝各自的業務領域組件,并通過云服務使其自動化部署、智能化管理和服務功能交付變得更加簡單。
安全管理服務為復雜軟件系統成長性構造框架以及在它上面開發的各種復雜軟件系統提供統一認證、授權和加密服務,確保數據和服務被安全的使用。
運維管理服務復雜軟件系統成長性構造框架以及在它上面開發的各種復雜軟件系統提供統一監控、日志分析服務,確保整個環境的可靠運行。
為了更快、更方便地滿足企業基于私有云開發復雜軟件系統的需求,海云協同計算分形架構技術結合容器技術和多租戶技術,實現了容器云服務從云端到邊緣端的快速復制能力,并且邊緣端擁有進一步向其子節點復制的能力。當某個復雜軟件系統的開發組織希望建立私有容器云支撐系統的運行,同時還希望能夠盡可能多地獲取第三方分享的應用、數據和服務時,CSS開發者可以通過下面指定的操作,完成海云分型架構的分形過程。
1)租戶創建:在CSS成長性構造框架中的容器云管理控制臺中建立一個新的租戶;
2)私有repository搭建:私有云使用者可以選擇安裝本地鏡像庫服務和目錄服務,其需要將公有repository中相應的資源信息下載到本地;
3)云安裝包的下載與執行:在CSS成長性構框架中的容器云管理控制臺中將云安裝包下載到租戶本地進行安裝并運行;
4)私有云硬件資源配置:安裝包運行成功后,該租戶可以進入其管理界面添加該私有云需要的服務器資源,此時該租戶所在的服務器與其它新添加的服務器會打通無密碼登陸,便于后續組件的安裝;
5)服務器角色配置:當服務器添加完畢后,會按照容器云操作系統中需要構建的模塊自動為每臺服務器配置其需要安裝的功能組件。此時,該租戶也可以根據實際的服務器資源情況手工調整各個模塊所需安裝的服務器;
6)私有云構建:點擊一步部署,這時各個服務器會按照步驟5中配置好的功能組件進行自動安裝,各個功能組件將從repository下載。此時,如果該租戶構建了私有repository,則執行效率會更快;
7)私有云域名配置:在第4步該租戶的管理界面中可以配置該私有云的域名,這時會自動生成Nginx域名配置文件后拷貝到Nginx所在的目錄中,并且重新加載其名下的所有域名配置文件,完成整個私有云的搭建。
通過以上的分形過程,CSS開發者立刻擁有了一個和CSS成長性構造云服務幾乎一樣的私有云,它基于分布式拓撲結構的服務架構模型,采用無中心和冗余備份策略,擁有良好的可擴展性和魯棒性,因此,能夠很好地滿足復雜軟件系統的成長性構造需求。
復雜軟件系統成長性構造框架從以下兩個方面加速了復雜軟件系統的開發。1.海云分形架構使我們能夠通過創建一個分形租戶和訂購所需的服務來復制一個新的容器云,并且它可以共享所有的父類資源,也可以向其后代傳播能力。容器云支持開發人員實現CSS的可伸縮性,更容易使用微服務技術;2.公共服務資源使開發人員能夠跨組織進行協作。公共鏡像庫中提供了一個跨組織資源共享機制,該機制服務于復雜軟件系統及其成員。共享資源包括Docker鏡像、War包和安裝文件等。資源目錄服務使開發團隊能夠跨組織發現和重用數據,這些能力能夠促進CSS開發團隊跨組織分享資源,實現社會化協作開發CSS。尤其是在積累了大量的工業資源后,這些資源將加快縮短CSS的市場開發時間。工業領域復雜軟件系統成長性構造框架如圖3所示。

圖3 工業領域復雜軟件系統成長性構造框架
基于本文所提出的面向工業領域的復雜軟件系統成長性構造框架可實現面向智慧園區建設的智慧園區共性服務云平臺,該平臺能夠面向不同園區的服務需求快速建立私有云環境,實現所需智慧園區服務的快速共享和復制,并基于這些服務快速構造面向某一特定智慧園區的復雜軟件系統。該平臺的目標是能夠逐漸匯聚智慧園區的共性服務,通過平臺實現跨園區的資源共享,支持智慧園區系統的開發者們能夠基于平臺重用各種資源,快速開發符合自身要求的智慧園區復雜軟件系統。區別于傳統復雜軟件系統開發時間長、部署過程復雜、園區各自為政的特點,該平臺基于輕量化容器技術和微服務架構,能夠快速搭建私有云環境和重用各種服務。尤其是針對部分園區出于對安全考慮,不愿將數據上傳至公有云平臺的情況,這種混合云的實現方式不但能夠滿足其構建私有云環境,把數據以及企業應用保存在本地,從物理環境上保證數據、應用安全的需求,而且為復雜軟件系統的擴展和成長性構造提供了諸多服務支持,使用戶獲得云端服務資源共享帶來的便利。
西洋人,人們叫他“洋鬼子”,身穿白外套,第二天霧退時,白衣女人來到趙三的窗外,她嘴上掛著白囊,說起難懂的中國話:
面向智慧園區用戶的定制化需求,使用該框架開發復雜軟件系統的具體流程如下:
1)CSS開發者在云端新建一個分形租戶,該租戶包括云操作系統安裝包、所需各類鏡像資源等;
2)CSS開發者在終端園區內部,配置完成私有云所需的硬件環境,確保與云端之間網絡互通;
3)通過分型租戶連接園區內部終端硬件集群,為終端硬件集群搭建私有云環境;
4)CSS開發者在本地使用私有云環境,基于獲得的云端資源,實現CSS的開發過程;
值得一提的是,CSS開發者在私有云環境下產生的各種軟件、數據等資源,能夠在海端容器化為服務,并通過將該容器上傳至公有云鏡像庫供公眾使用并獲得收益。而且,私有云環境具備彈性伸縮、災備等云主機特性,隨著業務量和用戶的增長能夠持續為CSS提供擴展能力。
目前,快速擴展的智慧園區共性服務云平臺提供以下基礎服務:
b) 項目管理:產業項目的全過程跟蹤預警管理,提供了包含信息源的分配,意向、簽約、在建、投產各階段信息跟蹤,以及項目實施進度的預警等服務。
c) 招商管理:提供了包含土地、廠房、商業樓宇、辦公樓宇的招商資源數據管理服務。
d) 企業管理:提供了全區企業數據匯聚管理功能,包含企業落地信息、統計信息、工商信息、稅收信息、認定信息、知識產權信息等查詢及管理服務。
e) 績效評估:包含園區的綜合調查統計服務,以及依托于平臺大數據分析模型所構建的企業績效評估服務。
除此之外,還包含產業發展全景視圖、區域發展預測預警、招商引資智能推薦、產業生態分析、企業信用評估和管理者駕駛艙等十幾項定制化增值服務,這些服務大多是需要根據具體園區數據二次定制實現的智能服務。通過基于CSS成長性構造框架的智慧園區共性云服務平臺,為各種園區復雜軟件系統的開發提供平臺支持,幫助他們節省資金成本,縮短部署時間和快速推出服務。
綜上所述,基于本文所提框架建立的智慧園區共享服務云平臺在智慧園區復雜軟件系統成長性構造方面具有以下5大技術優勢:
1)快速的CSS開發能力:通過內置海云分形架構、目錄服務和資源共享的開發環境,支持CSS的成長性構造和快速交付。
2)復雜軟件系統平滑演進能力:通過CSS各成員的容器化、模塊化定義,提供了CSS可分期建設,成長性構造能力,并賦予所有CSS成員獨立演化的能力。
3)統一硬件/存儲/安全方案:通過容器云操作系統提供了高效安全的基礎資源集群控制,易管理易維護,實用環保。
4)第三方系統集成能力:通過標準目錄服務和元素據的定義,支持多層次集成:數據集成、服務集成和應用集成。
5)系統資源共享能力:按需配置資源,提高資源的利用率;統一標準的數據管理方法,實現云共享。
本文提出了一種面向工業領域的復雜軟件系統成長性構造框架,該框架使用容器云、多租戶和統一目錄服務技術,實現跨組織的資源共享、協同和面向復雜軟件系統成長性構造私有云環境的快速生成,使用此框架不需要從零開始構建系統,大大減少了開發部署時間。從云端向終端拓展的模式支持協同計算。該框架基于輕量化容器技術,能夠實現眾多的服務快速遷移和擴展。框架使用Restful技術進行解耦,各接口之間既能內部調用也支持外部調用,非常適合端-網-云協同計算模式。