用 Elixir 重写 WebRTC 语音聊天室,自带集群扩容

2022-10-17 23:35:47 +08:00
 bmpidev2019

之前写过一个帖子在这里: https://v2ex.com/t/828646

Repo: https://github.com/madawei2699/free4chat

最近花了一周时间重写了 http://free4.chat ,加入了文字聊天功能(花费 1 天时间)。新的技术栈:

后端用 Elixir/Erlang 的好处是自带集群功能,目前两台服务器组建集群,客户端随机负载均衡策略选择某个服务器做接入,同一房间的用户可以分布在不同节点的服务器,相比之前 Go 语言的版本,有了极大的 Scale 能力。Elixir/Erlang 还有极其强大的可观测能力,可以在运行时 remote 到 VM 中查看 process 的状态。

前端用 NextJS 和 Tailwindcss 的好处在于大量的组件可以拿来即用,Tailwindcss 相比之前一些 UI 库好用到爆,可以让我这种前端小白在短时间糊出来还不错的页面,强烈推荐! RxJS 做组件间的通信工具,感觉比 Redux 要简单多了,Redux 是有点复杂。

DevOps 的话,后端部署是用 GitHub Actions 将 Docker 容器远程部署在 AWS EC2 上。前端是部署在 @Cloudflare Pages ,后端 API 服务器没有用 Nginx ,通过 iptables 将 80/443 端口流量转发至容器监听的端口,HTTPS/TLS 是由 @Cloudflare 自动配置的。

监控的话就用 Elixir hoenix 的 LiveDashboard 了。

5439 次点击
所在节点    分享创造
30 条回复
moose123
2022-10-24 14:26:05 +08:00
@bmpidev2019 Elixir 更适合创业者、小团队,如果想学习一门语言养家糊口的,自然会选择 java 这些了,就是因为有更多的选择才好玩,现在微服务这么流行,某些服务用 Elixir ,某些服务用 java 也没啥问题。
bmpidev2019
2022-10-24 21:18:23 +08:00
@moose123 团队用完 elixir 就回不去了😄
moose123
2022-10-27 15:37:35 +08:00
@bmpidev2019 你们集群有多少个节点啊?
bmpidev2019
2022-10-27 16:04:56 +08:00
@moose123 我现在就 2 个
maggch97
2022-11-26 12:44:42 +08:00
@bmpidev2019 挖个坟,我当时很怀疑比较更接近底层的 Golang 怎么会有更差的内存占用。直到我最近也部署了 kraken 的服务,遇到了一样的内存占用问题。

我看了一下代码。这不是 Golang 的问题,而是 kraken 本身实现问题。它的所有房间信息以及所有用户连接的资源并没有被正确释放,所有断开的连接仅仅被标记了一个 delete 的 id 。

issue: https://github.com/MixinNetwork/kraken/issues/32
bmpidev2019
2022-11-26 14:33:08 +08:00
@maggch97 应该不是 golang 的问题,是 sfu 实现的问题,pion 本身应该也 OK ,不过调试真困难是真的😅
maggch97
2022-11-29 23:00:51 +08:00
@bmpidev2019 更新一下,使用修复后的代码,36 个活跃用户服务器占用 66M ,内存泄漏的问题也没有了。
bmpidev2019
2022-11-30 16:01:25 +08:00
@maggch97 这个开销才正常一些👍但你怎么统计实时用户的?
maggch97
2022-11-30 16:49:36 +08:00
@bmpidev2019 rpc 里面有一个 info method 的
dwu8555
128 天前
网站居然还能打开

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/887653

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX