Redis

【高并发】Redis如何助力高并发秒杀系统,看完这篇我彻底懂了!!

白昼怎懂夜的黑 提交于 2020-10-05 18:08:59
写在前面 之前,我们在《 【高并发】高并发秒杀系统架构解密,不是所有的秒杀都是秒杀! 》一文中,详细讲解了高并发秒杀系统的架构设计,其中,我们介绍了可以使用Redis存储秒杀商品的库存数量。很多小伙伴看完后,觉得一头雾水,看完是看完了,那如何实现呢?今天,我们就一起来看看Redis是如何助力高并发秒杀系统的! 秒杀业务 在电商领域,存在着典型的秒杀业务场景,那何谓秒杀场景呢。简单的来说就是一件商品的购买人数远远大于这件商品的库存,而且这件商品在很短的时间内就会被抢购一空。比如每年的618、双11大促,小米新品促销等业务场景,就是典型的秒杀业务场景。 秒杀业务最大的特点就是瞬时并发流量高,在电商系统中,库存数量往往会远远小于并发流量,比如:天猫的秒杀活动,可能库存只有几百、几千件,而瞬间涌入的抢购并发流量可能会达到几十到几百万。 所以,我们可以将秒杀系统的业务特点总结如下。 (1)限时、限量、限价 在规定的时间内进行;秒杀活动中商品的数量有限;商品的价格会远远低于原来的价格,也就是说,在秒杀活动中,商品会以远远低于原来的价格出售。 例如,秒杀活动的时间仅限于某天上午10点到10点半,商品数量只有10万件,售完为止,而且商品的价格非常低,例如:1元购等业务场景。 限时、限量和限价可以单独存在,也可以组合存在。 (2)活动预热 需要提前配置活动;活动还未开始时,用户可以查看活动的相关信息

仅限24小时免费供应!阿里Spring Cloud内部从零开始升级笔记

可紊 提交于 2020-10-05 13:54:16
Spring Cloud作为阿里巴巴内部最新出品的微服务框架,spring cloud 提供一些工具迅速构建一些常用模式的分布式系统(例如 配置管理,服务发现,断路器,路由,微代理,控制总线,token,全局锁,分布式sessions,cluster state),使用Spring Cloud开发人员可以快速站出实现这些模式的服务和应用程序。 笔记从架构设计、应用开发和运维部署三个方面出发,对微服务架构设计的实施进行了全方位的阐述和深入实践,并结合生产实际讲解了Spring Cloud、Docker 和Jenkins等工具的具体使用方法。文中通过一个互联网电商平台实例实现了高并发的微服务架构设计,并通过详细的开发和实施过程,演示了构建一个安全可靠、稳定高效并可持续扩展的系统平台的方法。 下面我们一起来学习一下这份笔记,由于文章的篇幅有限,没办法把全部的内容为大家展示出来,为了不影响大家的阅读体验,免费的获取方式我放在了文末,欢迎自取! 1微服务架构与Spring Cloud 微服务概念的由来 微服务的定义 微服务架构与整体式架构的区别 微服务架构与SOA的比较 为什么要使用微服务架构 为实施微服务架构做好准备 为什么要使用Spring Cloud Spring Cloud组件介绍 Spring Cloud的版本说明 2微服务架构最佳设计 合理划分微服务 微服务治理 Rest

说一下 Dubbo 的工作原理?

戏子无情 提交于 2020-10-05 13:53:37
面试题 说一下的 dubbo 的工作原理?注册中心挂了可以继续通信吗?说说一次 rpc 请求的流程? 面试官心理分析 MQ、ES、Redis、Dubbo,上来先问你一些 思考性的问题 、 原理 ,比如 kafka 高可用架构原理、es 分布式架构原理、redis 线程模型原理、Dubbo 工作原理;之后就是生产环境里可能会碰到的一些问题,因为每种技术引入之后生产环境都可能会碰到一些问题;再来点综合的,就是系统设计,比如让你设计一个 MQ、设计一个搜索引擎、设计一个缓存、设计一个 rpc 框架等等。 那既然开始聊分布式系统了,自然重点先聊聊 dubbo 了,毕竟 dubbo 是目前事实上大部分公司的分布式系统的 rpc 框架标准,基于 dubbo 也可以构建一整套的微服务架构。但是需要自己大量开发。 当然去年开始 spring cloud 非常火,现在大量的公司开始转向 spring cloud 了,spring cloud 人家毕竟是微服务架构的全家桶式的这么一个东西。但是因为很多公司还在用 dubbo,所以 dubbo 肯定会是目前面试的重点,何况人家 dubbo 现在重启开源社区维护了,捐献给了 apache,未来应该也还是有一定市场和地位的。 既然聊 dubbo,那肯定是先从 dubbo 原理开始聊了,你先说说 dubbo 支撑 rpc 分布式调用的架构啥的,然后说说一次

揭密!程序员面试不得不知道的潜规则

给你一囗甜甜゛ 提交于 2020-10-05 10:26:41
作者:姿势帝 https://www.cnblogs.com/newAndHui/p/12451882.html 潜规则1:面试的本质不是考试,而是告诉面试官你会做什么 很多刚入行的小伙伴特别容易犯的一个错误,不清楚面试官到底想问什么,其实整个面试中面试官并没有想难道你的意思,只是想通过提问的方式来知道你会什么 比如: 面试官提问在实际项目中你们是怎么样使用缓存的? 初入行回答:使用redis,key-value存放 但是面试官可能是想知道:一般在业务中缓存什么样的数据,为什么要缓存这些数据,缓存数据如何保证实时性,如果缓存失效会对正常业务流程有什么影响,为什么要选择 redis , redis 的实现原理等等; 围绕着这个话题只要你能在某一方面回答得很深入很透彻,基本上面上的可能性会大大提高; 如果当你听到这个话题时,感觉不知道如何回到,或者说感觉很简单,几句换就说完了,那么基本上你很难面上,因为你的知识储备不够,说不出来关于技术相关的内容。 潜规则2:薪水要求高一点录取概率就大一点 我曾经面试一个刚毕业的大学生,简历上写的精通java,精通 mysql ,精通 spring ,然后我就问他你期望的薪水是多少呢? 他的回答是4K,先不说他简历上写的是真是假,但是有一点很明确,如果你在市场上去肉,别人都是卖30元一斤,而路边有个摆摊的只买10元一斤,那么你们会去买么? 另外

为什么 MongoDB (索引)使用B-树而 Mysql 使用 B+树

故事扮演 提交于 2020-10-05 07:07:21
B-树由来 定义:B-树是一类树,包括B-树、B+树、B*树等,是一棵自平衡的搜索树,它类似普通的平衡二叉树,不同的一点是B-树允许每个节点有更多的子节点。B-树是专门为外部存储器设计的,如磁盘,它对于读取和写入大块数据有良好的性能,所以一般被用在文件系统及数据库中。 先来看看为什么会出现B-树这类数据结构。 传统用来搜索的平衡二叉树有很多,如 AVL 树,红黑树等。这些树在一般情况下查询性能非常好,但当数据非常大的时候它们就无能为力了。原因当数据量非常大时,内存不够用,大部分数据只能存放在磁盘上,只有需要的数据才加载到内存中。一般而言内存访问的时间约为 50 ns,而磁盘在 10 ms 左右。速度相差了近 5 个数量级,磁盘读取时间远远超过了数据在内存中比较的时间。这说明程序大部分时间会阻塞在磁盘 IO 上。那么我们如何提高程序性能?减少磁盘 IO 次数,像 AVL 树,红黑树这类平衡二叉树从设计上无法“迎合”磁盘。 关于磁盘可参考 浅谈计算机中的存储模型(四)磁盘 上图是一颗简单的平衡二叉树,平衡二叉树是通过旋转来保持平衡的,而旋转是对整棵树的操作,若部分加载到内存中则无法完成旋转操作。其次平衡二叉树的高度相对较大为 log n(底数为2),这样逻辑上很近的节点实际可能非常远,无法很好的利用磁盘预读(局部性原理),所以这类平衡二叉树在数据库和文件系统上的选择就被 pass 了。

架构设计 | 异步处理流程,多种实现模式详解

柔情痞子 提交于 2020-10-05 06:13:55
本文源码: GitHub·点这里 || GitEE·点这里 一、异步处理 1、异步概念 异步处理不用阻塞当前线程来等待处理完成,而是允许后续操作,直至其它线程将处理完成,并回调通知此线程。 必须强调一个基础逻辑,异步是一种设计理念,异步操作不等于多线程,MQ中间件,或者消息广播,这些是可以实现异步处理的方式。 同步处理和异步处理相对,需要实时处理并响应,一旦超过时间会结束会话,在该过程中调用方一直在等待响应方处理完成并返回。同步类似电话沟通,需要实时对话,异步则类似短信交流,发送消息之后无需保持等待状态。 2、异步处理优点 虽然异步处理不能实时响应,但是处理复杂业务场景,多数情况都会使用异步处理。 异步可以解耦业务间的流程关联,降低耦合度; 降低接口响应时间,例如用户注册,异步生成相关信息表; 异步可以提高系统性能,提升吞吐量; 流量削峰即把请求先承接下来,然后在异步处理; 异步用在不同服务间,可以隔离服务,避免雪崩; 异步处理的实现方式有很多种,常见多线程,消息中间件,发布订阅的广播模式,其根据逻辑在于先把请求承接下来,放入容器中,在从容器中把请求取出,统一调度处理。 注意 :一定要监控任务是否产生积压过度情况,任务如果积压到雪崩之势的地步,你会感觉每一片雪花都想勇闯天涯。 3、异步处理模式 异步流程处理的实现有好多方式,但是实际开发中常用的就那么几种,例如: 基于接口异步响应

生产环境中的 Redis 是怎么部署的?

南笙酒味 提交于 2020-10-05 06:09:12
面试题 生产环境中的 redis 是怎么部署的? 面试官心理分析 看看你了解不了解你们公司的 redis 生产集群的部署架构,如果你不了解,那么确实你就很失职了,你的 redis 是主从架构?集群架构?用了哪种集群方案?有没有做高可用保证?有没有开启持久化机制确保可以进行数据恢复?线上 redis 给几个 G 的内存?设置了哪些参数?压测后你们 redis 集群承载多少 QPS? 兄弟,这些你必须是门儿清的,否则你确实是没好好思考过。 面试题剖析 redis cluster,10 台机器,5 台机器部署了 redis 主实例,另外 5 台机器部署了 redis 的从实例,每个主实例挂了一个从实例,5 个节点对外提供读写服务,每个节点的读写高峰qps可能可以达到每秒 5 万,5 台机器最多是 25 万读写请求/s。 机器是什么配置?32G 内存+ 8 核 CPU + 1T 磁盘,但是分配给 redis 进程的是10g内存,一般线上生产环境,redis 的内存尽量不要超过 10g,超过 10g 可能会有问题。 5 台机器对外提供读写,一共有 50g 内存。 因为每个主实例都挂了一个从实例,所以是高可用的,任何一个主实例宕机,都会自动故障迁移,redis 从实例会自动变成主实例继续提供读写服务。 你往内存里写的是什么数据?每条数据的大小是多少?商品数据,每条数据是 10kb。100

Laravel 文件缓存也可以快得飞起,tmpfs 了解一下

こ雲淡風輕ζ 提交于 2020-10-05 06:05:46
截至 Laravel 7,共有 6 个可用的缓存驱动程序,其中 APC 是最佳实践,而文件驱动程序是唯一不需要额外设置的驱动程序。 我昨晚与一位朋友交谈,他提到他们使用 Redis 作为缓存驱动程序,这让我想到我还有一个仍然使用文件驱动程序的项目。 我想我可以使用一些内存驱动缓存,以获得更好的性能,但我真的不想在这个时候用 Redis。就在这时,一个解决方案让我眼前一亮,我知道但还没有真正使用过的东西。 tmpfs. $ mount -t tmpfs -o size=12m tmpfs storage/framework/cache    它做了啥 (小朋友你是否有很多?) 图片由 Liam Briese 提供 tmpfs: 允许你将文件作为一个目录存储在 RAM (内存) 中。 在 Linux 服务器上,Laravel 目录中,运行上述操作将把 storage/framework/cache 映射到 RAM,这意味着你可以通过使用 RAM 而不是磁盘 IO 来享受缓存文件的延迟下降。 如果你在你的应用中大量使用缓存的话,使用此方法的代价非常小 你可以确保你的服务器在重新启动时切换到 RAM 存储,方法是将以下命令放入你的服务器的系统配置文件 /etc/fstab tmpfs storage/framework/cache tmpfs nodev,nosuid,noexec

首日1.7亿访问量:穗康小程序口罩预约前后端架构及产品设计

痞子三分冷 提交于 2020-10-05 04:57:21
在战“疫”期间,腾讯与广州市政府合作,在2天内上线了“穗康”小程序口罩预约功能,解决了购买口罩难的问题,上线首日访问量1.7亿,累计参与口罩预约人次1400万+。本文是腾讯云专家产品经理 汤文亮老师在「云加社区沙龙online」分享整理,为大家揭晓其前后端架构及产品设计。 点击视频,查看完整直播回放 一、口罩预约项目背景 穗康是广州市政府提供的一个战役小程序,于1月30号上线,最开始版本只有三个功能:个人健康上报、疫情线索上报以及医疗物资上报,后续我们快速迭代了包括口罩预约、在线问诊、健康码等等功能。 说起口罩预约的诞生背景,其实在春节假期前疫情爆发就已经初现端倪。在大年三十那天,我们团队开了电话会议,决定我们要通过互联网工具的方式帮助政府支持疫情的防控。 而小程序具有开发快,门槛低,用户易上手的特点,是最适合做这种工具的渠道。经过沟通后,广州市政府很快决定要做这样的官方战役小程序,并且在1月30号就上线了第1个版本。 广州市政府在全国首次提出用小程序来做口罩预约,这为我们带来了很大的挑战,除了时间紧迫以外,因为口罩的社会关注度非常高,民众的需求很大,对系统的稳定性要求也会很高。 其次,相对于之前第1版上线的三个功能而言,口罩预约功能的业务逻辑更加复杂。这个项目是由市政府去主导,腾讯负责产品研发,广药集团负责口罩物资的提供、调配、以及线上线下的业务运营。 在政府的指导和推进下

Celery浅谈

 ̄綄美尐妖づ 提交于 2020-10-05 00:38:34
一、Celery 核心模块 1. Brokers brokers 中文意思为中间人,在这里就是指 任务队列本身 ,接收生产者发来的消息即Task,将任务存入队列。任务的消费者是Worker,Brokers 就是生产者和消费者存放/拿取产品的地方(队列)。Celery 扮演生产者和消费者的角色。 常见的 brokers 有 rabbitmq、redis、Zookeeper 等。推荐用Redis或RabbitMQ实现队列服务。 2. Workers 就是 Celery 中的 工作者 ,执行任务的单元,类似与生产/消费模型中的消费者。它实时监控消息队列,如果有任务就从队列中取出任务并执行它。 3. Backend / Result Stores 用于存储任务的执行结果 。队列中的任务运行完后的结果或者状态需要被任务发送者知道,那么就需要一个地方储存这些结果,就是 Result Stores 了。 常见的 backend 有 redis、Memcached 甚至常用的数据库都可以。 4. Tasks 就是 想在队列中进行的任务 ,有异步任务和定时任务。一般由用户、触发器或其他操作将任务入队,然后交由 workers 进行处理。 5. Beat 定时任务调度器 ,根据配置定时将任务发送给Brokers。 二、Celery 基本使用 1.创建一个celery application