• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 業界動態 > 虛擬機已死 容器才是未來?

    虛擬機已死 容器才是未來?

    作者: 時間:2016-05-06 來源:網絡 收藏

      我也曾經是技術尤其是Docker粉絲,但用了一年后覺得事情也沒那么美好,而頗有一些同學以及一些公司依然認為就是銀彈,已經是昨兒黃花必須打倒,大家趕緊一切皆。這里我對這種觀點吐吐槽。僅代表作者個人看法

    本文引用地址:http://www.czjhyjcfj.com/article/201605/290774.htm

      首先要明確的是,軟件開發和運維活動中,可維護性、正確性、性能的優先級是依次降低的,不要跟我抬杠少數極端情況。關于可維護性和正確性的先后,著 名的 "worse is better" 文章就是很好的無奈的解釋,如果你猶豫這兩者,這還情有可原,畢竟真善美和糙快猛的斗爭從未停歇,而你如果第一反應覺得性能是最重要的,那就不要繼續往下 看了,洗洗去睡吧——適合的才是最好的。

      那么對于 vs 容器,自然我們也需要從這三方面考察。



      回合一:可維護性之爭

      —維護性

      從 hypervisor 講,Xen/KVM/vSphere/HyperV 都很成熟了,久經考驗,BSD 也在湊熱鬧搞 bhyve(FreeBSD) 和 vmm(OpenBSD),最近 unikernel 也在試圖跑在 hypervisor 上,而 AWS/GCE/Azure 等等云計算巨頭以及 Intel/AMD 等在CPU、磁盤和網絡IO虛擬化技術上的投資顯然不會立馬推翻,Linux 上虛擬機的開源管理方案也已成熟定型:libvirt, OpenStack, 沒人吃飽了撐的去弄個 “新的開源” 項目替換它們,雖然我很不喜歡 OpenStack 的亂糟和復雜。VM 的動態遷移也是成熟技術,出來好多年了,實現原理非常簡單,反正整個 OS 內存一鍋端弄過去,不操心少個依賴進程的內存沒過去。想用不同版本內核? 想要自定義內核模塊?想調整內核參數?期望更安全的隔離?期望如同物理機版幾乎一致的使用體驗?VM 就是虛擬機的縮寫嘛,這些都是拿手戲。

      容器— 維護性

      Linux 容器,Linux 一貫的作風,慢慢演化,不求仔細設計,然后就是 cgroup, pid/uts/ipc/net/uid namespace 一個個實現出來,湊出一個容器技術,貌似 uid namespace 還是最近剛剛出來的特性。用戶空間則更是群雄并起,LXC,Docker,rkt,LXD,各有擁蹇,鹿死誰手,還真不好說,在這個局還沒明朗的時 候,Mesos、Swarm、Kubernetes、Nomad 又出來一堆攪局的,眼下看來最吸引眼球的 Kubernetes 儼然有 OpenStack 繼任者的感覺,但依然很嫩,沒幾個人敢在生產環境大規模使用。

      Linux容器里進程的跨機器動態遷移我還沒聽說,不要說是個服務就得有集群有 HA 嘛,可還真有不少用戶一個服務就單機頂著呢,就算有熱備或者冷備,在線那臺機器內存里的東西可寶貴了,輕易不能丟。用Linux容器就不能挑內核,不能加 載內核模塊,不能掛載文件系統,不能調整內核參數,不能改網絡配置,等等,不要告訴我你能——你是不是開了 docker run --privileged 了? 你是不是沒 drop capability?你是不是沒有 remap uid?話說某大公司的容器還真就用 --privileged 選項跑的呢。 而 Linux 的隔離不徹底恐怕大部分人都沒意識到,/sys, /dev, /selinux 還有 /proc 下的某些關鍵文件比如 /proc/kcore 沒隔離呢。

      Redhat 做的 project Atomic 意識到這些問題,正在積極的給 Docker 加 SELinux 支持,指定 SELinux policy,但 Docker 官方愛搭不理,而且 SELinux 這種高端技術是凡人玩的么? 結局大概依然是 "FAQ 1: 關掉 SELinux"。Linux 容器本來并不局限在一個容器里跑幾個進程,但 Docker 官方為了加強“輕量級”這詞的洗腦效果,搞出個無比腦殘的 single process 理念,被無數人捧臭腳,所幸有些人慢慢意識到問題,Yelp 搞了個 dumb-init 擦了一半屁股,還有無數 docker image 用 runit、supervisor 之類的做 /sbin/init 替換,但問題在于這要自定義啟動腳本,需要加 ssh/cron/syslog/logrotate 等等邊角料——這已然是解決了無數遍的問題,還要解決一遍,不覺得麻煩嗎?難道沒有人認為這些包的作者或者打包者更善于處理服務啟動腳本么?像 systemd 那種搞法還算正道,特意考慮容器環境,跳過一些步驟,但貌似還沒做完善,需要手動刪除一些 .service 文件。


    上一頁 1 2 下一頁

    關鍵詞: 虛擬機 容器

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 凭祥市| 日喀则市| 古蔺县| 无棣县| 河曲县| 长岛县| 吴川市| 鞍山市| 淅川县| 盈江县| 蓬莱市| 巴林左旗| 晋中市| 石屏县| 沾化县| 乌兰浩特市| 潼南县| 清河县| 石门县| 沁源县| 故城县| 沈丘县| 新蔡县| 弥勒县| 海原县| 平塘县| 武陟县| 额济纳旗| 镇江市| 乌什县| 永州市| 齐齐哈尔市| 北票市| 娄底市| 安宁市| 军事| 吉林省| 重庆市| 登封市| 濮阳县| 澄城县|