<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[harder_cn的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/harder_cn</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; harder_cn]]></copyright><item><title><![CDATA[Mysql事务隔离级别测试]]></title><link>https://blog.youkuaiyun.com/harder_cn/article/details/122733189</link><guid>https://blog.youkuaiyun.com/harder_cn/article/details/122733189</guid><author>harder_cn</author><pubDate>Sat, 29 Jan 2022 11:20:16 +0800</pubDate><description><![CDATA[一、概念说明

以下几个概念是事务隔离级别要实际解决的问题，所以需要搞清楚都是什么意思。

脏读

脏读指的是读到了其他事务未提交的数据，未提交意味着这些数据可能会回滚，也就是可能最终不会存到数据库中，也就是不存在的数据。读到了并一定最终存在的数据，这就是脏读。

可重复读

可重复读指的是在一个事务内，最开始读到的数据和事务结束前的任意时刻读到的同一批数据都是一致的。通常针对数据更新（UPDATE）操作。

不可重复读

对比可重复读，不可重复读指的是在同一事务内，不同的时刻读到的同一批数据可能是不一样的]]></description><category></category></item><item><title><![CDATA[@Transactional传播属性]]></title><link>https://blog.youkuaiyun.com/harder_cn/article/details/122686321</link><guid>https://blog.youkuaiyun.com/harder_cn/article/details/122686321</guid><author>harder_cn</author><pubDate>Tue, 25 Jan 2022 15:50:14 +0800</pubDate><description><![CDATA[required有则有无则创建（默认）

说明： 如果当前已经存在事务，那么加入该事务，如果不存在事务，创建一个事务，这是默认的传播属性值。


@Service
public class RequireMethodService {

	@Autowired
	UserService userService;

	@Transactional(propagation = Propagation.REQUIRED)
	public void methodSon1() {
		User user = new ]]></description><category></category></item><item><title><![CDATA[@Transactional 失效案例]]></title><link>https://blog.youkuaiyun.com/harder_cn/article/details/122670840</link><guid>https://blog.youkuaiyun.com/harder_cn/article/details/122670840</guid><author>harder_cn</author><pubDate>Tue, 25 Jan 2022 12:04:25 +0800</pubDate><description><![CDATA[1、同一个类中调用

因为它们发生了自身调用，就调该类自己的方法，而没有经过 Spring 的代理类，默认只有在外部调用事务才会生效。

错误案例：


/**
 * 
 * 在同一个类中调用
 *
 */
@RestController
public class InSameClass {

	@Autowired
	UserService userService;
	
	@GetMapping("methodA")
	public void methodA() {
        methodB();
]]></description><category></category></item><item><title><![CDATA[Kafka安装]]></title><link>https://blog.youkuaiyun.com/harder_cn/article/details/122496853</link><guid>https://blog.youkuaiyun.com/harder_cn/article/details/122496853</guid><author>harder_cn</author><pubDate>Fri, 14 Jan 2022 16:50:54 +0800</pubDate><description><![CDATA[一、前提条件

1、部署zookeeper，请参照链接。

2、部署kafka集群搭建需要服务器至少3台，奇数台。

192.168.1.21
			9092
		192.168.1.22
			9092
		192.168.1.23
			9092
		
]]></description><category></category></item><item><title><![CDATA[zookeeper集群安装]]></title><link>https://blog.youkuaiyun.com/harder_cn/article/details/122488183</link><guid>https://blog.youkuaiyun.com/harder_cn/article/details/122488183</guid><author>harder_cn</author><pubDate>Fri, 14 Jan 2022 10:42:17 +0800</pubDate><description><![CDATA[1、Apache官网下载zookeeper安装包

Index of /dist/zookeeperhttp://archive.apache.org/dist/zookeeper/这里说明一下，使用新版本在启动时会报错Starting zookeeper … FAILED TO START

原因：版本：3.6.1，实际上只要 &gt;= 3.5.5 版本都会出现这种问题。


# 上传安装包
cd /opt
# 解压压缩包
tar -zxvf zookeeper-3.4.14.tar.gz



2、修]]></description><category></category></item><item><title><![CDATA[Docker mysql主从同步]]></title><link>https://blog.youkuaiyun.com/harder_cn/article/details/121246396</link><guid>https://blog.youkuaiyun.com/harder_cn/article/details/121246396</guid><author>harder_cn</author><pubDate>Wed, 10 Nov 2021 13:56:50 +0800</pubDate><description><![CDATA[1、整体环境

此次使用虚拟机，每台虚拟机上安装docker，每个docker又安装了mysql5.7

宿主机系统centos7
master: 192.168.0.103:3306
slave: 192.168.0.105:3306

2、安装mysql


docker run --dns 8.8.8.8 --dns 8.8.4.4 --name mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7


注意点：

mysql...]]></description><category></category></item><item><title><![CDATA[Tx-manager配置走过的经验--不支持redis的sentinel模式]]></title><link>https://blog.youkuaiyun.com/harder_cn/article/details/119459722</link><guid>https://blog.youkuaiyun.com/harder_cn/article/details/119459722</guid><author>harder_cn</author><pubDate>Fri, 06 Aug 2021 17:54:08 +0800</pubDate><description><![CDATA[前提：

redis集群部署，通过sentinel哨兵来监控。

redis、sentinel共三台服务

redis1 192.168.0.222 6379

redis2 192.168.0.223 6379

redis3 192.168.0.224 6379

sentinel1192.168.0.222 26379

sentinel2192.168.0.223 26379

sentinel3 192.168.0.224 26379


tx-manager-4.1...]]></description><category></category></item><item><title><![CDATA[Tx-manager配置走过的经验--服务超时]]></title><link>https://blog.youkuaiyun.com/harder_cn/article/details/119457351</link><guid>https://blog.youkuaiyun.com/harder_cn/article/details/119457351</guid><author>harder_cn</author><pubDate>Fri, 06 Aug 2021 16:21:47 +0800</pubDate><description><![CDATA[最过遇到一个对我来说很懵逼的问题，让我紧急解决。

现象：一个流程审批节点提交后，不能正常流转到下一节点。

调查：通过日志没查到任何异常，从很长的LOG内仔细的看到一句话，这句话真的起了很大作用。


lcn start transaction over, res -&gt; groupId:xxxxx and state is rollback.


既然是事务引起的回滚，那我第一反应是肯定有地方报错，但还没有异常，难道是哪位大侠的代码捕获异常时不抛出，还打印这么友好的log?

花费半天找代码，心想大]]></description><category></category></item><item><title><![CDATA[挂载nfs的客户端目录只读文件系统]]></title><link>https://blog.youkuaiyun.com/harder_cn/article/details/119144228</link><guid>https://blog.youkuaiyun.com/harder_cn/article/details/119144228</guid><author>harder_cn</author><pubDate>Tue, 27 Jul 2021 15:51:02 +0800</pubDate><description><![CDATA[一、现象：

最近刚部署了nfs服务器，在客户端也成功挂载，但客户端的挂载目录却成了只读。



二、解决办法：

本人试了很方案没有解决掉，也花费了很大工夫，下面整理以下相关的解决地方。

1、先卸载挂载目录，查看本地读写是否正常


查看挂载中的目录
mount
卸载挂载
umount /home/document

保证本地目录的权限可有读写。

2、查看nfs服务当前状态


在nfs服务端执行命令
service nfs status

能看到rpc.mountd、nfsd及rpc.rquotad]]></description><category></category></item><item><title><![CDATA[分布式事务（2）--2PC和3PC原理]]></title><link>https://blog.youkuaiyun.com/harder_cn/article/details/118764932</link><guid>https://blog.youkuaiyun.com/harder_cn/article/details/118764932</guid><author>harder_cn</author><pubDate>Fri, 16 Jul 2021 14:58:04 +0800</pubDate><description><![CDATA[首先按照下图来学习。

事务是什么、为什么需要这里就不多啰嗦了。
分布式事物基本理论:基本遵循CPA理论，采用柔性事物特征，软状态或者最终一致性特点保证分布式事物一致性问题。
分布式事物常见解决方案:

2PC两段提交协议
3PC三段提交协议(弥补两端提交协议缺点)
TCC或者GTS(阿里)
消息中间件最终一致性
使用LCN解决分布式事物，理念“LCN并不生产事务,LCN只是本地事务的搬运工”。

一、两阶段提交（2PC）
两阶段提交又称2PC，2PC是一个非常经典的强一致、中心化的原子提交协议。
这里所说]]></description><category></category></item><item><title><![CDATA[分布式事务（1）--CAP和BASE理论]]></title><link>https://blog.youkuaiyun.com/harder_cn/article/details/118785083</link><guid>https://blog.youkuaiyun.com/harder_cn/article/details/118785083</guid><author>harder_cn</author><pubDate>Fri, 16 Jul 2021 14:57:07 +0800</pubDate><description><![CDATA[先说明一下：我参考、借鉴了很多相关文章，就是为了让更多人简单的明白知识，如有复用希望大家理解。
理解CAP
CAP原则又称CAP定理，指的是在一个分布式系统中， Consistency（一致性）、 Availability（可用性）、Partition tolerance（分区容错性），下面是阮一峰老师的解释，真的很易懂，来一个一个看看。


一致性（C）：
在分布式系统中的所有数据备份，在同一时刻是否同样的值。（等同于所有节点访问同一份最新的数据副本）
举例来说，某条记录是 v0，用户向 G1 发起一个写]]></description><category></category></item><item><title><![CDATA[服务消费端与注册中心交互模型是 push 还是 pull]]></title><link>https://blog.youkuaiyun.com/harder_cn/article/details/118600019</link><guid>https://blog.youkuaiyun.com/harder_cn/article/details/118600019</guid><author>harder_cn</author><pubDate>Fri, 09 Jul 2021 11:02:32 +0800</pubDate><description><![CDATA[今天看了小富老师发的文章Nacos配置中心交互模型是 push 还是 pull ？，文章中描述Nacos在做配置中心的时候，配置数据的交互模式是服务端推过来还是客户端主动拉的？突然间觉得对注册中心服务是不是都应该记录下呢？
Nacos
那肯定时客户端主动拉的！而且是长轮询，什么时长轮询，没听过吧，好好看下面。
推与拉模型
客户端与配置中心的数据交互方式其实无非就两种，要么推push，要么拉pull。
推模型
客户端与服务端建立TCP长连接，当服务端配置数据有变动，立刻通过建立的长连接将数据推送给客户端。
优]]></description><category></category></item><item><title><![CDATA[10、Docker Swarm]]></title><link>https://blog.youkuaiyun.com/harder_cn/article/details/118308687</link><guid>https://blog.youkuaiyun.com/harder_cn/article/details/118308687</guid><author>harder_cn</author><pubDate>Tue, 29 Jun 2021 09:00:18 +0800</pubDate><description><![CDATA[1、 理解swarm
大家可以参照下图理解一下，之前，我们执行docker命令由对应的机器去执行，而现在多台机器组成swarm后，将多台docker服务器组成  了swarm，最后命令由swarm manager去执行。

这里再解释下：swarm 集群由管理节点（manager）和工作节点（work node）构成。
swarm mananger：负责整个集群的管理工作包括集群配置、服务管理等所有跟集群有关的工作。
work node：即图中的 available node，主要负责运行相应的服务来执行任]]></description><category></category></item><item><title><![CDATA[9、Docker Compose]]></title><link>https://blog.youkuaiyun.com/harder_cn/article/details/118155913</link><guid>https://blog.youkuaiyun.com/harder_cn/article/details/118155913</guid><author>harder_cn</author><pubDate>Wed, 23 Jun 2021 17:28:56 +0800</pubDate><description><![CDATA[前面学习过了Dockerfile文件，使用 docker build、docker run 等命令操作容器。
今天学习了Docker Compose，理解上它是管理容器的工具。为什么这么说呢，
首先Docker Compose 将所管理的容器分为三层，分别是工程（project）、服务（service）、容器（container）。
Docker Compose 运行目录下的所有文件（docker-compose.yml）组成一个工程,一个工程包含多个服务，一个服务可包括多个容器实例。
实例
这里简单对同一]]></description><category></category></item><item><title><![CDATA[8、dockerFile解析]]></title><link>https://blog.youkuaiyun.com/harder_cn/article/details/117980296</link><guid>https://blog.youkuaiyun.com/harder_cn/article/details/117980296</guid><author>harder_cn</author><pubDate>Wed, 23 Jun 2021 10:28:55 +0800</pubDate><description><![CDATA[Dockerfile作用

官网上说Dockerfile是用来构建Docker镜像的构建文件，是由一系列命令和参数构成的脚本。

再说的明白点就是配置依赖下载镜像、配置环境变量和执行脚本的封装。

构建三步骤



docker file：就是描述需要哪些依赖、哪些环境变量、要执行哪些操作等内容。

docker 镜像 ：就是通过docker build命令，根据Dockerfile的内容构建镜像。

docker 容器：将打包完的镜像作为image交给docker运行。

常用指令

FROM 指定父镜.]]></description><category></category></item><item><title><![CDATA[6、Docker 容器数据卷(挂载)]]></title><link>https://blog.youkuaiyun.com/harder_cn/article/details/117957526</link><guid>https://blog.youkuaiyun.com/harder_cn/article/details/117957526</guid><author>harder_cn</author><pubDate>Wed, 16 Jun 2021 14:49:57 +0800</pubDate><description><![CDATA[　　docker 容器数据卷是容器在运行过程中持久化数据的一种方式，卷是目录或文件，存在于一个或多个容器中，由docker 挂载到容器，但不属于联合文件系统，因此能够绕过Union File System 提供一些用于持续存储或共享数据的特性；卷的设计目的就是数据持久化，完全独立于容器的生命周期，因此docker不会在容器删除时，删除其挂载的数据卷。

特点：

数据卷可在容器之间共享或重用数据。
	卷中的更改可以直接生效。
	数据卷中的更改，不会包含在镜像中的更新。
	数据卷的生命周期一直持续到没有容器.]]></description><category></category></item><item><title><![CDATA[7、docker commit]]></title><link>https://blog.youkuaiyun.com/harder_cn/article/details/117952384</link><guid>https://blog.youkuaiyun.com/harder_cn/article/details/117952384</guid><author>harder_cn</author><pubDate>Wed, 16 Jun 2021 11:34:55 +0800</pubDate><description><![CDATA[把现有容器打包成镜像，供docker直接运行。

语法


docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

OPTIONS说明：


	-a :提交的镜像作者；
	
	
	-c :使用Dockerfile指令来创建镜像；
	
	
	-m :提交时的说明文字；
	
	
	-p :在commit时，将容器暂停。
	
实例

查看现有容器

[root@localhost ~]# docker ps
CONTAINER ID        IMAGE .]]></description><category></category></item><item><title><![CDATA[1、容器 VS 虚拟机]]></title><link>https://blog.youkuaiyun.com/harder_cn/article/details/117947035</link><guid>https://blog.youkuaiyun.com/harder_cn/article/details/117947035</guid><author>harder_cn</author><pubDate>Wed, 16 Jun 2021 11:06:45 +0800</pubDate><description><![CDATA[两者对比图

传统虚拟机技术（VMware）是虚拟出一套硬件后，在其上安装、运行一个完整操作系统，在该系统上再运行所需应用进程；一个虚拟机就像是一个主机。

而容器内的应用进程直接运行于宿主的内核，容器内没有自己的内核，而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。



容器是一个应用层抽象，用于将代码和依赖资源打包在一起。 多个容器可以在同一台机器上运行，共享操作系统内核，但各自作为独立的进程在用户空间中运行 。与虚拟机相比， 容器占用的空间较少（容器镜像大小通常只有几十兆），瞬间就能完成启动]]></description><category></category></item><item><title><![CDATA[3、docker run常见问题]]></title><link>https://blog.youkuaiyun.com/harder_cn/article/details/117949918</link><guid>https://blog.youkuaiyun.com/harder_cn/article/details/117949918</guid><author>harder_cn</author><pubDate>Wed, 16 Jun 2021 11:03:16 +0800</pubDate><description><![CDATA[接上一篇docker run


]]></description><category></category></item><item><title><![CDATA[2、docker run]]></title><link>https://blog.youkuaiyun.com/harder_cn/article/details/117948269</link><guid>https://blog.youkuaiyun.com/harder_cn/article/details/117948269</guid><author>harder_cn</author><pubDate>Wed, 16 Jun 2021 11:02:34 +0800</pubDate><description><![CDATA[docker run ：创建一个新的容器并运行一个命令

语法


docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

OPTIONS说明：


	-a stdin:指定标准输入输出内容类型，可选 STDIN/STDOUT/STDERR 三项；
	
	
	-d:后台运行容器，并返回容器ID；
	
	
	-i:以交互模式运行容器，通常与 -t 同时使用；
	
	
	-P:随机端口映射，容器内部端口随机映射到主机的端口
	
	
	-p:指定端口映射，格式为：主...]]></description><category></category></item></channel></rss>