第1章 雲原生

      軟件 -》 開源 -》雲git

1.1 互聯網架構變遷web

  1.1.1 互聯網架構的核心問題redis

    海量用戶:docker

    產品迅速迭代:敏捷的探知市場需求,快速的推陳出新。數據庫

       7 * 24小時不間斷服務:儘可能縮短宕機時間。後端

    流量突增:好比雙11,促銷,熱點事件等。設計模式

          業務組合複雜:緩存

  1.1.2 從集中式架構到分佈式架構安全

    傳統的三層架構:服務器

      集中式架構分爲標準的三層:數據訪問層、服務層和web層。

      服務層是核心,提供公開的API,也能夠經過Web層提供API。

    分佈式架構、SOA和服務化:

      垂直伸縮:集中式架構爲了提高吞吐量,只能經過增長服務器的配置來提高處理能力。

      水平伸縮:僅經過增長服務器的數量提高系統的吞吐量。

      分佈式系統的引入,解決了吞吐量的問題,可是也帶來了額外的負擔。

       CAP定理: 分佈式系統的一致性(Consistency)、可用性(Availability)、分區容忍性(Partition tolerance),三者不能兼有。

                                     分區容忍性是必需的,因此要在一致性和可用性之間作選擇。

                      SOA(面向服務架構)能夠理解爲:模塊化開發 +  分佈式計算。

       分佈式系統十分複雜,產生了大量的簡化分佈式開發的中間件和分佈式數據庫,服務化的架構設計理念被認同。

       2011年,阿里開源的Dubbo框架是一個影響深遠的分佈式服務框架。

    自動化運維:

      分佈式系統的手工運維產生瓶頸。催生了自動化運維工具(兩種):

        監控自動化工具:對服務的CPU、內存、磁盤I/O、網絡I/O進行主動探測,並預警。

             流程自動化工具:應用上線、部署等操做。

    解放交付的DevOps:

        DevOps的出現,開發和運維之間的鴻溝才漸漸消失。

  1.1.3 從分佈式架構到雲原生架構

    隨着虛擬化技術的成熟和分佈式架構的普及,用來部署、管理和運行應用的雲平臺被愈來愈多的說起。IaaS、PaaS、SaaS是雲計算的三種

        基本服務類型。容器的出現,使得原來基於虛擬機的雲主機應用,完全轉變爲更加靈活和輕量的「容器 + 編排調度」的雲平臺應用。

    新紀元的分水嶺-容器技術

      容器能夠解決運行時環境不一樣的問題。Docker提供了能夠將應用和依賴封裝到一個可移植的容器的能力。Docker提供了集裝箱式的封            裝方式。

    新紀元的編排與調度系統:

      Kubernetes - docker編排工具。

    架構設計的變革-微服務:

      微服務的特色:

        配置管理:集中式架構使用屬性配置文件;微服務傾向於集中化的配置中心配置數據,並且要高可能,而且配置想及時生效,還能推送配置變動。

        服務發現:

        負載均衡:

        彈性擴容:

        分佈式調用追蹤:

        日誌中心:

        自愈能力:

1.2 什麼是雲原生

  Pivotal公司前後開源了雲原生的Java開發框架Spring Boot和Spring Cloud。 隨後,Google在2015年成立了CNCF(Cloud Native Computing Foundation)。

  1.2.1 概述

    雲:一個提供資源的平臺,雲計算的本質是按需分配資源彈性計算

    雲原生應用:專門在雲平臺部署和運行而設計的應用。雲原生應用的設計模式能夠優化和改進傳統應用模式,使得應用更加適合在雲上運行

     傳統的應用能夠部署和運行在雲平臺上,可是沒法充分運用雲平臺的能力的。

    讓應用能利用雲平臺實現資源的按需分配和彈性伸縮,是雲原生被重點關注的地方。

    雲原生:是一種設計模式,它要求雲原生應用具有可用性和伸縮性,以及自動化部署和管理能力,可隨處運行,而且可以經過持續集成、持續交付工具提高研發、測試與發佈的效率。

  1.2.2 雲原生與十二要素

    十二要素是雲應用設計概念,他爲構建流程標準化和高可移植的Saa應用提供了完善的方法論。

    1 基準代碼:同一應用,屢次部署。

    2 依賴:顯示聲明第三方依賴。

    3 配置:配置存儲到環境變量。

        與配置文件相比,環境變量與語言和系統無關。

        將配置存儲在環境變量中可以方便的與Docker等基於容器的應用配合使用,也易於與K8s的ConfigMap配合使用。

    4 後端服務:後端服務鬆耦合。

      後端服務是指:應用所依賴的經過網絡調用的遠程服務:DB、緩存、消息中間件以及文件系統,不一樣後端服務之間的區別僅僅是                                                           在於資源的URL不一樣。

                     鬆耦合:不改變任何代碼、僅修改資源URL的狀況下進行服務切換。

    5 構建、發佈、運行(Build、Release、Run)

      嚴格分離構建階段和運行階段。禁止在運行階段改動代碼。

               6 進程(Processes)

      應用進程是無狀態的。只有無狀態的應用才能水平伸縮,從而利用雲平臺彈性伸縮的能力。

      會話粘性:不推薦這種作法,會話數據應該保存至redis這樣帶有過時時間的緩存中。

    7 端口綁定(Port Binding)

      經過端口綁定對外發布服務。

    8 併發(Concurrency)

      能經過水平伸縮應用程序實現併發。

    9 已處理(Disposability)

      能夠快速啓動和優雅關閉應用。

    10 開發環境與線上環境等價

    11 日誌

      使用事件流處理日誌

              12 管理進程

  1.2.3 十二要素進階

    1 優先考慮API設計(API first)

    2 經過遙測感知系統狀態(elemetry)

    3 認證和受權

      OAuth2, RBAC

  1.2.4 雲原生與CNCF(Cloud Native Computing Foundation)

    應用定義與開發層

      1 數據庫與數據分析

        SOL、NoSQL、NewSQL、數據庫中間層以及大數據處理(離線或準實時的計算大數據的技術棧中,如Hadoop,Spark,Druid等)。

                     hadoop: 

                      Spark:  

      2 流式處理

        包括消息中間件(RabbitMQ/kafka/ActiveMQ/RocketMQ)

                          以及流式實時計算框架(Flink,相對於Hadoop這樣的離線計算體系,這類框架更加關注實時性):

      3 軟件配置管理

        git已經成爲行業標準了。

      4 應用定義

        Maven: 聲明和管理項目的生命週期和應用依賴。

            大量的第三方插件使得Maven的應用場景被無限擴大,好比,代碼靜態檢查、代碼風格評審、測試覆蓋率計算。

      5 持續集成/持續交付

        工具是Jenkins

    編排與治理層

      1 調度與編排

        k8s

      2 分佈式協調與服務發現

        Zookeeper,  Eureka

      3 服務管理

        Ribbon負責負載均衡

                             Istio

    運行時層

      1 雲原生存儲

        指適合雲服務的分佈式文件存儲系統,能夠將雲上運行的應用所需或產生的數據放入一個能夠不依賴本地磁盤而且能夠平滑擴容的高可靠文件系統。

        HDFS, Ceph, ClusterFS.

      2 容器

        K8s採用Pod做爲應用的最小單元,一個Pod內能夠包含多個容器。

      3 雲原生網絡

    供應保障層

      1 宿主機管理工具

        Ansible: ansible是新出現的自動化運維工具,基於Python開發,集合了衆多運維工具(puppet、cfengine、chef、func、fabric)的優勢,實現了批量系統配置、批量程序部署、批量運行命令等功能。

      2 基礎設施自動化工具

        Helm

      3 容器倉庫

      4 鏡像安全

           雲設施層

      提供物理服務器的雲廠商

      觀察與分析

      對系統指標的監控、對鏈路調用的跟蹤、對分佈式日誌的追蹤、收集。

      1 監控

                         Prometheus

            2 日誌

            ELK

      3 追蹤

        OpenTracing是調用鏈的一個標準協議。

                  平臺

相關文章
相關標籤/搜索