成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

讓30臺服務器縮減到2臺:從Ruby遷移到Go語言

開發 開發工具 后端
我們開發第一版的IronWorker已經是3年前的事了,是用Ruby寫的,API基于Rails開發。我們沒用多久就發展成了相當大的規模,很快我們就觸及到了Ruby程序的承載上限。長話短說,我們切換到了Go語言,請接著讀下去,下面是事情如何一步步發展的。

[[68242]]

我們開發第一版的IronWorker已經是3年前的事了,是用Ruby寫的,API基于Rails開發。我們沒用多久就發展成了相當大的規模,很快我們就觸及到了Ruby程序的承載上限。長話短說,我們切換到了Go語言,請接著讀下去,下面是事情如何一步步發展的。

最初的設計

首先,做一點背景介紹:我們開發的第一版IronWorker,起初叫做SimpleWorker(很不錯的名稱,不是嗎?),用的是Ruby。我們過去是一個顧問公司,為其它公司開發應用,在當時有兩個東西被炒得非常火:亞馬遜的Web Services和Ruby on Rails。所以我們開發的應用都基于AWS的Ruby on Rails架構,并因此吸引了不少大客戶。我們開發IronWorker的初衷是來源我們自身的需求。我們有不少做硬件設備的客戶,他們會7×24小時不停的給我們發送數據,我需要收集這些數據,把它們整理成有用的信息。典型的做法就是讓定時任務每天每小時的遍歷這些數據。我們想到應該開發一個東西,能夠處理所有用戶的數據,而不必做一大批的定時任務為每個客戶單獨處理。于是我們開發了一個服務類應用,并在內部使用了一段時間,但后來我們認為一定會有其他的人也需要這個應用,于是我們決定公布它,這樣,IronWorker誕生了。

我們的服務器可承受的CPU使用率大概在50-60%。當超過這個額度,需要增加服務器來保持它在50%左右。只要我們不介意大量的服務器租用費(我們當然介意),這種模式會工作的很好。但最大的問題是出現在流量大量陡增時。當一個大型的流量高峰到來時,它會產生多米諾效應,會拖垮我們整個的服務器集群。當某些指標超過50%的閥值時,我們的Rails服務器會吃掉100%的CPU使用率,變成無響應狀態。這會導致負載均衡設備認為它已經宕了,把它移出分發池,于是這臺無響應的服務器上的負載就會轉移到池中其他服務器上。因為池中剩下的服務器需要承載這失去的服務器上的負載再加上流量高峰,必然會有第二臺服務器倒下,負載均衡設備又會把它移除,前赴后繼。很快池中所有的服務器都會耗盡。這種現象也叫做colossal clusterf**k (ref: +Blake Mizerany)。

這里是一個簡單描繪多米諾宕機效應的繪圖

這里是一個簡單描繪多米諾宕機效應的繪圖。

在這種架構下避免這種事情發生的唯一辦法就是保持有大量的額外處理能力,讓我們的服務器的負載遠低于它應該能承受的能力,但這意味著要多花一大筆錢。必須讓這種狀態有所改變。

重寫應用

我決定重寫這應用。這是一個很容易的決定,很顯然,我們的Ruby on Rails無法支撐我們業務規模的增長。我們都有多年的開發Java的經歷,曾經寫過很多東西只需要很少的資源就能處理大量負載,遠比Ruby on Rails的處理能力強的多,我知道我們可以做出很多改進。于是,接下來的問題變成了應該使用哪種語言?

選擇一種語言

我對任何新建議都持開放的態度,最不濟,我還可以重回到Java。Java是一個在很多方面(比如性能上)很棒的語言(是嗎?),但經過了多年的Ruby程序編寫后,我已經為它的開發效率所癡迷。Ruby很有趣,樸素,簡單。

我們搜索了一下比Ruby性能上要好的腳本語言(Ruby并不是很差),比如Python和Javascript/Node,我們還研究了Java的衍生語言,如Scala和Clojure,和還有其它的語言例如Erlang(AWS使用了它)和Go語言(golang)。Go語言獲勝。事實上,它的作為基礎組成部分的并發特征太強悍了;它的標準核心庫提供了我們開發API服務需要的所有東西;它簡潔;它編譯快;很像Ruby,Go語言很有趣;最后,數字是不會撒謊的。經過了一次原型制作和性能測試后,我們知道了通過它我們可以將負載能力做重大的提高。經過了征詢團隊的意見(“這很好,它背后有Google支持”),我們打起了攻堅戰。

起初決定押寶Go語言時,這是一個有風險的決策。Go語言的社區并沒大量的形成,沒有多少開源的Go語言工程項目,在正式產品上使用Go語言的成功案例并不多(有嗎?)。而且我們并不敢肯定在認定Go語言后能否招到這方面的頂級人才,但很快我們發現我們可以招到頂級人才——正是因為我們選擇了Go語言。我們是首個公司公開的宣稱在我們的產品中使用Go,首個公司在Go語言郵件列表里貼出Go語言工作職位招聘。很多頂級程序員希望來我們這里,就是因為這樣他們可以在每日的編程中使用Go語言。

Go語言的表現

[[68243]]

在我們推出了首個Go語言版本后,我們的服務器數量從30個減少到了2個,并且只留了2個服務器做冗余儲備。它們就像是根本沒有被使用,完全就像沒有任何程序在上面運行。我們的CPU使用率低于5%,整個應用的運行啟動只消耗了幾百KB的內存(僅在啟動時),相比之下Rails應用要耗用50MB。這種比較甚至是包括了虛擬機內存使用!這真是天與地的差別。從此我們再也沒有經歷過多米諾宕機的事故。

相比起之前,我們的業務增長了許多。我們有了更大的流量,我們增加了兩個新服務(IronMQIronCache),我們有數百個服務器來支持客戶的需求。這全部是用Go做后臺馬達。回想起來,選擇Go語言是一個明智之舉,它讓我們開發出更好的產品,幫助公司成長,擴大企業規模,并且吸引了一流人才。我相信它會繼續在可預見的未來幫助我們進步。

英文原文:How We Went from 30 Servers to 2: Go

譯文鏈接:http://www.aqee.net/how-we-went-from-30-servers-to-2-go/ 

責任編輯:林師授 來源: 外刊IT評論
相關推薦

2013-03-14 09:42:58

GoRuby

2013-03-15 10:54:39

服務器RubyRails

2016-07-12 10:40:35

服務器

2016-08-16 15:21:19

服務器

2017-04-24 16:10:19

戴爾

2014-06-24 13:54:25

2016-09-21 10:25:20

私有云360私有云平臺Syndic

2016-11-11 14:58:48

IBM 服務器

2013-11-20 15:58:13

2009-02-27 16:56:00

Google服務器

2009-04-03 09:19:04

谷歌服務器數據中心

2018-05-11 09:40:10

服務器運維運營商

2013-08-30 10:15:24

2009-09-22 16:49:01

第一臺服務器

2023-09-05 09:32:07

服務器Redis

2019-11-12 13:30:07

開源技術 軟件

2024-11-01 12:10:57

2024-10-31 10:41:01

2013-11-24 17:27:25

Facebook運維Facebook運維
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成年人视频在线免费观看 | 一区二区久久 | 亚洲精品欧美 | 欧美一区二区视频 | 午夜欧美一区二区三区在线播放 | 欧美日韩国产精品一区二区 | 在线看片国产精品 | 黄色片视频 | 成人三级视频 | 91麻豆精品国产91久久久更新资源速度超快 | 午夜电影一区二区 | a毛片视频网站 | 色婷婷综合久久久中字幕精品久久 | www.一级毛片 | 在线电影日韩 | 成年视频在线观看福利资源 | 黄a网 | 国产一区二区 | 日美女逼逼| 午夜精品视频在线观看 | 日韩精品在线观看一区二区三区 | 成年免费大片黄在线观看一级 | 欧洲免费毛片 | 国产操操操 | 色噜噜亚洲男人的天堂 | 欧美激情a∨在线视频播放 成人免费共享视频 | av在线电影网站 | 欧美日韩一区二区在线播放 | 亚洲一区二区国产 | 日韩一区二区三区在线观看 | 日本污视频| 日本激情视频在线播放 | 国产999精品久久久久久 | 日韩视频国产 | 天天夜干 | 亚洲一区二区三区在线 | 精品日韩| 国产日韩精品视频 | 中文字幕av网 | 日韩久久久久 | 国产亚洲精品久久午夜玫瑰园 |