隨著我們深圳尼高網(wǎng)站設(shè)計(jì)公司不斷的發(fā)展,到現(xiàn)在已經(jīng)有15個(gè)年頭了,一路走來我們成長(zhǎng)了很多也遇到了無數(shù)的困難,今天我想花點(diǎn)時(shí)間來總結(jié)一下我們?cè)?strong>
網(wǎng)站開發(fā)時(shí)經(jīng)常犯過的錯(cuò)誤。
1、不要將應(yīng)用程序從數(shù)據(jù)中心遷移到云,我們也經(jīng)常會(huì)用到云產(chǎn)品,但為物理數(shù)據(jù)中心設(shè)計(jì)的應(yīng)用程序很少能無縫遷移到云中。我們現(xiàn)在已經(jīng)參與了三項(xiàng)嘗試,將為特定數(shù)據(jù)中心編寫的應(yīng)用程序大規(guī)模遷移到云,每次我都遇到了關(guān)于環(huán)境的未記錄假設(shè)的問題。
在開發(fā)人員編寫和測(cè)試應(yīng)用程序時(shí),他們對(duì)環(huán)境的運(yùn)行方式產(chǎn)生了期望。服務(wù)器如何工作,我的應(yīng)用程序獲得什么樣的性能,網(wǎng)絡(luò)有多可靠,我可以預(yù)期什么樣的延遲等等。這些是任何人在環(huán)境中工作多年都會(huì)做的合理的事情,但它意味著當(dāng)你打包一個(gè)應(yīng)用程序并在其他地方運(yùn)行它時(shí),特別是舊應(yīng)用程序,奇怪的事情發(fā)生了。您之前從未遇到過的錯(cuò)誤開始出現(xiàn),需要做出各種奇怪的架構(gòu)決策來嘗試并允許這種轉(zhuǎn)換。
很快,您已經(jīng)消除了遷移的許多價(jià)值,甚至可能會(huì)做一些糟糕的事情,例如通過直接連接將數(shù)據(jù)中心連接到 AWS,以嘗試無縫橋接這兩個(gè)環(huán)境。您的復(fù)雜決策列表開始增加和增長(zhǎng),越來越多地影響到您的云提供商的邊緣案例。不可避免地,您會(huì)發(fā)現(xiàn)一些無法移動(dòng)的東西,并且您現(xiàn)在陷入了兩個(gè)環(huán)境中,一個(gè)需要維護(hù)的數(shù)據(jù)中心和一個(gè)新的云帳戶。你為你的傲慢感到惋惜。
將應(yīng)用程序移植到云端。為開發(fā)人員提供一個(gè)與數(shù)據(jù)中心環(huán)境完全隔離的環(huán)境,讓他們將應(yīng)用程序移植到云端,然后為您的應(yīng)用程序安排 4-8 小時(shí)的停機(jī)時(shí)間。這將允許持久層進(jìn)行切換,然后您可以更改您的 DNS 條目以指向您的新云存在。試圖防止這種停機(jī)時(shí)間會(huì)使您陷入一個(gè)又一個(gè)錯(cuò)誤決定的錯(cuò)誤決定中。
2、不要編寫自己的秘密系統(tǒng),出于某種原因,組織喜歡編寫自己的機(jī)密管理系統(tǒng)。通常這些是由基礎(chǔ)設(shè)施團(tuán)隊(duì)編寫的應(yīng)用程序,通常是環(huán)境變量注入系統(tǒng)或某種基于 RSA 密鑰的解密 API 調(diào)用。甚至我們也成為這個(gè)想法的受害者,認(rèn)為“當(dāng)然它不會(huì)那么困難”。出于某種原因,我們要在我將管理的 PostgREST 應(yīng)用程序中管理我們的秘密。我們編寫了一個(gè)應(yīng)用程序,它會(huì)根據(jù)各種標(biāo)準(zhǔn)生成 JWT 并將其返回給應(yīng)用程序。這些將允許他們以完全安全的方式訪問他們的秘密。
現(xiàn)在為 PostgREST 辯護(hù),它很好地完成了它所承諾的事情。但是,機(jī)密管理的問題比最初出現(xiàn)的要復(fù)雜。首先我們遇到了緩存的問題,你如何避免每小時(shí)訪問這個(gè)服務(wù)一百萬次,但仍然保持一些使用服務(wù)器作為事實(shí)來源的概念。這可以通過一些 Nginx 配置解決,但這是我應(yīng)該想到的。
然后我用旋轉(zhuǎn)的耙子打自己的臉。推送新版本是微不足道的,但機(jī)密通常不會(huì)版本化給客戶端。我使用我的應(yīng)用程序進(jìn)行身份驗(yàn)證,我看到了正確的秘密。但是在輪換期間有兩個(gè)正確的秘密,我說的時(shí)候很明顯,但在我寫的時(shí)候沒有想到。同樣,這不是一件很難修復(fù)的事情,但是隨著時(shí)間的推移,我遇到了越來越多的服務(wù)邊緣情況,我意識(shí)到我犯了一個(gè)巨大的錯(cuò)誤。
現(xiàn)實(shí)情況是,機(jī)密管理是一種典型的高風(fēng)險(xiǎn)低回報(bào)服務(wù)。它不會(huì)直接幫助我的客戶,也不會(huì)真正打動(dòng)我運(yùn)行它的領(lǐng)導(dǎo)層,它會(huì)消耗我大量的時(shí)間來調(diào)試它,并且在運(yùn)行它方面需要很多特定領(lǐng)域的知識(shí)。我不得不重新考慮很多部分,從多區(qū)域可用性(例如,跨區(qū)域同步是一種拖累)到強(qiáng)化服務(wù)。