【Rust日報】 2019-05-18:使用 Rust 來加速 Elixir 服務1100萬用戶

finshir - 一種 Low&Slow 流量產生器

Low&Slow 是一種DDos***方法,利用產生大量的慢請求來保持住對服務器資源的消耗,從而影響正常請求的訪問。finshir 就是這樣一種用Rust寫的工具。有兩點高光:web

  1. 使用了 may,對,就是黃旭東大佬的May協程庫瀏覽器

  2. 能夠配合 Tor 使用,實現匿名性安全

Repo服務器

有下列特點 coroutines 驅動,底層、慢速、可自定義數據結構

Read more併發

rust 1.36.0 加入了Cargo流水線加速編譯技術

利用下圖的方式加速app

[-libA----|--------]
         [-libB----|--------]
                            [-binary-----------]
0s        5s       10s       15s                25s

Cargo在內部構建了一個DAG來表示crate之間的依賴關係,一般須要等待crate依賴關係構建完成纔會啓動編譯,可是如今對Cargo進行了優化,如今只要獲得編譯器爲了開始下一次編譯而生成的「元數據」便可開始編譯,這就是所謂的「流水線(pipeline,就像工廠流水線同樣,節省加工時間)」加速編譯技術。框架

  • Reddit 討論ide

  • Read More函數

serde-wasm-bindgen:讓wasm-bindgen支持serde

cloudflare出品

serde-wasm-bindgen

貢獻你的新版 await 使用經驗

歡迎你們講一下本身的心得

Read more

rust製做者 Graydon Hoare 帶你重溫編譯器的歷史

Read more

使用Monomorphization節省一些編譯時間

做者舉例現在可使用 #[momo] 讓轉型更簡單,編譯更快

Read more

使用 Rust 來加速 Elixir 服務1100萬用戶

discord過去一直使用erlang來作為主要服務的程式語言現在他們使用了rustler讓rust為 elixir 加速。去年他們的業務有了一項新的變化,就是更新會員列表的方式:只發送更新的部分,而不是給每一個會員發送更新。這個變化給服務器端形成了一個大問題:咱們須要一個可以容納數十萬個條目的數據結構,以特定的方式排序,能夠接受和處理大量的變更,而且能夠報告添加和刪除事物的位置索引。

Elixir是一種函數式語言;它的數據結構是不可變的。這很是適合在編寫elixir對代碼進行正確性論證以及並能夠享受的大量併發性。不可變數據結構的雙刃劍是經過採用現有數據結構和操做以及建立全新數據結構來對變更建模。這意味着當有人加入服務器(內部稱爲公會)並擁有100,000名成員的成員列表時,他們必須構建一個包含100,001名成員的新列表。 BEAM VM很是快,而且天天都在變得更快。它試圖在可能的狀況下利用持久性數據結構,但在咱們運營的規模上,這些大型列表沒法足夠快地更新。

所以團隊在erlang和elixir提供的各類高性能數據結構中尋找解決辦法,試過MapSet、List、OrderedSet到他們本身實現的SortedSet,終於找到了一個解決方案,可是在超過250,000名成員的公會時性能達到了上限。因而Discord團隊準備嘗試使用Rust來加速。

這不是Discord團隊第一次使用Rust了,在他們的遊戲商城裏也大量用到了Rust,但Discord的核心服務是Elixir,主要是由於Elixir比較適合他們的場景。爲了爲Elixir加速,他們預留了一週時間使用Rustler(提供了安全的NIF綁定,方便爲elixir編寫rust擴展)進行概念驗證,最終發現,Rust支持的NIF提供了巨大的性能優點,而無需犧牲易用性或內存(能夠支持100w名成員)。

今後之後,Discord團隊便快樂地享受着Rust帶給他們的「快感」。Discord也開源了他們的SortedSet庫,點擊原文看更多詳細。

  • Reddit 討論

  • Read More

  • rustler

使用BinaryAST快速加載腳本

關於JavaScript二進制AST

隨着網站變得愈來愈複雜,JavaScript源代碼的數量不斷增長。依賴於大型JavaScript代碼庫會致使網站啓動緩慢 - 一般速度慢得使人沒法接受。這是由於存在兩個瓶頸:解析和字節碼編譯JavaScript。不幸的是,瀏覽器幾乎達到了兩種操做的效率峯值。

咱們(Mozilla,Bloomberg,Facebook,CloudFlare)目前正致力於針對JavaScript的特定領域編碼,稱爲「BinAST」(「JavaScript二進制AST」的縮寫)。 JavaScript二進制AST旨在打破瓶頸。當前的高級原型已經在全部最多見的框架上顯示了JS解析改進了30%-50%,只需更改格式,咱們相信咱們能夠進一步提升這一改進。編碼能夠構建爲webdev工具鏈的一部分,或者由代理或CDN注入,所以能夠在不更改原始網站的狀況下自動提升最終用戶的性能。

此編碼目前在JavaScript TC39標準化過程當中。它能夠與現有的壓縮技術(gzip,brotli等)一塊兒使用,目前有cloudflare的一個Rust實現:binjs-ref。

  • binjs-ref

  • Read More

相關文章
相關標籤/搜索