自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JVM性能调优命令

jps jstat jmap jinfo

2019-10-11 11:25:11 235

原创 Linux 常用命令

常用命令:linux ,mysql,java

2019-10-10 12:56:57 551

原创 Clickhouse 代理 Chproxy 实战

chproxy是一个用于clickhouse数据库的 HTTP 代理、负载均衡器。 chproxy 实战

2022-09-14 19:34:46 1737 1

原创 Clickhouse 创建用户、角色、授权、回收权限

创建用户、角色、授权和回收权限access_management create role create user GRANT SELECT ON db.* TO SHOW ACCESS

2022-09-14 19:15:01 5797 2

原创 Clickhouse 原理

cickhouse 分区目录的合并过程、分区目录下的文件结构

2022-07-01 17:38:23 424

原创 clickhouse 常用命令

clickhouse 版本升级、降级、导入导出数据

2022-07-01 17:32:10 805

原创 clickhouse 参数优化配置

max_memory_usage_for_user, max_memory_usage, max_bytes_before_external_group_by, max_bytes_before_external_sort, max_memory_usage_for_all_queries, max_concurrent_queries_for_user,max_concurrent_queries_for_all_users,max_concurrent_queries,max_serve

2022-07-01 16:35:55 7959

原创 clickhouse MergeTree 常用表引擎

clickhouse 常用引擎CollapsingMergeTree VersionedCollapsingMergeTree AggregatingMergeTree SummingMergeTree RelacingMergeTree kafka 表引擎 ReplicatedMergeTree

2022-07-01 16:23:53 578

原创 Elastic Search 基本操作

Elastic Search 基本操作文章目录基本操作ElasticSearch操作创建索引插入数据修改文档删除文档删除索引查询语句query 条件基本操作ElasticSearch操作创建索引一般索引结构化索引{ "novel": { "properties": { "title": { "type": "text" } } }}使用 postman PUT 方式:http://192.168.45.135:9200/demo_test

2021-06-09 14:57:28 468 1

原创 Centos-7 安装 RabbitMQ

RabbitMQ 的特性RabbitMQ使用Erlang语言编写,使用Mnesia数据库存储消息。可靠性,RabbitMQ 使用一些机制来保证可靠性,如持久化、传输确认、发布确认灵活的路由 ,在消息进入队列之前,通过 Exchange 来路由消息的。消息集群 ,多个RabbitMQ服务器可以组成一个集群,形成一个逻辑Broker高可用,队列可以再集群中的机器上进行镜像,使得部分节点出问题的情况下队列仍然可用多种协议,支持AMQP,STOMP,MQTT管理界面,提供了一个易用的用户界面,使得用

2020-08-31 09:09:12 385

原创 zookeeper 数据同步和事务请求处理流程

以前文章zookeeper 的 leader选举过程我们知道当我们选择出leader之后 ,leader 会同步数据给 follower 和 observer。在同步数据时采用两种方式,一种是采用增量,一种是采用全部同步如果 follower 滞后 leader 不多, leader 只需发送缺失的事务点即可。如果 follower 滞后 leader 很久, leader 需要发送完整的快照。数据同步是怎么完成的?standalone 处理过程PrepRequestProcesso

2020-08-31 09:00:16 1172

原创 zookeeper 的 watch 机制源码分析学习

watcher监听机制是Zookeeper中非常重要的特性,我们基于zookeeper 上创建的节点,可以对这些节点绑定监听事件。比如可以监听节点数据的变更、节点删除、子节点状态变更等事件。通过这个事件机制,可以基于zookeeper实现分布式锁,集群管理等功能。事件特性当数据发生变化时,zookeeper 会产生一个watcher 事件,并且会发送到客户端,但是客户的只会收到一次通知。如果后续这个节点再次发生变化,那么之前设置 watcher 的客户端不会再次收到消息。即watcher是一次性的操作。

2020-08-31 09:00:10 461

原创 dubbo spi ExtensionLoader 分析

Java SPI参考配置SPI全称(service provider interface),是JDK内置的一种服务提供发现机制,目前市面上有很多框架都是用它来做服务的扩展发现,大家耳熟能详的如JDBC、日志框架都有用到;简单来说,它是一种动态替换发现的机制。举个简单的例子,如果我们定义了一个规范,需要第三方厂商去实现,那么对于我们应用方来说,只需要集成对应厂商的插件,既可以完成对应规范的实现机制。 形成一种插拔式的扩展手段。规范总结实现SPI,就需要按照SPI本身定义的规范来进行配置,SPI规范如

2020-08-31 09:00:03 203

原创 dubbo 服务发布及注册流程

Dubbo 服务发布源码分析export() 进行服务发布首先会获得注册中心集合列表以及协议集合列表,遍历协议中心列表进行多协议发布服务服务发布时,会根据配置文件的参数信息封装成map对象,最后将map对象转换成URL地址的参数根据URL地址的协议头:registry://xxx ,会在 protocol.exort(url) 中,进入到RegistryProtocol#export()方法中,在该方法中主要做了一下几步做本地发布:会根据协议将协议头由 registry:// 转换

2020-08-31 08:59:52 1563

原创 dubbo 客户端注册并引用服务源码分析

客户端注册并引用服务源码分析getObject() 获得服务的代理对象首先或得在配置文件中的配置的参数信息,封装成map,进行创建代理对象在createProxy() 方法中,主要执行以下两步操作进行 Protocol#refer()操作,该方法主要有以下几步进入到RegistryProtocol#refer()方法中,打开一个zookeeper的连接 zookeeperRegistry将consumer 协议注册到zk上,并进行订阅 provide、configurators、r

2020-08-31 08:59:44 138

原创 dubbo 客户端调用过程分析

客户端调用过程分析当我们我们调用服务的具体方法时 : service.sayHello()IHelloService helloService = (IHelloService) context.getBean("helloService");// helloService = // Proxy0(InvokerInvocationHandler(MockClusterInvoker(FailoverClusterInvoker()))))helloService.sayHello();会根据

2020-08-31 08:59:32 404

原创 Dubbo 负载均衡算法

负载均衡Dubbo 官网负载均衡随机算法权重随机,权重一致,则随机给每个权重设置一个区间,权重越大区间越大,生成随机数判断落在那个区间里。它的算法思想很简单。假设我们有一组服务器 servers = [A, B, C],他们对应的权重为 weights = [5, 3,2],权重总和为10。现在把这些权重值平铺在一维坐标值上,[0, 5) 区间属于服务器 A,[5, 8) 区间属于服务器 B,[8, 10) 区间属于服务器 C。接下来通过随机数生成器生成一个范围在 [0, 10) 之间的随机数

2020-08-31 08:59:25 202

原创 kafka 消息的存储分析

为了规避随机读写带来的时间消耗,kafka采用顺序写的方式存储数据。即使是这样,但是I/O操作仍然会造成磁盘的性能瓶颈,所以kafka还有一个性能策略。零拷贝一般应用程序有一个buffer空间在用户空间中,来自于网络或者磁盘,无论来自网络或者磁盘,都需要通过内核,也就是说内核中也要有buffer。1)磁盘到内核 --> 2)内核到应用程序buffer 写数据时 --> 3)应用程序buffer写到内核buffer --> 4)内核buffer写到磁盘这个过程多了两次拷贝,kafka

2020-08-31 08:59:17 398

原创 kafka 消息的分区分配策略

在实际生产过程中,每个topic都会有多个partition,多个partition的好处在于,一方面能够对broker上的数据进行分片有效减少消息的容量从而提升io性能。另一方面,为了提高消费端的消费能力,一般会通过多个consumer 去消费同一个topic,也就是消费端的负载均衡机制。在group.id相同的consumer进行消费同一个topic时,一个consumer消费过得数据在另一consumer中不会被消费到,那么同一个consumer group 里面的consumer 去消费数据的时

2020-08-31 08:59:04 2519

原创 zookeeper 的 leader选举过程

为了方式单点故障,zookeeper 提供了集群模式 ,集群模式下具有三个角色leader:设置leader 的目的是为了将事务请求进行排序,所有事务请求必须由一个全局唯一的服务器来协调处理follower:参与leader的选举投票 及 事务请求的投票 以及 将事务请求转发给 leaderobserver:只提供非事务请求,在不影响集群事务处理能力的前提下提升非事务处理的能力,observer不需要参与投票的过程,但是必须要同步leader的数据,从而在处理请求的时候保证数据的一致性leader

2020-08-30 14:35:28 325

原创 LinkedHashMap 源码分析学习

LinkedHashMap 是一个有序集合,默认是按插入顺序进行排序,也支持按照最近访问的数据在最后面(accessOrder=true)LinkedHashMap 继承了 HashMap ,在Entry中继承了HashMap的Node 内部类,并新增加before 和 after,使得有序。LinkedHashMap 并没有实现 HashMap 的put方法,而是在putVal 方法中,执行newNode 时,重写了newNode方法。主要代码// 继承了HashMap.Node 内部类,并新增

2020-08-30 14:03:18 130

原创 ArrayBlockingQueue 源码分析学习

ArrayBlockingQueue 是一个基于数组的阻塞队列,是一个有界队列,有界也就意味着,它不能够存储无限多数量的对象。所以在创建 ArrayBlockingQueue 时,必须要给它指定一个队列的大小。底层维护的是Object数组。主要方法有:put:当添加元素时当队列已满时会进行阻塞notFull.await(); 不满等待当队列添加元素之后,会释放take时队列为空的阻塞的锁notEmpty.signal();take: 当取出元素时:当队列为空时会进行阻塞notEmpt

2020-08-30 13:55:16 112

原创 synchronized 锁的实现原理

synchronized 是 Java 提供的一个并发控制的关键字。我们可以使用在对象、方法、代码块上来保证程序的原子性、有序性和可见性。synchronized 三种加锁方式修饰实例方法,作用于当前实例加锁,进入同步代码前要获得当前实例的锁静态方法,作用于当前类加锁,进入同步代码前要获得当前类的锁修饰代码块,指定加锁对象,对给定对象加锁,进入同步代码库前要获得给定对象的锁。对象头的 Mark Word(32位)分代年龄:4 bit是否是偏向锁:1 bit锁标志位:2 bit对象

2020-08-30 13:20:14 531

原创 CountDownLatch 原理分析

当我们需要实现并发请求,或者一个线程需要等待其他线程执行完成之后再执行时 ,我们可以使用 CountDownLatch 以前文章两个线程交替执行输出,一个数字1-10,一个字符a-e ,打印出来12a34b56c78d910eReentrantLock lock unLock 原理分析Condition await signal 阻塞和唤醒 原理分析CountDownLatch 原理分析应用程序实例public class CountDownLatchDemo extends Thread{

2020-08-30 13:00:56 2721 1

原创 Condition await signal 阻塞和唤醒 原理分析

当我们想合理使用 JUC (java.util.concurrent)包下的工具去做一些场景的需求时,如果了解其中的原理,对于我们写代码可能事半功倍。今天就分享下我对 ReentrantLock 和 Condition 的理解。以前文章 两个线程交替执行输出,一个数字1-10,一个字符a-e ,打印出来12a34b56c78d910e这里使用了 java.util.concurrent 包下的 ReentrantLock 和 Condition 。上次分析了 ReentrantLock 的原理

2020-08-30 12:40:35 1395

原创 ReentrantLock lock unLock 原理分析

当我们想合理使用 JUC (java.util.concurrent)包下的工具去做一些场景的需求时,如果了解其中的原理,对于我们写代码可能事半功倍。今天就分享下我对 ReentrantLock 和 Condition 的理解。以前文章 两个线程交替执行输出,一个数字1-10,一个字符a-e ,打印出来12a34b56c78d910e这里使用了 java.util.concurrent 包下的 ReentrantLock 和 Condition 。这里先分析下 ReentrantLock 的原理

2020-08-30 12:07:38 615

原创 JVM 垃圾回收算法和收集器

GC Root虚拟机栈中引用的对象方法区中类的静态属性引用的对象方法区中常量引用的对象本地方法栈中引用的对象垃圾回收算法标记-清除标记可以回收的对象, 标记完成后统一清除被标记的对象。存在问题:1. 效率问题, 标记和清除的效率都不高。2. 会产生空间碎片复制算法采用两个大小相同的内存区域, 只使用一个,当内存区域不够用时将还存活的对象复制到另一块区域中。解决了效率和空间碎片的问题,但是造成了空间的浪费。 如果存活对象比较多的话,进行较多的复制效率比较低。标记-整理为了解决复制算法

2020-08-30 10:16:27 108

原创 JVM 的运行时数据区

对象分配到老年代**当eden区内存不够用时当大对象存在时,超过设置的 MaxTenuringThreshold长期存活的对象,回收年龄超过默认15 当Survivor 区中相同年龄的所有对象大小总和大于 Survivor 空间的一半,年龄大于或等于该年龄的对象可以直接进入老年代。**空间担保**对象首先分配到 eden 区,当内存不够用或回收年龄超过默认15时会进入老年代。 当进行一次垃圾回收时,会将edn区清空,将存活对象移动到s0 或 s1 中, 当 s0 或 s1 的内存不够用时

2020-08-30 10:11:46 99

原创 MySQL 通过存储过程生成带有随机姓名的百万条测试数据

建表语句CREATE TABLE `users` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(256) DEFAULT NULL, PRIMARY KEY (`id`), KEY `name` (`name`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;存储过程DELIMITER $$DROP PROCEDURE IF EXISTS `batch_insert`$$CREA

2020-08-30 09:58:05 1481 3

原创 MySQL 的常用优化配置

mysql 优化SQL优化服务器优化连接——配置优化优化器——SQL 语句分析与优化SHOW PROCESSLISTmysql 优化SQL优化MySQL 的查询缓存、执行计划 和 开启慢查询MySQL 5.7 索引原理 和 存储引擎 及 NULL 和 空值问题服务器优化MySQL 基于 binlog 的主从复制连接——配置优化从服务端来说,我们可以增加服务端的可用连接数。show variables like ‘max_connections’; – 修改最大连接数,当有多个应用

2020-08-29 15:39:53 215

原创 MySQL 的查询缓存、执行计划 和 开启慢查询

MySQL 的查询缓存工作原理缓存SELECT操作的结果集和SQL语句;新的SELECT语句,先去查询缓存,判断是否存在可用的记录集触发缓存与缓存的SQL语句,是否完全一样,区分大小写简单认为存储了一个key-value结构,key为sql,value为sql查询结果集缓存配置参数show variables like 'query_cache%';query_cache_type:0 -– 不启用查询缓存,默认值;1 -– 启用查询缓存,只要符合查询缓存的要求,客户端

2020-08-29 14:29:03 385

原创 MySQL 5.7 索引原理 和 存储引擎 及 NULL 和 空值问题

存储引擎是第三方提供的,可插拔式的插件。索引机制也便是有插拔式的存储引擎进行实现。索引是什么索引是为了加速对表中数据行的检索而创建的一种分散存储的数据结构为什么选择的是B+二叉查找树 Binary Search Tree可以看出当我们插入一个有序的数值时,树的深度就比较长(右子节点),时间复杂度比较差O(n)平衡二叉查找树 AVL Trees平衡二叉树又叫相对平衡树,高度差不会超过1该方式在一定程度上解决了顺序插入时,树的深度的问题, 但是当数据量比较大的时候,这种问题也是会存在的。

2020-08-29 14:16:58 1052

原创 Mysq 的 Redo Log 、Undo Log、 Bin Log 原理

InnoDB 的 redo Log 和 刷盘InnoDB 的数据都是存储在磁盘上, 每次读取数据都需要从磁盘加载, 为了提高IO速度,引入缓冲池(Buffer Pool),就是把磁盘上的数据(页)放到缓冲池中。下次读取相同的页会判断是不是在缓冲池中, 如果是就直接读取。修改数据的时候,会先修改缓冲池里面的页。 缓冲池的数据(页)跟磁盘不一致时(即脏页),后台线程会将缓冲池的数据写入到磁盘中(即刷脏)如果 Buffer Pool 里面的脏页还没有刷入磁盘时,数据库宕机或重启,数据将会丢失或不可用。为

2020-08-29 13:16:38 92

原创 MySQL 基于 binlog 的主从复制

Master连接MySQL 并创建主从复制的用户create user masterSync;给新建用户赋权GRANT REPLICATION SLAVE,FILE ON *.* TO 'masterSync'@'%' IDENTIFIED BY 'masterSync';指定服务ID,开启binlog日志记录,在 /etc/my.cnf 中加入如下配置[mysqld]# 通常设置为ipserver-id=135# 记录到 mysql-bin 文件中log-bin=mys

2020-08-29 13:11:59 315

原创 centos7 安装mysql 多实例

参考文档centos7 安装mysql 5.7多实例单台linux部署多个mysql实例实战以前文章centos7 安装 MySQL数据库 及 MySQL 存储表情安装多实例mkdir /guaoran/mysql/data/mysql1mkdir /guaoran/mysql/data/mysql2mkdir -pv /guaoran/mysql/data/log/mysql1mkdir -pv /guaoran/mysql/data/log/mysql2echo 'export P

2020-08-29 13:08:26 143

原创 centos7 安装 MySQL数据库 及 MySQL 存储表情

linux 安装 mysql mysql 存储表情mysql 远程连接出现Error 1130问题

2020-08-29 13:03:58 201

原创 使用 Nagios 监控磁盘、CPU 和 内存

以前文章安装Nagios 并使用 Nagios 监控 MySQL文章目录配置nagios 监控磁盘安装 nrpe配置监控本地主机磁盘配置监控远程主机磁盘配置监控CPU、内存查看文件是否可执行修改配置文件配置nagios 监控磁盘NRPE是监控软件nagios的一个扩展,它被用于被监控的服务器上,向nagios监控平台提供该服务器的一些本地的情况。例如,cpu负载、内存使用、硬盘使用等等。NRPE可以称为nagios的for linux 客户端。安装 nrpeyum install epel-re

2020-08-29 12:18:45 1002

原创 安装Nagios 并使用 Nagios 监控 MySQL

Nagios是一个监视系统运行状态和网络信息的监视系统。Nagios能监视所指定的本地或远程主机以及服务,同时提供异常通知功能等Nagios可运行在Linux/Unix平台之上,同时提供一个可选的基于浏览器的WEB界面以方便系统管理人员查看网络状态,各种系统问题,以及日志等等。打开Nagios官方的文档,会发现Nagios基本上没有什么依赖包,只要求系统是Linux或者其他Nagios支持的统。不过如果你没有安装apache(http服务),那么你就没有那么直观的界面来查看监控信息了,所以apach

2020-08-29 12:11:59 362

原创 Redis集群安装 - Redis-Cluster

三台虚拟机服务器:135,134,131 ,实现三主六从in 192.168.45.135-- 下载 redis 依赖yum install gcc cd /guaoran/redis/cluster/wget http://download.redis.io/releases/redis-5.0.3.tar.gztar -zxvf redis-5.0.3.tar.gz cd redis-5.0.3 make cd src-- 使编译后的文件进入到指定目录,这样可以保证目录的整洁

2020-08-28 23:49:46 155

原创 Redis集群安装 - 基于哨兵机制

分布式RedisRedis的集群135:master131,134:slave修改master配置in 135vim redis.conf#bind 127.0.0.1 protected-mode no# 以守护线程启用daemonize yes## 设置密码requirepass guaoran## master 密码# masterauth <master-password>masterauth guaoran修改slave配置in 131,1

2020-08-28 23:43:18 91

空空如也

空空如也

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

TA关注的人

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