《高并发思考实践》
文章平均质量分 82
高并发问题实践
网络hunter
每一个不曾起舞的日子都是对生命的辜负
展开
-
Redis高可用架构—Redis集群(Redis Cluster)详细介绍
其中,--slave表示添加的是slave节点,192.168.31.79:7007是要添加的新节点,192.168.31.77:7000是集群中任意一个节点,--cluster-master-id后面跟的是新的slave节点要添加到哪个master节点下面,此处,我们将新的slave节点添加到192.168.31.79:7006这台master节点下。接下来我们需要使用这些实例来创建集群。● MEET:当需要向集群中加入新节点时,需要集群中的某个节点发送MEET消息到新节点,通知新节点加入集群。原创 2022-09-09 09:05:57 · 3891 阅读 · 0 评论 -
为什么Java线程没有Running状态?
Java虚拟机层面所暴露给我们的状态,与操作系统底层的线程状态是两个不同层面的事。具体而言,这里说的 Java 线程状态均来自于 Thread 类下的 State 这一内部枚举类中所定义的状态: 什么是 RUNNABLE? 直接看它的 Javadoc 中的说明: 一个在 JVM 中执行的线程处于这一状态中。(A thread executingin the Java virtual machine is in this state.) 而传统的进(线)程状态一般划分如下: 注:这里.原创 2022-03-28 11:12:23 · 380 阅读 · 0 评论 -
Spring,SpringMVC,SpringBoot,SpringCloud有什么区别和联系?
Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。Spring使你能够编写更干净、更可管理、并且更易于测试的代码。 Spring MVC是Spring的一个模块,一个web框架。通过Dispatcher Servlet, ModelAndView 和 View Resolver,开发web应用变得很容易。主要针对的是网站应用程序或者服务开发——URL路由、Session、模板引擎、静态Web资源等等。 Spring配置复杂,繁琐,所以推出了Spring boot,约定优于配置,原创 2022-03-28 11:11:03 · 289 阅读 · 0 评论 -
如何保证消息的顺序性?
我举个例子,我们以前做过一个 mysqlbinlog同步的系统,压力还是非常大的,日同步数据要达到上亿,就是说数据从一个 mysql 库原封不动地同步到另一个 mysql 库里面去(mysql -> mysql)。常见的一点在于说比如大数据 team,就需要同步一个 mysql 库过来,对公司的业务系统的数据做各种复杂的操作。 你在 mysql 里增删改一条数据,对应出来了增删改 3 条binlog日志,接着这三条binlog发送到 MQ 里面,再消费出来依次执行,起码得保证人家是按照顺...原创 2022-03-28 11:09:58 · 357 阅读 · 0 评论 -
分库分表之后,id 主键如何处理
其实这是分库分表之后你必然要面对的一个问题,就是 id 咋生成?因为要是分成多个表之后,每个表都是从 1 开始累加,那肯定不对啊,需要一个全局唯一的 id 来支持。所以这都是你实际生产环境中必须考虑的问题。 基于数据库的实现方案 数据库自增 id 这个就是说你的系统里每次得到一个 id,都是往一个库的一个表里插入一条没什么业务含义的数据,然后获取一个数据库自增的一个 id。拿到这个 id 之后再往对应的分库分表里去写入。 这个方案的好处就是方便简单,谁都会用;缺点就是单库生成自增 id,要是高并发的原创 2022-03-28 11:08:19 · 363 阅读 · 0 评论 -
详谈hashCode() 和 equals() 之间的关系
介绍 equals()的作用是用来判断两个对象是否相等。 hashCode()的作用是获取哈希码,也称为散列码;它实际上是返回一个int整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。 关系 我们以“类的用途”来将“hashCode() 和 equals()的关系”分2种情况来说明。 1、不会创建“类对应的散列表” 这里所说的“不会创建类对应的散列表”是说:我们不会在HashSet, Hashtable, HashMap等等这些本质是散列表的数据结构中,用到该类。例如,不会创建该...原创 2022-03-28 11:05:28 · 540 阅读 · 0 评论 -
Redis缓存雪崩,如何解决?
1. 什么是缓存雪崩?怎么解决? 通常,我们会使用缓存用于缓冲对 DB 的冲击,如果缓存宕机,所有请求将直接打在 DB,造成 DB 宕机——从而导致整个系统宕机。 如何解决呢? 2 种策略(同时使用): 对缓存做高可用,防止缓存宕机 使用断路器,如果缓存宕机,为了防止系统全部宕机,限制部分流量进入 DB,保证部分可用,其余的请求返回断路器的默认值。 2. 什么是缓存穿透?怎么解决? 解释 1:缓存查询一个没有的 key,同时数据库也没有,如果黑客大量的使用这种方式,那么就原创 2022-03-28 11:02:42 · 1744 阅读 · 0 评论 -
高并发系统之降级特技
在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流。之前已经有一些文章介绍过缓存和限流了。本文将详细聊聊降级。当访问量剧增、服务出现问题(如响应时间慢或不响应)或非核心服务影响到核心流程的性能时,仍然需要保证服务还是可用的,即使是有损服务。系统可以根据一些关键数据进行自动降级,也可以配置开关实现人工降级。本文将介绍一些笔者在实际工作中遇到的或见到过的一些降级方案供大家参考。 降级的最终目的是保证核心服务可用,即使是有损的。而且有些服务是无法降级的(如加入购物车、结算)。 降级预案 在进行降级之前要对原创 2021-03-04 10:08:52 · 255 阅读 · 1 评论 -
高并发之隔离术
隔离是指将系统或资源分割开,系统隔离是为了在系统发生故障时能限定传播范围和影响范围,即发生故障后不会出现滚雪球效应,从而保证只有出问题的服务不可用,其他服务还是可用的;而资源隔离有脏数据隔离、通过隔离后减少资源竞争提升性能等。我遇到的比较多的隔离手段有线程隔离、进程隔离、集群隔离、机房隔离、读写隔离、动静隔离、爬虫隔离等。而出现系统问题时可以考虑负载均衡路由、自动/手动切换分组或者降级等手段来提升可用性。 线程隔离 线程隔离主要有线程池隔离,在实际使用时我们会把请求分类,然后交给不同的线程池处理,当一种业务原创 2021-03-04 10:10:07 · 269 阅读 · 1 评论 -
高并发系统之HTTP缓存
简介 最近遇到很多人来咨询我关于浏览器缓存的一些问题,而这些问题都是类似的,因此总结本文来解答以后遇到类似问题的朋友。 因本文主要以浏览器缓存场景介绍,所以非浏览器场景下的一些用法本文不会介绍,而且本文以chrome为测试浏览器。 浏览器缓存是指当我们使用浏览器访问一些网站页面或者http服务时,根据服务端返回的缓存设置响应头将响应内容缓存到浏览器,下次可以直接使用缓存内容或者仅需要去服务端验证内容是否过期即可。这样的好处可以减少浏览器和服务端之间来回传输的数据量,节省带宽提升性能。 首先看个例子;当我们第原创 2021-03-04 09:55:42 · 436 阅读 · 1 评论 -
构建亿级前端读服务
经历了各种亿级到百亿级的读服务;这段时间也进行了一些新的读服务架构尝试,从架构到代码的编写,各个环节都进行了反复尝试,压测并进行调优,希望得到一个自己满意的读服务架构。 一些设计原则 无状态 数据闭环 缓存银弹 并发化 降级开关 限流 切流量 其他 无状态 如果设计的应用是无状态的,那么应用就可以水平扩展,当然实际生产环境可能是这样子的: 应用无状态,配置文件有状态。比如不同的机房需要读取不同的数据源,此时就需要通过配置文件指定。 数据闭环 如果依赖的数据来源特别多,此时就可以考虑使用数据闭环,基本步骤:原创 2021-03-04 10:12:04 · 198 阅读 · 1 评论