數(shù)人云|12條軍規(guī)說(shuō)Dev泽艘,3大重點(diǎn)講Ops——當(dāng)當(dāng)網(wǎng)的云原生之路

8月19日數(shù)人云Meetup上來(lái)自當(dāng)當(dāng)網(wǎng)的高洪濤老師做了《當(dāng)當(dāng)云原生DevOps實(shí)踐》的主題分享,從應(yīng)用改造入手镐依,重點(diǎn)講述了運(yùn)維核心—監(jiān)控的相關(guān)內(nèi)容匹涮。

數(shù)人云提醒:8000字長(zhǎng)文值得分享與收藏!

今天跟大家分享下槐壳,目前比較流行的云原生概念個(gè)人關(guān)注要點(diǎn):

  • 首先:在于整個(gè)應(yīng)用的改造然低,包括Infrastructure,有12個(gè)要素
  • 其次:運(yùn)維的核心——監(jiān)控,主要講一下核心指標(biāo)如何確定
  • 第三:當(dāng)當(dāng)運(yùn)維網(wǎng)絡(luò)采用的Service Mesh架構(gòu)相關(guān)內(nèi)容
  • 第四:日志的搜集等
image

云原生即Cloud Native雳攘,最早來(lái)源于如Landscape此類(lèi)做微服務(wù)的公司带兜,線路圖包括幾層:

  • 第一層:應(yīng)用的定義與開(kāi)發(fā),開(kāi)發(fā)要符合云原生的標(biāo)準(zhǔn)吨灭,如何讓?xiě)?yīng)用在開(kāi)發(fā)階段達(dá)到此標(biāo)準(zhǔn)刚照,是本次分享首先要探討的內(nèi)容。

  • 第二層:編排和管理喧兄,大家對(duì)這個(gè)概念了解較多无畔,如DCOS、Kuberentes吠冤、Mesos以及Docker Swarm浑彰,包括像Docker Conpose的一些配置化管理可能也會(huì)在編排里。

  • 第三層:運(yùn)行態(tài)拯辙,環(huán)境從外部獲得相關(guān)的一些概念郭变。

  • 第四層:迷你環(huán)境的配置與安裝,一部分人可能原來(lái)用過(guò)薄风,最早如Puppet、Self以及最近的Ansible拍嵌,此類(lèi)組件都會(huì)作為這一層使用遭赂。

  • 最底層:普通的IaaS層、包括邏輯横辆、運(yùn)營(yíng)商撇他。

若應(yīng)用符合多層的規(guī)范,即可輕松的橫向擴(kuò)展狈蚤、在不同云間做遷移困肩,能在公有或私有云上跑,但這比較難脆侮,因?yàn)楹芏鄳?yīng)用上云之前要經(jīng)過(guò)改造锌畸,所以個(gè)人認(rèn)為云原生本身是對(duì)架構(gòu)的挑戰(zhàn),其讓?xiě)?yīng)用可以在云中間來(lái)回穿梭靖避,而不會(huì)不適應(yīng)潭枣。

image

上圖是網(wǎng)上的開(kāi)源圖:Cloud Native Computing Foundation即常說(shuō)的CNSAD,一個(gè)云原生基金會(huì)組織幻捏,其實(shí)就是一些云原生品牌大聯(lián)盟盆犁,若從上到下都使用此體系,那么你也是云原生的了篡九。

例如谐岁,最左邊是語(yǔ)言,最頂級(jí)為GO語(yǔ)言,號(hào)稱最適合做微服務(wù)的語(yǔ)言伊佃,然后是一些編排工具:持續(xù)集成工具窜司,以及比較流行基于服務(wù)的中間件,第二層編排工具锭魔,首先是Nginx,如常用的Mesos织咧、Nomad漠秋,中間是配置工具:Etcd笙蒙、ZK庆锦,后面是一些網(wǎng)絡(luò)服務(wù)管理,當(dāng)當(dāng)使用比較多的是GRPC搂抒,以及本次分享會(huì)涉及到的Linkerd艇搀,它旁邊是Buoynt,也是Linkerd的開(kāi)發(fā)者焰雕。

對(duì)于運(yùn)行態(tài)來(lái)說(shuō)矩屁,基礎(chǔ)的運(yùn)行S3較為常見(jiàn)爵赵,如Docker空幻、Rkt就是運(yùn)行環(huán)境的容器,云原生目前提供幾個(gè)方便的如CALICQ(當(dāng)當(dāng)目前正在研究)则剃,OVS棍现,再底層是構(gòu)建工具:如ANSIBLE镜遣。最底層如微軟的相關(guān)產(chǎn)品,AWS進(jìn)入中國(guó)后發(fā)展也比較迅速娄柳。另外還有阿里云艘绍、京東云等類(lèi)似的公有基礎(chǔ)服務(wù)平臺(tái)對(duì)外提供一些服務(wù)赤拒,供商家運(yùn)行調(diào)用挎挖,以及一些邊緣服務(wù)航夺,如Splunk阳掐、如當(dāng)當(dāng)?shù)腅lastic流水線缭保。

云原生應(yīng)用的12條軍規(guī)

前面的整套產(chǎn)品線用下來(lái),即可認(rèn)為應(yīng)用是云原生的诸老,而什么是云原生標(biāo)準(zhǔn)的套路呢孕锄?個(gè)人認(rèn)為有12個(gè)因素,即云原生應(yīng)用的12條軍規(guī)宙址,有些概念和微服務(wù)重合调卑,但云原生的概念要大于微服務(wù)恬涧。

image

上圖是當(dāng)當(dāng)目前內(nèi)部運(yùn)維的作業(yè)平臺(tái)溯捆,整合了整個(gè)DevOps理念,有人講DevOps時(shí)首先強(qiáng)調(diào)的是Developer和Operater煮仇,但我認(rèn)為其核心在于測(cè)試浙垫,當(dāng)當(dāng)內(nèi)部以測(cè)試為核心帶動(dòng)開(kāi)發(fā)和運(yùn)維郑诺,保證服務(wù)的可用性间景,三個(gè)團(tuán)隊(duì)緊密配合將整個(gè)服務(wù)推向一個(gè)穩(wěn)定的局面倘要。

image

上圖是12條因素即12條軍規(guī)封拧,這里挑幾個(gè)重要進(jìn)行講解:

  • Codebase:和整個(gè)測(cè)試環(huán)境有關(guān)泽西,大家拉基線是為了整個(gè)版本的穩(wěn)定性。

  • 依賴:要解決依賴的問(wèn)題陕见,若用Java的話评甜,意義不大仔涩,原始上會(huì)有依賴管理,但電商公司有各種語(yǔ)言都非常原始佩研,直接依賴于源代碼旬薯,若其版本發(fā)生變化绊序,有些API就編譯不過(guò)去。

  • Configuration:Java和其他語(yǔ)言非常沖突就在于此岗宣,做Java的同學(xué)都知道配置一般都會(huì)打在根應(yīng)用的生產(chǎn)日?qǐng)?bào)里耗式,會(huì)有大量的配置文件刊咳,上到云應(yīng)用娱挨,讓底層人員運(yùn)行作業(yè)炸包捕犬,首先就要配置文件碉碉,一切配置要么走配置中心垢粮,連訪問(wèn)配置中心的地址可能也是外部注入進(jìn)來(lái)蜡吧,不用再去配置上聲明整個(gè)中心是什么;要么是所有的配置都由平臺(tái)幫助注入元潘,不能自己攜帶相關(guān)的Jap去做柬批,原來(lái)整個(gè)構(gòu)建,底下會(huì)有一些構(gòu)建的模式洛姑,之前構(gòu)建最早版本非常有意思楞艾,比如大了一個(gè)測(cè)試環(huán)境的炸包,若沒(méi)問(wèn)題蕴侧,即可交給運(yùn)維净宵,因?yàn)榕渲肰I里面完全不一樣择葡,會(huì)在應(yīng)用和部署的公共機(jī)器時(shí)敏储,有自動(dòng)替換配置文件的動(dòng)作已添,要替換的配置文件其實(shí)也是預(yù)先上傳到平臺(tái)上的滥酥,整個(gè)發(fā)布平臺(tái)會(huì)幫助做一個(gè)配置文件的替換恨狈,方式很原始禾怠,不是運(yùn)行它去改配置吗氏,因?yàn)榘举|(zhì)上是變化的弦讽,配置文件屬于包的一部分往产,因此它也是變動(dòng)的,等于整個(gè)包的密封性被打破了锐朴,此時(shí)去上一個(gè)云原生的平臺(tái)焚志,首先要做的是滅配置文件酱酬,要通過(guò)環(huán)境變量或啟動(dòng)平參數(shù)的模式去啟動(dòng)應(yīng)用膳沽,這時(shí)平臺(tái)能自動(dòng)地把整個(gè)環(huán)境——生產(chǎn)贵少、預(yù)發(fā)布滔灶、測(cè)試、以及延長(zhǎng)等環(huán)境麻车,將不同的配置設(shè)置好动猬,所以這一點(diǎn)對(duì)開(kāi)發(fā)來(lái)說(shuō)改動(dòng)比較大赁咙,正常上這種云應(yīng)用彼水,最難的是將配置問(wèn)題解決凤覆,因?yàn)榇罅康腏ava配置都是在文件中進(jìn)行盯桦,包括內(nèi)部有框架的拥峦,特定的文件事镣,將這些都清除掉璃哟。

  • Backing Services:即不要把依賴服務(wù)完全寫(xiě)死喊递,依賴服務(wù)也是通過(guò)環(huán)境注入進(jìn)來(lái)骚勘,如數(shù)據(jù)庫(kù)連接俏讹,可以通過(guò)外部配置進(jìn)來(lái)泽疆。

  • 構(gòu)建殉疼、發(fā)布和運(yùn)行:要流程化瓢娜。

  • 進(jìn)程:進(jìn)程是微服務(wù)的根基眠砾,應(yīng)用應(yīng)以進(jìn)程的級(jí)別運(yùn)行褒颈,跟原來(lái)的方式不同哈肖,很多功能都是達(dá)到一個(gè)進(jìn)程淤井,通過(guò)不同的線程運(yùn)行币狠,但有幾個(gè)不好的地方漩绵,類(lèi)似于微服務(wù)止吐,發(fā)布可能會(huì)影響不應(yīng)影響的一些部分,追蹤也不是很好做秕重,比如當(dāng)當(dāng)最近在做內(nèi)部的Tracing溶耘,目前只能做到進(jìn)程間的Tracing凳兵,如果內(nèi)部的線程Tracing需要改造留荔,還是有一些麻煩的聚蝶。
    端口:類(lèi)似于一種端口的綁定解決方案碘勉,是由編排工具動(dòng)態(tài)注入验靡,要?jiǎng)討B(tài)監(jiān)聽(tīng)一些要發(fā)布的端口信息胜嗓。

  • 日志:不應(yīng)生成文件辞州,而是通過(guò)服務(wù)的方式將其進(jìn)行傳遞变过,整個(gè)管理平臺(tái)應(yīng)有自動(dòng)收集日志的功能媚狰,這也達(dá)到了云原生的態(tài)度崭孤,要將所要定位的信息不和應(yīng)用綁在一起辨宠,因?yàn)閼?yīng)用很快會(huì)啟動(dòng)或注銷(xiāo)彭羹,那么整個(gè)軌跡要持久化的保留派殷,所以日志是整個(gè)云原生問(wèn)題的核心毡惜,后面會(huì)進(jìn)行詳細(xì)的講解经伙。

image

上圖是當(dāng)當(dāng)內(nèi)部培訓(xùn)的圖,淺藍(lán)色是線下操作垮刹,是在云平臺(tái)之外的荒典,因?yàn)槎际堑谌浇M件寺董,包括開(kāi)發(fā)遮咖、構(gòu)建過(guò)程盯滚,接著在云平臺(tái)上配置作業(yè)魄藕。藍(lán)色部分是開(kāi)發(fā)或由測(cè)試提交背率,黃色部分由運(yùn)維操作交排。團(tuán)隊(duì)之間會(huì)通過(guò)這樣的配置去調(diào)整和審核埃篓,控制整個(gè)平臺(tái)的用量架专,因?yàn)橛肕esos跟Lite版本不一樣的地方在于聲明時(shí)要聲明CPU和內(nèi)存部脚,還會(huì)定義一些特性資源如:NFS委刘,包括一些共享的存儲(chǔ)锡移,這些會(huì)配置到配置里淆珊,此時(shí)也要有一個(gè)審核套蒂,讓其之間做個(gè)比較完美的交互。

監(jiān)控——核心指標(biāo)設(shè)定

image

上面講了Dev骨坑,剩下的幾個(gè)環(huán)節(jié)講一下Ops有關(guān)內(nèi)容欢唾,首先:核心指標(biāo)的設(shè)定。

上圖是我自己畫(huà)的云圖祟霍,來(lái)源于Diggtal Dog網(wǎng)站沸呐,它有一篇Blog講運(yùn)維監(jiān)控指標(biāo)醇王,基本上是暗詞的權(quán)重,除了這個(gè)云層崭添,另外比較主要的是Mertics寓娩,其實(shí)應(yīng)該過(guò)濾掉,如Error的數(shù)量呼渣,Success等各種指標(biāo)棘伴,畫(huà)上圖最大的用意是讓大家看到——亂徙邻。

因?yàn)橹笜?biāo)很多排嫌,Mesos所有的凈化API有20多個(gè)畸裳,它的指標(biāo)可能有30—40個(gè)缰犁,但如此多的指標(biāo),每天都有大量的信息怖糊,各個(gè)指標(biāo)間有很多聯(lián)動(dòng)關(guān)系帅容,大數(shù)據(jù)可以去聯(lián)系、判斷哪種指標(biāo)在日常組合的情況下是影響系統(tǒng)發(fā)揮的伍伤,但目前的技術(shù)仍然難以做到并徘,最簡(jiǎn)單的方式是從這些紛繁的指標(biāo)中找一個(gè)最適合自身的,在構(gòu)建自身監(jiān)控指標(biāo)時(shí)扰魂,一定要找到一個(gè)上帝指標(biāo)麦乞,若有人說(shuō),現(xiàn)在某個(gè)作業(yè)有問(wèn)題劝评,優(yōu)先看這項(xiàng)指標(biāo)姐直,如果這個(gè)指標(biāo)沒(méi)有問(wèn)題,那么狀況應(yīng)該不大蒋畜。

SLO=>SLA

這個(gè)指標(biāo)其實(shí)就是SLA声畏,使用比較多,SRE對(duì)SLO到SLA的推導(dǎo)是有過(guò)程的:SLO是服務(wù)質(zhì)量的目標(biāo)姻成,在運(yùn)維各個(gè)系統(tǒng)時(shí)插龄,系統(tǒng)的服務(wù)質(zhì)量需求不同,某人過(guò)來(lái)找你科展,某作業(yè)非常重要均牢,如果一天不運(yùn)行,會(huì)丟掉多少單才睹,但若細(xì)聊徘跪,會(huì)發(fā)現(xiàn)每個(gè)人的服務(wù)指標(biāo)不一樣见秤,能忍受的指標(biāo)也各不相同,跟他去嘆號(hào)你的服務(wù)指標(biāo)真椿,是3個(gè)9鹃答、4個(gè)9或50%都可以,有些作業(yè)只要70%就夠突硝,雖然偶爾失敗测摔,或者70%的成功也不會(huì)影響服務(wù),將SLO設(shè)定好解恰,即可推到SLA是什么锋八,一旦確定,就是跟開(kāi)發(fā)之間建立了一個(gè)生死契約护盈,但跟市場(chǎng)不同挟纱,市場(chǎng)跟客戶簽,對(duì)方場(chǎng)上會(huì)寫(xiě)個(gè)SLA腐宋,當(dāng)然一般也不會(huì)去評(píng)估紊服,開(kāi)發(fā)不同,開(kāi)發(fā)簽指標(biāo)后胸竞,是要算績(jī)效的欺嗤,所以一旦跟他說(shuō)了能達(dá)到幾個(gè)9,就一定要做到卫枝,否則自己的獎(jiǎng)金也發(fā)不出來(lái)煎饼。

好處是會(huì)約定雙方,開(kāi)發(fā)不會(huì)提出過(guò)分的要求校赤,比如偶然宕機(jī)吆玖,也不會(huì)找你,因?yàn)檫€未達(dá)到它的底線马篮,如果有些嚴(yán)格指標(biāo)沾乘,需要提供更好的服務(wù)給他,比如調(diào)度時(shí)會(huì)給他分配更好的服務(wù)器积蔚,做一些預(yù)先的割裂意鲸,將其和一些作業(yè)隔離開(kāi)。

SLA=ST/ET

SLA指標(biāo)在做系統(tǒng)時(shí)要注意怎么設(shè)置尽爆,平時(shí)方法很簡(jiǎn)單怎顾,WEB應(yīng)用很好設(shè)置,訪問(wèn)10次漱贱,有9次返回404槐雾,那這個(gè)SLA才10%,但作業(yè)其實(shí)不好衡量幅狮,本來(lái)說(shuō)是每5分鐘要運(yùn)行一次募强,但如何衡量株灸?是處理數(shù)據(jù)量的多少嗎?自己的指標(biāo)需要自己去設(shè)定擎值,這個(gè)是ST/ET慌烧,S是真正運(yùn)行次數(shù),即在10分鐘內(nèi)根據(jù)表達(dá)式鸠儿,成功運(yùn)行多少次屹蚊,是有標(biāo)準(zhǔn)的。E是期望這段時(shí)間內(nèi)運(yùn)行多少次进每,有一個(gè)口號(hào)表達(dá)式去計(jì)算即可在一個(gè)時(shí)間范圍內(nèi)算出應(yīng)該運(yùn)行多少次汹粤,所以和一些應(yīng)用不同,這個(gè)有平臺(tái)的特點(diǎn)田晚,是針對(duì)定制作業(yè)設(shè)計(jì)的SRE指標(biāo)嘱兼。

image

給大家分享一個(gè)實(shí)例,可以看到出了故障贤徒,目前已經(jīng)降到53%了芹壕,具體的作業(yè)已經(jīng)抹掉,由于自身寫(xiě)錯(cuò)應(yīng)用有BUG泞莉,造成執(zhí)行失敗哪雕,上面的曲線是Grafana的一個(gè)圖船殉,整個(gè)SLA有時(shí)會(huì)100%有時(shí)會(huì)降到50%幾鲫趁,下面是用來(lái)顯示SLA如何計(jì)算的綠線,可見(jiàn)除了偶爾波動(dòng)外利虫,比較均勻挨厚。底下這條線是實(shí)際運(yùn)行次數(shù),偏離度較大糠惫,因此可以得出疫剃,在哪個(gè)時(shí)間段出了問(wèn)題,幫助進(jìn)一步定位硼讽。

所以關(guān)鍵的監(jiān)控指標(biāo)巢价,對(duì)于輕量級(jí)監(jiān)控是非常重要的,為什么只抓一個(gè)指標(biāo)就夠固阁?Mesos給的官方建議是如果集群內(nèi)的任務(wù)快速失敗壤躲,就會(huì)報(bào)警,當(dāng)當(dāng)基于此建立了報(bào)警备燃,有時(shí)會(huì)出現(xiàn)報(bào)警碉克,查一下這個(gè)指標(biāo),如果沒(méi)有問(wèn)題并齐,就可以認(rèn)為是由于偶然的情況下做了一些失敗的專(zhuān)一漏麦,不會(huì)有太大的影響客税,這就是設(shè)置關(guān)鍵指標(biāo)的好處。

監(jiān)控——監(jiān)控監(jiān)控系統(tǒng)

image

監(jiān)控系統(tǒng)是否需要被監(jiān)控撕贞?這是一個(gè)老生常談的問(wèn)題更耻,首先監(jiān)控系統(tǒng)也是系統(tǒng),是需要被監(jiān)控的捏膨。這里進(jìn)行一下反推酥夭,如果監(jiān)控系統(tǒng)萬(wàn)一Down了就只能再加一層了,下面是Prometheus去采集整個(gè)Mesos集群的白核監(jiān)控?cái)?shù)據(jù)脊奋,發(fā)給Master做告警熬北,接到內(nèi)部的Tracker的系統(tǒng)會(huì)根據(jù)告警級(jí)別去發(fā)送郵件、短信或電話诚隙。上面有個(gè)叫雷達(dá)的系統(tǒng)讶隐,目前監(jiān)控整套的監(jiān)控系統(tǒng),已經(jīng)用了很多年久又,因?yàn)镻rometheus也是整套的監(jiān)控系統(tǒng)巫延,再由它去監(jiān)控一個(gè)監(jiān)控系統(tǒng),如果雷達(dá)也Down怎么辦地消?不管做了HA或其他炉峰,仍然會(huì)有Down的幾率,但如果兩個(gè)系統(tǒng)同時(shí)Down了呢脉执?

大家可以回溯一下剛才講過(guò)這個(gè)問(wèn)題疼阔,監(jiān)控系統(tǒng)本身也是一個(gè)系統(tǒng),到底要提供多大的SLA半夷,要提供對(duì)外監(jiān)控4個(gè)9的目標(biāo)嗎婆廊?另外上一套系統(tǒng)可以保證4個(gè)9,因?yàn)槊刻紫到y(tǒng)每年都會(huì)算一個(gè)SLA巫橄,將這個(gè)指標(biāo)用上去以后淘邻,系統(tǒng)的可用度會(huì)上升,所以對(duì)系統(tǒng)的可用要量化湘换、要度量宾舅,系統(tǒng)只要能用目前的方案達(dá)到SLA設(shè)置的目標(biāo),就可以停了彩倚,如果達(dá)不到就不能停筹我。

image

再回到上面這個(gè)圖澜建,后來(lái)之所以加了一檔车伞,因?yàn)镻rometheus最早上線那版,為了塊它是個(gè)單點(diǎn)饵逐,無(wú)法保證線程目標(biāo)盯质,所以又加了一套監(jiān)控系統(tǒng)袁串,如果將Prometheus概而、Alertmanager在一開(kāi)始就構(gòu)建比較完整的服務(wù),那么可以不用第二層監(jiān)控囱修。

Service Mesh實(shí)踐

接下來(lái)是Service Mesh赎瑰,APM 最近在北京召開(kāi),這是一個(gè)全國(guó)比較大型的監(jiān)控告警的會(huì)議破镰,會(huì)上當(dāng)當(dāng)總監(jiān)講了一下這個(gè)概念餐曼,這概念是當(dāng)時(shí)運(yùn)營(yíng)整個(gè)Mesos的后臺(tái),引用到內(nèi)部服務(wù)范根的鲜漩,所以再給大家案例一下相關(guān)的技術(shù)源譬。

image

上Kubernetes或Mesos集群的話,都會(huì)遇到一種網(wǎng)絡(luò)問(wèn)題孕似,如果對(duì)容器的編排調(diào)度都感興趣踩娘,可以在網(wǎng)上搜:Kubernetes網(wǎng)絡(luò)、容器網(wǎng)絡(luò)喉祭、會(huì)有一大堆的概念养渴,上去會(huì)告訴你OAS怎么配,F(xiàn)LANNEL性能會(huì)損失多少泛烙,Calico怎么用的BTP協(xié)議理卑,其實(shí)剛才看了第一個(gè)圖,將的網(wǎng)絡(luò)其實(shí)解決的是整個(gè)網(wǎng)絡(luò)IP層的問(wèn)題蔽氨,會(huì)讓機(jī)器有多少個(gè)IP藐唠,為什么要解決IP層的問(wèn)題呢,因?yàn)橐驗(yàn)槿萜鞣踔汀1热缫慌_(tái)容器一驅(qū)10中捆,一驅(qū)12,一1驅(qū)15可能是最高的坊饶,原來(lái)有1萬(wàn)的集群節(jié)點(diǎn),那么現(xiàn)在要乘10殴蓬,網(wǎng)絡(luò)規(guī)模翻了10倍匿级,IP地址同樣也翻了10倍,所以一些公有云的同志們會(huì)非橙咎恐慌痘绎,因?yàn)樽钤绲奶摂M協(xié)議支持不了這么多的節(jié)點(diǎn),因此提出了容器網(wǎng)絡(luò)肖粮,包括CNI孤页、CNM的標(biāo)準(zhǔn),賬戶要解決IP不夠用的問(wèn)題涩馆,其實(shí)這個(gè)網(wǎng)絡(luò)還有另外一套問(wèn)題:容器起來(lái)后IP也會(huì)變行施,會(huì)有一些別的技術(shù)保證IP也會(huì)變允坚,那服務(wù)要怎么辦?如何去發(fā)現(xiàn)蛾号,如果后臺(tái)比如有10個(gè)WEB應(yīng)用去訪問(wèn)稠项,此時(shí)如何去負(fù)載均衡,如果有個(gè)服務(wù)長(zhǎng)時(shí)間有問(wèn)題鲜结,如何提供整個(gè)服務(wù)集群展运,如何做熔斷,這些都是微服務(wù)常見(jiàn)的網(wǎng)絡(luò)概念精刷。

Service Mesh主要就是解決者方面的問(wèn)題拗胜,即使底層用最原始的完全不用它自身的網(wǎng)絡(luò)方案,照樣可以使用怒允,如圖挤土,最外層如Nginx,作為一個(gè)邊緣節(jié)點(diǎn)误算,會(huì)將流量通過(guò)Service Mesh打到集群內(nèi)部的服務(wù)仰美,它們之間也通過(guò)Service Mesh互相訪問(wèn),然后集群外面來(lái)說(shuō)儿礼,換成淡藍(lán)色不能用外部服務(wù)咖杂,就是通過(guò)Service Mesh向外去訪問(wèn)。

image

這里總結(jié)了三點(diǎn)功能:

第一點(diǎn)是Service Discovery即服務(wù)發(fā)現(xiàn)蚊夫,和正常的如微服務(wù)的發(fā)現(xiàn)不太一樣诉字,微服務(wù)發(fā)現(xiàn)用Cloud基本上也會(huì)存一些中間的存儲(chǔ),ETCD比較多知纷,包括DK壤圃,Consul這些,有人用Redis也存過(guò)琅轧,怎么也得把服務(wù)之間的調(diào)用關(guān)系存起來(lái)伍绳,這個(gè)Service Mesh大多是從第三方平臺(tái)獲得服務(wù)之間的IP地址和聯(lián)系,第三方平臺(tái)包括Kubernetes乍桂,包括這里寫(xiě)的DCOS冲杀,DCOS是另外一個(gè)概念,即Mesos加Marathon再加一套新構(gòu)建的組件睹酌,合起來(lái)可能就是DCOS权谁,從這里面把相關(guān)的服務(wù)信息采集出來(lái)就能做服務(wù)發(fā)現(xiàn),比如注冊(cè)個(gè)應(yīng)用憋沿,每次啟動(dòng)時(shí)旺芽,這個(gè)應(yīng)用本身的IP地址,可能端口通過(guò)Mesos或Nginx分配的很明顯,因此如Linkerd采章、Istio就可以把IP地址獲取下來(lái)运嗜,當(dāng)你訪問(wèn)時(shí)組件是知道的,這是它大部分做服務(wù)發(fā)現(xiàn)的原理共缕。

第二點(diǎn)是負(fù)載均衡和健康檢查洗出,上面說(shuō)過(guò),一個(gè)服務(wù)可能是3個(gè)實(shí)例图谷、10個(gè)實(shí)例去對(duì)外提供服務(wù)翩活,那本身應(yīng)用基本軒哪個(gè)服務(wù)就涉及到負(fù)載均衡,如果應(yīng)用上調(diào)不通便贵,會(huì)踢出集群菠镇,這就是健康檢查。這部分可能分為兩大流派承璃,第一大流派是做用戶層的利耍,就是七層負(fù)載,比較傳統(tǒng)盔粹,我們用的跟NG差不多隘梨,因?yàn)槲覀冞€會(huì)有其他別的信息;另外一種是使用本地IP Temple進(jìn)行轉(zhuǎn)發(fā)舷嗡,此時(shí)更像原生的另外一個(gè)部署模式轴猎,包括像DCOS本身有一個(gè)Minuteman的組件,轉(zhuǎn)發(fā)的速度會(huì)很快进萄,但這種有一個(gè)問(wèn)題捻脖,服務(wù)失敗就是失敗了,通過(guò)這個(gè)端自己增加處置機(jī)制中鼠,還有HA的功能也不能做可婶,所以它有一些限制。

最后比較重要的是Metrics和Tracing的對(duì)外暴露援雇,像是這種新一代服務(wù)的組件矛渴,對(duì)外暴露各種Metrics的指標(biāo),如Linkerd熊杨,包括Istio都會(huì)暴露Prometheus的這些監(jiān)控曙旭,還會(huì)自帶一些Tracing的功能,是一種廣播級(jí)的追蹤晶府,linkerd目前只能支持一種,因?yàn)樗鼇?lái)自推特钻趋,推特的組件叫ZK川陆,Tracing技術(shù)比較特別,需要修改服務(wù)的Hander蛮位,然后去加一些額外的信息较沪,因此雖然Linkerd在官方主頁(yè)上公開(kāi)了Metric鳞绕,比如說(shuō)Tracing是插件式的,但需要Tracing的服務(wù)去支持SPIN的協(xié)議才可以尸曼,這個(gè)比較坑们何。我目前正在給我們用的Tracing的截殺軟件,會(huì)截掉一部分Linkerd的Scalar代碼控轿,將它的整個(gè)Hunter協(xié)議改掉冤竹,這樣才能支持別的協(xié)議模式,目前正在內(nèi)部試運(yùn)行茬射,后續(xù)用Linkerd較多的話鹦蠕,會(huì)向它提一些PR,讓它將整個(gè)Tracing開(kāi)源在抛。

image

這是在官網(wǎng)上截的一個(gè)圖钟病,可以讓大家更深刻地理解,用過(guò)Kuber-Proxy的同學(xué)知道刚梭,這是和它一樣的肠阱,在機(jī)器上,服務(wù)過(guò)來(lái)先找它朴读,通過(guò)代理模式再打到另外一臺(tái)服務(wù)的Linkerd屹徘,每次的服務(wù)訪問(wèn),被訪問(wèn)其實(shí)都是通過(guò)本地的其他技術(shù)去發(fā)起的磨德。

目前在跟進(jìn)Skywalking缘回,它是另外一個(gè)開(kāi)源組織。不知道大家對(duì)Tracing有多少了解典挑,要不是用手工的方式將監(jiān)控?cái)?shù)據(jù)往外發(fā)酥宴,如果不想修改代碼,目前只能用Java您觉,要根據(jù)不同組件做埋點(diǎn)拙寡,需要看埋點(diǎn)插件的豐富度了,但埋點(diǎn)了以后會(huì)對(duì)性能稍微有一些影響琳水,目前做的事是將整個(gè)Tracing的插件直接做到Linkerd上肆糕,服務(wù)之間調(diào)用,可能整個(gè)Tracing圖沒(méi)有了在孝,但整個(gè)訪問(wèn)統(tǒng)計(jì)還在诚啃,因此這個(gè)意義很大,如果完全不想動(dòng)代碼的結(jié)構(gòu)私沮,直接上我們的整個(gè)組件始赎,自身就帶了Tracing的過(guò)程。

離線與在線日志

image

離線和在線日志目前也是云原生比較重要的一環(huán),先解釋下Mesos Sandbox造垛,Mesos會(huì)把待執(zhí)行的包下載到本地魔招,生成一個(gè)臨時(shí)目錄,目錄很長(zhǎng)五辽,有很多CP數(shù)办斑,這里面就是Sandbox,原理和Docker一樣杆逗。日志要打到Sandbox里乡翅,否則就沒(méi)法看到日志,可能有些人原來(lái)不應(yīng)用髓迎,會(huì)打到某些固定的路徑峦朗,這時(shí)會(huì)要求打到相對(duì)應(yīng)的路徑里,此時(shí)會(huì)提供兩個(gè)文件:STD error排龄、STD on波势,把標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出寫(xiě)到這個(gè)文件里。當(dāng)當(dāng)目前只采集標(biāo)準(zhǔn)輸出或標(biāo)準(zhǔn)出錯(cuò)橄维,所以原來(lái)如果寫(xiě)了一些特定格式的日志尺铣,會(huì)被要求改掉,其實(shí)開(kāi)發(fā)還是很高興的争舞,因?yàn)殚_(kāi)發(fā)環(huán)境一般都是標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)出錯(cuò)的凛忿,開(kāi)發(fā)那套關(guān)于日志配置不必修改,直接打到包里竞川,上面說(shuō)第一步要改應(yīng)用店溢,首先把配置去文件化,日志的配置不用改委乌,因?yàn)榫€上也只采集這兩個(gè)文件床牧。

image

流程從右向左,F(xiàn)ilebeat目前是整個(gè)集群比較常用的組件遭贸,Logstsh是一個(gè)Transform戈咳,發(fā)到Elastic Search里,最后有Kibana提供服務(wù)壕吹,中間緩沖用的是卡夫卡著蛙,此時(shí)運(yùn)維和開(kāi)發(fā)都可以通過(guò)兩種模式看日志,日譯中模式是直接訪問(wèn)剛才的Sandbox耳贬,訪問(wèn)的頁(yè)面通過(guò)整個(gè)運(yùn)維平臺(tái)踏堡,直接點(diǎn)到頁(yè)面里面。

image

另外通過(guò)ERK平臺(tái)咒劲,在線看日志可能類(lèi)似于上圖這樣一種格式暂吉,一行行打印出來(lái)胖秒,然后web頁(yè)面能自動(dòng)滾動(dòng)缎患,可以看一些即時(shí)日志慕的。

image

搜索統(tǒng)計(jì)還是走Kibana,上圖是測(cè)試環(huán)境的Kibana挤渔,會(huì)統(tǒng)計(jì)一些相關(guān)的日志指標(biāo)肮街。

高洪濤老師將多年的運(yùn)維及開(kāi)發(fā)相關(guān)想法融入到本次演講當(dāng)中,如云原生應(yīng)用的12條軍規(guī)判导,當(dāng)當(dāng)監(jiān)控指標(biāo)制定規(guī)則嫉父,以及當(dāng)當(dāng)網(wǎng)的Service Mesh實(shí)踐進(jìn)行了詳細(xì)地分享,小數(shù)希望大家在看完這篇長(zhǎng)文后能夠有所收獲眼刃。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末绕辖,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子擂红,更是在濱河造成了極大的恐慌仪际,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昵骤,死亡現(xiàn)場(chǎng)離奇詭異树碱,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)变秦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén)成榜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人蹦玫,你說(shuō)我怎么就攤上這事赎婚。” “怎么了樱溉?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵挣输,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我饺窿,道長(zhǎng)歧焦,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任肚医,我火速辦了婚禮绢馍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘肠套。我一直安慰自己舰涌,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布你稚。 她就那樣靜靜地躺著瓷耙,像睡著了一般朱躺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上搁痛,一...
    開(kāi)封第一講書(shū)人閱讀 49,749評(píng)論 1 289
  • 那天长搀,我揣著相機(jī)與錄音,去河邊找鬼鸡典。 笑死源请,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的彻况。 我是一名探鬼主播谁尸,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼纽甘!你這毒婦竟也來(lái)了良蛮?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤悍赢,失蹤者是張志新(化名)和其女友劉穎决瞳,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體泽裳,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瞒斩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了涮总。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胸囱。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖瀑梗,靈堂內(nèi)的尸體忽然破棺而出烹笔,到底是詐尸還是另有隱情,我是刑警寧澤抛丽,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布谤职,位于F島的核電站,受9級(jí)特大地震影響亿鲜,放射性物質(zhì)發(fā)生泄漏允蜈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一蒿柳、第九天 我趴在偏房一處隱蔽的房頂上張望饶套。 院中可真熱鬧,春花似錦垒探、人聲如沸妓蛮。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蛤克。三九已至捺癞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間构挤,已是汗流浹背髓介。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留儿倒,地道東北人版保。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像夫否,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子叫胁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容