- 博客(28)
- 资源 (1)
- 收藏
- 关注
原创 高并发解决方案
高并发,个人理解可以从三个方向来定义:高可用,高性能,高扩展1.0 高可用LVS/F5+Nginx+keepalived限流,隔离,熔断,降级,黑白名单,超时重试机制数据库集群架构故障转移,多机房容灾,灰度发布等等1.1 LVS/F5+Nginx+keepalived快速检测Nginx可用性/切换/重启,故障转移1.2 隔离线程池隔离:把请求分散到不同线程池里面,防止一种请求的业务问题,影响到其他服务可用集群隔离:微服务化,随着调用方增多,当秒杀服务高并发时,不断的调用商品服务,影
2021-06-24 20:30:10
189
原创 如何设计高性能的mysql
1.0 表设计规范数据字符集建议使用utf8mb4(支持表情符,mysql8.0 默认字符集)必须要有主键,尽量别使用自增,要使用业务主键id(百度UUID,美团uuid等)时间字段建议使用long类型金额建议用long类型(单位为分)固定字符串建议使用charbool/枚举字段建议使用tinyint禁止使用“%”前导的查询单张表中索引数量不超过5个,索引过多容易导致索引膨胀(新增,修改,删除响应)联合索引建议不能超过5个字段单张表不建议超过千万数据,请做好分库分表解决方案单张表字段
2021-06-19 11:10:11
264
原创 项目灰度发布
1.0 什么是灰度发布白话文: 项目更新时,停掉旧服务,启动新服务,要是新服务有问题(所以很多公司项目上线都定在晚上更新,就是尽量避免影响),容易造成大批量商户不可用,影响使用;灰度发布就是为了解决这块问题1.1 蓝绿发布蓝绿部署,同时运行两个版本的服务,没有停止掉老版本,而是部署一套新版本,等新版本运行起来后。从图来看,就是多了一套服务资源,假如旧服务要10台服务,如果两套就要二十台服务。资源浪费严重。1.1.2 滚动发布新服务:只要启动一个点,公司内部测试人员,通过网关API,映射到新服务
2021-05-22 10:05:53
811
3
原创 导入/导出内存溢出解决方案
1.0 场景在很多业务上,例如商城商品,批量导入功能,批量下载功能,订单导出,会员导入等功能;1.1 导入导出升级1.1.1 同步版本点击下载/或者导入->触发后台业务->执行相关业务->返回数据和状态优点:开发简单,易上手缺点:数据过大,容易超时;导入导出触发过多时,占用大量服务资源,易导致内存溢出1.1.2 异步队列导入导出功能大概流程给出,里面一些替代方法,可以根据各自公司技术栈来替代,例如心跳3s(要是项目有socket推送,也可以借助它来做)优点:可以控制导入导
2021-05-18 20:13:31
1008
转载 前后端埋点解决方案
https://blog.csdn.net/lucky541788/article/details/103795942链接: 埋点
2021-01-18 18:58:44
1103
转载 并发AtomicLong和LongAdder的区别
最近在看阿里sentinel源码,突然发现框架里面用到LongAdder,而并非AtomicLong,于是去查下这两者关系,发现这篇文章不错,转载一下AtomicLong和LongAdder的区别前言最近在看到不少框架里面使用到了LongAdder这个类(如阿里sentinel ),而并非AtomicLong,很是困惑,于是专门看了LongAdder的源码,总结一下这两个的区别。AtomicLong原理就像我们所知道的那样,AtomicLong的原理是依靠底层的cas来保障原子性的更新数据,在要添
2021-01-18 14:58:29
156
转载 spring cloud eureka
原文:https://www.cnblogs.com/yixinjishu/p/10871243.html 引言 Eureka是Netflix开源的、用于实现服务注册和发现的服务。Spring Cloud Eureka基于Eureka进行二次封装,增加了更人性化的UI,使用更为方便。但是由于Eureka本身存在较多缓存,服务状态更新滞后,最常见的状况是:服务下线后状态没有及时更新,服务消费者调用到已下线的服务导致请求失败。本文基于Spring C...
2021-01-12 19:28:48
102
原创 spring cloud alibaba之nacos服务注册源码流程图
1.0 Nacos相关问题1:服务端—默认是集群,启动时会报错。因此本地加上配置-Dnacos.standalone=true2:客户端,要使用配置中心如果默认是application.yml 用这个配置的话,会启动不成功,要改成bootstrap.yml优先级2.0 Nacos 客户端注册流程3.0 nacos 服务端注册流程...
2021-01-05 19:30:03
359
1
原创 分布式日志收集解决方案
1.0 ELKELK是Elasticsearch、Logstash、Kibana的简称,缺陷:瓶颈点在logstash,logstash 重量型,占用资源大,吞吐量有限首先logstash具有日志采集、过滤、筛选等功能,功能完善但同时体量也会比较大,消耗系统资源自然也多。filebeat作为一个轻量级日志采集工具,虽然没有过滤筛选功能,但是仅仅部署在应用服务器作为我们采集日志的工具可以是说最好的选择了。但我们有些时候可能又需要logstash的过滤筛选功能,所以我们在采集日志时用filebeat,然后
2020-12-29 09:47:49
1256
1
原创 orm框架之mybaits/mybaits_plus
//第一步获取文件 String resource = "org/mybatis/example/mybatis-config.xml"; Reader reader = null; try { //第二步,读取文件io信息 reader = Resources .getResourceAsReader(resource); } catch (IOEx...
2020-12-21 19:47:43
571
1
原创 高并发一些解决方案
1.0 多级缓存架构图2.0 秒杀库存超卖解决方案3.0 redis 访问倾斜/数据倾斜解决方案待定4.0 redis 缓存与数据库不一致问题待定5.0 redis缓存穿透待定6.0 redis缓存击穿待定7.0 redis 雪崩待定
2020-12-17 13:26:15
263
原创 mysql主从复制
主从复制允许将来自一个MySQL数据库服务器(主服务器)的数据复制到一个或多个MySQL数据库服务器(从服务器)。mysql主从复制是mysql自带的功能,1. mysql主从复制原理
2020-09-21 20:49:30
119
原创 RPC远程通信如何保证幂等性
1.什么是幂等性接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用2. 什么情况下需要保证接口的幂等性除了查询功能具有天然的幂等性之外,增加、更新、删除都要保证幂等性3.如何防止重复提交1:全局id,mysql的唯一索引2:token机制,redis锁机制等等...
2020-09-21 20:06:10
661
原创 https
常用加密算法:对称加密和非对称加密,https底层原理(混合加密算法对称和非对称算法)对称加密:加密和解密用的是同一个密钥,常用的有DES算法,3DES算法,TDEA算法, Blowfish算法, RC5 算法,IDEA算法非对称加密:会生成两个密钥,一个是公钥,一个是私钥,客户端用公钥加密,服务端要私钥解密加密目的就是防止黑客和明文数据。常用算法:RSA、Elgamal、背包算法、Rabin、HD,ECC(椭圆曲线加密算法)。传统http弊端,传输数据过程都是明文加密1.0https传输过程
2020-09-21 19:42:15
1566
1
转载 对称加密和非对称加密
装载:https://www.jianshu.com/p/07dce545ed0c对称加密对称加密(也叫私钥加密)——指加密和解密使用相同密钥的加密算法。有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,同时解密密钥也可以从加密密钥中推算出来。而在大多数的对称算法中,加密密钥和解密密钥是相同的,所以也称这种加密算法为秘密密钥算法或单密钥算法。它要求发送方和接收方在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都可以对他们发送或接收的消息解密,所以密钥的保密性对
2020-09-21 18:18:32
183
1
原创 hash算法,hash一致性算法,hash slot算法
1:hash算法,假如有三台服务,根据key得到hashCode,除以3得到余数,0,1,2 分别对应三台服务2:hash一致性算法,假如有三台服务,服务生产hashCode,存放到hashCode圆环上,然后根据key生成hashCode,然后顺时针找到最近的服务。由于这样,不均衡,可以给三台服务都加上多个虚拟节点,然后存放到圆环上3:hash slot是redis cluest集群用到的,在redis集群的设计中也是采用的这个思路。Redis 集群没有并使用传统的一致性哈希来分配数据,而是采用另
2020-09-21 18:07:54
303
原创 redis高可用---sentinal集群
1.哨兵的介绍哨兵是redis集群架构中非常重要的一个组件,主要功能如下(1)集群监控,负责监控redis master和slave进程是否正常工作(2)消息通知,如果某个redis实例有故障,那么哨兵负责发送消息作为报警通知给管理员(3)故障转移,如果master node挂掉了,会自动转移到slave node上(4)配置中心,如果故障转移发生了,通知client客户端新的master地址2.哨兵的核心知识(1)哨兵至少需要3个实例,来保证自己的健壮性(2)哨兵 + redis主从的部署
2020-09-21 18:05:31
521
转载 流量整形算法,服务熔断与降级
一、流量控制1、基本概念流量控制的核心作用是限制流出某一网络的某一连接的流量与突发,使这类报文以比较均匀的速度流动发送,达到保护系统相对稳定的目的。通常是将请求放入缓冲区或队列内,然后基于特定策略处理请求,匀速或者批量处理,该过程也称流量整形。流量控制的核心算法有以下两种:漏桶算法和令牌桶算法。2、漏桶算法基础描述漏桶算法是流量整形或速率限制时经常使用的一种算法,它的主要目的是控制数据注入到网络的速率,平滑网络上的突发流量。漏桶算法提供了一种机制,通过它,突发流量可以被整形以便为网络提供一个稳定
2020-09-15 20:20:07
560
转载 redis高可用之---redis集群选择
一、常见使用方式Redis 的几种常见使用方式包括:Redis 单副本Redis 多副本(主从)Redis Sentinel(哨兵)Redis Cluster二、各种使用方式的优缺点1、Redis 单副本Redis 单副本,采用单个 Redis 节点部署架构,没有备用节点实时同步数据,不提供数据持久化和备份策略,适用于数据可靠性要求不高的纯缓存业务场景。优点:架构简单,部署方便;高性价比:缓存使用时无需备用节点(单实例可用性可以用 supervisor 或 crontab 保证),当
2020-09-09 19:36:51
349
转载 redis高可用---redis持久化
1.Redis高可用概述在介绍Redis高可用之前,首先要说明一下在Redis的语境中高可用的含义。我们知道,在Web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%、99.999%等等)。但是在Redis语境中,高可用的含义似乎要宽泛一些,除了保证提供正常服务(如主从分离、快速容灾技术等),还需要考虑数据容量的扩展、数据安全不会丢失等。在Redis中,实现高可用的技术主要包括持久化、复制、哨兵和集群,下面分别说明它们的作用,以及解决了什
2020-09-09 19:35:54
161
原创 为什么要用redis
1:为什么要用redis原因很简单,快!这个问题在大并发,高负载的网站中必须考虑.redis数据库中的所有数据都存储在内存中。由于内存的读写速度远快于硬盘,因此Redis的的的在性能上对比其他基于硬盘存储的数据库有非常明显的优势。2,redis 为什么快1、完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1);2、数据结构简单,对数据操作也简单,Redis中的数据结构是专门进行设计的;3、采用单线程
2020-09-07 19:54:49
1190
原创 百度分布式id-UidGenerator之CachedUidGenerator源码解读
1:UidGenerator源码https://github.com/baidu/uid-generator2:CachedUidGenerator介绍RingBuffer环形数组,数组每个元素成为一个slot。RingBuffer容量,默认为Snowflake算法中sequence最大值,且为2^N。可通过boostPower配置进行扩容,以提高RingBuffer 读写吞吐量。Tail指针、Cursor指针用于环形数组上读写slot:Tail指针表示Producer生产的最大序号(此序号从0
2020-09-02 20:17:39
1588
原创 百度分布式id-UidGenerator之DefaultUidGenerator源码解读
1:百度源码与图https://github.com/baidu/uid-generatoruid-generator支持自定义时间戳、工作机器id和序列号等各部分的位数,以应用于不同场景。默认分配方式如下。sign 默认一位符号标识,data seconds 时间,worder node id,机器id也是重启的次数,sequence 并发系列。uid-generator 支持两种获取id的方法,分别是DefaultUidGenerator/CachedUidGenerator.这篇先解读Defau
2020-09-01 18:34:36
1004
原创 java版雪花算法
一、雪花算法图二、java 雪花算法代码1.雪花算法,分为三块,分别是时间,机器码,序列化public class SnowFlakeUtil {/ *** 开始时间/private final long START_TIMESTAMP = 1577808000000L; //2020-01-01/** 机器位移数据,最多1024台*/private final static long WORK_ID_BIT = 10L;/** * 机器标识最大值 */private fin
2020-08-27 20:21:58
257
原创 git版本管理
1:常规的git版本控制针对目前我公司的版本迭代,就发现满足不了公司的需求。案例:7月10号突然接到需求要开发一个秒杀活动,预计在8月10号上线。拉取最新代码,开始开发,然后7月30号开发完毕,合并到develop分支;8月1号有个需求来了,评估8月3号上线,我拉develop分支,那就意味着我开发分支融合了秒杀代码,一旦上线就会把秒杀代码也跟着上线了(这时就会出现大问题)。2:作为项目管理—就要根据需求(需求变更快,上线时间无顺序)来进行整合分支管理1:测试develop,堡垒pre,正式
2020-08-20 16:04:35
204
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人