redisb并发访问慢出现的问题

最近项目一上线,就问题颇多,本地测试,ok,上线后,大用户量的时候,顶不住。用了一个礼拜的时间发现的问题,总结下来。

项目是netty4.0,reids2.8,nginx等框架。目前是4台proxy服务器,一台核心服务器,reids只部署在核心服务器上,各代理服务器共享redis数据。

当大量用户访问自己距离较近的proxy服务器时,proxy同时请求核心服务器,并发量到1w时,经常请求卡死,网页请求不回来,开始从netty的http处理并发下手,各种netty的官网,netty的优化,和配置,都修改了,还是没有起作用,后来屏蔽redis后,发现netty处理20w并发一点问题没有,问题确定在redis上。

然后,着手redis的优化,redis的池的优化,配置,没有作用,后台发现,本地访问redis并发1w,很快,但是,访问其他服务器的redis特别卡,发现原因,就在于,跨服务器访问redis,可能由于网络,跨服务器,导致的并发请求redis,回不来的问题,那么,最后,舍弃了proxy服务器远程调用核心服务器reids的方案,nginx改为所有心跳请求,跨过proxy服务器,直接走核心服务器,这样相当于本地访问redis,最后担心核心服务器并发能力,暂时,开启了2个服务,处理所有并发,reids问题得到解决。

总结:就是reids本身性能没有问题,处理并发能力ok,就是跨服务器远程访问其他服务器reids时,并发大了,网络延迟等,会出现取reids卡死。

 

更高效地提高redis client多线程操作的并发吞吐设计

Redis   2015-05-10 09:51:44 发布
您的评价:
     
0.0 
收藏     0收藏

        Redis是一个非常高效的基于内存的NOSQL数据库,它提供非常高效的数据读写效能.在实际应用中往往是带宽和CLIENT库读写损耗过高导致无法更好地发挥出Redis更出色的能力.下面结合一些redis本身的特性和一些client操作上的改变来提高整个redis操作的效能.

更高效地提高redis client多线程操作的并发吞吐设计

        上图是反映平常操作redis的情况,每个线程都独立的发起相应连接对redis的网络读写.虽然我们可以通过批操作的方式来把当前多个操作合并成一个,但这种方式只能针对当单线程,而多线程相互合并则设计上很少关注.从redis的协议来说其实并没有限制,只是在client库的设计一般没有考虑进去.

        如果在多线程操作REDIS的同时如果能够合并网络操作,那意味着可以减少操作网络读写的情况把处理能力提升到最大化.这样Client总体的性能都会有所提升,而REDIS也因表层的网络读取减少而达到更好的利用率.

更高效地提高redis client多线程操作的并发吞吐设计

        以上是设计图,原理并不复杂,其实就是把每个请求的操作放到一个队列中,后面开启一个线程来把前面的指令进行一个合并操操作.一个线程在高并发下可以无法更快速地合并起来,可以根据需要进行合理的操作线程应用.

        这种设计的效果是否真的比较理想呢,以下是一个简单的测试

public void AnycSet(){CodeTimer.Time("beetle.redis asynset", () =>{Parallel.For(0, Count, x =>{ProtobufKey key = x.ToString();key.AsynSet(new User() { UserId = x, NickName = "sdffffffffffffffffffffffffffffffffffffffffsdffffffffffffffffffffffffffffffffffffffffbeetlesdffffffffffffffffffffffffffffffffffffffffsdffffffffffffffffffffffffffffffffffffffff" + x });});});}public void Set(){CodeTimer.Time("beetle.redis set", () =>{Parallel.For(0, Count, x =>{ProtobufKey key = x.ToString();key.Set(new User() { UserId = x, NickName = "sdffffffffffffffffffffffffffffffffffffffffsdffffffffffffffffffffffffffffffffffffffffbeetlesdffffffffffffffffffffffffffffffffffffffffsdffffffffffffffffffffffffffffffffffffffff" + x });});});}

        测试结果如下

        更高效地提高redis client多线程操作的并发吞吐设计

        以上是10W次的操作测试结果,由于redis在本机所以交互非常可观.

        虽然在多线程高并发下这样的设计可以把吞吐能力和效能有一个非常不错的效果,但其也存在缺陷因为每次操作都经过不同线程的调处理,如果并发线程不多操作密集度不高.那效果并不理想;因为网络操作密集度不高,可得到并合的数量不多,这方面的损耗有可能低于操作跨线程调度所带来的损耗.

转载于:https://www.cnblogs.com/panxuejun/p/6042591.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/489653.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python idle运行anaconda_在Python IDLE 下调用anaconda中的库教程

大家都知道,Anaconda是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项。下载了anaconda我们可以很方便的随时调用这里面的库。原先我自己在Python官网下载了python 3.7开发环境,anaconda的后面下载的,…

php知识点_PHP那些琐碎的知识点(整理)

PHP不会检查单引号 字符串中变量内插或(几乎)任何转义序列,所以采用单引号这种方式来定义字符串相当简单快捷。但是,双引号 "" 则不然,php会检查字符串中的变量或者转义序列,并输出变量和转义序列的值。$a "123&…

有关军事混合智能的思考

来源:中国指挥与控制学会0引言随着深度学习、强化学习等新一代人工智能技术的发展,其在计算机视觉、语音识别、自然语言处理、生物医疗领域及游戏博弈等方面取得很大的突破,人工智能在军事领域应用也愈加广泛,催生了军事智能的概念…

nginx动静分离配置_Nginx 动静分离与负载均衡的实现

一、前提企业中,随着用户的增长,数据量也几乎成几何增长,数据越来越大,随之也就出现了各种应用的瓶颈问题。问题出现了,我们就得想办法解决,一般网站环境,均会使用LAMP或者LNMP,而我…

scala shuffle

val arr (0 to 100).map(_ * 1d) /// 下面这一步只能用to不能用until,scala里面实现返回的两个Range继承路径不同,不能混用 val a_shuffled util.Random.shuffle(0 to arr.size -1).map(arr(_)) 转载于:https://www.cnblogs.com/suanec/p/6043286.html…

计算机、数学、运筹学等领域的32个重要算法

来源: 必达智库奥地利符号计算研究所(Research Institute for Symbolic Computation,简称RISC)的Christoph Koutschan博士在自己的页面上发布了一篇文章,提到他做了一个调查,参与者大多数是计算机科学家&am…

Fibonacci(求前四位数)

FibonacciTime Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64uDescription2007年到来了。经过2006年一年的修炼,数学神童zouyu终于把0到100000000的Fibonacci数列 (f[0]0,f[1]1;f[i] f[i-1]f[i-2](i>2))的值全部给背了下来。 接…

fiddler如何设置过滤https_手把手教你如何给网站设置https

我也是小白一枚,最近开了一个博客站点,个人博客除了微信分享功能不能开通外,其他的功能我都要试着做一下,磨练磨练自己。跟一些大佬分享有所不同,我这篇文章是以一个小白的角度来写,这样有一个优势&#xf…

php 解释语言,php是解释型语言吗

PHP是属于解释型语言,还是编译型语言?下面先来看一下计算机语言的发展史:第一代:机器语言,全部都是01010二进制代码,计算机能够直接的识别,运行效率是最高的,但是难编,难…

清华大学施路平:发展人工通用智能最好的时机到了!

来源:学术头条 今年8月,一辆来自清华的无人驾驶自行车登上了Nature的封面。这是中国的人工智能芯片首次登上Nature,在全球引发热议。这辆自行车不仅可以平衡自身,还可以绕过障碍物,甚至可以响应简单的声音命令。自行车…

Debian10降级安装php,如何在Debian 10 Linux上安装PHP

PHP是最常用的服务器端编程语言之一。在本指南中,我们将讨论如何在Debian 10 Buster上安装PHP。我们还将向您展示如何将PHP与Nginx和Apache集成。Debian 10随附PHP 7.3版,最流行的CMS和框架(如WordPress,Magento和Laravel)均支持该版本。先决…

设置线程堆栈大小_哇擦,传说中的堆栈溢出和快速排序

stack overflow堆栈溢出和快速排序这两个概念对开发人员来说并不陌生,但是通知都只是听说过,真正开发过程中却很少会遇到。我也是敲代码好些行后非常有幸撞上了,而且还是两个一起出现的,这其中过程的滋味还是相当酸爽,…

模板引擎的简单原理template

​var templateStr "我的名字叫<%name%>我是一只小狗,今年<%age%>岁。";var data {name:旺财,age:18};/*会利用正则来匹配*///console.log(/<%\s*([^%>]\S)\s*%>/.exec(templateStr));var match /<%\s*([^%>]\S)\s*%>/.exec(templa…

八张图看懂上海人工智能产业发展现状

来源&#xff1a;中商产业研究院据《行动方案》提出&#xff1a;集聚优势创新资源&#xff0c;聚焦开展专项行动&#xff0c;到2021年&#xff0c;全力打响上海人工智能“一流创新生态”标志性品牌。此外&#xff0c;《行动方案》中还提出多项任务&#xff0c;大力推进上海市人…

- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender

目的是为了点击应用程序左上角的关闭按钮&#xff0c;应用程序消失。转载于:https://www.cnblogs.com/ITliufei/p/6045992.html

车牌号随机函数 php,模拟生成车牌号的程序.程序运行.生成十个随机的车牌子.......

package demo;import java.util.ArrayList;import java.util.Random;//举例: 京C.85100 / 津K.45H88//* 要求:1.车牌子为京字或津字开头,后面字母为 C E F H J K中随机.//* 2.号码为五位.数字和大写字母随机.(数字为0-9, 字母为A-G)//* 3.定义生成号码的方法…

软件版本号命名规范_软件发布版本介绍

一、 软件版本阶段介绍Alpha版: 此版本表示该软件在此阶段主要是以实现软件功能为主&#xff0c;通常只在软件开发者内部交流&#xff0c;一般而言&#xff0c;该版本软件的Bug较多&#xff0c;需要继续修改。Beta版: 该版本相对于α版已有了很大的改进&#xff0c;消除了严重的…

“情感计算”的蓬勃发展依赖于收集大量的行为和情感数据

Illustration: iStock/IEEE Spectrum来源&#xff1a; IEEE电气电子工程师学会这是一篇guest post。这里表达的观点只是作者的观点&#xff0c;并不代表IEEE Spectrum或IEEE的立场。技术在生理和心理上变得更加亲密&#xff0c;这就产生了对新技术的需求&#xff0c;这些新技术…

Java控制修改手机系统设置,安卓修改大师配置Java运行环境教程 教你快速使用

安卓修改大师是一款专业免费对任何APK安装包进行反编译的软件&#xff0c;但是运行软件之前首先需要配置电脑上的Java运行环境&#xff0c;否则无法运行。下面来说一下如何配置Java环境。类别&#xff1a;编程工具 大小&#xff1a;4.39M 语言&#xff1a;简体中文评分&am…

extJs项目实战

extjs是因为在公司用到一次,也是公司唯一一个extjs的项目,当时拿到这个需求的时候,我有点懵逼,这他妈的什么鬼,参加工作两年不到的纯小白,没办法,这是工作,必须要完成的.硬着头皮做吧,好在最后弄完了,整理一下文档,方便以后学习. /***服务说明模板store*/Ext.define(ProductApp…