Haskell做APP後端開發能有性能上的飛躍么?

據說Haskell具有非常強的並發能力!有個想法:Haskell做資料庫邏輯處理,結果轉化JSON,前段Ajax讀取JSON,提高APP並發處理能力?向大神們求證是否可行?目前網站用的PHP轉JSON。


相關經驗:

用Erlang/Elixir摸過這種API伺服器(說說你使用Elixir/phoenix的實戰項目心得), 沒有做過優化

老生常談一句"過早優化是萬惡之源"

APP後端的話, 就是常見的HTTP API接收返回JSON的OLTP應用, 衡量這種應用粗略的兩個指標就是延遲和吞吐, 踩過這方面坑的人都認識到"Web應用的瓶頸大多數的時候是IO", 所以遇到性能問題的時候多數去調資料庫連接池, 資料庫分庫分表之類的, 序列化跟訪問資料庫用的語言對於性能來說真是濕濕水(所以DHH有勇氣說Ruby has been fast enough for 13 years XD), 況且Ruby/Python/PHP這種相對比較慢的動態語言還可以通過搞C binding來提升性能(不少伺服器的HTTP Parser, 各種資料庫driver都是這麼做的), 所以性能上的飛躍肯定是不至於的, 要不然肯定是代碼寫得太爛了.

------以上是對沒多少代碼多是簡單CRUD的服務而言-------

但是這個世界爛代碼太多了, 幾個需求快速推, 幾批開發人員來回代碼就劣化了, 所以常見到那種Ruby/Python代碼用Go重寫快好幾倍的新聞, 也有人:Why And How I Switched From Python To Erlang, 又有人: From Python to Go and Back Again, Facebook覺得PHP慢把PHP編譯到C++又跳Hiphop搞Hack, 這是鬧哪樣啊.

後端語言選擇永遠是開發效率(生態, 工具鏈, 招聘, ...), 性能的權衡折衷.

Haskell Web開發方面的我在這裡說過: Haskell適合做網站開發嗎?有什麼優缺點?

PS: 最近有人吐槽為什麼Yesod在TechEmpower那個benchmarks這麼挫, 然後有人拿Haskell的Servant去肝了一番: servant on TechEmpower benchmarks : haskell (benchmark嘞最緊要開心)


首先你需要知道系統的瓶頸再優化。


樓上(祖與占和吳江)兩個,說的太對了,,

談一下,大二兩個學期做死用 Haskell 寫大作業的後端的感受 // 年輕太好了,23333

直接用 Yesod 的框架(看見某個答案被摺疊,點開了之後,下了一跳),曾今試過 wai與warp 但是太多東西需要「自己寫」,還是換回了Yesod

大二下的某大作業 更是不要命的直接上 微服務,,我表示(我並不會後端,反正我信了),性能(理論上是沒得說的,然而實際性能還得看智商),這個死做起來倒是蠻愉快的,

Haskell 寫後端本身沒啥,,(坑在於,萬一寫Haskell的跑路了,可咋辦)。其它語言的性能,就不行了?肯定不是,你看看有多少(包括知乎)後端是 python 等語言寫的,(性能,你懂的),實際瓶頸,應該是在資料庫的IO上,

可行,是可行,(實話)

然而,首先你要找到一個會用 Haskell 寫後端的,然後,還不能讓他跑了(笑話)

對說一個坑, 如果用 yesod 框架,千萬要慎重使用其配套的資料庫驅動中間件 persistent,

那個是可以用一份代碼,操作Mongo、mysql、pg等資料庫,把很多資料庫特有的特性,都屏蔽掉了,比如 PostgreSQL 的數組類型, persistent 並不支持,而是轉化為 JSON 的數組後存成字元串(這個問題,是 persistent 的設計問題),,還有曾經用 Mongo 的時候(也用到了那個中間件),圖片大於128k左右,後端就是陷入無限等待。。(貌似這個鍋是 Mongo 原生驅動的,然而)

(以上均為胡說,2333333)


推薦閱讀:

Haskell用在工程項目中有什麼優勢?
ZJU Lambda2017秋納筆試
無類型Lambda演算筆記-2(Lambda可定義性,附Haskell實例)

TAG:後端技術 | Haskell |