我理解,粗略地说,Trello使用Redis作为瞬态数据存储.
有人能够进一步阐述它在应用程序中扮演的角色吗?
我有 3 个 Nodejs 应用程序在带有 Nginx 反向代理的 GCP 计算引擎实例(2cpu、2GB 内存、ubuntu 20.04)上运行。其中之一是 socket.io 聊天服务器。socket.io 应用程序@socket.io/cluster-adapter使用所有可用的 CPU 核心。\n我按照本教程更新了 Linux 设置以获得最大连接数。这是命令的输出ulimit,
core file size (blocks, -c) 0\ndata seg size (kbytes, -d) unlimited\nscheduling priority (-e) 0\nfile size (blocks, -f) unlimited\npending signals (-i) 7856\nmax locked memory (kbytes, -l) 65536\nmax memory size (kbytes, -m) unlimited\nopen files (-n) 500000\npipe size (512 bytes, -p) 8\nPOSIX message queues (bytes, -q) 819200\nreal-time priority (-r) 0\nstack size (kbytes, -s) 8192\ncpu time (seconds, -t) unlimited\nmax …Run Code Online (Sandbox Code Playgroud) 我们在 Etherpad 中非常广泛地使用了 SocketIO(从很早开始),我们非常感谢团队为提供如此有用的东西所做的所有努力:)
Etherpad 是一个 nodejs 项目。
我的 SocketIO 问题可能是由于我配置错误或理解错误,但经过大量测试工具生成、内存设置调整等。我们仍然获得令人沮丧的每秒最大消息数,达到 10k 大关。
在线阅读看起来切换到 ws 的性能会更好,但我看不出在我们的场景中情况如何,我们的瓶颈不是协商(最终是 websockets)而是服务器每秒处理的消息。
我不愿意尝试其他软件包,所以我想我会来这里寻求一些见解或尝试看看我们是否可以通过很多方式提高性能......通常的节点技巧(访问更多硬件[ ram/cpu]) 有点帮助,但仍然感觉我们获得的收益非常小,而不是您在其他模块基准测试中看到的巨大数字。
这个问题的一个理想结果是让某人查看 Etherpad 代码并告诉我为什么我是个白痴,希望我们可以让 Etherpad 进入每秒 10 万次更改的竞争中,但我也可能对其他模块感到迷茫因此,如果有人有与 ws 之类的基准相矛盾的基准,那么我全神贯注。
我觉得我应该补充一点,我们进行了测试,看看是否是内部 Etherpad 逻辑造成的,但实际上不是,最终导致操作转换算法出现瓶颈的是通信层,我们有 99.95% 的把握。 .
在这个问题上扔更多的硬件不是解决方案,也不是任何反向代理/传递问题的方法。
我正在尝试使用服务器发送的事件 (SSE) 作为实时数据推送的 websockets 的替代方案(我的应用程序中的数据主要是单向的)。
这将有多大的可扩展性?我知道每个 SSE 连接都使用一个 HTTP 请求——这是否意味着 Web 服务器可以处理与 HTTP 请求一样多的 SSE 连接(类似于这个答案)?我觉得可能是这种情况,但我不确定 SSE 连接是如何工作的,以及它是否比简单的 HTTP 请求更复杂/更需要资源。
我主要想知道这与浏览器可以保持打开的并发 websockets 数量相比如何。这个答案表明服务器只能同时处理 ~1400-1800 个套接字。
有人可以对此提供一些见解吗?
(澄清一下,我不是在问有多少 SSE 连接可以从客户端保持打开状态;我问的是 Web 服务器可以合理地保持打开多少个连接。)
socket.io ×2
websocket ×2
benchmarking ×1
etherpad ×1
nginx ×1
performance ×1
redis ×1
scaling ×1
webserver ×1
ws ×1