自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

java

  • 博客(60)
  • 收藏
  • 关注

原创 Mybatis源码分析

在我们工作中一般都是spring + mybatis组合使用,试想,如果单独使用Mybatis Api如何使用呢? @Test public void testUserFind() throws IOException { //1.读取mybatis全局配置文件,创建sqlSessionFactory String resource = "mybatis-config.xml"; InputStream inputStream = Re.

2021-11-10 15:36:42 631

原创 mysql 表分区性能问题

最近同事说表数据量比较大,想使用分区来解决查询慢的问题。听到这个想法后,直观感觉是可行的。比如把100W数据按时间范围分到5个分区表里,每个分区表中才20万数据,如果我们根据日期去范围查询时,会被路由到部分分区中扫描数据,肯定比扫描全量数据100万要快。但是,经过思考,感觉好像有点问题。分区表主要作用是根据分区字段来确定要查询的分区,以此来减少扫描记录数。但索引不也是干这个事儿的嘛?那如果我们在日期上(也是分区字段)加上索引,引擎会使用索引树查询还是用表分区查...

2021-07-01 18:03:39 1599

原创 Mysql InnoDB 执行流程

本文章通过一次update来总结下InnoDB的运行流程,从中也加深下 mysql中 redolog、undo log 的作用。当我们执行下面的语句时:BEGIN; UPDATE student SET age = 3 WHERE id = 1;COMMIT;1、根据更新条件从硬盘读取id=1的数据页到 buffer poll的内存页中。并且对该记录的索引进行加锁。2、对内存页中id=1的这条数据先写入到undolog中文件。方便后面回滚操作,并且其他事物当前时...

2021-04-06 12:26:42 459

原创 Spring Boot Actuator 监控线程池

在我们一个分布式系统中,一般都会有一个或多个固定的线程池来处理我们提交的任务。很多时候我们需要关注线程池的运行情况,根据情况来调整我们线程池参数。

2020-12-09 19:46:29 3909 1

原创 Guava RateLimiter 源码

今天看了下GuavaRateLimiter的源码,简单记录下时间窗口内限流常用算法有计算的,令牌桶和漏桶算法。RateLimiter算是令牌桶算法吧。刚开始我以为是使用一个单独的线程在指定时间间隔生产令牌存入桶中,获取时就去减少令牌,当没有可用令牌时就Blocking线程直到生产线程唤醒(类似阻塞队列原理)。看了源码发现Guava使用了更加简单高效的方式完成了令牌桶限流功能。这里说下相对简单的实现类SmoothBursty。使用方式://每妙生产一个令牌RateLimi...

2020-12-02 10:11:41 128

原创 Spring Cache 源码分析

今天简单分析下了SpringCache的原理,记录下分析过程当我们在Springboot下使用SpringCache时,需要使用@EnableCaching 注解开启Cache装配的,所以就从这里入手:@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Import(CachingConfigurationSelector.class)public @interface Enab...

2020-11-06 16:26:40 304 2

原创 AbstractQueuedSynchronizer 源码分析(二)

AQS 上一篇分析接着上次分析,这次把ConditionObject功能分析下当我们使用BlockingQueue的时候,消费者端从队列里获取过元素发现为空,当前线程就会await。当生产者把数据put到Queue时候被阻塞的线程将被唤醒。这种情况下的线程排队等待和被选唤醒就是由ConditionObject这个类来管理的我们先来看下ArrayBlockingQue...

2020-04-20 17:54:10 99

原创 AbstractQueuedSynchronizer 源码分析

最近了解了下AQS的大致原理,大致记录下AQS 我个人认为是一个协调多线程同步执行的框架。我们可以在AQS的基础上方便的实现一个自定义的线程协调工具类。比如自己实现一个简单的加锁、解锁的工具类。这里我分析下常用的锁工具类ReentrantLock。根据这个类的实现去了解下AQS的大致原理。(说明:有些地方没看懂!~~)一、重要属性:内部类Node 、st...

2020-04-19 21:49:05 155

原创 Netty Pipeline 事件流转

在上篇文章中,我们最后说worker读取到数据,将数据封装成事件增加到管道中流转、处理。今天我们来分析下整个事件的流转过程。说明:源码版本 netty 3.10+看老的版本的原因是早期版本封装性相对新版本比较低,这样好读一些。首页我们看下 NioWorker类中的read方法: @Override protected boolean read(Selectio...

2020-02-03 16:39:02 481

原创 Netty 线程模型

都说Netty是一款高性的网络框架,很多分布式通讯框架底层都是采用Netty,如:dubbo。所以想了解下Netty是如何做到高性能的。下面是近期的一些学习总结。netty版本目前有3.x 、 4.x 、 5.x几个版本。下面的源码和总结主要是针对3.x版本。要了解netty首页需要了解下NIO相关知识。netty是对JDK的NIO进行了优化改造和封装,使得开发变的更加简单...

2020-01-31 17:12:09 168

原创 秒杀总结

一、系统基本架构二、系统性能优化web站点层 :2.1 nginx和后端服务开启 keepalive避免海量连接的创建。查看当前nginx和某个tomcat的连接情况: ngtstat -an | grep ip | grep ESTABLISHED2.2商品基本信息等使用openresty开启nginx内存缓存dict。使用...

2020-01-25 16:02:08 257

原创 Rabbit MQ ——集群高可用(四)

一,高可用、集群模式1. 主备模式(Warren)这种方式实现起来非常简单,如果并发和数据量不高的情况下,这种模式是非常适合的。这种模式并非是多个服务实例提供服务,只有主节点服务提供服务,从节点不对外提示服务支持,当主节点挂掉时会将从节点升级为主节点对外提供服务。搭建这种模式需要Haproxy组件的支持,来检测和完成主备切换的工作。2.远程模式(Shovel...

2019-10-22 22:24:36 298

原创 Rabbit MQ ——API的使用(三)

RabbitMq有很多使用方式,里面我将常用的几种方式列出,以便日后回故:一,原生java API方式 :maven依赖: <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> ...

2019-10-19 14:52:27 373

原创 Rabbit MQ —— 高级特性(二)

一,消息的可靠性投递生产端可靠性投递1,保障消息的成功发出2,保障Broker节点成功接收到信息3,发送端能收到Broker节点确认应答4,有消息进行补偿机制。解决方案一:1,消息落库,对消息状态进行标记,在发送mq消息前先进行消息记录的落地,然后发送消息到Broker中,当Broker收到消息确认应答后修改消息的状态。如果某个消息没有得到Broker的应答...

2019-10-08 22:06:57 116

原创 nginx 开机启动脚本

/etc/init.d/nginx#!/bin/sh# chkconfig: 2345 90 10# description: nginx# Simple nginx init.d script conceived to work on Linux systems# as it does use of the /proc filesystem.REDISPOR...

2019-09-24 16:40:13 279

原创 Rabbit MQ ——基本概念(一)

最近在学习rabbit mq,记录下相关概念目前 MQ中简介的产品有很多,什么样的场景下适合全rabbit mq呢?首先我们要对比下目前主流的MQ的特点:1. ActiveMq :如果你使用java开发,并且对性能要求不是特别高完全可以选择activemq,这款mq是个老牌产品了,aip非常完善,完全支持JMS规范。可以轻松的整合到spring 、支持集群部署。在中小型...

2019-09-22 20:23:35 342

原创 nginx 高性能分析

1.基于linux的epollIO模型:条是linux的内核版本高于2.6什么是epoll模型呢?首先说下linux的 select多路利用模型:简单来说就是使用select函数 同时监听多个客户端的连接(传递的多个文件描述符),来确认客户端连接状态是否有变化,如果连接状态有变化(可读、可写、连接请求)则唤醒自己,然后遍历所有自己监听的连接状态,找到发生变化的连接(可以...

2019-09-08 17:15:09 190

原创 Spring Cloud 搭建

最近在学习spring cloud ,记录下在整个框架搭建注意事项。版本:SpringBoot : 2.0.9.RELEASESpringCloud : Finchley.SR4一 、说明:使用SpringCloud全家桶组件:eureka(注册中心) + config(动态配置中心) + zuul( 网关 ) + ope...

2019-09-01 14:22:19 438

原创 redis 高并发下的双写一致性

一,什么情况下使用双写?在电商系统中,一部分数据是要实时显示给用户的,例如:商品的价格,商品的库存等。在交易系统中,用户委托数量,成交量等。以上这些数据变更后需要第一时间显示给用户,但并发量又相当高。这时我们就需要将数据进行双写(数据库写,redis写)。双写常见的有以下两种策略:一.先删除缓存再更新数据库二.先更新数据库再删除缓存注:数据...

2019-07-27 21:35:18 861

原创 redis 集群 (cluster) 原理

一,什么情况下使用 redis cluster架构?当我们使用redis的主从架构+哨兵时,只能保障redis的高可用和水平扩充读并发上限,并不能水平扩展redis的存储容量。每一个(主节点和从节点)保存的信息量是一样的。如果我系统中要缓存的数据量不多,几个G的话,建议使用redis主从+哨兵架构。如果系统中要缓存海量数据,则使用redis cluster架构。...

2019-07-14 19:48:55 947

原创 redis 哨兵(sentinal)原理

当我们使用redis的主从架构时存在一个问题。当master节点挂掉时,redis服务将不可用。需要人工干预,修改配置。sentinal就是为了解决redis的高可用问题。主要功能如下:1.监控所用节点(master,slave)的运行状态。2.消息通知,当一个节点出现故障时,可能通过提供的API向管理员发送消息提醒。3.故障转移,当master节点...

2019-07-06 16:00:26 756

原创 redis 主从架构 replication原理

单台redis支撑的最大并发数大概在几万到十几万不等。当我们系统中,并发数高过单台redis所能支撑的上限时,我们就需要对redis进行水平扩展。最简单的方式就是搭建主从架构、读写分离。因为大多数情况下都是读多写少,所以我们系统中一般要解决的就是读并发的问题。一,redis主从复制原理redis的replication一共分两种操作:1. resync 重新同步。当slave...

2019-07-01 08:41:45 186

原创 redis持久化 RDB AOF

一,为什么要持久化分两种情况。第一种:如果你的项目比较小,只是利用redis做为纯内存,存一字典、配置参数等少量的数据的话,那么是没必要开发持久化功能的。第二种:项目比较大、用户量大、并发比较高、海量数量、为了提高响应速度将大量的数据放入缓存中。因为内存的资源是宝贵的、所以不可能将所有数据放入内存中,这时候一般情况下就需要进行缓存预热。经过预热后,将热点数据加载到内...

2019-06-30 14:19:41 111

原创 hystrix 总结

hystrix是什么?hystrix是保证系统高可用的框架。主要通过线程资源隔离、熔断、超时、降级、限流来保证。举例说明:比如我们系统中要调用第三方短信发送的服务,如果调用时、出现网络不稳定或短信服务故障时,会造成我们自己系统(tomcat)大量线程阻塞,系统资源耗尽等问题。最终导致系统不可用。在高并发情况下,如果我们直接调用短息服务接口,因有大量的...

2019-03-24 20:48:04 279

原创 Spring 适配模式应用

需求:完成多通道支付系统,例如支持微信支付,支付宝支付等,后续会持续集成其他支付通道。条件:为下游商户提供一个统一的下单接口,根据参数、通道标识码来调用对就的通道完成下单。思路:遇到这种情景,首先想到的是使用适配模式来完成。项目框架是spring体系,所以要在pring下来做适配模式。解决各种 if else ,使不同通道代码解耦,并易扩展其他支付通道...

2019-03-13 20:37:29 371

原创 基于STOMP协议的WebSocket

 使用spring websocket 有两种方式: 1.SpringFramework提供了一个WebSocketAPI,您可以使用它来编写处理WebSocket消息的客户端和服务器端应用程序。@Configuration@EnableWebSocketpublic class WebSocketConfig implements WebSocketConfigurer {...

2019-01-21 22:36:37 2084 2

原创 微服务总结

说明:整个架构学习总结是建立在李运华老师的课程之上。 一、微服务和SOA区别:1、服务力度SOA用ESB作为服务间通信组件。负者服务定义,服务路由,消息转换,消息传递。多个服务的协议和数据格式都不统一。而微服务使用统一协议和数据格式。 2、服务间通讯SOA服务力度更粗一些,例如员工管理系统服务。而微服务力度更细一些。例如员工注册服务。 3、服务交付SOA...

2019-01-15 21:48:21 136

原创 应对接口级故障处理总结

说明:整个架构学习总结是建立在李运华老师的课程之上。接口故障是指机器并没有停机,网络也正常。但业务出现问题,比如响应缓慢,超时等异常。这种问题一般都是服务器压力过大导致的。 解决方案: 1.降级就是停掉一些非核心的业务功能。例如双11的时候,订单数量不显示。不支持售后服务等。保证核心功能的使用。  2.熔断熔断和降级的区别:2.1.降级针对的是应对自身系...

2019-01-03 21:01:58 804

原创 缓存学习总结

说明:整个架构学习总结是建立在李运华老师的课程之上。 一、为什么要使用缓存1.关系数据库存储的是行记录,无法存储数据结构 2.关系数据库的 schema 扩展很不方便 3.关系数据库在大数据场景下 I/O 较高,性能问题 4.关系数据库的全文搜索功能比较弱 针对上述问题,分别诞生了不同的 NoSQL 解决方案。 二、NoSQL分类1.K-V ...

2019-01-02 20:52:30 188

原创 CAP 定理学习总结

说明:整个架构学习总结是建立在李运华老师的课程之上。 对于设计分布式系统,CAP理论是非常重要的,CAP定理又被称作布鲁尔定理(Eric Brewer),2000年的ACM PODC 上提出的猜想。 在一个分布式系统中,当涉及读写操作时,只能保证一致性(Consistence)、可用性(Availability)、分区容错性(Partition Tolerance)三者中的两个,另...

2018-09-27 22:46:25 468

原创 Spring Boot 下使用 Spring Batch

公司有个小需求,就是将老平台用户信息和用户的资产信息迁移到新平台上。功能是实现起来是很简单。大概流程:1.读取老平台用户2.将读取到老平台用户信息转成新平台用户信息(还有其他的基本信息)的bean。3.将bean写入到新平台。 这时突然想到了Spring Batch 框架,之前了解过,但一直没实践过。上面的需求感觉很适合用这个轻量级框架。下面记录下,方便以后类似需求使用时参...

2018-09-20 17:40:07 845

原创 coinex架构设计v.1.0

最近项目由于并发太高(支持量化交易工具刷单)。重新设计了下系统部分架构,供以后回顾鄙视。。哈哈如下: 

2018-09-16 12:39:11 230

原创 架构设计的基石

设计架构的目的:为了解决软件系统复杂度带来的问题。切记,不能为了炫耀自己的技术而去设计。不能贪大求全。 复杂度的6个来源: 1. 高性能1.1.任务分配:不同的任务分配到不同的机器上执行。1.2任务分解:把复杂的业务系统拆分成小而简单的组成部分。但拆分过细会已指数级别增加系统间的调用 ,反而会让系统性能下降。 2.高可用2.1.本质上都是用冗余来实现高可用。...

2018-09-10 01:06:10 216

原创 IO网络模型学习总结

学习源:https://blog.csdn.net/yinwenjie/article/details/48274255 常用的网络IO:阻塞式同步IO、非阻塞式同步IO、多路复用IO、和真正的异步IO。这些IO模式都是要靠操作系统进行支持,应用程序只是提供相应的实现,对操作系统进行调用。 1.1 阻塞和非阻塞是针对应用程序来说的。    阻塞在程序中表现为:        S...

2018-09-08 15:39:59 211

原创 StringBoot Admin 2.0

这里用最简单的方式配置 一、首先配置Spring Boot Admin Server端: 1.1.pom.xml  &lt;dependency&gt; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-starter-web&lt;/a...

2018-08-30 20:54:43 328

原创 Websocket + Spring Session 的异常 Unexpected use of scheduler

当我们使用Spring websocket 和 spring session时,当启动项目时会报错:    配置情况 : 都有启动。  解决办法: 让websocket配置类继承AbstractSessionWebSocketMessageBrokerConfigurer,重写:    @Override    protected ...

2018-07-21 18:19:28 2551 1

原创 nginx同源ip限制请求数和连接数

http { include mime.types; default_type application/octet-stream; #每妙中向同一Ip的桶里放10个令牌(漏桶原理)注:准确来说是100毫秒放一个令牌 #zone=addr:10m: one的共享内存zone用来存储$binary_remote_addr的请求状态. #供下面的 limit_re...

2018-06-28 18:17:35 810

原创 查找进程的pid并杀死后重启服务——shell简易版

#!/bin/bash#获取XXX项目进程IDSERVICE_NAME="statisticsservice-0.0.1-SNAPSHOT.jar"service_pid=`ps -ef | grep $SERVICE_NAME | grep -v grep | awk '{print $2}'`echo "进程ID为:$service_pid"#杀进程echo "kil...

2018-06-20 22:16:48 4446

转载 Linux非root用户daemon模式启动tomcat服务

原文连接:https://www.cnblogs.com/xyzx0326/p/5367797.html2、Tomcat8 配置1)下载 Tomcat 8 并上传到服务器,这里我下载的是 apache-tomcat-8.0.32.tar.gz 版本2)配置单独用户 tomcat 运行 Tomcat8 服务,这这里配置的 tomcat 是无登录权限的账户groupadd tomcatuseradd...

2018-06-07 16:30:15 2561

原创 Spring Boot maven 打成war tomcat 运行

springboot的应用打包默认是打成jar包,web项目默认使用内置的tomcat支持。但有时候我们需要打成war包放到指定tomcat中运行。1. &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt; &lt;artifactId&gt;interface&lt;/artifactId&gt; &lt;packaging&gt;war&lt;/pa...

2018-06-07 15:49:01 271

空空如也

空空如也

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

TA关注的人

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