微服務、容器與容器雲-從入門到放棄

前言

驅動技術的,歷來都不該該是技術,也不是情懷,應該是不斷變化的訴求。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  <-+|        | +---------+ +---------+ +---------+  |
|-------+ +-------+ +--------+  |        |                                      |
+-------------------------------+        +--------------------------------------+

能夠藉助容器與容器雲,將服務進行持續集成、持續部署與交付,最終達到自動化。

放棄

服務化是將來嗎?容器是將來嗎?容器雲是將來嗎?

誰知道呢?將來,還沒來!

只是如今,做爲一枚面向搜索引擎複製粘貼的開發者,在不停的學習中,開拓本身的視野,積累本身的經驗,爲後來的業務需求打下堅實的基礎也是勢在必行。


參考:

微服務(Microservices)

《Docker——容器與容器雲》試讀:1.3 進化:從容器到容器雲

相關文章
相關標籤/搜索