【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

相关文章
相关标签/搜索