自動化運維經驗談,以及為什麼Docker是革命性的

来源:https://www.cnblogs.com/Javame/archive/2018/09/12/9632548.html
-Advertisement-
Play Games

互聯網+的需要 在信息越來越繁雜的互聯網時代,公司所運行的項目越來越多,項目相關服務繁多,服務之間存在複雜的依賴關係,運維與管理任務越來越繁重,手工交付需要花費很多的人力與時間,且安全性和時效性均無法保證。對於多資源型分佈/分離式部署項目,Udeployer應運而生。 隨著企業對版本上線質量和速度的 ...


互聯網+的需要

        在信息越來越繁雜的互聯網時代,公司所運行的項目越來越多,項目相關服務繁多,服務之間存在複雜的依賴關係,運維與管理任務越來越繁重,手工交付需要花費很多的人力與時間,且安全性和時效性均無法保證。對於多資源型分佈/分離式部署項目,Udeployer應運而生。

        隨著企業對版本上線質量和速度的要求越來越高,敏捷開發、Devops的接受度越來越高

         傳統的交付方式因為項目之間缺少依賴、環境不一致、版本不一致、人為操作失誤等情況使得項目交付過程中問題不斷,而互聯網企業發展節奏快、版本發佈頻率高,上線出故障影響面廣、影響度高,因而企業對於敏捷開發、持續集成、自動發佈都有強烈的需求。

 

自動化從構建和測試開始

運維自動化的關鍵在於標準化。當你有一個成熟的團隊,有標準化的流程,那麼運維自動化就水到渠成了。而如果你什麼都沒有,那就需要先設定優先順序。

 

我們的目標當然是將所有的流程標準化,而哪些要放在前面做?做起來比較簡單的,和比較重要的。我認為構建和測試的流程是最基本的第一步。這對於交付產品的公司來說容易一些,對互聯網公司來說更複雜一些,而測試比構建也要複雜一些,但這是基礎。構建和測試的流程標準化做好了,就可以準備做自動化的工作了。

 

不過我見過的很多公司連Git都還沒有,仍然在用最原始的FTP push來更新代碼。我的觀點是,如果你還沒有用上Git這樣的工具,那根本就不用考慮什麼自動化的問題,因為條件完全不成熟。

 

所以,我們假設你的團隊能夠很好的使用Git,然後你建立了構建和測試的標準化流程,然後你就可以用工具來實現自動化。這可能是Jenkins這樣的工具,不過Jenkins比較複雜,如果你只是一個很簡單的網站,那麼自己寫一些腳本來實現自動化是更合適的。

 

到此為止,我們說的還不是自動化運維,而是自動化工具鏈。工具鏈就是開發工具鏈,從IDE,到代碼提交,代碼審查,構建,到測試,仍然屬於開發的範疇。在這之後才是運維的範疇,就是往生產環節部署。

 

部署

運維自動化最關鍵的部分是運行環境的定義。我們的目標是讓各個階段的代碼完全一樣,即開發者在自己筆記本上寫的代碼,到集成階段的代碼,到線上環境的代碼,都是一致的。為什麼Docker這麼火,就是因為它幫助開發者很簡單的就讓自己的開發環境跟生產環境一致。環境的標準化,意味著目錄、路徑、配置文件、儲存用戶名密碼的方式、訪問許可權、功能變數名稱等種種細節的一致和差異處理的標準化。這涉及到很多方面,也是自動化運維最困難的一部分。

 

這裡要註意的是,像Puppet這樣的工具並不是魔法。你需要自己為你的環境定義一套描述的方式,工具是無法為你完成這項工作的。無論是Puppet還是Jenkins,都是根據你的定義來管理你的環境。你決定用戶名和密碼如何儲存,你決定配置文件的路徑。開發者很喜歡把各種配置和url之類的參數硬編碼到代碼里,這很快;他們還喜歡東搞西搞的用一些亂七八糟的手段讓軟體通過測試,但是如果要構建一個真正的系統,這些小把戲根本沒用。你必須強迫他們採用標準的方式寫代碼,比如強制他們把用戶名和密碼寫在固定的地方,然後你才能跟Puppet說,配置文件在這裡,測試環境用這個配置,生產環節用那個配置。到這裡就很簡單了。

 

線上環境問題排查

對於線上環境的問題發現與解決,大部分基礎的問題都能用工具來自動發現並提醒,比如磁碟空間不夠,比如MySQL崩潰,比如訪問網站的時候出現錯誤頁面等等,有很多現成的工具可以抓到它們錯誤的信息。

 

比較困難的是排查網站為什麼變慢這樣的性能問題。我們經常看到客戶的開發團隊提交新代碼後引入問題。在測試做得不好的時候這很常見,事實上很多東西是很難測試的,尤其是性能;而互聯網公司又尤其沒有測試的文化,互聯網開發人員大多關註特性的實現,而不像傳統企業級開發那樣有很多測試的工具和流程。

 

理想的情況下,每個人提交代碼前都應該測試。但既然反正也沒人這樣做,那麼用工具來幫忙還是很有用的。比如New Relic這樣的工具就很強大,它可以發現代碼層面的問題。我們有時候也用我們的工具幫客戶做測試,包括負載測試。性能測試是挺困難的一件事,既不容易用起來,也不容易讓別人用起來,一般來說你需要一個專門的團隊才能做性能測試,但互聯網公司基本沒有(除了Google、Facebook這樣的),就算想有也找不到人。所以要善用工具。

 

Docker的意義

Docker很有意思,很火,很新,當然也很多問題。它目前沒多少大型部署案例,所以人們不斷的發現問題也是很正常的事情。

 

總體來說,Docker是一個對開發者非常友好的東西:簡單的實現不同機器上的環境標準化,可以輕鬆拿來拿去,而且在不同的雲平臺上都支持。而把Docker用起來對運維而言則是很大的挑戰,我們幫一個客戶做一個規模較大的Docker部署,一個有經驗的DevOps團隊也花費了幾個月的時間。為什麼?

推薦閱讀:

docker swarm 搭建及跨主機網路互連案例分析

教你分分鐘搞定Docker私有倉庫Registry

使用Spring Cloud和Docker的微服務架構


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 調用代理,就是負責將客戶端對服務的調用進行包裝,然後傳遞到伺服器端。當客戶端調用方法時,只是像正常的方法調用一樣,傳入方法參數,取得返回結果。客戶端不需要知道這個調用被傳遞到何處,業務邏輯在哪裡執行。例如: ServiceFactory 使用了 System.Runtime.Remoting.Pro ...
  • 1、Global.asax中添加對Session的支持,重新Init方法: 2、WebConfig中添加跨域支持: 3、寫Session的Controller 4、讀Session的Controller 5、前端jQuery調用時加上參數crossDomain: true 和 xhrFields: ...
  • 1、功能及功能許可權 一般地,用戶擁有一項功能,則應體現在主視窗的功能菜單樹上,功能還應包括業務 View 內部的功能按鈕。框架會根據許可權設定情況使各功能按鈕可用。為了構建導航樹,某些功能還有可能是用來定義導航關係的,而不包含具體的功能含義,舉例說明: 1)用來定義導航關係的功能:如圖所示,【功能】、 ...
  • 初識ASP.NET Core的小伙伴一定會發現,其幾乎所有的項目依賴都是通過依賴註入方式進行鏈式串通的。這是因為其使用了依賴註入 (DI) 的軟體設計模式,代碼的設計是遵循著“高內聚、低耦合”的原則,使得各個類與類之間的關係依賴於介面,這樣做的目的是能更有利於項目代碼的維護與擴展。 ...
  • # [翻譯] 如何在 ASP.Net Core 中使用 Consul 來存儲配置 原文: [USING CONSUL FOR STORING THE CONFIGURATION IN ASP.NET CORE](https://www.natmarchand.fr/consul-configura... ...
  • 1.瀏覽aws 開發人員指南 https://docs.aws.amazon.com/zh_cn/sns/latest/dg/sms_publish-to-phone.html 2.安裝 aws sms net api : AWSSDK.SimpleNotificationService 3.調用  ...
  • 首先說兩件事: 1、大爆炸我還記著呢,先欠著吧。。。 2、博客搬家啦,新地址:https://blog.ultrabluefire.cn/ 下麵是正文 前些日子看到Xaml Controls Gallery的ToggleTheme過渡非常心水,大概是這樣的: 在17134 SDK里寫法如下: 這和我 ...
  • MVVM的特點之一是實現數據同步,即,前臺頁面修改了數據,後臺的數據會同步更新。 上一篇我們已經一起編寫了框架的基礎結構,並且實現了ViewModel反向控制Xaml窗體。 那麼現在就要開始實現數據同步了。 DataContext—數據上下文 在實現數據同步前,我們要瞭解一個知識點——DataCon ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...