- 博客(196)
- 资源 (6)
- 收藏
- 关注
转载 闲谈Tomcat性能优化
Tomcat在各位JavaWeb从业者常常就是默认的开发环境,但是Tomcat的默认配置作为生产环境,尤其是内存和线程的配置,默认都很低,容易成为性能瓶颈.幸好Tomcat还有很多的提升空间.下文介绍一下Tomcat优化,可以分为内存,线程,IO.一:Tomcat内存优化,启动时告诉JVM我要一块大内存(调优内存是最直接的方式)Windows 下的catalina.batLinux...
2019-04-10 21:10:24
302
原创 Tomcat Connector三种运行模式(BIO, NIO, APR)的比较和优化
昨天看到基础平台做了线上Tomcat配置优化的文章,借此了解下Tomcat三种运行模式!Tomcat Connector的三种不同的运行模式性能相差很大,有人测试过的结果如下:这三种模式的不同之处如下:BIO:一个线程处理一个请求。缺点:并发量高时,线程数较多,浪费资源。Tomcat7或以下,在Linux系统中默认使用这种方式。NIO:利用Java的异步IO处理,...
2019-04-10 07:11:04
422
原创 RandomLoadBalance
今天总结下之前看过的dubbo源码中RandomLoadBalance使用的算法!一:每个服务的权重不同算法分析:在该段代码中,通过获取提供者服务的权重,然后计算出总权重,通过总权重计算出offset,然后在减去每个服务的权重,如果发现小于0,则调用当前服务。例:有3个服务 A,B,C其中A的权重为1,B的权重为2,C的权重为3;此时的invokers中的服务的顺序有6种情...
2019-04-02 21:56:12
625
原创 docker 基本原理及快速入门
今天简单总结下docker相关知识!什么是dockerDocker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。Docker 自开源后受到广泛的关注和讨论,以至于 dotCloud...
2019-04-02 21:46:10
232
原创 数据库的联合索引
今天简单总结下联合索引相关的知识!数据库表T有A,B,C三个字段,对其建立联合索引uniq(A,B,C),请问如下查询哪些会用到索引?1. SELECT * FROM T WHERE A=a AND B=b AND C=c;2. SELECT * FROM T WHERE A=a AND B=b;3. SELECT * FROM T WHERE A=a AND C=c;4. SE...
2019-03-30 21:18:13
868
转载 Mybatis执行流程分析(源码篇)
1. SqlSessionFactory 与 SqlSession. 通过前面的章节对于mybatis 的介绍及使用,大家都能体会到SqlSession的重要性了吧, 没错,从表面上来看,咱们都是通过SqlSession去执行sql语句(注意:是从表面看,实际的待会儿就会讲)。那么咱们就先看看是怎么获取SqlSession的吧:(1)首先,SqlSessionFactoryBuild...
2019-03-12 22:43:54
188
原创 CAS原理及使用
概念介绍:CAS (Central Authentication Service)中央认证服务,CAS 是 耶鲁大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法。其包括两部分: CAS Server 和 CAS Client 。CAS Server负责完成对用户的认证工作 ,会为用户签发两个重要的票据:登录票据(TGT)和服务票据(ST)来实现认证过程, CAS ...
2019-02-26 15:51:40
910
原创 @Primary-在spring中常被忽视的注解
在spring 中使用注解,常使用@Autowired, 默认是根据类型Type来自动注入的。但有些特殊情况,对同一个接口,可能会有几种不同的实现类,而默认只会采取其中一种的情况下 @Primary 的作用就出来了。下面是个简单的使用例子。有如下一个接口public interface Singer { String sing(String lyrics);}有下面的两个实...
2019-02-18 15:15:04
156
转载 Nginx 通过 Lua + Redis 实现动态封禁 IP
一、背景为了封禁某些爬虫或者恶意用户对服务器的请求,我们需要建立一个动态的 IP 黑名单。对于黑名单之内的 IP ,拒绝提供服务。二、架构实现 IP 黑名单的功能有很多途径:1、在操作系统层面,配置 iptables,拒绝指定 IP 的网络请求;2、在 Web Server 层面,通过 Nginx 自身的 deny 选项 或者 lua 插件 配置 IP 黑名单;3、在应用层...
2019-01-31 11:11:01
325
转载 MySQL高可用架构之MHA
一、MHA简介 MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司的youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换...
2019-01-31 11:04:18
353
转载 Filebeat+Kafka+Logstash+ElasticSearch+Kibana搭建完整版
1. 了解各个组件的作用Filebeat是一个日志文件托运工具,在你的服务器上安装客户端后,filebeat会监控日志目录或者指定的日志文件,追踪读取这些文件(追踪文件的变化,不停的读)Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据Logstash是一根具备实时数据传输能力的管道,负责将数据信息从管道的输入端传输到管道的输出端;与此同时这根管...
2019-01-31 10:47:08
1863
1
原创 RabbitMQ事务和Confirm发送方消息确认
正常情况下,如果消息经过交换器进入队列就可以完成消息的持久化,但如果消息在没有到达broker之前出现意外,那就造成消息丢失,有没有办法可以解决这个问题?RabbitMQ有两种方式来解决这个问题:通过AMQP提供的事务机制实现; 使用发送者确认模式实现;一、事务使用事务的实现主要是对信道(Channel)的设置,主要的方法有三个: channel.txSelect()声明启动...
2019-01-13 19:24:46
345
原创 mongodb查询内嵌文档
mongodb查询内嵌文档假设有这样一个文档:db.XXX.remove();db.XXX.insert({"id":1, "members":[{"name":"BuleRiver1", "age":27, "gender":"M"}, {"name":"BuleRiver2", "age":23
2019-01-13 11:35:03
656
原创 MQ消息最终一致性事务
本文我们将学习到一种常见的柔性事务解决方案:消息一致性事务方案。对于TCC型事务,跨系统的调用均是基于服务间的直接调用,即很大程度上是同步调用。基于TCC方案能够保证主子事务同时成功,同时失败。但实际开发中,由于多方面的考虑,我们会将服务拆分为异步方式,一般是基于MQ进行服务间的解耦,服务发起方执行完本地业务操作后发送一条消息给到消息中间件(比如:RocketMQ、RabbitMQ、Kaf...
2019-01-12 10:54:27
2467
原创 Git关联到新的远程分支
1、如果你已经在远程创建了一个分支,远程分支地址:https://xxxxxxx/wangdong/helloworld.git 2、从命令行创建一个新的仓库,关联到该远程分支touch README.mdgit initgit add README.mdgit commit -m "first commit"git remote add origin https://xxxxxx...
2018-12-23 11:59:18
2461
原创 git回滚到任意版本
先显示提交的log$ git log -3commit 4dc08bb8996a6ee02fAuthor: Mark <xxx@xx.com>Date: Wed Sep 7 08:08:53 2016 +0800 xxxxxcommit 9cac9ba76574da2167Author: xxx<xx@qq.com>Date: Tue ...
2018-12-23 10:29:50
187
转载 TX-LCN分布式事务原理介绍
框架介绍LCN分布式事务框架其本身并不创建事务,而是基于对本地事务的协调从而达到事务一致性的效果核心步骤创建事务组是指在事务发起方开始执行业务代码之前先调用TxManager创建事务组对象,然后拿到事务标示GroupId的过程。添加事务组添加事务组是指参与方在执行完业务方法以后,将该模块的事务信息添加通知给TxManager的操作。关闭事务组是指在发起方执行完业务代码以后,将...
2018-11-26 17:02:13
437
原创 分布式事务解决方案框架(LCN)
事物概念事物特性(ACID)原子性(A)所谓的原子性就是说,在整个事务中的所有操作,要么全部完成,要么全部不做,没有中间状态。对于事务在执行中发生错误,所有的操作都会被回滚,整个事务就像从没被执行过一样。一致性(C)事务的执行必须保证系统的一致性,就拿转账为例,A有500元,B有300元,如果在一个事务里A成功转给B50元,那么不管并发多少,不管发生什么,只要事务执行成功了,那...
2018-11-26 13:33:00
270
原创 内存屏障
内存屏障(Memory barrier)为什么会有内存屏障每个CPU都会有自己的缓存(有的甚至L1,L2,L3),缓存的目的就是为了提高性能,避免每次都要向内存取。但是这样的弊端也很明显:不能实时的和内存发生信息交换,分在不同CPU执行的不同线程对同一个变量的缓存值不同。 用volatile关键字修饰变量可以解决上述问题,那么volatile是如何做到这一点的呢?那就是内存屏障,内存屏障...
2018-11-24 17:43:56
174
原创 synchronized的实现原理
常见三种使用方法: 1)普通同步方法,锁是当前实例; 2)静态同步方法,锁是当前类的Class实例,Class数据存在永久代中,是该类的一个全局锁; 3)对于同步代码块,锁是synchronized括号里配置的对象。 Java中的每个对象都可以作为锁。当一个线程访问同步代码块时,需要首先获取锁,退出代码块或抛出异常时必须释放锁 “锁”到底是个什么东东?...
2018-11-24 17:39:18
167
原创 并发框架Disruptor场景应用
今天用一个停车场问题来加深对Disruptor的理解。一个有关汽车进入停车场的问题。当汽车进入停车场时,系统首先会记录汽车信息。同时也会发送消息到其他系统处理相关业务,最后发送短信通知车主收费开始。看了很多文章,里面的代码都是大同小异的,可能代码真的是很经典。以下代码也是来源网络,只是自己手动敲的,加了一些注释。代码包含以下内容:1) 事件对象Event2)三个消费者Handler3)一...
2018-11-21 11:40:46
426
原创 互联网 API 接口幂等性设计
WEB 资源或 API 方法的幂等性是指一次和多次请求某一个资源应该具有同样的副作用。幂等性是系统的接口对外一种承诺(而不是实现), 承诺只要调用接口成功, 外部多次调用对系统的影响是一致的。幂等性是分布式系统设计中的一个重要概念,对超时处理、系统恢复等具有重要意义。声明为幂等的接口会认为外部调用失败是常态, 并且失败之后必然会有重试。例如,在因网络中断等原因导致请求方未能收到请求返回值的情况下,...
2018-11-15 14:06:08
237
原创 Nginx配置之负载均衡、限流、缓存、黑名单和灰度发布
一、Nginx安装(基于CentOS 6.5)1.yum命令安装yum install nginx –y(若不能安装,执行命令yum install epel-release)2. 启动、停止和重启service nginx startservice nginx stopservice nginx restart浏览器中 输入服务器的 ip 地址,即可看到相应信息3. ...
2018-11-15 14:04:23
552
原创 nginx如何设置防盗链
首先,我们来看下nginx如何设置防盗链如果您使用的是默认站点,也就是说,您的站点可以直接输入服务器IP访问的,使用root登录,修改 /usr/local/nginx/conf/nginx.conf 这个配置文件。如果您新建了站点,那么修改/usr/local/nginx/conf/vhost/你的域名.conf 这个配置文件,找到: 1 2 3 4 ...
2018-11-15 13:24:42
171
原创 责任链模式在tomcat的应用
一、责任链模式责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。 责任链模式涉及到的角色如下所示: ● 抽象处理者(Handler)角色:定义出一个处理请求...
2018-10-14 10:30:21
361
原创 CentOS7 Tomcat 启动过程很慢,JVM上的随机数与熵池策略
1. CentOS7 Tomcat 启动过程很慢在centos启动官方的tomcat时,启动过程很慢,需要几分钟,经过查看日志,发现耗时在这里:是session引起的随机数问题导致的:14-Jul-2016 04:14:22.900 INFO [localhost-startStop-1] org.apache.catalina.util.SessionIdGenerator.creat...
2018-09-20 18:38:55
511
原创 数据库分库分表——扩容无须数据迁移的分片算法
扩容无须数据迁移的分片算法常见的分库分表方案大都用主键mod一个数(如分为8个库,则 id % 8 根据余数决定落到哪个分片)。此种方案中,如果要拓展数据库将是十分复杂的事情(例如拓展为10个,则代码需要改为 id % 10 之前的旧数据也要做迁移)。我们希望有一种支持自由规划无须数据迁移和修改路由代码的Sharding扩容方案。方案设计在Twitter-Snowflake分库分表算法...
2018-09-17 22:07:35
4154
5
原创 分布式系统接口幂等性
1.幂等性定义1.1 数学定义在数学里,幂等有两种主要的定义:在某二元运算下,幂等元素是指被自己重复运算(或对于函数是为复合)的结果等于它自己的元素。例如,乘法下唯一两个幂等实数为0和1。 即 s *s = s 某一元运算为幂等的时,其作用在任一元素两次后会和其作用一次的结果相同。例如,高斯符号便是幂等的,即f(f(x)) = f(x)。1.2 HTTP规范的定义在HTT...
2018-08-28 21:46:13
165
原创 tcp粘包和拆包的处理方案
随着智能硬件越来越流行,很多后端开发人员都有可能接触到socket编程。而很多情况下,服务器与端上需要保证数据的有序,稳定到达,自然而然就会选择基于tcp/ip协议的socekt开发。开发过程中,经常会遇到tcp粘包,拆包的问题,本文将从产生原因,和解决方案以及workerman是如何处理粘包拆包问题的,这几个层面来说明这个问题。什么是粘包拆包对于什么是粘包、拆包问题,我想先举两个简单的应...
2018-08-26 17:09:31
167
原创 MYSQL分页limit速度太慢优化方法
在mysql中limit可以实现快速分页,但是如果数据到了几百万时我们的limit必须优化才能有效的合理的实现分页了,否则可能卡死你的服务器哦。 当一个表数据有几百万的数据的时候成了问题! 如 * from table limit 0,10 这个没有问题 当 limit 200000,10 的时候数据读取就很慢,可以按照一下方法解决 第一页会很快 PERCONA ...
2018-08-26 16:41:01
358
原创 MongoDB中ObjectId生成规则参考
MongoDB中我们经常会接触到一个自动生成的字段:”_id”,类型为ObjectId。本文会详解ObjectId的构成和使用。ObjectId构成之前我们使用MySQL等关系型数据库时,主键都是设置成自增的。但在分布式环境下,这种方法就不可行了,会产生冲突。为此,MongoDB采用了一个称之为ObjectId的类型来做主键。ObjectId是一个12字节的 BSON 类型字符串。按照字节...
2018-08-26 16:29:27
1990
原创 桥接模式
桥接模式(Bridge)是一种结构型设计模式。Bridge模式基于类的最小设计原则,通过使用封装、聚合及继承等行为让不同的类承担不同的职责。它的主要特点是把抽象(Abstraction)与行为实现(Implementation)分离开来,从而可以保持各部分的独立性以及应对他们的功能扩展。桥接模式的角色和职责:1.Client 调用端这是Bridge模式的调用者。2.抽象类(Abst...
2018-08-21 23:13:52
125
原创 GitLab配置ssh key
打开本地git bash,使用如下命令生成ssh公钥和私钥对 ssh-keygen -t rsa -C 'xxx@xxx.com' 然后一路回车(-C 参数是你的邮箱地址) 然后打开~/.ssh/id_rsa.pub文件(~表示用户目录,比如我的windows就是C:\Users\Administrator),复制其中的内容 打开gitlab,找到Profile ...
2018-08-21 14:01:40
1087
原创 聚簇索引和二级索引
聚簇索引索引和数据存储在一块( 都存储在同一个B*tree 中)。 一般主键索引都是聚餐索引Mysql中InnoDB引擎的主键索引为聚簇索引,MyISAM存储引擎采用非聚集索引非聚簇索引索引数据和存储数据是分离的。二级索引(辅助索引)二级索引存储的是记录的主键,而不是数据存储的地址。以Mysql的InnoDB为例 主键是聚集索引 唯一索引、普通索引、前缀索引等...
2018-08-19 18:28:38
365
原创 Java产生死锁的一个简单例子
思路是创建两个字符串a和b,再创建两个线程A和B,让每个线程都用synchronized锁住字符串(A先锁a,再去锁b;B先锁b,再锁a),如果A锁住a,B锁住b,A就没办法锁住b,B也没办法锁住a,这时就陷入了死锁。直接贴代码:public class DeadLock { public static String obj1 = "obj1"; public static ...
2018-08-19 18:02:47
162
原创 HashMap并发问题
之前在讲HashMap的时候提到过HashMap线程不安全,在并发环境下会发生死锁问题,将导致CPU占用率接近100%。其实死锁的说法并不很贴切,应该说是一种死循环。在JDK 1.8中,Map相关类的实现发生了很大变化,引入了红黑树的概念,本篇以JDK 1.7中的实现方式讲解HashMap的并发问题,以方便理解。说明JDK 1.8和JDK 1.7中,Map相关类的大体实现思想变化不大,知识...
2018-08-19 11:16:05
4725
原创 关于CPU的User、Nice、System、Wait、Idle各个参数的解释
使用Ganglia监控整个Hadoop集群,看到Ganglia采集的各种指标:CPU各个具体的指标含义解释如下:①CPU(监测到的master主机上的CPU使用情况)从图中看出,一共有五个关于CPU的指标。分别如下:ⓐ UserUser表示:CPU一共花了多少比例的时间运行在用户态空间或者说是用户进程(running user space processes)。典型的用户态空间...
2018-08-19 09:40:25
12563
原创 Spring切面优先级设置
一、多个切面,无优先级设置首先建立一个目标接口ArithmeticCalculator:package lzj.com.spring.aop;public interface ArithmeticCalculator { int add(int i, int j);}然后创建接口的实现类ArithmeticCalculatorIml :package lzj.co...
2018-08-16 21:29:16
964
原创 spring容器创建对象的时间和懒加载
我们如何判断一个对象是在spring容器启动的时候创建的呢 还是在我们调用这个对象的时候创建的?在单例的情况下:在上面一个spring基础(一)中,我们写了如下的测试类: public class testHelloSpring { @Test public void test1(){ //启动spring容器 ApplicationConte...
2018-08-16 21:21:41
277
原创 idea中git远程版本回退
工作中遇到git远程仓库需要回退到历史版本的问题,根据网上的搜索结果结合自己的实践,整理了如下步骤:1. 在“Show History”中找到当前版本(取名:newVersion)和想要回退到的版本(oldVersion) 2. 选择newVersion和oldVersion点击“Copy Revision Number”复制两个版本的版本号: newVersion:2746f428a3...
2018-08-14 17:12:21
1844
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人