- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
作为我上一个问题的后续,How does Redis achieve the high throughput and performance?
我有以下问题
我亲眼目睹了 Redis 的运行,并对它的能力印象深刻和敬畏。想更多地了解这种魔法。我已经看到,当 Redis 框和查询框更接近时,即使在高 QPS (1kps) 下,响应时间也是 5ms。当它们在地理上更远时(相同的数据中心与不同的数据中心),响应时间可达 50 毫秒。这只是网络延迟还是 Redis 必须保持一些开销,直到整个数据被刷新。
连接数会影响Redis吞吐量吗?想象一下,Redis 能够在 500 微秒内对每个请求做出响应。想象一下,在一个给定的实例中有 1000 个不同的请求,来自 1000 个不同的客户端连接。最后一个请求是否需要 500muSec * 1000 = 500ms?
响应大小可以在这里产生影响吗?想象一下每个响应的大小为 100 KB 的数量级,Redis 上的 TCP 连接必须等到最后一个数据包交付,如果网络连接很慢,它会减慢 Redis 的速度吗?
最佳答案
以下是我的回答:
想更多地了解这种魔法。
Redis 很棒,但没有魔法。它只是对非常务实的概念的巧妙而有效的实现。而且因为它是一个人性化的项目,通过查看源代码,实际上很容易理解为什么。
这只是网络延迟还是 Redis 必须保持一些开销,直到整个数据被刷新。
当然,Redis 必须维护通信缓冲区,以便处理较慢的网络链接。也就是说,这对感知延迟的影响应该很小。在您的情况下,50 毫秒可能主要是由于网络延迟,您可以通过运行 ping 命令或任何其他类似工具来检查。
连接数会影响Redis吞吐量吗?
当然,它可以,就像任何服务器软件一样。现在,您需要区分每个连接的吞吐量和服务器的全局吞吐量。
每个连接的吞吐量受到连接数量的严重影响。考虑到服务器只能提供一定的带宽,而这个带宽是跨连接共享的。连接越多,每个连接的带宽越少。
另一方面,服务器的全局吞吐量仅受连接数的轻微影响。 Redis 可以毫无问题地接受数以万计的连接。但是仍然有开销。根据经验,请考虑在 30000 个连接时,Redis 仅支持其在 100 个连接时所能支持的吞吐量的一半。查看 Redis benchmark page 上提供的精美图表.
最后一个请求是否需要 500muSec * 1000 = 500ms?
是的,但你的数字可能是错误的。
是的,所有事件都是序列化的(单线程设计),因此必须添加每个命令的处理时间。当同时收到多个命令时,最后一个将在所有其他命令之后执行。如果每个命令需要 5 us 来处理,同时收到 1000 个,那么最后一个回复将在 5 ms 内发送。
现在,在实践中,真正并发查询的数量并没有那么高。 Redis 在同一个事件循环迭代中很少会同时收到 1000 个查询。
此外,您混淆了响应时间(在客户端测量)和处理时间(在 Redis 端测量)。响应时间可以是500us,但处理时间更接近5us,区别在于网络和OS进程调度所花费的时间。请记住,只需累积处理时间,其他所有内容都通过连接并行化(例如网络延迟)。
要计算实例的平均处理时间,只需使用 redis-benchmark 使实例饱和。使用流水线时,经常会看到实例处理速度高达 400 Kop/s 或更高,平均处理时间为 2.5 us。
响应大小可以在这里产生影响吗?
当然,它可以,就像任何服务器软件一样。超过一定规模后,延迟总是受数据量的影响,因为带宽和网络速度都是有限的。对于以太网网络,此阈值与 MTU 的大小密切相关。
Redis 上的 TCP 连接必须等到最后一个数据包被传递,如果网络连接很慢,它会减慢 Redis 的速度吗?
绝对不。由于事件循环,Redis 系统地缓冲回复(无论它们的大小),并以非阻塞方式管理所有套接字。如果一个连接很慢(或一个客户端很慢),Redis 会尽可能多地填充相应的套接字缓冲区,在事件循环中注册套接字,然后移动到另一个连接。当套接字缓冲区中再次有空间时,事件循环将继续在慢速连接上发送流量。没有什么会阻塞。
关于Redis - QPS、响应时间、连接数、响应大小和网络连接速度之间的相关性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28241728/
我有一些关于 Volley 的问题 如何获得与 volley 库的连接响应时间? 有解决方案吗? 我可以使用计时器来获取响应时间吗?如何使用? 还有在 volley 连接前执行的方法吗? 我的代码是这
我管理一个使用 symfony2 创建的网站,我需要“稳定”它的响应时间。 响应时间从 100 毫秒(下限) float 到 1200 毫秒,并且随机改进(我已经排除了访问依赖性)。 配置如下: Ce
我正在使用门牌号数据查询简单的 Elasticsearch 索引。 ".house-numbers": { "mappings": { "house-number": {
本文分享自华为云社区《【高并发】性能优化有哪些衡量指标?需要注意什么?》,作者:冰河 。 最近,很多小伙伴都在说,我没做过性能优化的工作,在公司只是做些CRUD的工作,接触不到性能优化相关的工作。现在
目前,我正在尝试开发用于即时消息传递的 Android 应用程序。我想在 Ubuntu 服务器上为此使用 ejabberd。只有一个问题。当我首先尝试使用此 xml 行连接到我的 ejabberd 时
好吧,我做了这个很长的查询。它工作完美,但需要 15-30 秒才能给我结果...我不是 SQL 专家,所以我想问是否有办法提高 MySQL 响应时间...也许需要超过1 个查询或类似的内容。 PS:它
我有一个标准用例,用于监控到达我的 Tomcat 服务器的请求的响应时间。我已启用访问日志并将响应时间 (%D) 添加到模式。 现在我想监控我的服务器的响应时间。例如: 过去一小时的平均响应时间是多少
我希望减少 Web 服务器针对给定查询从 API 服务器请求/接收数据的完整时间。 假设 MySQL 是瓶颈,我将 API 服务器数据库更新到 Cassandra,但完成时间仍然相同。可能是其他东西是
我是一个 java 初学者,我正在尝试编写一个机器人来填写一个对我来说非常烦人的表格。 为什么这种形式令人烦恼?想象一下,我必须在该表单中插入一千个不同的值,但它一次只允许我插入一个值。每次插入每个值
有 C++ 桌面应用程序,我需要测量 UI 滞后,因为用户说它有时会滞后。我该如何实现?尝试在操作后将 pywinauto 与计时器启动-停止一起使用,但它单击元素的速度非常慢。另一方面,尝试使用 S
我正在构建一个服务器监控系统,我想向 Web API 发送请求,并在 JSON 对象中获取服务器的健康状况、数据库连接是否正常、响应时间等。 如何实现响应时间,即 Web API 需要多长时间来响应请
我正在尝试加快测试 jetty (将其与使用 apache 进行比较)以提供动态内容。 我正在使用三个客户端线程对此进行测试,一旦响应返回就会再次请求。它们在本地盒子(OSX 10.5.8 mac b
我正在构建一个带有 API 的 PHP 应用程序,该应用程序能够非常快速地(在 100 毫秒内)响应所有请求,并且必须能够每秒处理多达 200 个查询(请求以 JSON 格式,响应需要数据库查找+每次
在 AWS 实例上抛出 Node.JS 并测试请求时间,得到了一些有趣的结果。 我在服务器上使用了以下内容: var http = require('http'); http.createServer
我有一个 API,它登录一个帐户,然后对我想通过 CFHTTP 请求出价的项目执行搜索,如下所示。 搜索.cfm: 登录.cfm:
这些响应时间是来自 JMeter TTFB 还是 TTLB? 最佳答案 响应时间是“到最后一个字节的时间” http://jmeter.512774.n5.nabble.com/JMeter-resu
我知道 LoadRunner 用于系统响应,但我想知道它是否也可以测量,例如渲染时间(大型列表中的数千个项目等)。我想这可以通过验证特定对象出现在 UI 中来完成,但我认为 LoadRunner 不运
我正在制作一个元素(网站),我需要一些建议。我的计划是将 NodeJS 与 express webframework 一起使用。我想让这个网站真正用户友好和友好,就像每个人都希望他们的网站一样。问题是
抱歉我的英语不好,但我尽力了:)我有一些问题,希望我能在这里找到答案。我想在 html/css/js 中创建一个离线聊天机器人并使用 Intel XDK 程序。 我不知道,如何给聊天机器人一个特殊的命
我正在使用 java 脚本/Jquery 从我的客户端代码使用 Microsoft Face api。这是代码。我使用相机捕获图像,然后将该图像转换为 blob 并将其发送到 api。我正在得到结果。
我是一名优秀的程序员,十分优秀!