日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

三個中國程序員 vs三個美國程序員,不得不承認(rèn),差距太大了!

來源: 責(zé)編: 時間:2023-11-28 09:32:05 250觀看
導(dǎo)讀大概是2009年,我和兩個好哥們聊天,覺得智能手機(jī)可能是風(fēng)口,商量著要弄一個照片分享網(wǎng)站。用戶可以用手機(jī)把隨手拍的照片放到網(wǎng)上分享,名稱都起好了,叫InstantPost??墒俏覀兊膱?zhí)行力太差了,聚了兩次,做了一點兒技術(shù)驗證,就沒

大概是2009年,我和兩個好哥們聊天,覺得智能手機(jī)可能是風(fēng)口,商量著要弄一個照片分享網(wǎng)站。tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

用戶可以用手機(jī)把隨手拍的照片放到網(wǎng)上分享,名稱都起好了,叫InstantPost。tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

可是我們的執(zhí)行力太差了,聚了兩次,做了一點兒技術(shù)驗證,就沒有下文了。tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

過了幾年,我看到美國一個叫Instagram的火了,不由地一拍大腿:臥槽!這不就是我們當(dāng)年要做的事兒嗎?!tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

后來我看到Instagram初期的故事,他們也是三個程序員,從2010年10月到2011年12月,在一年多的時間內(nèi),就把用戶數(shù)量從0增長到了1400萬!tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

看完他們的架構(gòu)設(shè)計,我就釋然了,拋開執(zhí)行力,在2009年那個時間點,我們確實不行。tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

Instagram制定的架構(gòu)指導(dǎo)準(zhǔn)則是:tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

1.保持簡單tza28資訊網(wǎng)——每日最新資訊28at.com

2.不要重新發(fā)明輪子tza28資訊網(wǎng)——每日最新資訊28at.com

3.盡可能使用經(jīng)過驗證的可靠技術(shù)tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

所以早期的Instagram跑在云上,使用EC2和Ubuntu Linux 11.04(“Natty Narwhal”)。tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

接下來,站在一個用戶會話(Session)的角度,來看看Instagram的處理過程。tza28資訊網(wǎng)——每日最新資訊28at.com

前端

tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

Session:用戶打開了Instagram APP。tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

2010年,Instagram開發(fā)了一個iOS app,正式推出。tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

因為這時候Swift還沒有發(fā)布,他們用了Objective-C,UIKit等技術(shù)。tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片tza28資訊網(wǎng)——每日最新資訊28at.com

負(fù)載均衡

tza28資訊網(wǎng)——每日最新資訊28at.com

Session:打開App后,會向后端發(fā)起一個請求(獲取主界面的“信息流”),這個請求會首先到達(dá)Instagram的負(fù)載均衡。tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

Instagram 最早使用2個Nginx并在它們之間進(jìn)行DNS Round-Robin,這種方法的缺點是,如果某一個機(jī)器出現(xiàn)故障,DNS的更新需要時間。tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

后來他們選擇了Amazon的Elastic Load Balancer,這里有三個NGINX實例,可以換入換出。tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片tza28資訊網(wǎng)——每日最新資訊28at.com

后端

tza28資訊網(wǎng)——每日最新資訊28at.com

Session:負(fù)載均衡會把請求轉(zhuǎn)發(fā)給應(yīng)用服務(wù)器tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

Instagram用Django作為后端服務(wù),運行在 Amazon High-CPU Extra-Large 上,因為這三個程序員發(fā)現(xiàn),后端服務(wù)是CPU密集型的。tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

用Gunicorn做WSGI Server。tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

應(yīng)用運行在超過25臺亞馬遜虛擬機(jī)中,這些應(yīng)用都是無狀態(tài)的,可以在需要的時候進(jìn)行擴(kuò)展。tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

為了在多臺機(jī)器上運行命令(例如部署代碼),Instagram使用了Fabric,它有一個很好用的并行模式,部署只需要幾秒鐘。tza28資訊網(wǎng)——每日最新資訊28at.com

數(shù)據(jù)存儲

tza28資訊網(wǎng)——每日最新資訊28at.com

Session: 用戶請求到達(dá)了應(yīng)用服務(wù)器,接下來它需要獲得這些數(shù)據(jù):tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

1.最新的Photo IDstza28資訊網(wǎng)——每日最新資訊28at.com

2.這些Photo ID對應(yīng)的實際照片tza28資訊網(wǎng)——每日最新資訊28at.com

3.這些照片的用戶數(shù)據(jù)tza28資訊網(wǎng)——每日最新資訊28at.com

Database: PostgreSQL

tza28資訊網(wǎng)——每日最新資訊28at.com

Session: 應(yīng)用服務(wù)器從PostgreSQL獲取最新的Photo ID,這里保存著用戶和照片的元數(shù)據(jù)。tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

大部分的數(shù)據(jù),如用戶,照片元數(shù)據(jù),標(biāo)簽等都保存在PostgreSQL數(shù)據(jù)庫中。tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

因為數(shù)據(jù)量不小,每秒鐘有25個照片上傳,并且有90個贊,Instagram對數(shù)據(jù)做了分片。tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

分片系統(tǒng)由數(shù)千個邏輯分片組成,這些分片在代碼中被映射到少得多的物理分片,用這種辦法,可以從少量的數(shù)據(jù)庫開始,擴(kuò)展到更多的數(shù)據(jù)庫。tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

當(dāng)擴(kuò)展時,只需要把邏輯分片從一個數(shù)據(jù)庫“指向”另外一個即可,無需挪動任何數(shù)據(jù)。tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

一個挑戰(zhàn)是:Instagram如何解決Photo ID問題,因為需要能按時間排序,而無需獲得有關(guān)照片的更多信息,理想情況下,ID應(yīng)該是64位的。tza28資訊網(wǎng)——每日最新資訊28at.com

后來的解決方案是這樣的:tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

41位:記錄毫秒時間tza28資訊網(wǎng)——每日最新資訊28at.com

13位:邏輯分片IDtza28資訊網(wǎng)——每日最新資訊28at.com

10位:自動增長的序列,模數(shù)1024,這意味著每毫秒,每個分片可以生成1024個IDtza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

最終結(jié)果是個64為整數(shù),可以被PostgreSQL排序,找到最新的照片。tza28資訊網(wǎng)——每日最新資訊28at.com

照片的存儲:S3 和Cloudfront

tza28資訊網(wǎng)——每日最新資訊28at.com

Session: 獲取了Photo ID以后,應(yīng)用服務(wù)器要獲取真正的照片,快速發(fā)給用戶tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

照片保存在Amazon S3中 ,存儲了幾個TB的數(shù)據(jù),通過使用CDN(Amazon CloudFront ),照片可以快速分發(fā)給世界各地的用戶(例如日本,是Instagram第二大受歡迎的國家)tza28資訊網(wǎng)——每日最新資訊28at.com

緩存

tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

Instagram 需要將大約 3 億張照片(ID)和創(chuàng)建它們的用戶ID的映射保存起來,以便知道查詢那個分片。tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

他們選擇了Redis后發(fā)現(xiàn),為了保存這些映射,Redis需要21GB內(nèi)存,這已經(jīng)大于 Amazon EC2 上的 17GB 實例類型。tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

后來他們向Redis的核心開發(fā)人員Pieter Noordhuis求助,Pieter建議使用Redis Hash,最終通過巧妙的設(shè)計,這些映射僅需不到5G的內(nèi)存。tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

對于其他緩存(如session),Instagram使用Memcached,當(dāng)時有6個實例。tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片tza28資訊網(wǎng)——每日最新資訊28at.com

數(shù)據(jù)備份

tza28資訊網(wǎng)——每日最新資訊28at.com

無論是PostGreSQL還是Redis,都會使用Amazon EBS經(jīng)常性進(jìn)行數(shù)據(jù)備用tza28資訊網(wǎng)——每日最新資訊28at.com

通知和異步任務(wù)

tza28資訊網(wǎng)——每日最新資訊28at.com

Session: 用戶關(guān)閉了App,但是朋友發(fā)送了一張照片,需要發(fā)送一個通知。tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

Instagram的推送服務(wù)用的是 pyapns, 這是一個開源的、通用的蘋果推送服務(wù)提供商,運行非常穩(wěn)定,為Instagram處理了超過10億條推送通知。tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

Session:用戶非常喜歡這張照片! 他決定在Twitter何Facebook上分享。tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

在后臺, 任務(wù)被推送到了Gearman, 這個任務(wù)隊列會保存任務(wù),Instagram有大約200 Python workers 來處理這些任務(wù)。tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片tza28資訊網(wǎng)——每日最新資訊28at.com

監(jiān)控

tza28資訊網(wǎng)——每日最新資訊28at.com

Session: Uh oh! 服務(wù)器端發(fā)生了錯誤,Instagram崩潰了,那三個程序員需要收到告警,馬上進(jìn)行處理。tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

Instagram 使用 Sentry這個開源的應(yīng)用來實時監(jiān)控Python錯誤。tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

使用Munin來繪制各種系統(tǒng)指標(biāo)的圖表,如果有任何情況超出正常范圍,就會向程序員發(fā)出異常告警。Instagram 有一堆自定義 Munin 插件來跟蹤應(yīng)用程序級別的指標(biāo),例如每秒發(fā)布的照片、每分鐘注冊人數(shù)等。 tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

對于外部服務(wù)的監(jiān)控,使用了Pingdom ,PagerDuty 用于處理事件和通知。tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

最終的架構(gòu)

tza28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片tza28資訊網(wǎng)——每日最新資訊28at.com

反思

tza28資訊網(wǎng)——每日最新資訊28at.com

2009年,我們?nèi)齻€都在比較傳統(tǒng)的軟件公司,互聯(lián)網(wǎng)技術(shù)用得比較少。tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

像負(fù)載均衡、分庫分表、緩存也是剛剛開始接觸,還沒有在生產(chǎn)系統(tǒng)中大規(guī)模使用的經(jīng)驗。tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

iPhone還沒在國內(nèi)上市,我們仨手頭都沒有,還在用諾基亞的“智能機(jī)”做測試。tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

國內(nèi)市場也沒有很好的云服務(wù)作為基礎(chǔ)設(shè)施,當(dāng)時李彥宏表示,云計算只不過是新瓶裝舊酒,15年來沒有新東西,馬化騰則認(rèn)為云計算要像水電一樣用還為時尚早。tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

如果執(zhí)行力強(qiáng)的話,InstantPost應(yīng)該能做出來,但肯定會遇到很多的坑,想取得一年1000多萬用戶肯定是癡心妄想。 tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

當(dāng)然,這僅僅說明是我們?nèi)齻€比較菜,不是中國程序員不行,中國程序員在互聯(lián)網(wǎng)時代也創(chuàng)造了很多優(yōu)秀的產(chǎn)品,甚至殺到了美國大本營。tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

我想說的是,很多看起來是風(fēng)口的東西,我們是抓不住的,因為:tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

我們不是局內(nèi)人。tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

參考資料:tza28資訊網(wǎng)——每日最新資訊28at.com

tza28資訊網(wǎng)——每日最新資訊28at.com

https://engineercodex.substack.com/p/how-instagram-scaled-to-14-million (本文主體內(nèi)容的來源)tza28資訊網(wǎng)——每日最新資訊28at.com

https://instagram-engineering.com/what-powers-instagram-hundreds-of-instances-dozens-of-technologies-adf2e22da2adtza28資訊網(wǎng)——每日最新資訊28at.com

https://instagram-engineering.com/sharding-ids-at-instagram-1cf5a71e5a5ctza28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-34555-0.html三個中國程序員 vs三個美國程序員,不得不承認(rèn),差距太大了!

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Vue3 學(xué)習(xí)筆記,Vue 簡介及如何引入 Vue3 框架

下一篇: Go 淺析主流日志庫:從設(shè)計層學(xué)習(xí)如何集成日志輪轉(zhuǎn)與切割功能

標(biāo)簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 会东县| 璧山县| 莱州市| 固镇县| 武陟县| 曲麻莱县| 雷山县| 奈曼旗| 吴桥县| 吐鲁番市| 平山县| 水城县| 吉首市| 静宁县| 涡阳县| 隆化县| 东乡族自治县| 兰溪市| 雅安市| 墨江| 韶关市| 宝兴县| 丰原市| 米林县| 勃利县| 江西省| 宜城市| 肃北| 喀喇| 祁连县| 桂平市| 万州区| 新津县| 郎溪县| 克什克腾旗| 明溪县| 广平县| 云阳县| 拜泉县| 延边| 遂昌县|