北緯科技:從自研PaaS到擁抱云效,實(shí)現(xiàn)持續(xù)交付
從自研PaaS研發(fā)平臺(tái)到擁抱SaaS,北緯科技三步走完成DevOps轉(zhuǎn)型,實(shí)現(xiàn)持續(xù)部署、交付。
背景
北緯科技成立于1997年,是一家致力于提供移動(dòng)互聯(lián)網(wǎng)先進(jìn)產(chǎn)品和服務(wù)的移動(dòng)互聯(lián)網(wǎng)服務(wù)集成商。早期自主研發(fā)了私有PaaS平臺(tái)(北緯應(yīng)用引擎BWAE),后來(lái)由于公司轉(zhuǎn)型及組織架構(gòu)調(diào)整,逐步用云效+ACR+ACK替代自研應(yīng)用引擎,實(shí)現(xiàn)持續(xù)部署、交付。
問(wèn)題及痛點(diǎn)
為什么放棄自研,轉(zhuǎn)而擁抱SaaS服務(wù)?
早期公司自研PaaS平臺(tái),歷時(shí)較長(zhǎng)。因PaaS平臺(tái)自身的復(fù)雜性、技術(shù)發(fā)展的多變性、系統(tǒng)要求的穩(wěn)定性的各類(lèi)復(fù)合型要求,使平臺(tái)無(wú)法及時(shí)迭代更新滿(mǎn)足各類(lèi)場(chǎng)景需求,更好地為業(yè)務(wù)發(fā)展服務(wù)。同時(shí)公司組織戰(zhàn)略調(diào)整,人力資源重新分配,公司的自研平臺(tái)面臨比較大的維護(hù)壓力和運(yùn)維壓力。因此公司技術(shù)戰(zhàn)略也隨之調(diào)整,將自建機(jī)房及服務(wù)全部遷移到阿里云上,同時(shí)調(diào)研阿里、其它等商業(yè)化的DevOps平臺(tái),最終選擇阿里云云效作為DevOps持續(xù)部署的平臺(tái)。
相比于自研,云效平臺(tái)缺少了企業(yè)的定制化、個(gè)性化,只能做到普適性,但是增加了平臺(tái)的穩(wěn)定性、健壯性、多樣性,同時(shí)大大減少了人力、物力,減輕了運(yùn)維的壓力。
解決效果
使用云效后效果如下:
對(duì)比項(xiàng)目 | 原平臺(tái) | 云效平臺(tái) |
性?xún)r(jià)比 | 低 | 高 |
維護(hù)難度 | 復(fù)雜 | 簡(jiǎn)單 |
構(gòu)建時(shí)間 | 3分鐘 | 3分鐘 |
代碼掃描 | 自主集成FindSecBugs | 添加安全掃描任務(wù) |
人力 | 10 | 3 |
編寫(xiě)dockerfile | 基本不需要 | 默認(rèn)模板,基本不需要修改 |
kubernetes部署文件 | 系統(tǒng)集成 | 需要編寫(xiě)deployment等文件 |
通知 | 無(wú) | 釘釘 |
質(zhì)量把控 | 固定人員固定節(jié)點(diǎn) | 通過(guò)人工卡點(diǎn)自定義人員及節(jié)點(diǎn) |
支持部署 | War、Jar、Node、Html,其他需要自定義鏡像 | Java、Python、Go、Node、Html、C#、C、PHP |
遷移之路如何走?
經(jīng)歷過(guò)近3個(gè)月的云效使用調(diào)研之后,公司啟動(dòng)云效遷移項(xiàng)目,同時(shí)制定了以下三步走的遷移策略。
第一步:內(nèi)部試點(diǎn)、發(fā)現(xiàn)問(wèn)題、解決問(wèn)題。
第二步:沉淀模板、梳理文檔、規(guī)范流程。
第三步:全面遷移、分配新資源、回收舊資源。
在遷移中,對(duì)技術(shù)、成本、安全各方面進(jìn)行不斷優(yōu)化。
1、技術(shù)優(yōu)化
基礎(chǔ)鏡像優(yōu)化:由于每次構(gòu)建Java鏡像會(huì)導(dǎo)致鏡像體積過(guò)大,OpenJDK官方的鏡像大小為488MB,如果每次構(gòu)建的鏡像都這么大的話,對(duì)網(wǎng)絡(luò)、存儲(chǔ)等的影響及費(fèi)用都會(huì)比較大,因此我們采用分開(kāi)構(gòu)建的形式,基礎(chǔ)鏡像如JDK、PHP、GO、Nginx等鏡像由運(yùn)維人員維護(hù),提供基礎(chǔ)環(huán)境及K8s的主鏡像。開(kāi)發(fā)人員構(gòu)建的鏡像采用busybox鏡像,該鏡像僅有基礎(chǔ)的Linux功能,因此只有1.23MB,該鏡像只添加程序構(gòu)建的產(chǎn)物如可執(zhí)行文件、jar包或者h(yuǎn)tml文件等,作為InitContainer容器,在啟動(dòng)時(shí)將構(gòu)建產(chǎn)物復(fù)制到基礎(chǔ)鏡像中。該方案大大縮小了docker鏡像的大小和docker拉取鏡像的網(wǎng)絡(luò)開(kāi)銷(xiāo)。
流水線優(yōu)化:基于一次構(gòu)建,多次部署的思想,我們將構(gòu)建和部署流水線做了分離,這樣構(gòu)建一次,開(kāi)發(fā)、測(cè)試、生產(chǎn)可以多次部署,且部署的版本可以不同。
定制化不同的流水線模板,根據(jù)不同事業(yè)部,不同業(yè)務(wù)需求形式、技術(shù)開(kāi)發(fā)特定的要求,制定符合各業(yè)務(wù)線的流水線模板。
2、成本優(yōu)化
經(jīng)過(guò)了對(duì)企業(yè)應(yīng)用部署的研究,我們?cè)贏CK集群上借助kubernetes提供的LimitRange的能力,對(duì)每一個(gè)命名空間做了一個(gè)基礎(chǔ)容量的大小限制(CPU 500m,Memory 512Mi),而在應(yīng)用的部署配置文件上為開(kāi)發(fā)人員提供了設(shè)置cpu及memory的配置項(xiàng),且提供了默認(rèn)值。如果開(kāi)發(fā)人員經(jīng)過(guò)評(píng)估和開(kāi)發(fā)環(huán)境、測(cè)試環(huán)境的驗(yàn)證,需要增加容量的,可以申請(qǐng)對(duì)該命名空間提高限制。一方面將一部分ops能力下放給developer,另一個(gè)方面,通過(guò)對(duì)資源的主動(dòng)和被動(dòng)調(diào)節(jié),大大節(jié)省了成本,降低了原來(lái)自研平臺(tái)上任意配置資源的問(wèn)題。
同時(shí)通過(guò)云效的Maven服務(wù)、代碼管理服務(wù),替代了原有平臺(tái)搭建的代碼管理服務(wù)器、Maven服務(wù)器。不僅降低硬件成本資源,同時(shí)也降低維護(hù)此類(lèi)服務(wù)器的人力成本。
3、安全優(yōu)化
代碼質(zhì)量?jī)?yōu)化:得益于云效的代碼掃描流水線中的代碼掃描及安全掃描的任務(wù)插件,我們對(duì)于質(zhì)量和安全的接入管理方便。
我們?cè)诹魉€模板中引入了代碼掃描及安全掃描,同時(shí)在生產(chǎn)環(huán)境加入了人工卡點(diǎn)的流程,作為審核,保證掃描結(jié)果符合要求。代碼掃描結(jié)果如下圖。
代碼掃描結(jié)果詳細(xì)報(bào)告如下圖。
代碼安全:借助于云效的代碼管理,將公司所有代碼進(jìn)行統(tǒng)一管理,根據(jù)不同事業(yè)部,不同業(yè)務(wù)線對(duì)代碼進(jìn)行分層、分組管理,并對(duì)代碼組權(quán)限進(jìn)行嚴(yán)格控制,減少代碼作為公司重要資源泄露的風(fēng)險(xiǎn)。
同時(shí)通過(guò)云效提供的敏感信息掃描,及時(shí)發(fā)現(xiàn)硬編碼等問(wèn)題,提高代碼安全質(zhì)量。
代碼庫(kù)敏感信息檢測(cè)
權(quán)限控制:我司對(duì)權(quán)限及流程有著嚴(yán)格的要求及制度。云效對(duì)于不同的產(chǎn)品提供了不同維度的權(quán)限,滿(mǎn)足了“最少權(quán)限”的原則。以流水線為例,根據(jù)不同場(chǎng)景設(shè)置管理員、技術(shù)負(fù)責(zé)人、運(yùn)維人員、開(kāi)發(fā)人員不同的角色,更細(xì)粒度低管控流水線的權(quán)限。
流水線部分權(quán)限 | 管理員 | 各業(yè)務(wù)線技術(shù)負(fù)責(zé)人 | 運(yùn)維人員 | 開(kāi)發(fā)人員 |
權(quán)限設(shè)置 | ? | |||
流水線管理(創(chuàng)建) | ? | ? | ? | |
流水線管理(管理) | ? | ? | ||
流水線管理(查看所有) | ? | ? | ? | |
服務(wù)授權(quán)管理(創(chuàng)建) | ? | ? | ? | |
主機(jī)組管理 | ? | ? | ||
流水線模板管理 | ? | ? | ||
變量值管理 | ? | ? | ? |
結(jié)語(yǔ)
北緯科技的DevOps轉(zhuǎn)型之路,經(jīng)歷了從PaaS到SaaS的發(fā)展歷程,也正應(yīng)了軟件發(fā)展的進(jìn)程。SaaS也正成為現(xiàn)如今軟件發(fā)展的趨勢(shì),當(dāng)然任何事物都有自己的優(yōu)勢(shì)及不足,我們應(yīng)該辯證的去看待問(wèn)題,同時(shí)也要探索適合自身的解決方案。
本文內(nèi)容非阿里云官方提供,如您發(fā)現(xiàn)本文檔存在侵權(quán)內(nèi)容或其他問(wèn)題,請(qǐng)?zhí)峁┫鄳?yīng)證明材料并在本頁(yè)面內(nèi)提交反饋信息,阿里云會(huì)協(xié)調(diào)或通知相關(guān)作者進(jìn)行處理。