中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

程序員易踩的 9 大坑

2021-02-26    分類(lèi): 網(wǎng)站建設(shè)

不重視系統(tǒng)安全、過(guò)于微服務(wù)化、各種導(dǎo)入包……這些問(wèn)題開(kāi)發(fā)人員可能會(huì)在日常工作中會(huì)犯,除此之外,還有哪些開(kāi)發(fā)者容易掉的坑呢?本文作者以下為譯文:

我是一名Python + Go開(kāi)發(fā)人員,在過(guò)去的幾年中,我一直在運(yùn)營(yíng)全球規(guī)模的應(yīng)用程序。我們團(tuán)隊(duì)每天都需要為200萬(wàn)名客戶(hù)提供服務(wù),運(yùn)營(yíng)這種規(guī)模的系統(tǒng)并非易事。我想在本文中分享多年以來(lái)學(xué)到的九大經(jīng)驗(yàn)教訓(xùn)。

保障安全刻不容緩

保障安全刻不容緩,你不能輕描淡寫(xiě)地說(shuō):“今后系統(tǒng)會(huì)加強(qiáng)安全性?!?/p>

強(qiáng)大的應(yīng)用程序安全應(yīng)該被當(dāng)作開(kāi)發(fā)過(guò)程中的首要問(wèn)題,應(yīng)該從第1天開(kāi)始就需要討論,絕對(duì)不能等到第你可能并不需要微服務(wù)

微服務(wù)非常有魅力,我完全理解。即便只是想一想能夠單獨(dú)擴(kuò)展應(yīng)用程序中的各個(gè)小功能,就足以讓人興奮不已,因?yàn)槟憧梢愿惺艿綕M(mǎn)滿(mǎn)的成就感。

但是,說(shuō)實(shí)話(huà)你可能不需要微服務(wù)。比如“我希望將功能X的代碼從功能Y的代碼中分離出來(lái)”,“防止不良代碼滲透到應(yīng)用程序的其他部分”,或者“最小化受影響的應(yīng)用”等到這些理由不是使用微服務(wù)的原因,這些不過(guò)是糟糕的開(kāi)發(fā)實(shí)踐導(dǎo)致的惡果,你需要的是更嚴(yán)格的代碼審查標(biāo)準(zhǔn)(不要合并不良代碼),以及更為細(xì)致的安全控制。

你是否需要單獨(dú)擴(kuò)展應(yīng)用程序的各個(gè)部分,而且目前的組件(例如登錄流程)是否存在容量的問(wèn)題?然后再探索那些需要擴(kuò)展成獨(dú)立服務(wù)的組件。

你是否需要運(yùn)行基于虛擬服務(wù)器的架構(gòu)并希望降低成本?如果是,那么就不應(yīng)該探索微服務(wù)。即便采用微服務(wù),充其量也不過(guò)是功過(guò)相抵。惡劣的情況下,最終只是多了幾個(gè)需要單獨(dú)啟動(dòng)的實(shí)例。

假設(shè)你的整體式架構(gòu)包含5個(gè)服務(wù),而你卻將其分解成了微服務(wù)。那么,現(xiàn)在你有5個(gè)應(yīng)用,你所面臨的局面是:

a)你需要逐個(gè)啟動(dòng)專(zhuān)用實(shí)例,而占空的空間是最初的5倍;

b)你利用現(xiàn)有的空間,同時(shí)承擔(dān)額外的運(yùn)營(yíng)成本。

標(biāo)準(zhǔn)化的開(kāi)發(fā)環(huán)境

在與多個(gè)開(kāi)發(fā)人員合作時(shí),標(biāo)準(zhǔn)化整個(gè)團(tuán)隊(duì)使用的開(kāi)發(fā)環(huán)境可以讓你受益無(wú)窮。我并不是說(shuō)你必須將一些基于容器的虛擬開(kāi)發(fā)環(huán)境通過(guò)魔法混合在一起。雖然你要這么干我也攔不住,但是你只需使用同一個(gè)版本的語(yǔ)言就可以為團(tuán)隊(duì)帶來(lái)奇跡。

如果你的同事用Go 1.11編寫(xiě)代碼,而你卻在Go 1.12上發(fā)現(xiàn)了Bug,那么可真是欲哭無(wú)淚。協(xié)調(diào)何時(shí)升級(jí)版本可能很困難,但一旦協(xié)調(diào)成功,諸事都會(huì)順利。

配置的工作不簡(jiǎn)單,請(qǐng)務(wù)必做好相應(yīng)的計(jì)劃

雖然有些流行的網(wǎng)站說(shuō),配置只不過(guò)是“將所有東西都扔進(jìn)環(huán)境變量中”,然而事實(shí)遠(yuǎn)非如此。

我認(rèn)為配置應(yīng)用程序的方法至少有四種:代碼內(nèi)的默認(rèn)值、本地配置文件、命令行的標(biāo)志、環(huán)境變量、遠(yuǎn)程配置(如使用Hashicorp的Consul)等。我認(rèn)為遠(yuǎn)程配置是可選的,而其他四個(gè)都是必要的。

對(duì)于開(kāi)發(fā)來(lái)說(shuō),為了在本地運(yùn)行應(yīng)用程序而不得不將27個(gè)不同的配置值放入環(huán)境變量,這會(huì)讓人萬(wàn)分沮喪。另外,你可能需要更好的自動(dòng)化和Makefile。你可以利用本地配置源的方法,如主機(jī)上的任何進(jìn)程都可以讀取環(huán)境變量。你應(yīng)該借助某種Secret管理工具。我個(gè)人喜歡使用Vault(來(lái)自Hashicorp),但你可以根據(jù)應(yīng)用選擇最合適的工具。

只在必要時(shí)導(dǎo)入軟件包

我們都知道left-pad的那個(gè)故事吧(https://在導(dǎo)入庫(kù)時(shí),通常我會(huì)遵循一個(gè)簡(jiǎn)單的規(guī)則:如果我可以在10-15分鐘內(nèi)自己編寫(xiě),那么就自己寫(xiě);否則再考慮使用外部的庫(kù)。

在開(kāi)發(fā)的時(shí)候,牢記這條規(guī)則可以避免將不必要的內(nèi)容導(dǎo)入應(yīng)用程序,但是你不必每次需要提供API時(shí)都考慮從頭開(kāi)始編寫(xiě)新的沒(méi)必要抽象所有代碼

還有一個(gè)很大的坑:抽象一切。

有時(shí),你會(huì)覺(jué)得“稍后我可能會(huì)再用到這個(gè)功能”,這個(gè)想法可能會(huì)將你引向一條黑暗又可怕的面向?qū)ο笾贰?/p>

DRY原則(Don’t Repeat Yourself,不要自我重復(fù))徹底征服了我們,盡管這條原則有其充分的理由。

然而,你需要注意不要在抽象上花費(fèi)太多時(shí)間,以至于沒(méi)有足夠的時(shí)間編寫(xiě)邏輯。你的工作是寫(xiě)代碼!等到你發(fā)現(xiàn)你需要實(shí)現(xiàn)的某個(gè)方法或函數(shù)之前已經(jīng)寫(xiě)過(guò)了,那么可以再回過(guò)頭來(lái)抽象,但是切記量力而行。

我個(gè)人遵循的原則是,如果抽象之前只是一個(gè)只有3行的函數(shù),那么就重復(fù)好了。如果真的只有3行代碼,也許你該想一想是否值得寫(xiě)成函數(shù)。

項(xiàng)目需要像“鳳凰”一樣,

經(jīng)歷浴火重生的洗禮

這個(gè)想法令人不寒而栗。經(jīng)理們會(huì)為此感到緊張,產(chǎn)品所有者會(huì)為此變得暴躁,而且開(kāi)發(fā)人員也會(huì)因此而感到憤怒,但你必須這么做。

每隔一段時(shí)間就從頭開(kāi)始其實(shí)是一件好事。你可以借機(jī)刪掉代碼中的冗余,而且無(wú)需改造現(xiàn)有的半個(gè)代碼庫(kù)就可以實(shí)現(xiàn)新的想法,同時(shí)還可以強(qiáng)制每個(gè)人重新評(píng)估項(xiàng)目。

你可以把項(xiàng)目想象成一片森林,每一行代碼都是一棵參天大松樹(shù),綿延數(shù)里。隨著時(shí)間一天天過(guò)去,這片森林會(huì)布滿(mǎn)灌木叢、飄落的松針、松果、枯枝和許多其他雜物。這些都是你的麻煩,你的技術(shù)債務(wù)。

這些東西越積累越多,直到受到某種外部力量的影響。對(duì)于森林而言,這種外部力量就是野火。火焰肆虐過(guò)的森林,地表寸草不生,只有樹(shù)皮足夠厚的樹(shù)木才能存活下來(lái),所有未長(zhǎng)成的樹(shù)木都會(huì)被大火燒盡。雖然這對(duì)森林來(lái)說(shuō)是滅頂之災(zāi),但其中蘊(yùn)含著一個(gè)驚天的秘密:森林渴望大火。多年來(lái),它一直在耐心地等待,等待火焰來(lái)凈化一切,因?yàn)榛鹧嬖跇?shù)冠下肆虐過(guò)后,下一代的參天大樹(shù)才會(huì)從松果中發(fā)芽。

當(dāng)火焰橫掃過(guò)森林地面時(shí),它會(huì)孵化出幼小脆弱的樹(shù)苗,讓它們與被大火燒得漆黑的幸存者并肩而立。你的應(yīng)用程序也需要這樣的洗禮:生命力旺盛、編寫(xiě)良好的代碼會(huì)從清理中存活下來(lái),而新的想法和代碼會(huì)從累累白骨中站起來(lái),宛如浴火重生的鳳凰。

你不是谷歌

如果你是谷歌的一員,那么請(qǐng)繞道。但如果你真的是谷歌的員工,又何必來(lái)讀這篇文章呢?關(guān)鍵在于,你是谷歌微軟、亞馬遜、Twitter或Facebook一員的可能性非常小。所以,你無(wú)需在全球17個(gè)不同數(shù)據(jù)中心的10,000臺(tái)裸金屬服務(wù)器上協(xié)調(diào)150,000個(gè)容器。通常,你的問(wèn)題不會(huì)影響到世界各地的人民。

那么,為什么我們要談這個(gè)話(huà)題?因?yàn)槟銘?yīng)該根據(jù)規(guī)模決定你的運(yùn)營(yíng)平臺(tái)。如果你只需要運(yùn)行幾百個(gè)容器,那么有必要使用Kubernetes嗎?你真的需要運(yùn)行Kuberetes,還是說(shuō)只想在簡(jiǎn)歷中多添一項(xiàng)炫耀的資本?

HashiCorp Nomad等系統(tǒng)非常適合中小規(guī)模的系統(tǒng):設(shè)置簡(jiǎn)單,幾乎不需要維護(hù),還有良好的文檔記錄,而且轉(zhuǎn)換應(yīng)用程序很容易,因?yàn)樗m用于容器以及系統(tǒng)進(jìn)程和JVM原生應(yīng)用程序。如果你真的想使用Kubernetes,那么為什么不使用Rancher等把混亂的東西都抽象化呢?運(yùn)行Kubernetes這般復(fù)雜的系統(tǒng)實(shí)在讓人感到頭疼,而且也心疼錢(qián),因?yàn)檫@些系統(tǒng)都是給谷歌這樣的公司設(shè)計(jì)的,單憑一個(gè)團(tuán)隊(duì)很難管理。

我甚至?xí)f(shuō),不要聽(tīng)互聯(lián)網(wǎng)上陌生人的忽悠

你應(yīng)該自行決定適合自己的應(yīng)用程序和開(kāi)發(fā)風(fēng)格的規(guī)則。即使本文提到的幾件事,你也應(yīng)該仔細(xì)推敲,畢竟我也只是互聯(lián)網(wǎng)上的一個(gè)陌生人。

網(wǎng)頁(yè)名稱(chēng):程序員易踩的 9 大坑
當(dāng)前路徑:http://www.rwnh.cn/news31/103031.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作全網(wǎng)營(yíng)銷(xiāo)推廣、做網(wǎng)站、搜索引擎優(yōu)化、網(wǎng)站排名品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化
清新县| 桃江县| 德昌县| 临朐县| 南汇区| 龙门县| 读书| 巴楚县| 克拉玛依市| 岳普湖县| 平凉市| 岑溪市| 夏邑县| 红安县| 德昌县| 广平县| 获嘉县| 盐源县| 英德市| 金堂县| 漳平市| 高邑县| 永新县| 新乐市| 永清县| 阿拉善右旗| 延津县| 江口县| 昌乐县| 汉中市| 南和县| 犍为县| 雷山县| 大姚县| 潼南县| 凌云县| 泰兴市| 读书| 苍南县| 宜丰县| 府谷县|