国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PPT下載 | 億級用戶萬臺服務器背后,vivo云服務容器化如何破繭化蝶?

plokmju88 / 2312人閱讀

摘要:綜上所述,容器化性能上接近物理機,在多測試場景下,表現相對穩定可靠。和實現了云服務器節點從物理機到宿主機的轉變。

2018年數人云Meetup第一站,聯合vivo在深圳舉辦 Building Microservice 系列活動第一期。本次技術沙龍vivo、中興通訊、華為、數人云共同派出技術大咖,為開發者們帶來有關微服務、容器化、配置中心、服務網格等領域的實戰與干貨分享。

數人云Meetup每月一期,歡迎大家來面基、學習。本文為vivo云計算架構師袁樂林分享的“vivo云服務容器化實踐”現場演講實錄。

今天講的內容主要是介紹技術背景,產品的技術架構,我們關鍵技術的實踐,前車之鑒,以及對下一代云服務架構的設想。

技術背景

vivo這些年的業務增長非常快,用戶數已經上億,服務器到了萬級,業務域好幾百,后端系統的復雜度在迅速攀升,不光是運維方面、架構體系復雜度也非常高,vivo技術架構也是到了破繭化蝶的時候。

我們做過容器、虛擬機與物理機性能對比測試。上面這張圖是當時做的性能測試架構圖。得出了一些測試結論:
1.容器化app(4c8g)在性能上略優于非容器化app測試指標
2.容器化app(32c64g)性能相較于裸跑同物理機有近4%左右性能損耗,其中TPS有3.85%損耗,平均響應時間3.95%(1毫秒)的增加,對業務請求無影響。
3.容器化app在12h的穩定性測試中表現正常
4.容器化app在cpu相對配額,cpu綁定以及絕對配額場景下,業務性能CPU相對配額 > CPU綁定 > 絕對配額。
5.容器化app在組部件異常,單計算節點,控制異常場景下,容器運行正常。
綜上所述,容器化app性能上接近物理機,在多測試場景下,表現相對穩定可靠。同時,對計算密集型app,相對權重配額能實現CPU資源利用率最大化。
vivo容器化云服務框架
正是因為這個性能測試數據的支撐,就有了vivo容器化云服務框架,我們給它取名 Kiver,提供輕量級、高可靠的容器化生產方案。

在這個框架之上vivo一共有八個云服務,按照后來統計數據來看,MySQL加上其他兩個服務占到80%的比例,這也非常符合“二八”原則。

vivo整個云服務容器化產品的架構,左邊是運維自動化的工具集,比如日志、監控等,日志在業界應用非常廣泛,我們用采集容器的數據、容器的監控指標。

這里有兩個日志,上面是中間件的業務日志平臺,所有業務基于中間件日志規范,輸出日志后都會送到這里面收集起來,但是這個業務日志平臺功能目前比較薄弱,對新增加的一些組件,比如ECTD等不支持。vivo又引入了現在容器領域比較常見的日志方案EFK,今后會規劃把兩個日志整合到一起。

vivo在運維方面做了一些工具,如 vivo MachineCtl和 KiverCtl,兩個工具主要實現宿主機的自動化,簡單來說可以把宿主機操作系統自動化地裝起來,裝完之后變成Kiver的計算節點或者控制節點。還有KiverPerfermance,是我們內嵌的一個小的性能測試插件。

再來看右邊,是vivo的基礎設施,物理機和交換機,網絡設備和防火墻等,上面是Docker,Docker容器虛擬化技術把物理機上面的相關資源虛擬化用起來。

右邊有 Ceph 塊存儲,實現數據備份,上面是vivo自研的DevOps平臺,做了調度框架,右邊是用harbor做的鏡像倉庫,再往上就是云服務Portal,前面所說的那些云服務,同時也可以跑長生命周期應用。

宿主機自動化實踐

下面我們講一下vivo的實踐。現在物理機一旦上了規模之后,裝操作系統就成為一件大事,我們提供了 vivoMachineCtl,這個工具是一個命令行給運維人員使用,可以實現宿主機集中化的參數配置和自動化。

利用 vivoMachineCtl,首先和物理機管理卡做一個交互,交互之后拿到物理機的MAC地址,這里有個BMC,也有廠商叫iDrac卡,它可以取得這臺服務器網卡的MAC地址,創建以MAC地址命名的Bootfile,指明現在需要裝什么操作系統,和其他一些參數。再進一步給它一個ipmi消息對服務器復位,然后服務器開始重啟。

重啟之后,服務器第一次會發dhcp請求,拿到IP地址,之后會走一個pxe的協議,拿到bootfile,下載Bootfile所指明的小系統和內存文件系統文件下來,加載到物理機中,然后開始進行操作系統安裝。這就是操作系統安裝的過程。操作系統安裝完成之后,把安裝類和文件系統切換成正在啟動的文件系統,在post階段到集中化的配置中心,把相關的配置拉下來,包括IP地址,主機名和網關等信息,這是宿主機的自動化部署。

KiverCtl實際上就是把操作系統的宿主機變成計算節點或者控制節點。計算節點有如下幾個功能:第一,基本的包安裝,第二,Docker、Netplugin初始化,啟動kiver-guard/flume/cadvisor容器,完成日志和監控指標的采集。

控制節點上面有Etcd和Netmaster,也會可選地把Prometheus/alertmanager/grafana/啟動起來。vivoMachineCtl和KiverCtl實現了云服務器節點從物理機到宿主機的轉變。

業務日志集成到日志平臺實踐

這是vivo日志采集的實踐,在宿主機上做日志分區,容器運行起來之后掛這個目錄,每個容器起來之后會創建一個自己的文件目錄。外面有kiver-guard,用來偵聽內核文件系統的新日志文件創建的通知。

根據通知會創建軟件鏈接,鏈接到上一級Flume監控的日志目錄,由Flume推到kafka。大數據平臺會來消費這里的數據,業務日志平臺也會消費這個數據,然后持久化到ES里,最后由中間件日志平臺來實現對日志的檢索和展示。

為什么要這么做?當時用的flume版本不支持自動收集遞歸子目錄下日志新增內容的收集,完整的文件可以收集進去,但是日志文件在遞歸子目錄下有不停地追加是輸不進去的。

kiver-guard本身也是一個容器,它起來之后把宿主機日志目錄掛上去,在容器里面偵聽日志目錄下的create事件。

不管這些日志路徑有多深或者在哪里,都可以鏈接出來。做鏈接的時候有一點需要注意,要確保鏈接過來之后文件名稱是唯一的。有些容器被刪除了,或者日志被輪轉刪除了,同樣也會針對Delete事件,偵測到delete是件之后刪除上層flume監控日志路徑的對應鏈接。

基礎組件日志收集實踐

基礎組件日志采用Etcd、Ceph、CentOS、Netmaster等一些網上比較熱門的EFK組件,開箱即用。
監控與告警實踐

這是監控和告警實踐,在容器領域比較常見,vivo采用的是Promethus和Alertmanager。Promethus采用雙節點,雙拉(拉兩遍),兩個Promethus之間沒有做主從,為了解決高可用問題,掛了一個另外一個還在。

之后接短信郵件中心,后面接Grafana作為監控面板,前面用了telegraf。我們做的東西不僅僅有容器,還有其他的組件像Ceph。我們用Cadvisor收集容器監控指標。

我們對集群健康做監控,也對集群資源使用情況進行監控,集群的健康性采用telegraf可以調用外部shell腳本的特性。我們在控制節點寫了腳本,用來檢查Etcd的健康情況,也和各個節點進行通訊,檢查各個節點是不是健康。之后會返回數值,給出集群健康狀態碼。

這個就是前面講的自定義的一些監控指標,這是集群的健康檢查,這是集群的資源利用率,大致兩條數據鏈進來。一個腳本由telegraf去拉,推到Prometheus里面,最后展現在Grafana上面。另一個,由DevOps框架把數據寫到Mysql里面,再由Grafana定義Mysql的軟件源。

這邊拉出來的自定義的健康指標支持返回碼,這個返回碼需要翻譯成文字,實際上Grafana已經具備這個特性,我們可以去做一個映射,比如1代表監控,2代表網絡問題等等,它可以自動翻譯來。

數據持久化實踐

說到云服務大家都會關注這個問題,數據怎么做到持久化,做到不丟。容器啟動的時候會掛在宿主機上面的一個數據目錄,和日志類似,有容器的啟動進程,直接寫腳本也可以,創造二級目錄。

用主機名,是在容器默認的主機名,就是它的默認ID號。如果這個ID已經存在就不用創建,說明容器是起用一個舊的容器,最后建立軟鏈接到數據目錄。這樣確保每個容器日志數據都持久化到宿主機,還可以確保容器重啟后數據不丟。

第二,數據本身有一個多帶帶的備份系統,它會每天晚上凌晨2點跑一遍,把Mysql數據推到Ceph塊存儲當中,實現數據的可靠性。

集群可靠性實踐

這是容器集群可靠性實踐,最典型的是三個副本,副本能夠實現數據和服務的可靠性。

失效重試,在集群各節點提供一個crontab定時任務,每隔一段時間探測一次docker服務進程健康狀況,若不健康,則拉起Docker服務進程。同時我們開啟了docker的Restartalways選項,確保容器服務異常退出后,能被重新拉起來。

關于隔離,首先是分區隔離,宿主機業務日志目錄/app/log獨立分區,避免日志量過大時侵占宿主機系統分區或者業務分區磁盤。

第二,資源隔離,flume當時是跑進程的,我們做的第一件事情是進行容器化,之后做配額,限制能使用的資源使用量,避免大日志傳輸時侵占宿主機過多資源。

第三,故障隔離,開啟dockerlive-restore選項,保障docker服務進程不影響容器服務。

前車之轍

我們犯過一些錯誤,不負責物理機運營的童鞋可能感受不明顯。如果磁盤引導分區被破壞,就可能導致操作系統被重裝,這個問題是很嚴重的。原因也很簡單,服務器一般有多引導的選項,比如磁盤、網絡、CD,一般在順序上磁盤第一,網絡第二。

但如果磁盤引導分區壞了,服務器會認為沒有操作系統,然后就從第二個上引導。這時候不幸的事情是,在你的網絡環境里如果之前剛好裝過操作系統,采用了第三方開源的部署服務器,而沒有把之前的文件刪掉,那么它就會把那些操作重新裝上。

解決辦法很簡單,我們提供了定時任務,對兩個小時前創建的引導文件,能看見它的創建時間、訪問時間,并進行強制性刪除。

第二個前車之轍,在收集Ceph日志時碰到困難,當時是用fluent-plugin-ceph插件來做。具體的情況是,第一,官方配置文檔不正確,因為提交者沒按官方文檔格式編碼,導致看到的配置是一行,拿回來根本不知道怎么辦。第二,它和td-agent1.0 版本不兼容。摸索出的解決方法就是圖片上顯示的辦法。

下一代云服務架構

這是我們下一代云服務架構,與上一代的主要區別在于,把編排框架換成了Kubernetes。目前AI這塊已經用起來了,AI部分在線上大概有一百臺物理機,跑Job任務,短任務每天可以跑到三萬個,一次性可以調動3000個容器,未來會把這個些換成Kubnernetes,包括我們的AI、云服務都會跑在Kubernetes上。
XaaS on Kubernetes

如果把云服務跑到Kubernetes上,第一個要做的事情,可能會采用ceph塊存儲做后面的數據和數據持久化。目前vivo已經有了數據ceph塊存儲,但功能還不強大。第二,要解決pod漂移調度問題,如果不用ceph塊存儲,pod失效調度到其他節點上有問題,調過去沒用的,沒有數據。
第三,也是最常見的一個,固定POD IP,看到網上有人討論這個事情,覺得容器壞了,沒必要把容器固定起來,因為有違微服務的原則。這種觀點不太對,有一些場景,比如在vivo的企業IT架構里面,很多東西都跟IP掛鉤,比如安全策略,它不是跟域名掛鉤,而是PODIP掛鉤,交換機、防火墻等很多的配置都跟這個相關。所以vivo要干的很重要的事情,就是把POD IP固定。
目前業界對這塊也有一些實踐,比如京東最近有這方面的分享,把PODIP放在一個APP的IP 小池子里面,小池子里面還有IP的話,就從小池子里拿,沒有的話就從大池子里去申請。

在微信公眾號后臺回復“127”,即可獲取本次演講PPT《vivo云服務容器化實踐》。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/27214.html

相關文章

  • 騰訊運維干貨沙龍-海量運維實踐大曝光 (三)

    摘要:月日,首期沙龍海量運維實踐大曝光在騰訊大廈圓滿舉行。織云高效的實踐是,它是以運維標準化為基石,以為核心的自動化運維平臺。 作者丨周小軍,騰訊SNG資深運維工程師,負責社交產品分布式存儲的運維及團隊管理工作。對互聯網網站架構、數據中心、云計算及自動化運維等領域有深入研究和理解。 12月16日,首期沙龍海量運維實踐大曝光在騰訊大廈圓滿舉行。沙龍出品人騰訊運維技術總監、復旦大學客座講師、De...

    eechen 評論0 收藏0

發表評論

0條評論

plokmju88

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<