驅動技術的,歷來都不該該是技術,也不是情懷,應該是不斷變化的訴求。html
在過去的不知道多少年前,咱們的應用和數據庫,還部署在一臺機器上,大概以下:數據庫
+----------+ +--------------+ | | | | | | | | | | | +--------+ | | +--------------------> | | | | | | | App | | | | <------------------+ | ^ + | | | Client | | +--------+ | | | | | | | | | | +--------+ | | | | | + v | | | | | | DB | | | | | | | | | | | +--------+ | | | | | | | | Server | +----------+ +--------------+
隨着業務的增加,這樣的架構已經不能知足大量的請求,這時候架構也隨之改變,把應用與數據庫拆分開來:架構
+--------+ +---------+ +-------+ | | | | | | | +-------------> | +-----------> | | | Client | | App | | DB | | | <-------------+ | <-----------+ | | | | | | | +--------+ +---------+ +-------+
固然,業務是不停的增加的,而上述這樣的也會發生變化,能夠把應用與數據庫進行集羣部署。運維
而後...分佈式
而現在,技術與架構,在業務的驅動下,早已發生了巨大的變化。模塊化
在最近兩年,最火的,莫過於服務化,容器化與雲化。微服務
微服務架構,它把軟件圍繞業務功能結構進行劃分、拆解成服務,以服務構建應用,而服務能夠獨立部署、獨立擴展,服務也能夠提供模塊化的邊界,而且不一樣的使用也可使用不一樣的開發語言。學習
微服務風格的特性:測試
容器,另外一個熱門的話題,而在這個話題中,咱們可以快速想到的,應該是Docker。ui
Docker 最初是 dotCloud 公司創始人 Solomon Hykes 在法國期間發起的一個公司內部項目,它是基於 dotCloud 公司多年雲服務技術的一次革新,並於 2013 年 3月以 Apache 2.0 受權協議開源。
Docker包括三個基本概念鏡像、容器、倉庫。鏡像和容器的關係,就像是面向對象程序設計中的類和實例同樣,鏡像是靜態的定義,容器是鏡像運行時的實例;容器能夠被建立、啓動、中止、刪除、暫停等;而倉庫,則是用來統一存儲鏡像,進行版本控制。
使用容器技術,帶來了如下好處:
容器雲是以容器爲資源分割和調度的基本單位,封裝整個軟件運行時環境,爲開發者和系統管理員提供用於構建、發佈和運行分佈式運用的平臺。
當容器雲專一於資源共享與隔離、容器編排與部署時,它更接近傳統的IaaS;當容器雲滲透到應用支撐與運行時環境時,它更接近傳統的PaaS。
使用容器雲,帶來了如下好處:
當軟件服務化後,咱們的架構看起來應該是這樣的:
+-------+ +--------------------------------------+ +--------------------------+ | | | | | | | | | WebUI | | App | | | | | | | | | +--------------------------------------+ +--------------------------+ | | | | +-------------------------------------------------------------------+ | | | | | | | RESTful API | | | +-------------------------------------------------------------------+ | | | | +-----------+ +-----------------------------------+ +-------------+ | | | | | +-----------+ +------------+ | | | |Monitor| | Registry | | | Ser^ice1 | | Ser^ice2 | | | Configure | | | | & | | +-----------+ +------------+ | | | | | | Dsco^ery | | | | | | | | | | +-----------+ | | | | | | | | | ... | Ser^ices | | | | | | | | +-----------+ | | | | | | | | | | | | | | | | | | | | | +-----------+ +-----------------------------------+ +-------------+ | | | | +-------------------------------------------------------------------+ | | | +-------------+ +------------+ +----------+ | | | | | DB | | MQ | | ... | | | | | +-------------+ +------------+ +----------+ | +-------+ +-------------------------------------------------------------------+
衆多的服務給運維帶來極大的挑戰,要求可以快速地發佈與容錯處理,而若是再使用人肉運維的方式再也沒法知足。
這時候,一個藉助於CI/CD的研發流水線的開發方式,漸漸進入了視野:
+--------------+ +------------+ Re^iew +--------------+ | | | +-------> | | | Developer | Push | | | Maintainer | | +--------> | Repo | Merge | | | | | | <----+ | | +------+-------+ +-----+------+ +--------------+ ^ | | | | v Trigger | | +------------+ Feedback | | | CI | | CD | +----------+ CI/CD +-------------+ | | | | | | v +------------+ v | +-------------------------------+ +--------------------------------------+ |-------+ +-------+ +--------+ | | | ||Build +-> Unit +->Analyze +-+| | +---------+ +---------+ +---------+ | |-------+ +-------+ +--------+ || | |Test Env | |UAT Env | |Production | |-------+ +-------+ +--------+ || | | | | | | | | ||Deploy<-+Package<-+ Test <-+| | +---------+ +---------+ +---------+ | |-------+ +-------+ +--------+ | | | +-------------------------------+ +--------------------------------------+
能夠藉助容器與容器雲,將服務進行持續集成、持續部署與交付,最終達到自動化。
服務化是將來嗎?容器是將來嗎?容器雲是將來嗎?
誰知道呢?將來,還沒來!
只是如今,做爲一枚面向搜索引擎複製粘貼的開發者,在不停的學習中,開拓本身的視野,積累本身的經驗,爲後來的業務需求打下堅實的基礎也是勢在必行。
參考: