文/呂亮亮
隨著信息科技的發展,石油化工企業內部部署了大量的信息系統用于處理日常業務,比如為了滿足生產需要,石油化工企業引入了各種自動化生產系統用于生產過程的管理,監督和監控。目前各企業內部已部署了超過一百個應用系統。隨著應用系統的快速增加以及規模日益復雜,功能模塊之間的邊界劃分越來越模糊,造成很多功能的重復以及架構復雜化的問題。但是靠單個系統的獨立使用、獨立實現的方式已經不能滿足石油化工企業的生產需要,因此需要一種新的軟件架構來改變當前的系統開發模式,提供系統的質量以及生產效率。提升軟件復用性,從面向過程發展到面向對象,再到現在的微服務,微服務架構是一種非常高效的軟件復用方式,在實際的業務中得到了大量的應用。
信息系統的建設具有一定的歷史發展軌跡,最開始為了解決企業內部的信息管理問題發展出了ERP系統。隨著企業辦公自動化需求的增長又演化出了OA系統。隨著客戶關系管理的需要又發展出了CRM系統。由于這些系統開發的時間不一樣,開發的架構不一樣,因此隨著時間的演進,各種系統之間的集成成了新系統開發面臨的一道難題。
微服務的概念是Martin Fowler在2014年拋出,用于解決各種異構系統的集成問題。最早微服務架構概念的誕生,便是Martin Fowler所在的公司Thoughtworks在集成各個企業系統時提出的一種解決方案。為了能夠有效的解耦企業中互相依賴的系統,Thoughtworks提出了一種應用服務單一化的解決方案來形成一套簡潔、高彈性的系統架構。微服務架構靈活的運用了虛擬容器的概念,將以前單一的應用比如CRM等使用獨立的容器進行隔離,然后通過對外暴露API的方式來對其他系統提供服務。一般而言對外API采用HTTP API等輕量級的解決方案。由于虛擬容器采用了Doker等技術,因此十分便于進行自動化的集成、部署以及運維,并且成功的解決了異構系統的問題。
微服務的架構需要將不同的應用進行微服務化,從而實現自動化的部署以及快速迭代開發。一般而言在設計微服務的架構時需要滿足如下原則:
(1)單一職責原則。也就是每一個應用或者服務只做一件事,集中精力解決自身的業務邏輯。比如crm系統只負責對客戶相關的數據進行處理,而不用負責客戶報表的分析。
(2)獨立服務原則。也就是每一個微服務是一個獨立的開發組建,具有獨立的開發、測試、部署、運維、持續集成、優化等體系,類似一個獨立的軟件,對依賴進行解耦合。
(3)通信的輕量級架構。微服務任務不同服務或者模塊之間的通信應該是輕量的,不應該過多的耗費系統資源。同時通信方式需要跨語言、跨平臺。
(4)明確的接口定義。在微服務架構下,不同的模塊通過調用接口來進行交互。為了對接口依賴進行解耦合,在設計接口時,要盡量通用,防止某個服務接口的修改影響到整個系統的運行。
微服務具有如下優點:
(1)易于開發和維護,由于微服務的單一、獨立、輕量的特點,在開發單獨的微服務時業務功能清晰、代碼復用性高。開發、測試、部署的自動化能力強,因此十分有利于開發及運維。
(2)服務的速度快、效率高。由于微服務業務邏輯的簡潔性,系統耗費資源有限,因此單一的微服務運行效率較高。
(3)易于升級及修改。由于微服務的輕量級特性以及接口的明確性,當某一個服務出現bug后,不會影響當整個系統的穩定性。同時由于獨立性原則,在修改bug后能夠快速進行部署及持續集成,修復問題。
(4)技術的多樣性。由于微服務的跨語言、跨平臺特性,因此開發微服務時并不局限在某一個特定的語言上。不管是java還是node.js,只要在開發時滿足微服務的架構,那么可以方便的進行相互的替換,降低開發成本。
(5)按需伸縮,由于各個模塊的獨立性,當對某個模塊進行擴展時,不會對系統的整體帶來影響。
圖1:微服務應用架構設計
針對目前企業內部系統眾多,架構不統一,重復較多的情況,本文為企業內部系統設計了微服務架構,統一各系統的服務標準,架構的邏輯設計如圖1所示。
整個架構分為三層體系,核心層負責實現各個服務,同時提供運維監控手段對服務進行監控。集成層將各個業務系統提供的服務接口進行集成,形成統一的服務標準為應用層提供服務。前端應用層通過服務路由、負載均衡等手段來負責服務的分發。針對企業內部系統較多的問題,首先對各個系統的業務功能進行定位。對業務系統對外提供的服務進行標準化。其次建立統一的服務注冊中心,將業務系統的服務在注冊中心進行服務,當其他系統需要在線調用服務時,在注冊中心的服務目錄中進行查找,匹配需要的服務。具體的技術架構如圖2所示。
使用AMQP作為服務標準化的中間組件進行服務的注冊、標準化及分發。使用MongoDB存儲服務的相關信息。使用Elasticsearch對服務進行搜索管理。在服務接口層,各個系統使用Restful接口進行調用,Restful可以有效的解決異構系統、不同平臺以及不同開發語言的問題,同時使用Redis對服務調用進行緩存,提高系統的效率。日志系統使用Flume,可以支持海量的日志讀寫。使用Docker作為容器來獨立部署各個服務,Docker是為應用提供隔離的環境,并跟蹤文件系統的變化,獨立于主機操作系統的配置。同時Docker的使用讓該系統的自動部署、自動監控成為可能,讓企業從手工運維轉型為Devops的方式自動進行。
圖2:微服務技術架構圖
隨著石油化工企業信息系統的發展,各類信息系統變得越來越臃腫,很難持續、高效的為企業帶來業務價值。而且隨著企業信息架構的混亂,嚴重的影響著開發效率、運維管理效率,為企業帶來了諸多隱患。為解決石油化工企業中不斷增加的系統應用所帶來的重復率增加、系統架構混亂的問題,本文采用微服務的架構理念對企業的系統架構進行了重構,將應用系統進行解耦,使用微服務的方式統一企業的服務。同時針對設計的微服務架構,本文使用Docker等技術介紹該架構的實施方法,有效的提高了企業信息系統的擴展性。通過微服務架構的重構,企業的信息化架構變得清晰明了,IT開發效率得到了較大提升,隨著運維管理自動化的部署,企業的運維安全水平也得到了較大的提升。隨著微服務的獨立部署,有效的滿足了各個業務部門的需求,實現了企業的價值。