自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(88)
  • 资源 (2)

原创 Redis Cluster入门

Redis Cluster集群我们要使用集群redis 并发量 10万 / 每秒 ,但是有些业务需要 100万的 QPS数据量,我们普通机器 16~256g,而我们的业务需要500g解决方案分布式 :加机器,方便以后需求扩容Redis ClusterRedis Cluster是Redis的分布式解决方案,在3.0版本正式推出,有效地解决了Redis分布式方面的需求。当遇到单机内存、并发、流量等瓶颈时,可以采用Cluster架构方案达到负载均衡的目的。​ 在Redis Clus

2020-10-20 13:52:36 33 1

原创 设计模式 -- 策略模式+Spring Bean代替if/else

设计模式 – 策略模式+Spring Bean代替if/else策略模式一、什么是策略模式策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。二、策略模式的结构策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是:“准备一组算法,并将每一个算

2020-10-18 19:42:30 75 3

原创 Redis哨兵(Sentinel)模式

Redis哨兵(Sentinel)模式一、主从复制高可用当我们使用主从复制出现的问题手动故障转移写能力和存储能力受限主从复制 -master 宕机故障处理主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式。~哨兵模式概述哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令

2020-10-18 12:20:53 12

原创 Redis主从复制与优化

Redis主从复制原理与优化主从复制我们关注主从复制之前,首先要考虑单机有什么问题?机器故障容量瓶颈QPS瓶颈这些都是单节点所遇到的问题,所以这个时候出现了主从复制(一主一从,一主多从)使用主从复制可以:数据副本扩展读性能注意:一个master可以有多个slave一个slave只有一个master数据流向是单向的,master到slave主从复制的配置两种实现方式slaveof命令两台机器:主节点:47.11.11.11 从节点 47.22.22.22

2020-10-13 23:16:14 18

原创 Redis常见问题及优化

Redis 常见问题及优化1. fork操作fork操作耗时的问题:fork是个同步操作,虽然fork同步操作是非常快的,但是如果需要同步的数据量过大,fork就会阻塞redis主进程。与内存息息相关 :内存越大,耗时越长(与机器类型相关)查询持久化执行时间: late_fork_usec改善fork有限使用物理机或者高效支持fork 操作的虚拟化技术控制Redis实例最大可用内存 : maxmenory合理配置Linux内存分配策略:vm.overcommit_m

2020-10-09 21:26:37 27 1

原创 Redis持久化

Redis的持久化取舍和选择持久化的作用什么是持久化redis所有的数据都是保存在内存中,对数据的更新将异步的保存在磁盘中,如果数据没有持久到硬盘中,当redis服务器重启,redis数据将会丢失RDB什么是RDBRDB持久化是把当前进程数据生成快照保存到硬盘的过程,触发RDB持久化过程分为手动触发和自动触发。RDB触发机制 – 主要三种save (同步)save命令:阻塞当前Redis服务器,知道RDB过程完成为止,对于内存比较大的实例会造成长时间阻塞,先上环境不建议使用

2020-10-05 16:51:28 7

原创 Redis进阶

Redis进阶慢查询生命周期说明:(1) 慢查询发生在第三阶段(2) 客户端超时不一定慢查询,单慢查询是客户端超时的一个可能因素两个配置slowlog - max -len先进先出队列固定长度保存在内存内slowlog - log - slower - than慢查询阀值(单位:微妙)slowlog-log-slower-than = 0 , 记录所有命令slowlog-log-slower-than < 0 , 不记录所有命令其中slowlog-l

2020-09-27 15:08:31 13

原创 雪花算法【snowflake】

雪花算法为什么需要分布式全局唯一ID 以及分布式ID的业务需求?在复杂分布式系统中,往往需要对大量对数据和消息进行标识如在美团、支付、餐饮 中 系统的数据日渐增长,对数据分库分表需要有一个唯一来标识一条数据或消息此时一个能够生成全局唯一ID的系统是非常有必要的ID生成规则部分硬性要求全局唯一 :不能出现重复的ID,要 唯一标识趋势递增 :在Mysql 的InnoDB引擎使用的是聚集索引,由于多数RDBMS 使用的是Btree数据结构来存储数据,在主键的选择上面我们应该尽量使用有序的主键

2020-09-21 22:38:15 23

原创 SpringCloud Alibaba Sentinel实现熔断与限流

SpringCloud Alibaba Sentinel实现熔断与限流官网:https://github.com/alibaba/sentinel中文网:https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8DSentinel 是什么?随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。Sentinel 具有以下特征:丰富的应用

2020-09-20 15:38:51 47

原创 Nacos集群和持久化配置

Nacos集群和持久化配置官网说明官网说明:https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html单机模式支持mysql在0.7版本之前,在单机模式时nacos使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况。0.7版本增加了支持mysql数据源能力,具体的操作步骤:1.安装数据库,版本要求:5.6.5+2.初始化mysql数据库,数据库初始化文件:nacos-mysql.sql3.修改conf/application

2020-09-13 16:38:54 22

原创 SpringCloud Nacos服务注册和配置中心

SpringCloud Nacos服务注册和配置中心

2020-09-13 13:45:41 16

原创 Redis初识

redis初识1. Redis是什么开源基于建值对对存储服务系统多种数据结构Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。官网:https://redis.io/高性能 ,功能丰富2. Redis的前世今生Redis的特性速度快官方给出的 10w OPS数据存在内存中,读取非常快用c语言实现的(50000 line)Redis 线程模型:单线程

2020-09-08 21:56:01 17

原创 SpringCloud Alibaba简介

SpringCloud Alibaba组件sentinel : 把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个纬度保护服务等稳定性。Nocos :一个更易构建云原生应用等动态服务发现,配置管理和服务管理平台。 RocketMQ : 一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、搞可靠的消息与订阅服务。Dubbo :Apache Dubbo 是一款高性能的 java RPC 框架。Seata : 阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决

2020-09-07 21:39:24 58

原创 SpringCloud Sleuth分布式请求链路追踪

SpringCloud Sleuth分布式请求链路追踪简介在微服务架构中,一个由客户端发起的请求子啊后端系统中会经过多个不同的服务节点调用来协同产生最后的请求结果,每一个前段请求都会形成一条复杂的分布式服务调用链路,链路中的任何一个出现高延时的错误都会引起整个请求最后的失败github仓库 : https://github.com/spring-cloud/spring-cloud-sleuth官网 : https://cloud.spring.io/spring-cloud-sleuth/

2020-09-05 19:49:24 25

原创 SpringCloud Stream消息驱动

SpringCloud Stream消息驱动简介什么是SpringCloudStream官方定义 SpringCloud Stream 是一个构建消息驱动微服务对框架。应用程序通过 inputs 或者 outputs 来 与Springcloud Stream 中 binder 对象交互 通过我们配置来 binding(绑定),而 SpringCloud Stream 的 binder 对象负责与消息中间件交互,所以我们只需要搞清楚如何与 Spring Coud Stream 交互就可以方

2020-09-05 17:14:37 25

原创 spring boot 使用DFA算法实现敏感词过滤

spring boot 使用DFA算法实现敏感词过滤敏感词、文字过滤是一个网站必不可少的功能,如何设计一个好的、高效的过滤算法是非常有必要的。DFA算法简介DFA全称为:Deterministic Finite Automaton,即确定有穷自动机。其特征为:有一个有限状态集合和一些从一个状态通向另一个状态的边,每条边上标记有一个符号,其中一个状态是初态,某些状态是终态。但不同于不确定的有限自动机,DFA中不会有从同一状态出发的两条边标志有相同的符号。确定:状态以及引起状态转换的事件都是可确定

2020-09-04 09:08:17 60

原创 SpringBoot项目部署(附脚本)

SpringBoot项目部署jar包(官方推荐)jar包方式启动,也就是使用spring boot内置的tomcat运行。服务器上面只要你配置了jdk1.8及以上,就ok。不需要外置tomcat2. 文件通过 FTP 或者 FinalShell 上传到服务器文件位置:项目 target 包下在服务器 创建文件 nohup.out 文件 用来做日志文件touch nohup.out启动 nohup java -jar jar包的名称 &启动完成脚本启动方式

2020-09-03 13:02:50 87

原创 SpringCloud Config分布式配置中心

SpringCloud Config分布式配置中心微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中出现大量的服务。由于每个服务都必须要相关的配置才能运行,所以一套集中式的、动态的配置管理是必不可少的。...

2020-08-31 22:16:12 35

原创 Gateway新一代网关

Gateway新一代网关zuul路由网关zuul核心人员走了两个,zuul2的研发过久,spring公司等不及,自己研发的Gateway网关。简介Cloud全家桶有个狠重要的组件就是网关,在1.x版本中都是采用Zuul网关;但是在2.x版本中,zuul的升级一致跳票,...

2020-08-30 13:35:09 316 1

原创 Hystrix断路器

Hystrix断路器服务雪崩多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其他微服务,这就是所谓的 “扇出”,如果扇出的链路上某个微服务的调用时间过长或者不可用,对微服务A的调用就会占有越来越多的系统资源,进而引起系统奔溃,所谓的 “雪崩效应”。对于高流量的应用来说,单一的后端依赖坑会导致所有服务器上的所有资源都在几秒内饱和。更糟糕的是,这些应用程序还可能导致服务之间的延迟增加,备份队列,线程和其他系统资源紧张,导致整个系统发送更多的级联故障。这些表示需要对

2020-08-27 22:46:40 72

原创 OpenFeign服务接口调用

OpenFeign服务接口调用简介官方文档: https://cloud.spring.io/spring-cloud-static/Hoxton.SR1/reference/htmlsingle/#spring-cloud-openfeignFeign 是一个声明式WebService 客户端。使用Feign能让编写Web Service更加简单它的使用方式 定义一个服务接口然后在上面添加注解。Feign也支持 可拔插式的编码器和解码器。Spring Cloud 对Feign 进行了封装,使其支

2020-08-23 16:58:33 136 1

原创 Ribbon负载均衡与原理解析

Ribbon负载均衡服务调用简介Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端 负载均衡的工具简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer (简称LB) 后面所有的机器,Ribbon 会自动帮助你基于某种规则(如 简单轮询,随机连接等 )去连接这些机器。我们容易使用Ribbon

2020-08-22 22:45:34 40

原创 Consul服务注册与发现

Consul服务注册与发现Consul官网:https://www.consul.io/Consul中文文档:https://www.springcloud.cc/spring-cloud-consul.html简介Consul是一种服务网格解决方案,提供具有服务发现,配置和分段功能的全功能控制平面。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建完整的服务网格。Consul需要一个数据平面,并支持代理和本机集成模型。Consul附带了一个简单的内置代理,因此一切都可以直接使用,还支

2020-08-21 21:38:54 34

原创 Zookeeper服务注册与发现

Zookeeper服务注册与发现Zookeeper是什么官方文档上这么解释zookeeper,它是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。上面的解释有点抽象,简单来说zookeeper=文件系统+监听通知机制。#mermaid-svg-vZ8C93VLtnxun4qL .label{font-family:'trebuchet ms', verdan

2020-08-20 22:50:01 55

原创 SpringCloud--Eureka集群与原理

Eureka集群与原理原理Eureka Server注册中心的集群和Dubbo的ZooKeeper注册中心集群在结构上有很大的不同。Eureka Server注册中心集群中每个节点都是平等的,集群中的所有节点同时对外提供服务的发现和注册等功能。同时集群中每个Eureka Server节点又是一个微服务,也就是说,每个节点都可以在集群中的其他节点上注册当前服务。又因为每个节点都是注册中心,所以节点之间又可以相互注册当前节点中已注册的服务,并发现其他节点中已注册的服务。CAP理论指出,一个分布式系统

2020-08-19 22:27:27 137

原创 SpringCloud--Eureka

Eureka服务注册与发现Eureka基础知识服务治理服务注册Eureka两组建件注册中心-Eureka介绍又称服务中心,管理各种服务功能包括服务的注册、发现、熔断、负载、降级等。什么是注册与发现在服务注册与发现中,有一个注册中心。当服务器启动的时候,会把当前自己服务器的信息,比如 服务地址通讯地址等以别名等方式注册到注册中心上,另一方(消费者),以该别名的方式去注册中心上获取到实际的服务通讯地址,然后在实现本地RPC调用RPC远程调用框架核心设计思想:自阿雨注册中心,因为使用注

2020-08-18 22:33:37 37

原创 Springcloud -- 基础

Springcloud【一】-- 基础Springcloud的升级迭代版本对应关系Cloud升级迭代微服务架构编码构建撰写发布技术文稿(代码支持)撰写发布学术论文(LaTeX 公式支持)版本对应关系Cloud升级迭代微服务架构编码构建编程风格:约定 > 配置 > 编码创建微服务cloud整体聚合父工程Project步骤1.New Project下一步下一步,就不一一介绍 完成2.修改配置...

2020-08-16 11:48:30 16

原创 maven中dependencyManagement标签

maven中dependencyManagement标签Maven 使用 dependencyManagement 元素来提供了一种管理依赖版本号的方式(通常会在醒目最顶层的 POM 中看到 dependencyManagement 元素)使用pom.xml 中 dependencyManagement 元素能让所有在子项目中引用一个依赖而不用显式的列出版本号,Maven 会沿着父子层向上走,知道找到一个dependencyManagement 元素的项目,然后他就会使用这个 depende

2020-08-16 11:26:44 41

原创 SpringCloud--微服务架构

文章目录微服务架构微服务架构微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调。互相配合,每个服务运行在其独立的进程中,服务与服务之间采用轻量级通信机制互相协作(通常基于HTTP协议的RESTful API)。每个服务都围绕这具体业务进行构建,并且能够被独立的部署到生产环境通俗的讲 就是 一个个springboot 开发出来的模块就是落地功能在这里插入图片描述...

2020-08-09 11:51:23 37

原创 AQS

文章目录1.学习AQS的思路2.为什么需要AQS3.AQS的作用4.AQS的重要性、地位5.AQS内部原理解析6.应用实例,源码解析7.利用AQS实现一个自己的Latch门闩1.学习AQS的思路2.为什么需要AQS3.AQS的作用4.AQS的重要性、地位5.AQS内部原理解析6.应用实例,源码解析7.利用AQS实现一个自己的Latch门闩...

2020-08-08 14:48:17 43

原创 记录一次大规模数据库迁移(java)

文章目录为什么要数据迁移真实案例:解决方案为什么要数据迁移1.系统重构 (代码跟不上现在的用户量)2.数据库设计不合理,与sql 垃圾,导致数据库qps大大的降低,从而导致数据库挂掉3.业务不断增长,现有资源不够用,战略的转移当这些问题出现的时候,我们会选择更好的系统架构 ,与解决方案,但是有个不可避免的问题 (数据迁移)当原有系统存在 几十万,几百万用户数据的时候,我们就要考虑,这些用户数据这样才能完美的在新系统 或者新数据库上应用真实案例:数据库建立的不合理,数据格式错

2020-08-02 15:30:03 59

原创 CyclicBarrier循环栅栏

文章目录CyclicBarrier循环栅栏和CountDownLatch 很类似 ,都能阻塞一组线程当有大量线程相互配合,分别计算不同任务,并且需要最后统一汇总的时候,我们可以使用CyclicBarrier 。CyclicBarrier可以构造一个集结点,当某一个线程执行完毕,他就会到集结点等待,知道所有线程都到了集结点,那么该栅栏就被撤销,所以有线程在统一出发,继续执行剩下都任务。生活中的例子:“ 咋们3个人明天中午在学校碰面,都到齐后,一起讨论下学期的计划”代码演示package com

2020-07-19 12:43:38 36

原创 Condition接口(又称条件对象)

文章目录1.作用2.代码演示1.作用当线程1需要等待某个条件的时候 ,它就去执行 condition.await() 方法,一旦执行了 await()方法,线程就会进入阻塞状态然后通常会有另外一个线程,假设是线程2,去执行对应的条件,知道这个条件成立,线程2就会去执行condition.signal() 方法,这是 JVM 就会被从阻塞的线程里找到那些等待该condition的线程,当线程1就会收到可执行信号的时候,他的线程状态就会变成Runnable 可执行状态signalAll() 和si

2020-07-16 23:18:01 72

原创 Semaphore信号量

Semaphore信号量 - Semaphore 可以用来限制或管理数量有限资源的使用情况- 信号量的作用是用来维护一个“许可证”,的计数,线程可以获取 许可证,那信号量剩余许可证就减一,线程也可以是否一个许可证,那剩余的许可证就加一,当信号量拥有的许可证为0时,那么下一个线程想获得许可证,就要进行等待,直到另外线程释放许可证信号量使用流程: 1.初始化Semaphore 并指定许可证的数量 : 2.在需要被现在的代码前加acquire() 或者 acquireUninterruptibly

2020-07-14 22:09:17 55

原创 判断“存在“你还在用count吗,细节决定成败

文章目录1. 为什么要用count(*)2. 优化方案1. 为什么要用count(*)在我们实际开发中,业务 往往是 如:(判断该手机是否已经存在),我们为了提高程序的运行效率,这个时候都会使用select count(*) from sys_user where mobile = '18217692100'//而我们Java代码Integer count = mapper.selectCount(String mobile);//写业务代码if(count != 0){ ……el

2020-07-13 14:50:40 626

原创 【并发容器精讲三、】并发队列Queue
原力计划

文章目录1. 为什么要使用队列2. 并发队列简介3. 各并发队列关系图4. 阻塞队列 BlockingQueue5. 非阻塞队列6. 如何选择适合的队列1. 为什么要使用队列用队列可以在线程间传递数据:生产者,消费者模式,银行转帐考虑锁等线程安全问题重任 转移到队列上2. 并发队列简介简单介绍各个并发并发队列的关系,并发队列是指线程安全的队列,包含:阻塞队列和非阻塞队列,区别如下。阻塞队列:满了之后不能再插入,当队列为空的时候,读不到会阻塞非阻塞队列:和阻塞队列完全不一样的3. 各并

2020-07-12 21:20:34 86

原创 【并发容器精讲二、】CopyOnWriteArrayList
原力计划

文章目录1. 诞生的历史和原因2. 适用场景3. 读写规则4. 实现原理5. 缺点6. 源码分析1. 诞生的历史和原因代替Vector和SyschronizedList 就像 ConcurrentHashMap 代替了SyschronizedMap的原因一样Vector和SyschronizedList 锁的粒度太大,并发效率较低,并且迭代时无法编辑Copy-On-Write 并发容器还包括CopyOnWriteArraySet,用来代替同步 Set2. 适用场景读操作尽可能的快一些,

2020-07-02 21:16:21 79

原创 【并发容器精讲一、】ConcurrentHashMap
原力计划

ConcurrentHashMap1. 磨刀不误砍柴功 :Map简介2. 为什么需要ConcurrentHashMap3. 九层之台,起于累土,罗马不是一天建成的:HashMap分析4. JDK1.7 中 ConcurrentHashMap 实现和分析5. JDK1.8 中 ConcurrentHashMap 实现和源码分析6. 对比1.7 与 1.8 ,为什么要把1.7的结构改成1.8的结构7. 组合操作:ConcurrentHashMap也不是线程安全的?8. 实际生产案例分享1. 磨刀不误砍柴功 :

2020-06-29 22:13:08 94

原创 SpringBoot自定义异常,优雅解决业务逻辑中的错误
原力计划

文章目录前言设计1. 自定义枚举类2. 自定义异常3. 异常全局处理4. 使用前言在我们开发中,总会碰到一些异常 ---------- 运行时异常(不受检异常):RuntimeException类极其子类表示JVM在运行期间可能出现的错误。编译器不会检查此类异常,并且不要求处理异常,比如用空值对象的引用(NullPointerException)、数组下标越界(ArrayIndexOutBoundException)。此类异常属于不可查异常,一般是由程序逻辑错误引起的,在程序中可以选择捕获处理,也可

2020-06-24 11:39:13 175

原创 分布式接口限流实现
原力计划

文章目录为什么要接口限流为什么要做分布式实现方式1. 算法实现(无分布式,单体架构,单节点)2. 分布式实现为什么要接口限流在我们项目开发过程中,有些接口是暴露在用户的常用中,包括一些高危接口,如 (支付,开发票,订单),这些接口 都是高危接口,且被用户经常使用,在高并发的情况下,io阻塞,不可避免的出现重复提交,或者点击频繁的操作,所以我们就要加入限流,避免用户多次点击,减少我们接口的压力,把整数据不会重复,接口压力减小为什么要做分布式在我们做项目负载均衡的时候, 分布式,微服务架构的时候

2020-06-19 23:02:57 1061

面试必问之AQS原理详解.pdf

AQS 原理 lock 最 常 用 的 类 就 是 ReentrantLock , 其 底 层 实 现 使 用 的 是 AbstractQueuedSynchronizer(AQS) 简单来说 AQS 会把所有的请求线程构成一个 CLH 队列,当一个线程执行完毕 (lock.unlock())时会激活自己的后继节点,但正在执行的线程并不在队列中, 而那些等待执行的线程全部处于阻塞状态,经过调查线程的显式阻塞是通过调用 LockSupport.park() 完成,而 LockSupport.park() 则调用 sun.misc.Unsafe.park()本地方法,再进一步,HotSpot 在 Linux 中中通过调用 pthread_mutex_lock 函数把线程交给系统内核进行阻塞。

2020-08-08

git操作文档.docx

该文件可以应用于企业级的 git操作文档,应用于小公司企业级绰绰有余,后续还会持续更新下去,望大家多多支持

2020-06-06

空空如也

空空如也
提示
确定要删除当前文章?
取消 删除