Java高级
文章平均质量分 92
请叫我小叶子
一个低调的程序猿
展开
-
Docker-Swarm介绍以及部署项目
docker-swarm是用来在多机部署多容器的一个工具,当然目前主流的是使用k8s部署,但是这个还是可以了解一下,其和k8s还有很多相似之处。原创 2022-07-12 18:47:54 · 1635 阅读 · 0 评论 -
Springboot整合GrayLog日志平台
之前一直想搭建一下ELK日志平台,但是ELK组件之间各种配置让人感觉不是很好用,然后就发现了GrayLog这个日志管理和收集平台,上手以后发现确实简单。这里就记录一下整合到springboot项目中的过程。一、简介和对比(一)官方网站GrayLog开源官方网站为:https://www.graylog.org/注:下载安装GrayLog以后安装然后修改配置文件中es和mongodb的地址,其中es是用来存储丢到GrayLog中的日志,mongodb是用来存储GrayLog本身的数据的。(二)Gra原创 2022-04-07 20:29:11 · 3531 阅读 · 0 评论 -
一文搞清楚,QPS、TPS、并发用户数、吞吐量
1、QPS2、TPS3、QPS和TPS区别4、并发数5、吐吞量6、PV7、UV8、DAU9、MAU10、系统吞吐量评估11、软件性能测试的基本概念和计算公式图片大家好,我是磊哥。一文辨明QPS、TPS、PV、UV、DAU、MAU、并发用户数、吞吐量~1、QPSQPS Queries Per Second 是每秒查询率 ,是一台服务器 每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内 所处理流量多少的衡量标准, 即每秒的响应请求数,也即是最大吞吐能力。推荐下自己做转载 2021-10-08 16:59:00 · 2698 阅读 · 0 评论 -
Activiti工作流的入门使用
一、Activiti基本概念流程定义:就是流程图(bpmn文件)流程实例:流程定义的每个具体实现流程定义与流程实例的关系就像类和对象的关系,一个类可以有多个对象,一个流程定义可以有多个流程实例。bpmn:流程图,下图就是一个bpmn文件生成的图片二、Acitiviti插件的安装以及创建流程定义(idea中)1、idea中工作流插件的安装两种安装方式:通过...原创 2020-04-28 19:10:06 · 542 阅读 · 0 评论 -
超详细解析 | 一致性协议算法-2PC、3PC、Paxos、Raft、ZAB、NWR
背景在常见的分布式系统中,总会发生诸如机器宕机或网络异常(包括消息的延迟、丢失、重复、乱序,还有网络分区)等情况。一致性算法需要解决的问题就是如何在一个可能发生上述异常的分布式系统中,快速且正确地在集群内部对某个数据的值达成一致,并且保证不论发生以上任何异常,都不会破坏整个系统的一致性。CAP 定理CAP 理论告诉我们,一个分布式系统不可能同时满足一致性(C:Consistency),可用性(A: Availability)和分区容错性(P:Partition tolerance)这三个基本需求,最转载 2021-07-27 16:39:02 · 382 阅读 · 0 评论 -
Kubernetes的核心详解
前言:之前我们划画过下面这张图,通过图我们可以看出ReplicaSet是维护Pod,而Deployment是维护ReplicaSet的。那么我们就从Pod入手,毕竟Pod是Kubernates的基础,没有Pod其他的都没任何用。Pod是Kubernates的基础,我们如何动态扩展Pod的数量以及动态下线某Pod呢?通过官网我们可以看到,ReplicatSet、ReplicationController、Deployment都可以维护Pod的数量。下面我们详细从Pod开始详细介绍一下Kubernates原创 2021-01-06 18:57:09 · 322 阅读 · 0 评论 -
SpringBoot打包插件
在web的pom.xml中加入:<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <conf原创 2020-11-17 22:38:50 · 705 阅读 · 0 评论 -
MySQL架构与SQL执行流程
一、MySQL的历史MySQL开源以后也很有很多出名的分支,例如MariaDB(CentOS7默认自带,是MySQL创始人自己写的分支)等,国内互联网公司也有一些MySQL的分支或者自研的存储引擎,例如网易的InnoSQL等。MySQL之前是ISAM存储引擎后来升级成MyISAM,然后5.5以后默认为InnoDB,MySQL5.7以后直接就是8.0版本。不同的表可以使用不同的存储引擎,并不一定全部都是InnoDB。二、MySQL的工作流程1、网络通信网络通信可以分为单双工(只能单方通信),半双工(原创 2020-11-11 18:21:47 · 238 阅读 · 2 评论 -
MySQL之索引原理
一、索引以及存储结构1、索引原理1.1、2、索引数据存储结构二、索引的使用规则原创 2020-10-21 19:58:37 · 1050 阅读 · 0 评论 -
定时任务之Quartz和Elastic-Job
一、背景常用的定时任务一般有:JDK Timer、Spring Task、Quartz、xxl-job、Elastic-job。JDK Timer:JDK自带的定时任务,1.5之前不支持多线程,1.5之后加入了ScheduleThreadPool就是为了它,支持多线程;Spring Task:Spring的定时任务,但是不支持集群;Quartz:简单、轻量级最常用的定时任务,支持集群;xxl-job、Elastic-job:xxl-job是京东的一个架构师开发的定时任务,Elastic-原创 2020-08-27 18:44:58 · 2566 阅读 · 2 评论 -
Linux下安装Mysql5.7.30
tar -xvf mysql-5.7.30-el7-x86_64.tar.gz mysql-5.7.30-el7-x86_64/mv mysql-5.7.30-el7-x86_64 mysqlvim /etc/my.cnfcd /home/software/mysql/bin/./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql/ --datadir=/home/software/mys...原创 2020-07-09 17:45:52 · 2116 阅读 · 0 评论 -
分库分表相关知识
一、背景 当我们新搭建一个项目时,在用户量没上来之前几乎都是先使用的单体项目,当用户量上来了单体项目不支持那么高的量的时候我们都会拆分项目,将单体的项目向分布式方向演进。如果这个时候我们的项目已经拆分成了多个分布式的项目了,但我们访问的还是同一个数据库,那么无论你拆分为多少个服务,其访问的数据库是同一个,当量上来以后无论你项目再怎么拆分还是会出现反应慢、超时等问题,究其原因还是因为数据库的连接数是有限的,这个时候就要考虑分库以及分库以后的分表了。二、水平和垂直拆分1、水平分库和...原创 2020-06-11 19:15:00 · 255 阅读 · 0 评论 -
Sharding-JDBC和Mycat在分库分表中的应用
一、背景介绍 Sharding-JDBC本来是当当网内部解决分库分表的问题的一个内部组件,后来慢慢开源了然后现在捐给了Apache,成为了Apache的一个子项目,但是当当自己还在维护自己的。除了Shrading-JDBC,当当还开源了Elastic-Job、基于Dubbo的DubboX。 在Apache中,Sharding-JDBC改名叫做ShardingSphere,其包含了Sharding-JDBC和Sharding-Proxy,其中Sharding-JDBC是应...原创 2020-05-20 18:57:42 · 5065 阅读 · 1 评论 -
雪花算法以及具体实现
一、为何要用雪花算法 1、问题产生的背景 现如今越来越多的公司都在用分布式、微服务,那么对应的就会针对不同的服务进行数据库拆分,然后当数据量上来的时候也会进行分表,那么随之而来的就是分表以后id的问题。 例如之前单体项目中一个表中的数据主键id都是自增的,mysql是利用autoincrement来实现自增,而oracle是利用序列来实现的,但是当单表...原创 2020-05-08 10:54:50 · 29981 阅读 · 7 评论 -
并发编程详解
多线程并不一定比单线程处理的效率高,开启过多的线程,会增加上下文切换的开销,降低了效率。一、如何降低上下文切换的开销:无锁并发编程、CAS算法、使用最少线程、使用协程 无锁并发编程:多线程竞争锁会产生额外的上下文切换开销,因此多线程处理数据时尽量减少锁的使用。例如对数据id进行hash算法取模分段,不同的线程处理不同的数据段。 CAS算法:java.concur...原创 2020-03-30 09:19:38 · 545 阅读 · 0 评论 -
使用Gradle构建Spring源码
一、下载Spring源码不同版本的Spring需要不同版本的Gradle,我这里下载的是5.0.2,Spring源码在git的地址为:https://github.com/spring-projects/spring-framework,自行下载自己想要的版本。下载解压以后,找到解压文件中的build.gradle,打开搜索gradleVersion,看你下载的spring源码需要哪个...原创 2020-01-03 09:32:31 · 2096 阅读 · 0 评论 -
配置 jvisualvm 监控Java虚拟机
无论是监控局域网还是远程java虚拟机运行的情况,都可以用jdk自带的jvisualvm进行远程监控。本文就是介绍如何配置在jvisualvm上远程监控虚拟机的运行情况。一、前提说明1、JMX能监控CPU、堆、类、线程的使用情况,但是无法监控GC的具体情况,如果需要监控GC的具体情况,得配置jstatd远程监控。2、配置远程监控,前提是得设置好服务器的ip,如果使用ho...原创 2019-12-09 11:23:01 · 650 阅读 · 0 评论 -
RocketMQ源码分析之消费者
RocketMQ源码分析我们主要从NameSrv、路由、生产者、消费者、消息存储等方面一点点分析,本章主要讲的是消费者的源码分析。一、前提消费者消费分为两种模式,集群模式和广播模式,默认开启的是集群模式,集群模式下同一个消费组中只能有一个消费者消费某个topic在broker中的队列。广播模式下,所有消费者都可以消费topic的信息。消费者获取消息的方式也有两种,一个是主动从broke...原创 2019-11-08 14:39:41 · 957 阅读 · 0 评论 -
RocketMQ源码分析之生产者
RocketMQ源码分析我们主要从NameSrv、路由、生产者、消费者、消息存储等方面一点点分析,本章主要讲的是生产者的源码分析。生产者方面的源码主要分为三个地方,启动生产者、发送消息、批量发送消息,然后每个地方又会细分为不同的小步骤,我会一点点分析。一、前提 使用过RocketMQ的都知道生产者类是DefaultMQProducer,该类在源码的org.apache.r...原创 2019-11-05 17:31:03 · 458 阅读 · 0 评论 -
RocketMQ源码分析之路由
RocketMQ源码分析我们主要从NameSrv、路由、生产者、消费者、消息存储等方面一点点分析,本章主要讲的是路由相关的源码分析。一、路由元信息NameSrv中存储了topic的路由信息,这样跟生产者、消费者交互的时候,为两者提供topic的路由信息,NameSrv还得存储路由信息,还得管理节点,包括路由的注册和路由的清除。路由信息主要在RouteInfoManager类中,其中主要...原创 2019-11-05 09:46:08 · 281 阅读 · 0 评论 -
RocketMQ源码分析之NameSrv
RocketMQ源码分析我们主要从NameSrv、路由、生产者、消费者、消息存储等方面一点点分析,本章主要讲的是NameSrv的源码分析。NameSrv的启动类:org.apache.rocketmq.namesrv.NamesrvStartup。NamesrvStartup的main()方法中调用main0(args),mian0()中其实最主要是createNamesrvControl...原创 2019-11-05 09:44:38 · 310 阅读 · 0 评论 -
SpringBoot集成RocketMQ4.5
前面已经搭建起来了两主两从异步刷盘、同步复制的集群了,感兴趣的同学可以通过传送门查看:Linux下搭建RocketMQ4.5.2集群,现在讲讲在SpringBoot中集成RocketMQ。一、环境说明开发工具用的是IDEA,虚拟机上搭建的RocketMQ集群用的是4.5.2的,项目中导入rocket-spring-starter是2.0.3,深入查看就能看到用的rocketm...原创 2019-10-12 17:09:22 · 2819 阅读 · 0 评论 -
SpringBoot之创建并简单使用SpringBoot
现在这个时间段,没使用过SpringBoot的公司应该很少了吧,所以对于SpringBoot的各种优点以及其独特之处就不一一介绍了,这种东西网上一搜一大堆,我这里只是简单记录一下怎么使用。 这里顺便提一下,面试的时候大家肯定经常被问到,为什么使用springBoot,spring官方给的说法是:约定大于配置。这里我借一个公众号文章的解释说一下,记不清是哪个公众号,没法...原创 2019-04-22 22:04:33 · 671 阅读 · 1 评论 -
java8之lambda表达式
java8已发布四年之久,但是一直没研究java8的相关新特性,前几天有点闲,就学习了java8的新特性之一lambda表达式,下面就按照我的理解讲讲一些用法。刚开始使用lambda表达式的时候,感觉不习惯,但是使用了以后发现还是很好用的,简洁,明了,代码少lambda表达式的语法格式如下:(parameters) -> expression或(parameters) -&...原创 2018-05-25 16:35:32 · 28808 阅读 · 8 评论 -
springboot+mybatis配置多数据源
最近需要弄多数据源,网上搜了相关的多数据源,大都是根据jpa做对数据源或者利用aop动态切换,感觉有点小麻烦。我们这个项目是因为业务比较复杂,需要连接不同的分库,而不是主从模式的问题,现在把详细细节发出来,供参考。不多说了,上代码:先看项目的整体结构:首先就是application.properties配置文件中配置不同的数据源:注意:springboot2.0,配置文件中...原创 2018-05-25 14:51:34 · 224 阅读 · 0 评论 -
SSM项目兼容MongoDB(MySql+MongoDB)
本来项目使用的是MySql数据库,后来准备把项目中的日志单独提出去,然后不准备放在mysql数据库中了,就准备放在MongoDB中了。所以现在的项目大部分模块用的还是mysql数据库,只有个别模块使用的是mongodb,现在就将整合的过程整理如下:pom.xml文件中添加一个spring-data-mongodb的依赖就行,不用添加mongo-driver的依赖,spri...原创 2019-01-08 17:05:13 · 2903 阅读 · 3 评论 -
SpringBoot项目整合MongoDB
前面介绍了一个SSM项目整合MongoDB,想想顺便把SpringBoot项目整合MongoDB的也介绍一下吧,SpringBoot整合MongoDB比SSM项目整合简单多了。因为SpringBoot本身集成了MongoDB,本身提供了相应的支持,只需要导入jar包即可。在pom.xml中导入spring-boot-starter-data-mongodb依赖...原创 2019-01-08 18:25:23 · 389 阅读 · 0 评论 -
使用SimpleEmail邮件发送之QQ邮箱
最近工作的项目当数据达到预警值的时候要发送邮件给相关人员,于是用了SimpleEmail来发送邮件了,这里是发送到QQ邮箱,至于发送到其他邮箱,都是差不多的设置,知道对应邮箱的服务器设置,配置即可。SimpleEmail是org.apache.commoms下面的,是我们常用的包。一、查找QQ邮箱SMTP服务器的配置参数(host以及端口)访问QQ邮箱官方的配置说明即可找到:...原创 2019-04-24 09:06:08 · 2850 阅读 · 0 评论 -
使用Docker部署war包项目
使用Docker部署war,必须要用容器,我们就用tomcact容器,其实都是将war包丢到tomcat的webapps目录下,tomcat启动的情况下会自动解压war包。 一种是在Docker中安装tomcat容器的镜像,然后把war包丢到tomcat镜像下webapps中即可。但是如果tomcat关闭了,其webapps下的包就会消失;二就是利用挂载,还是安装t...原创 2019-05-31 15:59:11 · 29559 阅读 · 9 评论 -
Docker部署SpringBoot项目
一、创建一个简单的SpringBoot项目1、直接访问http://start.spring.io/,自动生成SpringBoot项目,创建的时候直接选择了web模块<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starte...原创 2019-05-17 17:02:37 · 644 阅读 · 2 评论 -
使用Jenkins部署Spring Boot项目和war包项目
Jenkins是自动化部署的神器,今天就讲讲怎么使用Jenkins部署SpringBoot项目。一、环境说明JDK1.8,MAVEN3.5,CentOS7,Jenkins:2.178一、Linux下安装JDK1、登录Oracle官网下载Linux环境下的jdk1.8的压缩包,jdk-8u211-linux-x64.tar.gz2、解压,tar vxf jdk-8u211-lin...原创 2019-05-30 17:32:37 · 4186 阅读 · 1 评论 -
分布式事务以及解决方案
一、何为分布式事务当使用分布式服务或者微服务的时候,各个重要的功能模块被分成不同的服务,不同的服务可能写不同的DB。例:若就按照最经典的银行转账来说,若A向B转账,A扣除钱,B增加钱,扣钱和增加钱属于不同的服务。A若先扣完钱,然后通过消息队列或者是直接通知B,但是这个时候因为网络问题,消息发送不出去,重试以后还是发不出去,然后就会导致A扣钱了,B还是没有增加钱,数据无法保证一致性。...原创 2020-01-02 14:50:35 · 181 阅读 · 0 评论 -
Linux下搭建FastDFS单机版以及整合到SpringBoot中
一、环境说明CentOS7;防火墙关闭;虚拟机地址:192.168.0.40;所有的文件我都放在我虚拟机的/home/cesec/EMQ/fastdfs下了,可以自定义目录,到时候下面的替换成自定义的目录即可;因为之前该虚拟机上搭建了其他的东西,因此这次就指定别名了,直接通过ip和端口访问;二、单机版搭建1、下载安装 libfastcommon1.1、下载libfastco...原创 2019-09-12 16:06:38 · 468 阅读 · 0 评论 -
RocketMQ学习总结
1、吞吐量:kafka>rocketmq>rabbitmq;消息堆积:kafka>rocketmq>rabbitmq;2、rabbitmq天然支持集群配置,默认conf配置下有两主两从异步、两主两从同步、两主没有从3、为了保证正确运行,最好给出4g内存4、先启动namesrv再启动broker,rocketmq控制台官方没有给,但是有开源爱好者研发rocketm...原创 2019-10-12 17:10:06 · 508 阅读 · 0 评论 -
Linux下搭建RocketMQ4.5.2集群并设置开机自启
一、环境说明 CentOS7;RocketMQ4.5.2;防火墙关闭;虚拟机地址:192.168.0.40,192.168.0.41,192.168.0.42,192.168.0.75;因为之前该虚拟机上搭建了其他的东西,因此这次就指定别名了,直接通过ip和端口访问;二、软件说明 RocketMQ本是阿里自己的,后来捐给阿帕奇了,截止到我写这篇博客的时候...原创 2019-10-11 15:10:30 · 2446 阅读 · 0 评论 -
应对并发之接口限流
Java开发中,高并发一直都是我们比较关注的,网上针对高并发有各种各样的应对方案,有加缓存、服务降级、接口限流等等等,今天我们主要讲接口限流方面的东西。 接口限流其实主要就是分布式限流,分布式限流最关键的是讲限流服务做成原子化,而解决方案可以使用redis+lua或者nginx+lua。今天我主要讲的是redis+lua进行限流: 首先在项目中自定...原创 2019-04-16 17:41:31 · 990 阅读 · 1 评论