---
# System prepended metadata

title: 虛擬化(Virtualization)

---

# 虛擬化(Virtualization)
 * VMware：==付費==虛擬化軟體，提供較==完整的==雲端資料中心的管理方案。
 
    資料中心虛擬化及雲端基礎架構，將==網路、儲存與安全性==虛擬化用以創造虛擬資料中心。簡化IT 資源與應用程式的佈建，透過==最佳效能、容量運用和合規的自動化管理==以完成你的私有雲建構
    
    `產品`
     * vCloudSuite：建立靈活、高效率的==雲端基礎架構==，能與軟體定義的服務、原則式的自助服務佈建與==自動化管理整合==
     
     * vSphere：使用世界領先的==虛擬化平台==整合伺服器、改善可用性、提升效能並最佳化容量
     
    * vSphere with Operations Management：以智慧型運作與==一致性==管理將 vSphere 帶進全新境界。本產品提供你更佳的洞悉力，進而帶來更佳的效能與可用性

 * VirtualBox：==開放源碼==的虛擬化軟體，一般用於個人電腦的==桌面虛擬化==。

    VirtualBox 是強大的 ==x86 和 AMD64/Intel64 位==的虛擬化產品，可以運行 Windows、 DOS/Windows3.X、 Linux 、 Solaris、 OpenSolaris、 OS/2 及 OpenBSD

    `運行的條件`

     * 相當強大的 ==x86 硬體==
     
     * 記憶體：至少需要 ==512MB 的 RAM==
     
     * 主機操作系統需要運行的記憶體容量，加上來賓操作系統所需要的量。ex：在 Windows 7 上運行 Windows 8.1，需要遠大於 2GB 的 RAM
     
     * 硬碟空間：雖然 VirtualBox 本身是非常小，虛擬機將需要在磁碟上較為龐大的文件來代表自己的硬碟儲存。因此，要安裝Windows 8，很容易地增長到10幾個GB的大小
     
     * 支持的操作系統： ==Windows、Linux、Mac OS X、Solaris、OpenSolaris==


 * OpenStack：==開源==軟體，用於創建==私有和公共雲==。
 
    OpenStack 的軟體控制==計算、儲存==，並在整個數據中心，通過儀表板或通過 ==API== 來管理 OpenStack，也可以經由 ==Web==來存取與提供雲端資源，非常適合建立==基礎架構==。目前只可以安裝在 ==Linux==的，開發的語言是 ==Python==
    
 * Docker/Container： Docker 容器包裝一個軟件，它包含運行所需的一切整個文件：==代碼、執行碼、系統工具、系統庫==任何可以在伺服器上安裝與執行所需的資源。

    docker 技術，是將 ==Linux的核心程式==（image）加以分解，每個容器只包含需要執行的==部分核心程式==即可，而不需要安裝所有的 guest 作業系統
    目前預設的安裝環境為 MacOS Yosemite10.10.3 版、 Windows 10、 Linux、 AWS、 Azure，其他的作業系統就需安裝 ==docker machine==

---

# 平行處理

五個分散式系統的技術：
 * Map/Reduced 技術 
 * Apache Hadoop 系統 
 * Apache Spark 系統 
 * Apache Mesos
 * 微服務(Microservices) 
<br>
 * Map/Reduce 技術
 
     一個編寫程式的模型，可用於處理和產生==大數據集或資料庫==的一種==分散式==計算機制，它適合用於實現各式各樣的任務
    用戶只需寫好演算法中的 map 與 reduce 的函數，實際運行時，系統會==自動==平行處理跨機器的大型集群計算，應付其中機器故障的處理機制，以及管理機器內部的通訊，以便有效地利用該系統的整體網路和硬碟空間 

 * Apache Hadoop 系統
 
     ==開源==的程式軟體可用於開發==可靠的、高擴展性的以及分散式==的運算環境。
    允許使用==簡單的==程式模型來處理大型數據集的分佈式計算機集群。這個系統本身被設計成在軟體的==應用層==即可檢測和處理故障， 因此對於計算機集群來說，在其中每個較容易失敗的頂部即提供一個高度可用的服務
  
    `模組`

     * Hadoop Common：支持其他 Hadoop 的==模組通用==工具
     
     * Hadoop 分散式文件系統（HDFS）：分佈式文件系統，它提供對應用程式之數據的==高吞吐量存取==服務
     
     * Hadoop YARN：一個==作業調度==和==集群資源管理==框架
     
     * Hadoop MapReduce：基於==YARN 系統==之大型數據集的==平行處理==

    `相關項目`

     * Ambari：==配置、管理和監控==集群的 Web 工具，其中包括支援 HDFS、 Hadoop 的 MapReduce、 Hive、 HCatalog、 HBase、ZooKeeper、 Oozie、 Pig 和 Sqoop。 提供一個==儀表板==來查看集群運行的狀況，如：熱圖，可以視覺化直觀地查看 MapReduce、 Pig 和 Hive 等應用程式的功能，以一個用戶友好（user-friendly）的方式來診斷那些應用程式的==效能表現==
    
    * Avro：一個數據==序列化==的系統
    
    * Cassandra ：一個可擴展的==多主節點==的資料庫，具有==無單一節點==失敗的功能
    
    * Chukwa：用於管理==大型分散式==系統的數據採集系統
    
    * HBase ：支持==可擴展==的分散式資料庫可以儲存==結構化==的大數據資料
 
    * Hive：一個==資料倉儲==的基礎設施，提供數據==匯總==和即時==查詢==
    
    * Mahout ：一種可擴展的==機器學習==和==數據挖掘庫==
    
    * Pig ：一個高階的==數據流語言==用來執行==平行計算==的框架
    
    * Spark：一個快速和通用的 Hadoop ==數據計算引擎==。提供了一個簡單和表現的程式模型用來提供廣泛的大數據==平行處理==之應用，包括 ==ETL、機器學習、串流處理和圖形計算==
    
    * Tez： 一個==廣義==數據流程式框架（ generalized data-flow programming framework），建立在 ==Hadoop YARN== 之上，它提供了一個強大而靈活的引擎來執行任務，可以分為==批次處理==和==交互式處理==（ batch and interactive）。Tez 正在被Hive、 Pig和 Hadoop 生態系統中的其他框架所採用

    * ZooKeeper ：一個==高性能協調服務==的分散式應用系統

    * 其他的商業軟體（例如 ETL 工具），也採用 Tez 來取代以 Hadoop MapReduce 作為底層的執行引擎
    
 * Apache Spark 系統
 
     Apache Spark 是一個==快速和通用==集群計算系統。它提供了 ==Java、 Scala、 Python 、R ==的高階 API，以及==最佳化圖形==優化引擎’支持豐富的高階工具組合，包括Spark SQL 用在結構化數據的 SQL 處理，用在機器學習 MLlib、 GraphX 進行圖形處理和 Spark Streaming 用於==串流訊息==處理
     
     Spark 程式設計的概念．在較高的階層上，每個 應用程序都包含一個==驅動程序==運行使用者的主要功能並在==集群== 上執行各種==並行操作==
     
     Spark 提供的主要抽象概念是一個==彈性分佈式數據集（RDD）==，它是在可以並行操作的==集群節點==之間劃分的元素集合
     
     Spark 中的第二個抽象是可以在==並行操作==中使用的==共享變量 (shared variable)==’有時，變量需要在任務之間或==任務和驅動程序==之間共享 
    Spark 支持兩種類型的共享變量：==廣播變量 ==(broadcast variables)，可用於
    > * 緩存 (cache)：所有節點上的記憶體中的值
    > * 累加器 (accumulators)：它們只是==添加==到諸如計數器和總和之間的變量

    * 彈性分佈式數據集（ RDD）

        Spark 使用彈性分佈數據集（RDD）的概念， RDD 是一種可以==並行運行==的==容錯元件==之集合
        
        創建 RDD 有兩種方法：
        > 並行化現有集合的驅動程序
        > 在外部儲存系統中引用數據集
        
        RDD 支持兩種類型的操作： 
        > tranformations - 從現有操作創建新數據集的轉換
        > action - 在數據集上運行計算後將值返回給驅動程序的操作
        
        Spark 中的所有轉換都是==懶惰==的，因為它們不會馬上計算它們的結果。相反，它們只記住應用於某些==基本數據集==（例如文件）的轉換。只有當一個動作 (action) 需要將結果返回給驅動程序時，才會計算轉換
        
        默認情況下，每次轉換的 RDD 可能會在每次對其進行操作時==重新計算==。但你也可以使用 ==persist==（或 cache）方法在記憶體中保留 RDD，在這種情況下， Spark 將在下次查詢時將集群上的元素保留在==更快==的存取中
        
        還支持在硬碟上持久的 RDD，或==跨多個節點==進行複製 (replicate)

![sa](https://i.imgur.com/4P7Rc60.png)


 * Apache Mesos
 
     ApacheMesos 是將很多台電腦的==儲存、運算與網路等資源==集合成一台超級的大電腦來用 
    Mesos 是使用 ==Linux kernel== 相同的原理來建造，只是在不同的抽象層次
    
    該Mesos 的內核運行在每台機器上，並提供相對應之應用程序（例如： Hadoop, Spark, Kafka, Elasticsearch）之 ==API== 用於整個數據中心和雲環境的資源管理和調度。 
    Apache Mesos 將每台電腦的 ==CPU、記憶體、儲存設備和其他計算資源==從機器中（實體的或虛擬的）個別抽象化出來，使得我們能夠輕鬆地建立和有效率地運行一個具有==容錯機制==和==有彈性==的分散式系統

    `特性`

     * 線性可擴展性：==輕鬆擴展==到業界認可的 10,000 個以上的節點
     
    * 高可用性：使用 Zookeeper 來掌握容錯複製主要==管理者和代理員==的機制，有無中斷升級的功能
    
     * 容器（CONTAINERS）：支援==原生的Docker==的容器
     
     * 隨插即用的（PLUGGABLE）隔離：支持 CPU、記憶體、磁碟、端口（ ports）、GPU 和客製化==資源隔離==之模組

    * 二層調度（SCHEDULING）：在相同的集群電腦中運行的雲端原生應用程式與傳統的老舊應用程式中，支援==可插拔==的調度策略
    
    * APIS：開發新的==分散式應用程式==之 HTTP API，用於操作集群並進行監控
    
    * WEB UI： 內置Web UI來查看==群集狀態==和==導航容器==中的沙盒

    * 跨平台：在 Linux、 OSX 和 Windows 上運行，==不必選定特定==的雲端服務提供商。 

 * 微服務（Micro services）
 
    概念就是先將整個大的系統==切割==成好幾個子系統，之後的每個子系統再一次分割成為更小的應用程式，每一個分割好的應用程式，最好彼此之間都==互相獨立==，而且擁有一個完整的功能來實現一個單一的服務
    這些切割好的應用程式各自成為一個==模組==，而且彼此之間最好可以達成==低耦合度==的關係，如此一直切割下去，直到無法再切割為止，最後這些最小單位的模組化程式就稱為==微服務==
    
    每一個微服務個別擁有自己的==程序==（ process），每個微服務之間透過==通訊協定==（ protocol）互相溝通

    `好處`

     * ==功能單純==，開發人員較容易維護與修改程式，每一個微服務可由不同的開發人員進行開發，易於再利用，透過不同的組合方式，可組成不同的應用程式

     * 在實際提供服務時，微服務可以==被開啟好幾次==，甚至數千次來滿足客戶的需求，完成所需的服務

     * 最大的好處是這些微服務之間==互相獨立==，彼此之間的干擾最小

    `困難`

     * 在於整個分散式的==管理架構==很==複雜==，尤其是開發與部署的環境之一致性，所幸可以透過 Docker/Container 技術將任何微服務打包成==可獨立執行==的映像檔，發佈到任何可執行 Docker 的平臺上執行
     