ADmobile首席架構(gòu)師王威:廣告業(yè)務(wù)云上運(yùn)維最佳實(shí)踐
12月21日,在阿里云彈性計(jì)算年度峰會上,ADmobile首席架構(gòu)師王威發(fā)表了《ADmobile廣告業(yè)務(wù)云上彈性計(jì)算最佳實(shí)踐》的演講,介紹了ADmobile業(yè)務(wù)云上最佳實(shí)踐。
【圖:ADmobile首席架構(gòu)師王威】
本文主要根據(jù)王威的演講整理而成,內(nèi)容分為四部分:
-
業(yè)務(wù)背景介紹;
-
業(yè)務(wù)發(fā)展中的技術(shù)痛點(diǎn);
-
解決方案;
-
實(shí)踐經(jīng)驗(yàn)。
01 ADmobile(艾狄墨搏)業(yè)務(wù)背景介紹
ADmobile是一家程序化的廣告聚合SaaS服務(wù)商,通過自主研發(fā)的廣告聚合管理系統(tǒng),整合流量管理、UR工具,為APP廣告變現(xiàn)提升收益。通過一站式廣告聚合平臺,ADmobile提供專業(yè)多維度的數(shù)據(jù)報(bào)表,還有聚合管理、靈活的運(yùn)營方式和多樣靈活的優(yōu)化工具。
上圖可以看到,ADmobile業(yè)務(wù)發(fā)展中服務(wù)資源的變化:從最早期就是一臺服務(wù)器、一個(gè)數(shù)據(jù)庫支撐我們業(yè)務(wù)發(fā)展,到現(xiàn)在有200臺以上的服務(wù)器,還有數(shù)據(jù)庫、中間件、負(fù)載均衡等一系列云資源。業(yè)務(wù)高峰的時(shí)候,ECS數(shù)量一度達(dá)到400臺,甚至曾經(jīng)超過500臺;業(yè)務(wù)高速發(fā)展的同時(shí),流量也在激增,對于技術(shù)和運(yùn)維都是一種極大的挑戰(zhàn)。
02 ADmobile業(yè)務(wù)發(fā)展中的三大技術(shù)痛點(diǎn)
在早期的方案當(dāng)中,對于流量峰值的變化,基本無法靈活應(yīng)對,只能通過部署服務(wù)器去應(yīng)對流量波動。一些特殊的日子,例如618、雙11的大促期間,流量會出現(xiàn)爆發(fā)式增長,這需要技術(shù)人員提前準(zhǔn)備足量的服務(wù)器,應(yīng)對流量的激增,保證我們業(yè)務(wù)能夠平穩(wěn)運(yùn)行。
早期部署方式也比較傳統(tǒng),即在一臺指定的服務(wù)器上,把我們的項(xiàng)目運(yùn)營好,制定一些相應(yīng)的啟動腳本來生成ECS鏡像,通過批量的創(chuàng)建ECS來保證服務(wù)正常運(yùn)行。
早期的技術(shù)架構(gòu)看上去很簡單,總共只有3個(gè)服務(wù),這是我們在線運(yùn)營的業(yè)務(wù)。通過負(fù)載均衡進(jìn)入服務(wù)A,通過服務(wù)發(fā)現(xiàn)調(diào)用B和C,整體三個(gè)服務(wù)支撐了我們現(xiàn)在的一大塊業(yè)務(wù)。這個(gè)技術(shù)架構(gòu)中,所有的服務(wù)器都是固定的,所以無法根據(jù)流量變化去實(shí)時(shí)動態(tài)調(diào)節(jié)服務(wù)器資源,因此造成了服務(wù)器資源很大的冗余和浪費(fèi)。
服務(wù)資源冗余、突發(fā)大流量的應(yīng)對困難、鏡像生成非常耗時(shí)(基本上需要數(shù)十分鐘甚至小時(shí)級別),這三個(gè)技術(shù)痛點(diǎn)導(dǎo)致很難應(yīng)對業(yè)務(wù)實(shí)時(shí)的變化發(fā)布。
03 我們的解決方案
當(dāng)前,ADmobile選擇了增加了彈性服務(wù)器組,發(fā)布方式上采用了ECS自動同步最新服務(wù),并采用了Jenkins+K8s的一鍵部署。在一臺服務(wù)器上把服務(wù)部署好,其他的服務(wù)器會定時(shí)同步最新的服務(wù),并重新啟動服務(wù),這樣避免了重新生成ECS鏡像,可以實(shí)現(xiàn)更加靈活的發(fā)布。
上圖是我們技術(shù)架構(gòu)中的一個(gè),相比早期的架構(gòu)可以明顯地看到多了一個(gè)彈性伸縮組。彈性伸縮組的存在,既避免了服務(wù)器資源很大的冗余和浪費(fèi),又能更好地應(yīng)對一些大量流量的突增業(yè)務(wù)。在彈性伸縮組里面還可以通過部署一部分搶占式實(shí)例,來進(jìn)一步降低服務(wù)器成本。
這是另一個(gè)業(yè)務(wù)架構(gòu),它是基于K8s搭建的,現(xiàn)在比較流行通用的架構(gòu),分為數(shù)據(jù)層、服務(wù)層、網(wǎng)關(guān)層和展示層。
1. 數(shù)據(jù)層,可能包括數(shù)據(jù)庫MySQL、緩存Redis、對象存儲OSS等。
2. 服務(wù)層,以K8s為核心,包括我們自己搭建的Kubernetes,只有在進(jìn)行發(fā)布的時(shí)候才會占用一些資源,不發(fā)布的時(shí)候基本上不占用資源。
3. 網(wǎng)關(guān)層,主要是通過負(fù)載均衡對外提供服務(wù),目前在嘗試將服務(wù)網(wǎng)格應(yīng)用到業(yè)務(wù)中,還處于測試階段,接下來如果測試穩(wěn)定,可能就會把負(fù)載均衡全部切到服務(wù)網(wǎng)格上。
4. 展示層,包括PC端、移動端、小程序等。在這種架構(gòu)中間,還使用了阿里云的平臺服務(wù),像注冊中心、日志記錄等服務(wù)穿插在整個(gè)業(yè)務(wù)的所有過程中。
以下介紹我們在實(shí)際工作中遇到的常見問題及解決方案。
1、如何應(yīng)對流量激增
這是很多業(yè)務(wù)運(yùn)行過程中都會碰到的問題,流量激增可以分為兩類:一類是可預(yù)測的流量,例如,早高峰或者晚高峰由于用戶量的增加導(dǎo)致流量激增,這種可預(yù)測的流量激增,可以定時(shí)的擴(kuò)容的策略來保證業(yè)務(wù)運(yùn)行;另一類是不可預(yù)測的流量,一般可以通過API或者SDK方式自定義監(jiān)控指標(biāo),借用阿里云的接口提前進(jìn)行擴(kuò)容,即根據(jù)指標(biāo)的波動、變化進(jìn)行相應(yīng)的擴(kuò)容或者縮容。實(shí)現(xiàn)方式是根據(jù)自己的業(yè)務(wù)結(jié)合阿里云的SDK 、API相應(yīng)的腳本進(jìn)行編寫。
2、如何選擇監(jiān)控指標(biāo)
伸縮容過程中的一些監(jiān)控指標(biāo),例如平均負(fù)載、CPU使用率、內(nèi)存使用率、網(wǎng)絡(luò)流量、磁盤IO等,可以根據(jù)不同的應(yīng)用類型來選擇不同的監(jiān)控指標(biāo)。以JAVA應(yīng)用為例,它是比較占用內(nèi)存的,當(dāng)內(nèi)存占比到70%-80%,它的CPU占用可能還很?。蝗绻覀儽O(jiān)控它的CPU使用率,盡管CPU占用處于正常范圍,而內(nèi)存可能已經(jīng)用到90%或者更高,這種監(jiān)控指標(biāo)的選擇是不太恰當(dāng)?shù)?,我們?yīng)該根據(jù)不同的應(yīng)用靈活地選擇監(jiān)控指標(biāo)。
3、如何選擇擴(kuò)容和縮容的指標(biāo)值
這個(gè)主要是指阿里云彈性伸縮組的擴(kuò)容和縮容的指標(biāo)值。根據(jù)我們的實(shí)踐,不建議設(shè)置相等值,例如,當(dāng)CPU使用率大于50%的時(shí)候進(jìn)行擴(kuò)容,CPU使用率小于50%的時(shí)候進(jìn)行縮容。這是因?yàn)閿U(kuò)容或者縮容都有冷卻時(shí)間,如果CPU的使用率就在50%左右上下波動,可能最終導(dǎo)致我們的擴(kuò)容或者縮容的目的無法實(shí)現(xiàn)。
04 四大實(shí)踐經(jīng)驗(yàn)總結(jié)
我們總結(jié)的實(shí)踐經(jīng)驗(yàn)有4點(diǎn):
第一,不要把所有的ECS都交給彈性伸縮組來控制。因?yàn)閺椥陨炜s組是比較靈活的,如果我們設(shè)置的指標(biāo)不太嚴(yán)格,可能導(dǎo)致ECS出現(xiàn)無序的擴(kuò)容,或者出現(xiàn)ECS數(shù)量變成零等異常情況,從而對業(yè)務(wù)造成影響。
第二,彈性伸縮組里面設(shè)置合適的實(shí)例上限。這個(gè)和第一個(gè)類似,如果不設(shè)置上限或者上限值設(shè)置的不合理,可能會導(dǎo)致無序擴(kuò)容,應(yīng)用異?;蛘弑O(jiān)控指標(biāo)持續(xù)上升,最終導(dǎo)致服務(wù)器數(shù)量異常,對成本帶來負(fù)擔(dān)。
第三,部署適當(dāng)比例的搶占式實(shí)例。搶占式實(shí)例的折扣在活動中可能低到1折,如果業(yè)務(wù)結(jié)構(gòu)合適,通過分配一定比例的搶占式實(shí)例,可以有效地降低成本。
第四,善用云上運(yùn)維自動化服務(wù)。阿里云提供了很多好用的工具,例如使用ECS云助手,可以對服務(wù)器進(jìn)行批量的漏洞修復(fù)或者軟件升級。
最后,分享一個(gè)彈性伸縮組的案例。在上圖中,最高峰的時(shí)候,ECS數(shù)量應(yīng)該有45臺,最低的時(shí)候有10臺,并且最低10臺的時(shí)候我們做了一定的冗余處理。如果放開限制,ECS數(shù)量會變得更少,通過這樣的部署方案,經(jīng)過測算,成本總共降低了約30%。
12月21日,在阿里云彈性計(jì)算年度峰會上,ADmobile首席架構(gòu)師王威發(fā)表了《ADmobile廣告業(yè)務(wù)云上彈性計(jì)算最佳實(shí)踐》的演講,介紹了ADmobile業(yè)務(wù)云上最佳實(shí)踐。
【圖:ADmobile首席架構(gòu)師王威】
本文主要根據(jù)王威的演講整理而成,內(nèi)容分為四部分:
-
業(yè)務(wù)背景介紹;
-
業(yè)務(wù)發(fā)展中的技術(shù)痛點(diǎn);
-
解決方案;
-
實(shí)踐經(jīng)驗(yàn)。
01 ADmobile(艾狄墨搏)業(yè)務(wù)背景介紹
ADmobile是一家程序化的廣告聚合SaaS服務(wù)商,通過自主研發(fā)的廣告聚合管理系統(tǒng),整合流量管理、UR工具,為APP廣告變現(xiàn)提升收益。通過一站式廣告聚合平臺,ADmobile提供專業(yè)多維度的數(shù)據(jù)報(bào)表,還有聚合管理、靈活的運(yùn)營方式和多樣靈活的優(yōu)化工具。
上圖可以看到,ADmobile業(yè)務(wù)發(fā)展中服務(wù)資源的變化:從最早期就是一臺服務(wù)器、一個(gè)數(shù)據(jù)庫支撐我們業(yè)務(wù)發(fā)展,到現(xiàn)在有200臺以上的服務(wù)器,還有數(shù)據(jù)庫、中間件、負(fù)載均衡等一系列云資源。業(yè)務(wù)高峰的時(shí)候,ECS數(shù)量一度達(dá)到400臺,甚至曾經(jīng)超過500臺;業(yè)務(wù)高速發(fā)展的同時(shí),流量也在激增,對于技術(shù)和運(yùn)維都是一種極大的挑戰(zhàn)。
02 ADmobile業(yè)務(wù)發(fā)展中的三大技術(shù)痛點(diǎn)
在早期的方案當(dāng)中,對于流量峰值的變化,基本無法靈活應(yīng)對,只能通過部署服務(wù)器去應(yīng)對流量波動。一些特殊的日子,例如618、雙11的大促期間,流量會出現(xiàn)爆發(fā)式增長,這需要技術(shù)人員提前準(zhǔn)備足量的服務(wù)器,應(yīng)對流量的激增,保證我們業(yè)務(wù)能夠平穩(wěn)運(yùn)行。
早期部署方式也比較傳統(tǒng),即在一臺指定的服務(wù)器上,把我們的項(xiàng)目運(yùn)營好,制定一些相應(yīng)的啟動腳本來生成ECS鏡像,通過批量的創(chuàng)建ECS來保證服務(wù)正常運(yùn)行。
早期的技術(shù)架構(gòu)看上去很簡單,總共只有3個(gè)服務(wù),這是我們在線運(yùn)營的業(yè)務(wù)。通過負(fù)載均衡進(jìn)入服務(wù)A,通過服務(wù)發(fā)現(xiàn)調(diào)用B和C,整體三個(gè)服務(wù)支撐了我們現(xiàn)在的一大塊業(yè)務(wù)。這個(gè)技術(shù)架構(gòu)中,所有的服務(wù)器都是固定的,所以無法根據(jù)流量變化去實(shí)時(shí)動態(tài)調(diào)節(jié)服務(wù)器資源,因此造成了服務(wù)器資源很大的冗余和浪費(fèi)。
服務(wù)資源冗余、突發(fā)大流量的應(yīng)對困難、鏡像生成非常耗時(shí)(基本上需要數(shù)十分鐘甚至小時(shí)級別),這三個(gè)技術(shù)痛點(diǎn)導(dǎo)致很難應(yīng)對業(yè)務(wù)實(shí)時(shí)的變化發(fā)布。
03 我們的解決方案
當(dāng)前,ADmobile選擇了增加了彈性服務(wù)器組,發(fā)布方式上采用了ECS自動同步最新服務(wù),并采用了Jenkins+K8s的一鍵部署。在一臺服務(wù)器上把服務(wù)部署好,其他的服務(wù)器會定時(shí)同步最新的服務(wù),并重新啟動服務(wù),這樣避免了重新生成ECS鏡像,可以實(shí)現(xiàn)更加靈活的發(fā)布。
上圖是我們技術(shù)架構(gòu)中的一個(gè),相比早期的架構(gòu)可以明顯地看到多了一個(gè)彈性伸縮組。彈性伸縮組的存在,既避免了服務(wù)器資源很大的冗余和浪費(fèi),又能更好地應(yīng)對一些大量流量的突增業(yè)務(wù)。在彈性伸縮組里面還可以通過部署一部分搶占式實(shí)例,來進(jìn)一步降低服務(wù)器成本。
這是另一個(gè)業(yè)務(wù)架構(gòu),它是基于K8s搭建的,現(xiàn)在比較流行通用的架構(gòu),分為數(shù)據(jù)層、服務(wù)層、網(wǎng)關(guān)層和展示層。
1. 數(shù)據(jù)層,可能包括數(shù)據(jù)庫MySQL、緩存Redis、對象存儲OSS等。
2. 服務(wù)層,以K8s為核心,包括我們自己搭建的Kubernetes,只有在進(jìn)行發(fā)布的時(shí)候才會占用一些資源,不發(fā)布的時(shí)候基本上不占用資源。
3. 網(wǎng)關(guān)層,主要是通過負(fù)載均衡對外提供服務(wù),目前在嘗試將服務(wù)網(wǎng)格應(yīng)用到業(yè)務(wù)中,還處于測試階段,接下來如果測試穩(wěn)定,可能就會把負(fù)載均衡全部切到服務(wù)網(wǎng)格上。
4. 展示層,包括PC端、移動端、小程序等。在這種架構(gòu)中間,還使用了阿里云的平臺服務(wù),像注冊中心、日志記錄等服務(wù)穿插在整個(gè)業(yè)務(wù)的所有過程中。
以下介紹我們在實(shí)際工作中遇到的常見問題及解決方案。
1、如何應(yīng)對流量激增
這是很多業(yè)務(wù)運(yùn)行過程中都會碰到的問題,流量激增可以分為兩類:一類是可預(yù)測的流量,例如,早高峰或者晚高峰由于用戶量的增加導(dǎo)致流量激增,這種可預(yù)測的流量激增,可以定時(shí)的擴(kuò)容的策略來保證業(yè)務(wù)運(yùn)行;另一類是不可預(yù)測的流量,一般可以通過API或者SDK方式自定義監(jiān)控指標(biāo),借用阿里云的接口提前進(jìn)行擴(kuò)容,即根據(jù)指標(biāo)的波動、變化進(jìn)行相應(yīng)的擴(kuò)容或者縮容。實(shí)現(xiàn)方式是根據(jù)自己的業(yè)務(wù)結(jié)合阿里云的SDK 、API相應(yīng)的腳本進(jìn)行編寫。
2、如何選擇監(jiān)控指標(biāo)
伸縮容過程中的一些監(jiān)控指標(biāo),例如平均負(fù)載、CPU使用率、內(nèi)存使用率、網(wǎng)絡(luò)流量、磁盤IO等,可以根據(jù)不同的應(yīng)用類型來選擇不同的監(jiān)控指標(biāo)。以JAVA應(yīng)用為例,它是比較占用內(nèi)存的,當(dāng)內(nèi)存占比到70%-80%,它的CPU占用可能還很??;如果我們監(jiān)控它的CPU使用率,盡管CPU占用處于正常范圍,而內(nèi)存可能已經(jīng)用到90%或者更高,這種監(jiān)控指標(biāo)的選擇是不太恰當(dāng)?shù)模覀儜?yīng)該根據(jù)不同的應(yīng)用靈活地選擇監(jiān)控指標(biāo)。
3、如何選擇擴(kuò)容和縮容的指標(biāo)值
這個(gè)主要是指阿里云彈性伸縮組的擴(kuò)容和縮容的指標(biāo)值。根據(jù)我們的實(shí)踐,不建議設(shè)置相等值,例如,當(dāng)CPU使用率大于50%的時(shí)候進(jìn)行擴(kuò)容,CPU使用率小于50%的時(shí)候進(jìn)行縮容。這是因?yàn)閿U(kuò)容或者縮容都有冷卻時(shí)間,如果CPU的使用率就在50%左右上下波動,可能最終導(dǎo)致我們的擴(kuò)容或者縮容的目的無法實(shí)現(xiàn)。
04 四大實(shí)踐經(jīng)驗(yàn)總結(jié)
我們總結(jié)的實(shí)踐經(jīng)驗(yàn)有4點(diǎn):
第一,不要把所有的ECS都交給彈性伸縮組來控制。因?yàn)閺椥陨炜s組是比較靈活的,如果我們設(shè)置的指標(biāo)不太嚴(yán)格,可能導(dǎo)致ECS出現(xiàn)無序的擴(kuò)容,或者出現(xiàn)ECS數(shù)量變成零等異常情況,從而對業(yè)務(wù)造成影響。
第二,彈性伸縮組里面設(shè)置合適的實(shí)例上限。這個(gè)和第一個(gè)類似,如果不設(shè)置上限或者上限值設(shè)置的不合理,可能會導(dǎo)致無序擴(kuò)容,應(yīng)用異?;蛘弑O(jiān)控指標(biāo)持續(xù)上升,最終導(dǎo)致服務(wù)器數(shù)量異常,對成本帶來負(fù)擔(dān)。
第三,部署適當(dāng)比例的搶占式實(shí)例。搶占式實(shí)例的折扣在活動中可能低到1折,如果業(yè)務(wù)結(jié)構(gòu)合適,通過分配一定比例的搶占式實(shí)例,可以有效地降低成本。
第四,善用云上運(yùn)維自動化服務(wù)。阿里云提供了很多好用的工具,例如使用ECS云助手,可以對服務(wù)器進(jìn)行批量的漏洞修復(fù)或者軟件升級。
最后,分享一個(gè)彈性伸縮組的案例。在上圖中,最高峰的時(shí)候,ECS數(shù)量應(yīng)該有45臺,最低的時(shí)候有10臺,并且最低10臺的時(shí)候我們做了一定的冗余處理。如果放開限制,ECS數(shù)量會變得更少,通過這樣的部署方案,經(jīng)過測算,成本總共降低了約30%。