日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

编程语言API性能大比拼

發布時間:2023/12/18 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 编程语言API性能大比拼 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Ciaran是Skimlinks項目團隊中的一名領導者,熱愛開發,在業余時間喜歡研究一門新語言。作者和他的團隊在開發Skimlinks項目時遇到了一些困難,于是做了這份測試,文中將Node.js、Scala、Go、Python、PHP進行對比,最終Python獲勝,目的的是為了讓開發者為stack挑選最好的開發技術。

在過去的這段時間里,我之所以杳無音訊,是因為作為這個項目的領頭人,我正從事一項有趣的項目,我們將其命名為“Skimlinks”。

我的大部分工作是從事后端引擎開發和支持SkimWords產品進程,通過一些非常完美的高科技進行識別和添加代銷商網絡產品鏈接從而讓網站主獲取利潤。這是一種新穎的線上廣告模式,相比于頁面上的大幅banners圖我更喜歡這種新穎的模式,我們正在嘗試為用戶添加有價值的信息如產品價格比較、添加鏈接讓用戶可直接購買想要的產品。

開發環境:

大部分前端開發是用PHP編寫的,當公司需要快速、靈活開發項目時,選擇PHP是個不錯的選擇。但是隨著公司既定產品的知名度不斷提高以及搜索的高并發訪量,PHP正日益成為我們發展的一個瓶頸。

存在問題:

使用Apache多選程模塊(MPM),apache會阻礙大量的搜索請求,當出現高并發訪量時,頁面無法響應。

這里有一個快速的方法可提高服務器的吞吐量增加工作進程,然而當RAM快要耗盡時,將會受到限制。每個進程都有獨立的RAM數據塊,增長和搜索取決于PHP在哪個點上,當沒有足夠的空間釋放時,你必須將OOMing關閉(它可以迅速的將吞吐量降至為0)。

最可行的擴大規模的方法就是把項目管理模塊從Apache prefork MPM換成更出色、更快速的Apache worker MPM。通過改變多進程大大增加了服務器請求數,唯一的缺陷只是為了這個工作而工作,PHP必須能夠保證處理多個并發線程不會產生死機,然而事實并非如此。PHP的核心是多線程,因此我門認為它可能是因為某些驅動或者延長使用而導致失敗,然而無論出于什么原因,PHP不在符合我們的需求。

為此,引發了我們會選擇哪種語言進行開發而爭論不休,每個人都在推崇他們喜歡的語言,有人贊成、有人反對。很明顯,眾口難調,沒有一個衡量標準是很難選出來的,因此,我們決定用各個語言來測試一個系統,看它們的執行情況在做定奪。

參賽語言:

基本規則是,如果你想要某語言進行測試必須愿意提供執行API請求數,最后推選出:

  • Node.js:流行程度依然高漲,它的目標是幫助程序員構建高度可伸縮的應用程序,編寫能夠處理數萬條同時連接到一個(只有一個)物理機的連接代碼。?
  • Scala (w/ Tomcat):我非常熱愛JVM,起初我也推薦過該語言,但因為它過于冗長而被否決,令人興奮的是,這次Scala得到了大家的認可。
  • Python (w/ Tornado):我們已經有Python方面的經驗。
  • Go (golang):我對這門語言感興趣,而我的同伴們卻認為這門語言不好,建議使用Java。我還建議使用C#和.NET/mono,但因為不公平性,最后都被否定了。

挑戰:

我們選擇了一個非常簡單的日志API系統,所做的這些是為了從JSON請求數中抓取詳細信息,采用MD5,用于確保信息傳輸完整一致。(主流編程語言普遍都用MD5實現。將數據(如漢字)運算為另一固定長度值,是雜湊算法的基礎原理)每個執行階段都將使用Apache Benchmark(Apache附帶的一個小工具,專門用于HTTP Server的benchmark testing,可以同時模擬多個并發請求)來評估各種語言開發并發水平速度。

當Node.js和Python Tornado以單一線程運行時,使用Nginx(一個高性能的HTTP和反向代理服務器,也是一個IMAP/POP3/SMTP代理服務器 )來查看這兩個實例。

針對Scala我甚至特意編寫一份old-school Servlet(一種服務器端的Java應用程序,具有獨立于平臺和協議的特性,可以生成動態的Web頁面,它擔當客戶請求Web瀏覽器或其他HTTP客戶程序與服務器響應的中間層)在基于tomcat下運行。

采用AWS(Asp Web Server是一款基于netbox開發的asp web服務器,其個小功能強大,基本上能夠取代IIS成為廣大Asp程序員和網站開發者的利器)直接在服務器上執行基準,以消除任何一個網絡瓶頸。

通過mongo刪除每次測試數據,每次測試至少執行3次,選取平均值,以確保有足夠的“熱身”時間和消除任何異常結果。

通過在多個并發值下進行測試((10,50,100,200,500,1000),一起來看下在高負荷的情況下,性能發生了什么變化。

測試結果:

每秒請求數:這個測試給了我們一個實現純速度的想法,最明顯的一點(越高越好)。

有一點值得我很欣慰,Scala獨占鰲頭。PHP(正如預期所想的那樣)受多線程的限制,香消玉損。另一個讓我震撼的是Go語言當并發訪量不斷增加時,它以平緩的速度迅速下滑,最終也Over了。如期所料,兩個單線程non-blocking solutions(node和 python)性能差不多,python要比Node稍微好點。

響應時間:

盡管每秒請求數進程的吞吐量呈現出一個好的跡象,但是同樣重要的是在高負荷的情況下,表現很糟糕。由圖表得知,在一段時間內完成的請求數比例,越低越好。

100并發請求數:

在這里,我們看到Scala需要的時間最少,而其他幾門語言之間沒有太大區別。

200并發請求數:

圖中,我們看到有趣的現象,以9秒速度來計算請求數,Go和PHP都有受到影響,花費的時間比較多。

500并發請求數:

在500并發需求時,使用9—14秒完成請求。PHP無法響應,Go語言花費時間較多,占最高值。

1000并發需求數:

當我們遇到數以千計的請求數時, Go語言Over了,通過測試,根據apache規則要求超過50%的失敗率就算出局。如圖所示Node和Python依然存在,可以清楚的看到其性能特性。但是Python比Node要更好一點。但在第一幅圖上,Python表現的要稍微差一點。

通過測試,能清楚的分辨出各語言的性能表現,以上測試的這些數據是我們APIs中的一部分,因此對我們來說非常重要。

Scala表現的很好,幾乎很完美,我把它歸功于在連接池的Mongo數據庫中單獨接入MessageDigests和快速進行JSON分析程序。我不確定Go語言到底是怎么了,也許是我使用的Mongo驅動的問題,但無論是什么原因,看到它這么差的表現真的讓我很難過。

最后決定:

最終,我們經過討論決定選擇Python!Scala如此之快,我們為什么不選擇Scala而另選Python呢?原因如下:

Scala這門語言很難,我需要很久才能將簡單的API整合在一起,才能進行工作,python閱讀起來就像haiku,而Scala閱讀就像蛇類游戲一樣。

線性編程是很痛苦的,對Scala來說,很容易也很安全,簡單的單線程non-blocking解決方案總是很吸引人,但我們應該不斷的去嘗試挑戰。

整個團隊在Python上有著豐富的經驗,如果讓大家去接受一門新的語言,尤其像Scala這樣的既昂貴又費時間。

此前網絡速度、數據庫查詢等API成為我們發展的一個瓶頸,而今,我們已經找到正確的解決方案——Python,我們只需等待執行和發布,希望這個決定是正確的。

英文出自:skimlinks


總結

以上是生活随笔為你收集整理的编程语言API性能大比拼的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。