自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(95)
  • 收藏
  • 关注

原创 微服务双活体系建设

双机房部署双活数据中心入口路由算法静态路由算法:基于IP地址进行选择 动态路由算法:分析链路和数据中心的负载情况,响应时间,优先级等进行路由 系统网关控制:通过网关制定规则实现流量分发双活数据中心需要注意的问题脑裂现象:网络出现波动,通信终端,无法感知,各自为战,很难判断请求应该分发到哪个数据中心 运维相对复杂:数据同步问题,如何达到同步准实时 非零丢失:一个机房挂掉,另一个机房还没有及时同步最新数据的情况,只是非常少量的数据丢失,所以双活不能保证非零丢失基于支付场景的双活体系建设业

2021-04-08 10:12:09 1352 2

原创 Hystrix 和 Sentinel 对比

共同特性:隔离机制:二者都提供了隔离机制,Hystrix通过线程池活信号量来实现隔离机制,针对某个依赖服务的请求,全部会在一个线程池内部管理,信号量更轻量级一些;Sentinel的隔离机制更轻量级,支持通过不同的运行指标进行限流,例如通过控制QPS,系统负载,调用关系。 熔断降级:Sentinel与Hystrix都支持基于失败比率(异常比率)的熔断降级,在调用达到一定量级并且失败比率达到设定的阈值时自动进行熔断,此时所有对该资源的调用都会被阻塞,知道过了指定时间窗口后才启发性的恢复。Sentinel还

2021-03-02 17:22:55 2744

原创 Spring Cloud Gateway

网关作用网关不仅只是做一个请求的转发及服务的整合,有了网关这个统一的入口之后,它还能提供以下功能。针对所有请求进行统一鉴权、限流、熔断、日志。 协议转化。针对后端多种不同的协议,在网关层统一处理后以HTTP对外提供服务。用过Dubbo框架的读者应该知道,针对Dubbo服务还需要提供一个Web应用来进行协议转化。 统一错误码处理。 请求转发,并且可以基于网关实现内、外网隔离。统一认证授权...

2021-01-25 14:59:58 286

原创 Seata 分布式事务

初探下载官方代码:https://gitee.com/mirrors/Spring-Cloud-Alibaba.git目前的最新seata版本为1.4.根据MD,分别启动4个服务。主要业务有3项扣除商品库存 扣除用户金额 创建订单demo 中有feign,rest 两种服务掉用方式http://127.0.0.1:18081/seata/feignhttp://127.0.0.1:18081/seata/rest后台操作修改数据为: 库存 》 用户表》..

2021-01-06 17:21:34 201 1

原创 分布式事务常见解决方案

在电商领域互联网下,基于CP的强一致性方案在数据库性能和系统处理能力会出现一定瓶颈。所以互联网更多采用柔性事务,柔性事务是遵循BASE理论来实现事务模型,有两个特性:基本可用,柔性状态。TCC补偿型方案TCC(Try-Confirm-Cancel)是一种比较成熟的分布式数据一致性解决方案,它实际上是把一个完整的业务拆分为如下三个步骤。Try ∶ 这个阶段主要是对数据的校验或者资源的预留。 Confirm∶确认真正执行的任务,只操作Try阶段预留的资源。 Cancel∶取消执行,释放Try阶段

2021-01-04 16:14:40 311 3

原创 分布式事务原理

XA协议ACID特性:原子性(Atomicity)∶事务必须是原子工作单元,不可继续分割,要么全部成功,要么全部失败。 一致性(Consistengy)∶事务完成时,所有的数据都必须保持一致。 隔离性(Isolation)∶由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。 持久性(Durability)∶事务执行完成之后,它对于系统的影响是永久性的。此特性是针对单库夺标事务所要满足的特性,在分布式事务下不能保证。X/OPEN 这个组织定义了一套分布式事务标准。这个标准提出了两阶

2021-01-04 15:19:48 275

原创 Sentinel 源码解析

初始化工作原理在 spring-cloud-alibaba-sentinel 包中,starter组件会自动装备,所以直接 看 meta-inf/spring.factoriesorg.springframework.boot.autoconfigure.EnableAutoConfiguration=\com.alibaba.cloud.sentinel.SentinelWebAutoConfiguration,\com.alibaba.cloud.sentinel.SentinelW.

2020-10-10 17:02:15 1763

原创 Spring Cloud Alibaba Sentinel 用法总结

常用的限流策略:Niginx添加限流模块限制平均访问速度 通过数据库连接池,线程池大小限制 通过Guava包Ratelimiter限制接口访问速度 Tcp通信协议中流量整形常见限流算法:1.计数器算法在指定周期内限制访问次数,进入下一个时间周期次数清0.这种算法可以用在短信发送频次限制上,比如限制一个用户一分钟之内触发短信发送的次数。可以借助 redis incr 命令实现缺点:临界问题:单位周期内,某一个时间点达到峰值,导致后续单位时间内无法访问。2.滑动窗口法在

2020-09-29 14:47:01 2739

原创 记一次tomcat启动卡死 JVM调优

由于后台不报错,且并不会结束掉tomcat进程,所以只能进行JVM分析。1.分析JVM可用 jstat,也可以使用 VisualVM 的 Visual GC 来分析JVM垃圾回收情况。这里发现频繁full GC这里使用 jmp 输出 dump 文件jmap -dump:format=b,file=e:\f.hprof 156562.借助 Eclipse Memory Analyzer 分析 dump文件详细使用说明可以参考这个博客导入dump文件后,可以明显发现 Fa..

2020-08-27 17:52:16 385

原创 Nacos 服务注册源码解析

nacos官方提供额架构图:Provider App:服务提供者 Consumer App:服务消费者 Name Server:通过VIP(Vritual IP)或者DNS的方式实现Nacos高可用集群的服务路由 Nacos Server:Nacos服务提供者,包含OpenApi访问入口,Config Service 和 Naming Service是Nacos的配置服务,名字服务模块。Consistency Protocol是一致性协议,用来实现Nacos集群接节点的数据同步,使用的是 Ra

2020-08-02 14:13:37 1557

原创 jedis记录用户常用模块生成实时排名

需求:拦截用户对不同类型模块的进入,新增,更新,删除 的操作,每次操作频率+1 , 实时显示用户当面所有模块的排名。要求设计时满足对历史数据的排行,比如某月,某年等时间段的排行。环境:由于项目没有针对redis 做持久化操作,所以每次项目启动需要重新加载数据库中的数据到缓存中。 由于此项目redis版本较老,使用的是2.6版本,并且使用的是 shardJedis + sentinel 的高可用模式 。 采用jedis访问redis最终形成页面如下:自定义注解:@Targe.

2020-07-29 16:53:37 380

转载 Java 8 新特性 Stream类的collect方法

1.Collectors.toList():转换成List集合。/Collectors.toSet():转换成set集合。System.out.println(Stream.of("a", "b", "c","a").collect(Collectors.toSet()));2.Collectors.toCollection(TreeSet::new):转换成特定的set集合。TreeSet<String> treeSet = Stream.of("a", "c", "b", .

2020-07-14 13:51:22 1504

原创 JAVA 设计模式相关

接口隔离原则单一原则接口隔离原则依赖倒转原则里氏替换原则子类中尽量不要重写父类的方法,适当的情况下,可以通过聚合,组合,依赖来解决问题,或者可以让类升级为基类开闭原则迪米特法则合成复用原则...

2020-07-09 14:27:50 114

原创 JVM 调优相关命令 jps jstat jinfo jmap jhat jstack

jps-q抑制类名,JAR文件名和传递给该main方法的参数的输出,仅生成本地VM标识符的列表。 -m输出传递给main方法的参数。对于嵌入式JVM,输出可能为null。 -l 将应用程序主类的完整软件包名称或完整路径名称输出到应用程序的JAR文件。 -v输出传递给JVM的参数。 -V输出通过标志文件(.hotspotrc文件或-XX:Flags = <filename>参数指定的文件)传递给JVM的参数。jstat监视虚拟机运行状态...

2020-07-09 13:09:54 1379

原创 服务升级

发布方式:蓝绿发布 滚动发布 灰度发布 (提前存好灰度规则)

2020-07-08 16:24:06 401

转载 表分区与分区表取舍

基本来说, 分区和分表带来的性能提升是一样的,由于分区实际上就可以认为是mysql底层来帮我们实现分表的逻辑了, 所以相对来说分表会比分区带来更高的编码复杂度(分区就根本不用考虑多表分页查询的问题了).从这个角度来说, 一般的业务直接分区就可以了.当然, 选择分区还是分表还是需要做一点权衡的:1. 表中的数据只有部分热点数据经常访问, 其他的不常访问的话, 适合用分区表2. 分区表相对容易维护, 可以针对单独一个分区进行检查,优化, 批量删除大量数据时, 分区表会比一般的表更快3. 分区表

2020-07-08 10:24:58 2096

原创 Java8 CompletableFuture 用法总结及Stream并行流对比

Shop计算相关类package com.future;import java.util.Random;import java.util.concurrent.CompletableFuture;import java.util.concurrent.Future;public class Shop { private String name ; public Shop(String name) { this.name = name; }...

2020-07-04 15:31:55 3531

原创 Mysql单表大量数据优化

批量插入300W数据,由于Innodb默认支持事物导致插入速度缓慢,先修改为MyISAMCREATE DEFINER=`root`@`localhost` PROCEDURE `proc_auto_insertdata`()BEGIN DECLARE init_data INTEGER DEFAULT 1; WHILE ...

2020-05-26 13:52:49 641

原创 Spring Cloud 实现方案

Spring Cloud 只时对外提供了一套标准的APISpring Cloud Netflix 是对Spring Cloud的一个实现Spring Cloud Alibaba 一样...

2020-04-07 21:50:19 212

原创 Redis 结构对应的业务场景

常用结构String 单值缓存 getset 对象缓存 set user:1 value(Json格式)Mset user:1:name lzh user:1balance 1888Mgetuser:1Mget Mset 适合改其中某一个字段 分布式锁 setNx key value :判断key是否存在 返回1表示获取成功 反之返回0...

2020-03-23 21:46:11 161

原创 前端绘图工具总结

d3.jsD3 (或者叫 D3.js )是一个基于 web 标准的 JavaScript 可视化库. D3 可以借助 SVG, Canvas 以及 HTML 将你的数据生动的展现出来. D3 结合了强大的可视化交互技术以及数据驱动 DOM 的技术, 让你可以借助于现代浏览器的强大功能自由的对数据进行可视化,兼容性是IE9+。three.jsthree.js是以webgl为基础的库,封装...

2020-02-21 18:17:58 2076

原创 Spring Cloud OAuth2

OAuth2优点在于,它允许开发人员与第三方服务提供商集成,使用这些服务进行用户验证授权,而无须不断的将用户凭据信息传递给第三方服务。OAuth2简介OAuth2是一个基于令牌的安全验证授权框架。它将安全性分解为一下4部分:受保护资源:例如微服务,确保通过验证并具有适当授权的用户才能访问。 资源所有者:定义那些应用程序可以调用其服务,那些用户可以访问该服务,以及可以使用服务完成哪些事...

2020-01-17 10:37:23 473

转载 MySQL 和PostgreSQL对比

MySQL和PostgreSQL是开源中用的最多的2个。一、两者的共同优势  这两个产品都属于开放源码的一员,性能和功能都在高速地提高和增强。MySQL AB的人们和PostgreSQL的开发者们都在尽可能地把各自的数据库改得越来越好,所以对于任何商业数据库使用其中的任何一个都不能算是错误的选择。  二、两者不同的背景  MySQL的背后是一个成熟的商业公司,而PostgreSQL的...

2019-12-04 15:34:32 733

原创 Spring Cloud Zuul 服务路由

为什么要使用服务网关在跨多个服务进行调用的过程中会遇到以下问题:在构建的每个服务中很难始终实现这些功能:开发人员专注交付,很容易忘记实现服务日志或跟踪等 正确是实现这些功能是一个挑战:每个在开发的服务进行诸如微服务安全的建立与配置可能是很痛苦的 这会在所有服务中创建一个顽固的依赖:在所有服务中共享的公共框架构建的功能越多,重新编译和部署或更改就越困难为了解决这个问题,需要将这些横切关...

2019-12-04 11:24:11 173

原创 TCC 分布式事务解决方案 tcc-tansaction

TCC模式:由阿里技术人员提出将一个任务拆分三个操作 Try,Confirm,Cancel如果有一个Func()方法,则在Tcc模式中就变成了三个方法:tryFuncconfirmFunccancelFuncTcc模式大致实现思路:主业务会向事务管理器注册并启动服务,事务管理器是一个概念上全局事务管理机制,它会生成全局的事务ID用于记录整个事务链路 主业务服务调用全部...

2019-11-27 10:46:39 548

原创 RocketMq实现分布式消息思路

代码侵入性大需要支持 回查ACK机制功能

2019-11-27 09:22:36 143

原创 消息队列在微服务场景中的可靠性模式原理梳理

场景一:主业务服务发送消息时可能因为消息队列无法使用而失败主业务服务将要发送的消息持久化到本地数据库中,标记状态为“待发送”,然后把消息发送给消息队列 消息队列接收到消息后,把消息持久化到自己的存储服务中,这时不是立即发送消息到子服务,而是立即向主服务(生产者)返回消息队列的结果 主服务接收到消息的返回结果,判断是否成功,失败则结束后续业务处理,设置本地持久化记录状态为“结束”,否则执行后...

2019-11-19 16:41:29 240

原创 windows 查看端口占用,关闭端口

netstat -aon|findstr "49895"tasklist|findstr "170412"任务管理器的详细信息中结束掉 pid 为 170412 进程

2019-11-08 09:25:56 149

原创 Spring Cloud Netflix Hystrix

客户端弹性模式4种客户端弹性模式:客户端负载均衡模式:Eureka Ribbon 断路器模式:当服务调用时,断路器将监视这个调用。如果用时太长,断路器会介入并中断调用,如果某一个远程资源的调用失败次数足够多,断路器将采取快速失败,阻止将来调用远程失败的资源 后备模式:当服务调用失败时,尝试通过其他方式执行操作,而不是生成一个异常 舱壁模式:可以把远程资源的调用分到线程池中,并降低一个...

2019-08-09 12:24:45 525

原创 Spring Cloud 服务发现 Eureka

传统方案与基于云的微服务方案在任何分布式架构中,都需要找到机器所在的物理地址。服务发现对于微服务和云的应用程序至关重要,主要有两个原因:可以快速的队在环境中运行的服务实例数量进行水平伸缩 有助于提高服务的弹性传统利用负载均衡器模式:这种模型适用于在企业数据中心内部运行的应用程序,以及在一组静态服务器上运行少量服务的情况,但对基于云的微服务应用程序来说,这种模型并不适用,原因...

2019-08-08 11:47:08 132

转载 bootstrap.yml 与 application.yml 区别

一、bootstrap.yml(bootstrap.properties)与application.yml(application.properties)执行顺序bootstrap.yml(bootstrap.properties)用来程序引导时执行,应用于更加早期配置信息读取,如可以使用来配置application.yml中使用到参数等application.yml(applicatio...

2019-08-08 10:20:25 1642

原创 Spring Cloud Config 配置服务器控制配置

将服务配置与服务代码分开 管理配置分离:将服务配置信息与服务的史记物理部署完全分离开 抽象:将访问配置数据的功能抽象到一个服务接口中 集中:将应用程序配置集中在尽可能少的数据库中 稳定:保证高可用和冗余配置管理架构:解决方案: 配置Spring Cloud 配置服务器 使用Spring Cloud 配置服务器原因:易于搭建和使用 与Sprin...

2019-08-07 17:05:40 105

原创 spring-boot-starter-actuator 查看服务健康状况

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId></dependency>帮助用户了解和管理服务的健康状况...

2019-08-07 10:08:24 653

转载 主流Java数据库连接池分析(C3P0,DBCP,TomcatPool,BoneCP,Druid)

主流数据库连接池常用的主流开源数据库连接池有C3P0、DBCP、Tomcat Jdbc Pool、BoneCP、Druid等C3p0: 开源的JDBC连接池,实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate、Spring等。单线程,性能较差,适用于小型系统,代码600KB左右。DBCP (Database Connectio...

2019-07-31 16:25:53 238

原创 Tomcat 参数配置

Executor的主要属性包括:name:该线程池的标记 maxThreads:线程池中最大活跃线程数,默认值200(Tomcat7和8都是) minSpareThreads:线程池中保持的最小线程数,最小值是25 maxIdleTime:线程空闲的最大时间,当空闲超过该值时关闭线程(除非线程数小于minSpareThreads),单位是ms,默认值60000(1分钟) daemon:...

2019-07-31 16:09:17 929

原创 Redisson 简介

概述Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。其中包括(BitSet,Set,Multimap,SortedSet,Map,List,Queue,BlockingQueue,Deque,BlockingDeque,Semapho...

2019-07-23 09:11:03 3796

转载 SpringCloud服务消费者:restTemplate和feignClient

1、概述在springCloud微服务架构下,各个业务会被拆分为独立的微服务。那么我们如何解决服务间调用的问题,springCloud默认提供了两种方式:restTemplate和feignClient2、两者的区别restTemplate:使用起来较为麻烦,需要自己指定ribbon的负载均衡,但参数较灵活,请求的路径可以使用程序灵活控制。feignClient:手机简单,默认集成...

2019-07-19 09:48:58 647

转载 MySQL 5.7 中文全文检索使用教程

在MySQL 5.7.6之前,全文索引只支持英文全文索引,不支持中文全文索引,需要利用分词器把中文段落预处理拆分成单词,然后存入数据库。从MySQL 5.7.6开始,MySQL内置了ngram全文解析器,用来支持中文、日文、韩文分词。本文使用的MySQL 版本是5.7.22,InnoDB数据库引擎。ngram全文解析器ngram就是一段文字里面连续的n个字的序列。ngram全文解析器能...

2019-07-17 20:42:00 391

原创 Mysql 5.6 5.7 8.0改动

5.6在 MySQL 5.5 发布两年后,Oracle 宣布 MySQL 5.6 正式版发布,首个正式版版本号为 5.6.10。在 MySQL 5.5 中使用的是 InnoDB 作为默认的存储引擎,而 5.6 则对 InnoDB 引擎进行了改造,提供全文索引能力,使 InnoDB 适合各种应用场景。此外,子查询的性能提升也是 MySQL 5.6 的主要任务之一,5.6 中使用一种半连接(s...

2019-07-13 11:17:12 4291

转载 InnoDB介绍

InnoDB是事务安全的mysql存储引擎,也是mysql的默认存储引擎,特点是行锁设计、支持MVCC、支持外键、提供一致性非锁定读。同时也被设计用来最有效地利用以及使用内存和CPU。1. InnoDB逻辑存储结构从InnoDB存储引擎的逻辑存储结构来看,所有数据都被逻辑地存放在一个空间中,称之为表空间。表空间依次由段(segment)、区(extent)、页(page)组成。页有时候也叫...

2019-07-13 09:41:57 1467

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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