- 博客(30)
- 收藏
- 关注
原创 Spring Cloud GateWay Hystrix 熔断路由器
添加上依赖。<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency>配置示例spring: cloud: gateway: routes: - id: hystrix_route
2020-05-28 13:16:13
1421
转载 springcloud 开启熔断hystrix后无法传递header问题
Hystrix有隔离策略:THREAD以及SEMAPHORE。引子当隔离策略为 THREAD 时,是没办法拿到 ThreadLocal 中的值的。举个例子,使用Feign调用某个远程API,这个远程API需要传递一个Header,这个Header是动态的,跟你的HttpRequest相关,我们选择编写一个拦截器来实现Header的传递(当然也可以在Feign Client接口的方法上加RequestHeader )。示例代码:public class KeycloakRequestIntercep
2020-05-28 11:59:09
691
原创 spring cloud gateway RequestRateLimiter 限流
spring: cloud: gateway: routes: - id: requestratelimiter_route uri: http://example.org filters: - name: RequestRateLimiter args: redis-rate-limiter.replenishRate: 10 redis-rate-lim
2020-05-27 18:34:11
836
2
原创 RocketMQ如何处理消息丢失的问题,同步刷盘,异步刷盘,异步复制,同步双写
RocketMQ 消息持久化生产者向RocketMQ broker发送消息mq收到消息以后,会将消息持久化到硬盘,这样才能保证机器宕机重启后消息不丢失,仍然可以给消费者进行消费。这里有两种刷盘策略:同步刷盘、异步刷盘同步刷盘:也就是mq收到消息后,必须将消息持久化到硬盘以后才向Producer端返回ACK成功状态,这样就可以100%保证消息不丢失。除非硬盘也坏了。。。异步刷盘:mq收到消息后,将消息存入操作系统的OS cache里面,通过异步定时将消息刷入磁盘,这样可能会有少部分数据丢失,因
2020-05-16 20:40:51
1804
原创 分布式锁选型方案,Redisson和zookeeper curator 做分布式锁的优缺点
RedissonRedisson框架集成以后,可以指定一个keykey,通过lua脚本向redis加锁。加锁后,将会启动一个“看门狗”的后台线程,定时检测是否仍然持有锁,如果持有,将延长锁的持有时间其他需要获取该锁的服务,将不断循环获取该锁,直到前面的线程释放了锁为止。优点:redis性能很高,适合高并发下的加锁机制缺点:如果加锁的redis master 故障,刚好数据也还没有同步到slave,那其他加锁的客户端则会再次加锁成功,则相当于有两个客户大都拿到了锁。zookeep
2020-05-16 01:14:11
2718
原创 分布式事务方案怎么调研选型?TCC、seataAT、 最终一致性事务的原理和优缺点都有什么?
分布式事务一直是微服务等分布式系统不得不面对的难题。目前主流的解决方案有以下几种。基于阿里巴巴开源的seata AT模式分布式事务框架TCC 三段式提交事务方案(业界一般使用ByteTCC框架)基于RocketMq 消息中间件实现最终一致性事务下面基于这三种方式进行原理剖析对比选型以及各自的优缺点比较一、Seata二、TCC二、基于RocketMq实现最终一致性总结...
2020-05-14 23:02:53
4990
原创 innodb 存储引擎架构设计
以更新数据为例:update user set username = ‘zhangsan’ where id= ‘1’innodb cache: inonbb数据缓存。首先会判断上面这条语句的数据是否在在缓存中,如果不在,则从磁盘数据里面加载过来,然后加独占锁,避免其他线程在此期间更新。将旧的数据刷入undo log 日志文件,方便出错后回滚数据。更新新的数据到innodb cache中。这里讲username = ‘zhangsan’ 这个新的数据更新到cache中。此时,磁盘数据还是旧的。.
2020-05-12 01:01:28
210
原创 你知道MySQL用了什么样的架构设计吗
mysql本身也是一个软件,跟我们日常开发的软件一样,都是一行行代码运行起来的。所以只要理清楚架构,mysql也没那么神秘,只不过写这个代码的人很牛掰。数据库连接池,开发过java的应该都很熟悉,同样,mysql本身也会维护有一个数据库连接池,可以通过一下查看mysql默认的连接数mysql> show variables like '%max_connections%';+------------------------+-------+| Variable_name .
2020-05-12 00:21:11
227
原创 产环境的服务是怎么配置超时和重试参数的?设置重试后如果解决幂等问题?
spring cloud gatewayRetryGatewayFilter 是 Spring Cloud Gateway 对请求重试提供的一个 GatewayFilter Factory。配置方式如下所示。spring: cloud: gateway: routes: - id: zuul-encrypt-service uri: lb://zuul-encrypt-service predicates: - Path=/data/** fi
2020-05-11 00:05:51
252
原创 你们公司的网关是怎么技术选型的,假设有高并发场景怎么优化?
微服务网关选择,一般是两种zuul和spring cloud gateway对比:zuul是Netflix的产品,gateway是spring全家桶的亲儿子。zuul 更新维护不积极,所以gateway自己做了网关,就是为了替代zuulzuul 1.0和 2.0差别很大,1.0版本是基于servlet的同步阻塞io,2.0是基于netty通信的异步io,并发能力2.0版本大大提升。但是2.0文档相对不友好。gateway本身是基于netty通信的异步io,并发能力很强。学习难度:gateway文
2020-05-10 23:08:24
720
原创 说一下自己公司的服务注册中心怎么技术选型的
CAP 理论C:一致性A :可用性P:分区一致性 (一定时间内完成一致性,避免造成分区数据不一致)一般只能保持CP 或者AP下面先来分析一下他们的优劣eurake缓存架构图eurake本身有缓存策略,本地注册表更新了服务的地址后,需要先同步至ReadWriteCacheMap,然后在同步至ReadOnlyCacheMap,然后其他服务就从ReadOnlyCacheMap里面拉去最新的注册表信息。所以在同步和拉取的过程当中,会有很多时间延迟。Eurake 采用的是peer to peer
2020-05-10 21:34:33
344
原创 你们的系统使用了哪种服务框架?为什么要这样技术选型?
前言如果将要系统进行服务化,必然会涉及到将整块系统拆分为一个个独立的小系统,也就是服务拆分。既然是服务拆分,必然会涉及到服务管理和服务调用等一系列的问题,所以,服务框架的选择将直接影响到后拆分后系统的稳定性,健壮性,开发的便利性。框架选择目前市面流行的服务框架一般是两个spring cloud 和 dubbo。但是从近来这几年微服务的大量流行,默认spring cloud的趋势越来越明显。下面开始这两个框架选型对比:功能对比spring clouddubbo并发性能spr
2020-05-10 00:06:54
325
原创 Redis高并发场景下如何保证缓存数据库双写一致性
Redis高并发场景下如何保证缓存数据库双写一致性方案一如果系统要求的数据库与缓存的数据实时性和一致性不是很高,或者系统的并发量不是很大,我是使用先删除缓存,然后再更新数据库,然后再将最新的数据更新到缓存里面。(高并发下该方案有bug,不适合)方案二如果系统本身存在高并发。那么使用方案一一样会存在数据一致性的问题。问题产生:举例:数据库有一条数据。id=10步骤1:线程1进行写操作。...
2020-02-08 13:18:49
980
转载 Redis持久化机制:RDB和AOF
本文转自https://juejin.im/post/5d776dcef265da03b574744dRedis持久化机制:RDB和AOFRedis数据持久化Redis作为一个内存数据库,数据是以内存为载体存储的,那么一旦Redis服务器进程退出,服务器中的数据也会消失。为了解决这个问题,Redis提供了持久化机制,也就是把内存中的数据保存到磁盘当中,避免数据意外丢失Redis提供了两种...
2020-02-07 16:36:59
160
原创 redis的过期策略都有哪些?内存淘汰机制都有哪些
redis set key的时候,我们可以指定一个过期时间,时间到了以后,这个key就会失效,再去get 这个key的value的时候,就会获取到空值。redis是怎么清理过期的key呢?定期删除+惰性删除定期删除redis默认经过每100ms就会检查设置了过期时间的key,如果有过期,就会清理掉。但是不是每个key都会去检查,只是会随机抽取部分key进行检查。因为如果每隔100ms就检查...
2020-02-07 13:29:44
127
原创 MySQL千万级、亿级数据性能调优
前言公司的一个项目,单表数据量过亿,刚上线就遇到了性能问题。刚好可以优化一下,记录一下优化过程。本文使用mysqlslap进行压测,对此工具不熟悉的先看我的另外一篇文章https://blog.csdn.net/sishenhzy/article/details/104148892环境在自己的工作电脑上进行测试数据库:mysql 5.7压测工具:mysql自带压测工具mysqls...
2020-02-05 15:44:46
2549
原创 MySQL查看数据库表数据量大小和索引数据大小以及行数
前言作为开发人员,需要对mysql数据表的数据的大小,索引大小,行数等信息有一定的了解,特别是数据量大的时候,才能心里有把握。方法一打开MySQL的 information_schema 数据库,在该库中有一个 TABLES 表,这个表里面记录了所有表的详细信息。mysql> SELECT * FROM `information_schema`.`TABLES` LIMIT 5;+...
2020-02-05 14:19:10
1209
原创 mysql数据库覆盖索引
如果一个索引包含或者说覆盖所有需要查询的字段的值,那么就没有必要再回表查询,这就称为覆盖索引。覆盖索引是非常有用的工具,可以极大的提高性能,因为查询只需要扫描索引会带来许多好处:索引条目远小于数据行大小,如果只读取索引,极大减少数据访问量索引是有按照列值顺序存储的,对于I/O密集型的范围查询要比随机从磁盘读取每一行数据的IO要少的多例如:ads_cusprofile_et_info表,...
2020-02-04 00:51:16
182
原创 mysql数据库查询实际扫描行数
mysql数据库查询实际扫描行数例如我执行的语句是:SELECT iss_dt AS date,SUM( user_num ) AS count FROM ads_cusprofile_et_info WHERE label_id = 'sex' AND iss_dt >= '20181228' AND iss_dt <= '20191228' GROUP BY iss_dt;...
2020-02-04 00:06:31
3940
转载 MySQL 性能优化神器 Explain 使用分析
简介MySQL 提供了一个 EXPLAIN 命令, 它可以对 SELECT 语句进行分析, 并输出 SELECT 执行的详细信息, 以供开发人员针对性优化.EXPLAIN 命令用法十分简单, 在 SELECT 语句前加上 Explain 就可以了, 例如:EXPLAIN SELECT * from user_info WHERE id < 300;准备为了接下来方便演示 EXPL...
2020-02-02 21:38:24
103
原创 MySQL自带性能测试工具mysqlslap使用教程
简介mysqlslap 是 Mysql 自带的压力测试工具,可以模拟出大量客户端同时操作数据库的情况,通过结果信息来了解数据库的性能状况mysqlslap 的一个主要工作场景就是对数据库服务器做基准测试测试平台在自己的工作电脑上进行测试的。CPU:i5-8250U 4核心8线程内存:16GB硬盘:SSD 256GB所有参数C:\Users\Hzy>mysqlslap --h...
2020-02-02 21:05:49
860
原创 【第七章】为啥redis单线程模型也能效率这么高
redis是直接基于内存进行操作的。redis核心机制是io多路复用。redis单线程设计,避免了CPU频繁的进行上下文切换。
2019-10-05 13:11:23
290
原创 Centos7防火墙配置
1、查看firewall服务状态systemctl status firewalld2、查看firewall的状态firewall-cmd --state3、开启、重启、关闭、firewalld.service服务# 开启service firewalld start# 重启service firewalld restart# 关闭service firewalld sto...
2019-09-28 19:45:26
122
原创 【第五章】redis 和 memcached 有啥区别?
redis 支持复杂的数据结构redis 相比 memcached 来说,拥有更多的数据结构,能支持更丰富的数据操作。如果需要缓存能够支持更复杂的结构和操作, redis 会是不错的选择。redis 原生支持集群模式在 redis3.x 版本中,便能支持 cluster 模式,而 memcached 没有原生的集群模式,需要依靠客户端来实现往集群中分片写入数据。性能对比由于 ...
2019-09-20 15:27:26
128
原创 【第四章】redis都有哪些数据类型?分别在哪些场景下使用比较合适?
Redis常用的有五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。stringstring 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比...
2019-09-20 15:00:52
170
原创 【第三章】为什么使用缓存?在项目中缓存是如何使用的?使用缓存会有什么不良后果?
1、为什么使用缓存?高性能对于更新频率不高并且读取频率比较大的数据,没必要每次都读取数据库。第一次读取以后,将数据放入缓存,后面再读取数据则直接从缓存获取,提高系统性能。高并发数据库本身并发量是非常有限的,mysql的qps一般是几千左右,如果所有请求都直接打到数据库,数据库很有可能会直接挂掉。Redis是直接基于内存进行操作的,天生就是支持高并发。根据上一篇的压测结果,单...
2019-09-19 17:29:01
250
原创 【第二章】Redis单机性能测试&压力并发测试
前言感觉不是很多人明确的知道redis到底有多快。只是知道Redis做缓存很快,并发很高。官网其实已经给出了压测教程和基准的压测数据,传送门:https://redis.io/topics/benchmarks单机压测我本地试了一下环境:windows10 64位、i5 8250U + 8G 内存。 redis单实例测试环境不是很标准,开了其他一些办公软件1、先打开redis,...
2019-09-17 11:21:30
7004
6
原创 【第一章】centos & windows 64位 redis4.0.6安装教程
1、centos安装redis第一步:下载redis安装包wget http://download.redis.io/releases/redis-4.0.6.tar.gz[root@iZwz991stxdwj560bfmadtZ local]# wget http://download.redis.io/releases/redis-4.0.6.tar.gz`--2017-12-13 1...
2019-09-12 19:30:19
505
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人