互联网应用特点三高:高并发、高可用、高性能,要达到这几个目标,好的方法方式是建立相应指标,

来进行准确描述,有了准确指标进行监控,方能易于实现我们设定目标。

先将指标介绍下,方便下面相关术语使用,qps即每秒处理请求数,是一个机器性能重要描述指标,通

过它我们知道单个容器能处理最大请求数。目前JD所有线上服务均在Docker容器中运行。

tp99、tp999性能监控指标,TP=Top Percentile,Top百分数,是一个统计学里的术语,与平均数、中

位数都是一类。TP50、TP90和TP99等指标常用于系统性能监控场景,指高于50%、90%、99%等百分线

的情况。

可用率(Availability)指一个网络或设备在一个给定的时间间隔内可操作的总时间与时间间隔的比。例如,

99.99%, 指一个网络或网站系统(或其它设备)一个给定的时期内处于可操作状态的时间总量,可用性用比率

来衡量。

有了指标要达到高并发、高可用、高性能,需要我们增加服务处理请求能力,即提升qps,降低每个请求

处理时间,我们线上服务处理tp99、999一般要求在50ms以下,线上服务依赖于存储处理能力。

互联网服务处理高并发最早是提升数据库db tps,来达到处理高并发、保证服务高可用、高性能核心。核

心是提升文件系统IO,将数据库缓存、磁盘IO用到极致,提升db tps达到提升线上服务qps目的,在硬盘介质限

定下提升tps是极难的。

后来雅虎通过缓存、分布式内存缓存方式将存储tps提升了多个数量级。存储不在成为应用处理请求瓶颈,

带来互联网应用快速发展,提供了基础保证。早期时使用memcache,目前互联网公司使用更多的是redis。

redis是一种极其高效分布式内存缓存系统,由c语言开发,支持String、Hash、Map等多种数据结构,极

高qps读写处理能力,支持磁盘持久化,并且极其稳定,不会出现集群当机情况,因其上边这些出色表现,是目

前互联网公司首选存储引擎。

JD目前基本基于redis研发自己解决方案,目前除了核心交易流程,据我了解大部分业务数据甚至只存储在

redis中。

redis性能,平时查询用的多的,get处理在1ms甚至以下,mGet处理一般在5-10ms之间,性能表现极其优秀。

redis虽然有很出色表现,但也有很多使用方法上需要注意的地方,线上微服务突然性能差,半夜2点被人找

服务性能差时候,一定要有快速定位问题能力,能力主要来自于平时多思考、以及以前处理问题经验记录。

微服务突然性能差,有多个可能原因。分类的话大概三类一是硬件问题:微服务节点性能差导致服务性能差,

下掉服务节点,解决问题。

二是服务本身问题:服务本身有逻辑bug,有部分用户触发到逻辑bug导致又死循环,或多线程用hashmap

使用不对,例如:记一次双11大促压测线上服务cpu100%

三线上服务和redis相关问题导致性能差:redis遇到过单节点tcp包重传过多,导致单点差,最终导致集群性

能差;再有redis单个节点容器坏了导致性能差,下掉单点问题解决;redis写有大value数据并且在持续更新,遇到

空pin写redis导致节点性能差,因为空pin即为登陆用户很多,最终集群性能差,停止空pin写问题解决;再有就是

读热点,但个key被全网独取,这种数据解决方式是起定时线程拉取,而不要通过用户触发,避免这些问题redis用

起来得心应手。

总结一下:为了实现应用三高受限于硬件IO很难提升tps以及qps,换个思路通过分布式缓存一下将应用性能

提升多个数量级,思路升级一下解决很多问题,我们解决其他问题也可换个角度看问题,再有就是当下互联网公司

比如JD已经拿缓存当db用,电商都可以用,大家大部分业务都可以放心使用,但要注意集群维护,也了解到redis

官方开源分布式集群方案在线上服务用没有任何问题,有团队在这么用。

分享一下redis应用场景,希望大家能方便实现线上高并发、高可用、高性能目标。

扫码关注公众号

京东分布式缓存redis应用实战的更多相关文章

  1. .NET分布式缓存Redis从入门到实战

    一.课程介绍 今天阿笨给大家带来一堂NOSQL的课程,本期的主角是Redis.希望大家学完本次分享课程后对redis有一个基本的了解和认识,并且熟悉和掌握 Redis在.NET中的使用. 本次分享课程 ...

  2. 小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_37、分布式缓存Redis介绍

    笔记 1.分布式缓存Redis介绍      简介:讲解为什么要用缓存和介绍什么是Redis,新手练习工具          1.redis官网 https://redis.io/download   ...

  3. ASP.Net Core使用分布式缓存Redis从入门到实战演练

    一.课程介绍 人生苦短,我用.NET Core!缓存在很多情况下需要用到,合理利用缓存可以一方面可以提高程序的响应速度,同时可以减少对特定资源访问的压力.  所以经常要用到且不会频繁改变且被用户共享的 ...

  4. 一个技术汪的开源梦 —— 公共组件缓存之分布式缓存 Redis 实现篇

    Redis 安装 & 配置 本测试环境将在 CentOS 7 x64 上安装最新版本的 Redis. 1. 运行以下命令安装 Redis $ wget http://download.redi ...

  5. 企业项目开发--分布式缓存Redis

    第九章 企业项目开发--分布式缓存Redis(1) 注意:本章代码将会建立在上一章的代码基础上,上一章链接<第八章 企业项目开发--分布式缓存memcached> 1.为什么用Redis ...

  6. 第十章 企业项目开发--分布式缓存Redis(2)

    注意:本章代码是在上一章的基础上进行添加修改,上一章链接<第九章 企业项目开发--分布式缓存Redis(1)> 上一章说了ShardedJedisPool的创建过程,以及redis五种数据 ...

  7. 三点须知:当我们在开发过程中需要用到分布式缓存Redis的时候

    当我们在开发过程中需要用到分布式缓存Redis的时候,我们首先要明白缓存在系统中用来做什么? 1. 少量数据存储,高速读写访问.通过数据全部in-momery 的方式来保证高速访问,同时提供数据落地的 ...

  8. 分布式缓存Redis应用场景解析

    Redis的应用场景非常广泛.虽然Redis是一个key-value的内存数据库,但在实际场景中,Redis经常被作为缓存来使用,如面对数据高并发的读写.海量数据的读写等. 举个例子,A网站首页一天有 ...

  9. 【开源项目系列】如何基于 Spring Cache 实现多级缓存(同时整合本地缓存 Ehcache 和分布式缓存 Redis)

    一.缓存 当系统的并发量上来了,如果我们频繁地去访问数据库,那么会使数据库的压力不断增大,在高峰时甚至可以出现数据库崩溃的现象.所以一般我们会使用缓存来解决这个数据库并发访问问题,用户访问进来,会先从 ...

随机推荐

  1. mysql5.7在windows不能启动的方法及查看数据库大小命令

    1.将mysql目录下的my-default.ini改为my.ini 2.cmd进入mysql的bin目录下 3.执行mysqld --initialize进行初始化(如果mysql目录下已经存在da ...

  2. [译]ASP.NET Core 2.0 机密配置项

    问题 如何在ASP.NET Core 2.0中保存机密配置项(不用将其暴露给源代码管理器)? 答案 创建一个ASP.NET Core 2.0空项目,在项目节点上点击右键,并点击菜单项 - 管理用户机密 ...

  3. 25.Linux-Nor Flash驱动(详解)

    1.nor硬件介绍: 从原理图中我们能看到NOR FLASH有地址线,有数据线,它和我们的SDRAM接口相似,能直接读取数据,但是不能像SDRAM直接写入数据,需要有命令才行 1.1其中我们2440的 ...

  4. wsimport 命令不是内部命令

    问题: 1. webservice在输入命令的时候wsimport的时候会出现如下错误: wsimport不是内部或者外部命令. 2. javac不是内部或者外部命令 3 java 就可以显示配置成功 ...

  5. IT连创业系列:说说苹果商店AppStore上架App应用前后遇到的那些神坑

    前言: IT连创业的这个系列,又隔空了一个多月了. 不知道为什么,最近写文的冲动感下降了很多,如果不是因为特别忙,大概就因为上了年纪的原因了. 群里关注我创业的朋友,一直都在问,啥时候有新的文章讲述创 ...

  6. GCC(警告.优化以及调试选项)

    GCC(警告.优化以及调试选项) [介绍] gcc and g++分别是gnu的c & c++编译器   gcc/g++在执行编译工作的时候,总共需要4步   1.预处理,生成.i的文件 预处 ...

  7. VS2012 C#生成DLL并调用

    1.创建一个C#工程生成DLL 新建->项目->Visual C#->类库->MyMethods 项目建好后,为了理解,将项目中的Class1.cs 文件 重命名为 MySwa ...

  8. redis源码分析之发布订阅(pub/sub)

    redis算是缓存界的老大哥了,最近做的事情对redis依赖较多,使用了里面的发布订阅功能,事务功能以及SortedSet等数据结构,后面准备好好学习总结一下redis的一些知识点. 原文地址:htt ...

  9. visual studio 2013使用github获取代码

    如图点击"视图""团队资源管理器".   点击主页上方的那个插头形状按钮"连接到团队项目".点击"克隆"   然后在克隆 ...

  10. AngularJS学习篇(二十一)

    AngularJS 动画 AngularJS 提供了动画效果,可以配合 CSS 使用. AngularJS 使用动画需要引入 angular-animate.min.js 库. <!doctyp ...