2016-08-20 42 views
-1

我試圖更好地理解服務器語言/框架及其在微服務環境中使用的潛在優點和缺點。開發時間對我來說並不重要,因爲這是爲了我自己的個人項目,學習使用正確的工具解決問題對於我來說比開發構建服務所需的時間更重要。在選擇服務器語言時,我必須考慮除開發時間之外的其他因素嗎?

我越想越想,應該在90%的時間裏使用藥劑。究其原因有二:

1)併發意味着許多用戶可以點擊該服務沒有失敗

2)大多數微服務有0的處理開銷,他們打了一個數據庫,並返回一個JSON。即使用更快的語言觸擊數據庫所帶來的收益與使用更慢的語言無法區分。有問題的數據庫將確定返回數據的速度,而不是服務器語言,因爲數據庫實現本身將使用C++等低級語言編寫。 (這是真的嗎?Elixir + Postgresql比Go + Postgresql慢得多,甚至是Ruby + Postgresql?是Postgresql還是語言發出請求的瓶頸?)

假設上述2爲真,那麼它代表我之所以會在90%的時間內使用Elixir,是因爲我會得到一個面向未來的交通高峯期服務,並且它通常具有與任何其他數據庫檢索Rest API相同的執行速度。

其他服務需要像圖像識別服務一樣的處理器速度的10%時間我會用C++或Python實現,因爲它的圖像庫已經在C++中用於圖像識別(即Tensor Flow)。

這是一種考慮何時使用特定語言進行微服務的正確方法?如果不是,除了開發時間,我還應該考慮什麼?

+0

@enzian這個問題對於程序員來說是不合適的 - 它會很快被拒絕並在那裏關閉,參見http://meta.programmers.stackexchange.com/questions/6483/why-was-my-question-關閉或投票表決/ 6490#6490推薦閱讀:** [Programmers.SE是怎麼回事?堆棧溢出指南](http://meta.programmers.stackexchange.com/q/7182/31260)** – gnat

回答

0

假設上述2屬實,那麼按理說,我認爲我會用藥劑90%的時間[...]

使這些類型的語句時要小心!他們誘惑你選擇你在創建新服務時總是選擇的東西,實際上你應該考慮該服務應該做什麼,以及哪些語言和框架可以幫助你最好地達到目標!這就是說:你的兩個前提是真的!數據庫命中是最昂貴的操作,而併發處理是處理更大負載時的重要工具。它們是真實的,但並不完整:您可能需要考慮其他條件,如資源消耗,調度您的平臺的行爲等。

關於語言的計數:託管語言(例如,基於JVM的所有內容或.NET運行時)總是意味着一定的靜態開銷,因爲它們需要做垃圾回收,或者需要隨時編譯代碼,運行時動態類型推導,反射等。這意味着它們需要更多的內存和CPU週期你的機器比其他語言如C++,GO,Rust等等。

雖然您必須自己用C++等語言進行內存管理,但像GO,D和Rust這樣的語言試圖爲完全託管的語言/運行時提供一箇中間地帶,如JVM或.NET。

至少和您在語言/運行時選擇的一樣重要的是您的架構。所有涉及經典數據庫的東西都可能會給你帶來問題,在磁盤的任何部分都會在負載下殺死你!

那麼我的建議是什麼?記住所有的變量(請求延遲並不是唯一的指標!資源消耗也可能是一個殺手!),選擇最好的語言和工具鏈來滿足您的服務滿足並驗證不同體系結構的任何目的!

相關問題