2023年2月17日

分布式事务管理器dtm第四篇:TCC模式

摘要: TCC:T是Try,第一个C是Confirm,第二C是Cancel。 AP向dtm注册全局事务后, 阅读全文

posted @ 2023-02-17 00:00 koushr 阅读(111) 评论(0) 推荐(0) 编辑

2023年2月2日

分布式事务管理器dtm第三篇:二阶段消息模式

摘要: 二阶段消息的英文是2-phase message。 AP先向dtm发送prepare消息,如果成功,则继续执行本地事务,如果成功,则继续向dtm发送submit消息。如果成功,则dtm调用各RM的接口,如果成功,则全局事务成功。 时序图如下: dtm服务端处理prepare时,会在dtm_barri 阅读全文

posted @ 2023-02-02 21:00 koushr 阅读(220) 评论(0) 推荐(0) 编辑

分布式事务管理器dtm第二篇:saga模式

摘要: 参考官方中文文档:https://dtm.pub/practice/saga.html saga核心思想是把一个长事务拆分多个短事务,由dtm协调,如果每个短事务都成功提交,那么全局事务就正常完成,如果某个步骤失败,则根据相反顺序调用补偿操作。 以转账为例,saga的时序图如下: AP把事务的编排信 阅读全文

posted @ 2023-02-02 20:10 koushr 阅读(155) 评论(0) 推荐(0) 编辑

2023年1月31日

分布式事务管理器dtm第一篇:介绍

摘要: https://dtm.pub/guide/start.html dtm全称是distributed transaction manager。dtm是cs架构。 dtm服务端部署: docker run --name dtm --network host -p 36789:36789 -p 3679 阅读全文

posted @ 2023-01-31 11:46 koushr 阅读(362) 评论(0) 推荐(0) 编辑

2022年9月8日

redis实现限流

摘要: 在面试中金时问到了,卡壳了。 限流算法有 固定窗口、滑动窗口、漏桶算法、令牌桶算法 漏桶算法: 把请求到来想象成往桶里加水,把处理请求想象成桶往外滴水,滴水的速率是固定的。如果桶满了,那么再进来的请求就会拒绝。 令牌桶算法: 以固定频率往桶里放置令牌,当桶满的时候,多出来的令牌被丢弃。每来一个请求, 阅读全文

posted @ 2022-09-08 20:05 koushr 阅读(207) 评论(0) 推荐(0) 编辑

2021年10月13日

二分法习题

摘要: 力扣4、寻找两个正序数组的中位数 思路:在两个数组中各画一条分隔线,使得两数组在分隔线左边的元素个数之和等于分隔线右边的元素个数之和,或者比右边元素个数之和大1,分别对应两数组元素之和为偶数和奇数的情况。这样的分隔线有很多,假设第一个数组有3个元素,第二个数组有5个元素,那么分隔线左右两边的元素个数 阅读全文

posted @ 2021-10-13 14:37 koushr 阅读(25) 评论(0) 推荐(0) 编辑

2021年7月6日

go基础第十一篇:常见开发错误

摘要: 1、入参数组修改不了 一个无返回值的函数,入参是一个基本数据类型的数组,在函数中修改数组的值,是不会生效的。想要生效,需要把入参由数组改为数组指针或者slice。 如果数组的元素不是基本数据类型,而是自定义的struct类型,那么入参由普通数组改成指针数组也行。 2、入参数组append不了 一个无 阅读全文

posted @ 2021-07-06 10:21 koushr 阅读(47) 评论(0) 推荐(0) 编辑

2021年6月28日

时序数据库

摘要: 时序数据库是专门用于存储和管理时间序列数据的数据库。时序数据库和传统关系库一样,是行式数据库,而不是列式数据库。时序数据库,开源代表是InfluxDB、Prometheus。 InfluxDB 阅读全文

posted @ 2021-06-28 23:29 koushr 阅读(47) 评论(0) 推荐(0) 编辑

2021年5月31日

列数据库

摘要: 行数据库用于OLTP,联机事务处理。而列数据库用于OLAP,联机分析处理。 开源的列数据库有ClickHouse和Druid。 ClickHouse是俄罗斯一家公司开源的。 Druid是Apache基金会维护的。 阅读全文

posted @ 2021-05-31 22:38 koushr 阅读(95) 评论(0) 推荐(0) 编辑

2021年3月11日

go基础第九篇:context

摘要: 1、带取消的context context.WithCancel(parent Context) (ctx Context, cancel CancelFunc) 传入一个父context,返回一个可以手动取消的子context及其取消函数。 我们可以手动调用cancel()函数来取消子contex 阅读全文

posted @ 2021-03-11 11:01 koushr 阅读(73) 评论(0) 推荐(0) 编辑

2021年2月21日

mysql binlog、redo log、undo log

摘要: binlog:二进制日志,是系统级别日志,任何存储引擎的表都有。 binlog用于记录数据库执行的写入性操作,以二进制形式保存在磁盘中,任何存储引擎的mysql数据库都会记录binlog日志。 binlog的使用场景主要有2个:主从复制和数据恢复。 binlog刷盘时机 对于InnoDB存储引擎而言 阅读全文

posted @ 2021-02-21 12:40 koushr 阅读(702) 评论(0) 推荐(0) 编辑

2020年11月16日

IO多路复用

摘要: IO多路复用是一种同步IO模型,旨在实现一个线程可以监视多个文件句柄。一旦某个文件句柄就绪,就能够通知应用程序进行相应的读写操作。没有文件句柄就绪就会阻塞应用程序,交出CPU。多路是指网络连接,复用指的是同一个线程。 多路复用有三种实现方式: 1、select实现 select仅仅知道有IO发生了, 阅读全文

posted @ 2020-11-16 20:05 koushr 阅读(541) 评论(0) 推荐(0) 编辑

2020年10月20日

curl、wget使用

摘要: curl curl -H "Content-Type:application/json" -X POST --data '{"name":"zhangsan"}' http://127.0.0.1:9000/helloWorld curl命令用法: curl [options...] <url> 常 阅读全文

posted @ 2020-10-20 12:31 koushr 阅读(265) 评论(0) 推荐(0) 编辑

2020年9月29日

查看linux机器cpu、内存、内核等系统信息

摘要: linux服务器的cpu信息在/proc/cpuinfo文件中,内存信息在/proc/meminfo文件中。 通过文件可以获得物理cpu的个数、cpu的核数、逻辑cpu的个数 查看物理cpu个数: cat /proc/cpuinfo | grep "physical id" | sort | uni 阅读全文

posted @ 2020-09-29 20:09 koushr 阅读(556) 评论(0) 推荐(0) 编辑

2020年9月7日

redis为什么那么快

摘要: 1、纯内存操作。 2、高效的数据结构。 3、使用I/O多路复用模型epoll。 见https://www.cnblogs.com/koushr/p/13986873.html 阅读全文

posted @ 2020-09-07 00:44 koushr 阅读(101) 评论(0) 推荐(0) 编辑

2020年9月4日

websocket协议及应用

摘要: websocket协议是一个应用层协议,地位和http协议是一样的。 大多数浏览器都支持websocket协议, 阅读全文

posted @ 2020-09-04 09:57 koushr 阅读(179) 评论(0) 推荐(0) 编辑

2020年8月20日

leetcode第一篇:排序算法

摘要: 必须要掌握的排序算法,重要性从高到低,有: 快排 归并排序 堆排序 希尔排序 插入排序 选择排序 冒泡排序 阅读全文

posted @ 2020-08-20 10:07 koushr 阅读(108) 评论(0) 推荐(0) 编辑

2020年8月6日

深度优先搜索、广度优先搜索

摘要: 深度优先搜索: 英文是Depth First Search,简称为DFS。主要思路就是从图/树中一个顶点开始,沿着一条路一直走到底,然后从这条路尽头的节点回退到上一个节点,再从另一条路走到底。。。不断重复此过程,直到所有的节点都遍历完成。DFS的特点就是一条道走到黑,不撞南墙不回头。 DFS遍历下面 阅读全文

posted @ 2020-08-06 19:32 koushr 阅读(94) 评论(0) 推荐(0) 编辑

2020年8月5日

一致性协议:gossip

摘要: gossip 阅读全文

posted @ 2020-08-05 01:02 koushr 阅读(97) 评论(0) 推荐(0) 编辑

2020年7月29日

go基础第七篇:利用pprof定位cpu和内存问题

摘要: 在项目的main.go文件中引入 _ "net/http/pprof" 在main函数中加入: go func() { _ = http.ListenAndServe(":6060", nil) }() 保证6060端口能访问到,如在容器中部署的话,别忘了添加端口映射。如果有防火墙的话,别忘了放开端 阅读全文

posted @ 2020-07-29 14:45 koushr 阅读(603) 评论(0) 推荐(0) 编辑

2020年7月27日

go基础第六篇:并发之channel

摘要: go不推荐使用共享内存机制,而是推荐使用CSP并发模型机制。 CSP全称是Communicating Sequential Processes,可以翻译成通信顺序进程(Communicating翻译成通信的意思)。简单解释就是,CSP模型由并发执行的实体组成,实体之间通过发送消息进行通信,发送消息时 阅读全文

posted @ 2020-07-27 19:05 koushr 阅读(228) 评论(0) 推荐(0) 编辑

2020年5月22日

docker第二篇:自定义Dockerfile文件

摘要: Dockerfile文件内容至少要有这么几项: 1、用FROM指定基础镜像 如FROM nginx 2、用COPY把宿主机上的文件复制到镜像中 如COPY ./aa.jar /path COPY后面跟的宿主机文件的路径不能是绝对路径,而只能是build上下文的相对路径。 3、用RUN指定要执行的命令 阅读全文

posted @ 2020-05-22 18:16 koushr 阅读(413) 评论(0) 推荐(0) 编辑

2020年5月19日

docker第一篇:docker概念及基础命令

摘要: 在mac上安装Docker Desktop,安装后可在终端上用docker version查看docker版本,用docker info可以查看更多信息。 一、镜像相关命令 拉取镜像: docker pull nginx 查看本地镜像: docker images 从docker hub搜索镜像: 阅读全文

posted @ 2020-05-19 21:06 koushr 阅读(405) 评论(0) 推荐(0) 编辑

2020年3月23日

一致性协议:raft

摘要: raft 阅读全文

posted @ 2020-03-23 14:29 koushr 阅读(29) 评论(0) 推荐(0) 编辑

2020年3月22日

kafka基本概念

摘要: 1、主题 Kafka将一组消息抽象归纳为一个主题(topic),也就是说,一个主题就是对消息的一个分类。生产者将消息发送到特定主题,消费者订阅主题或主题的某些分区进行消费。 2、消息 消息是Kafka通信的基本单位,由一个固定长度的消息头和一个可变长度的消息体构成。每一条消息称为Record。 3、 阅读全文

posted @ 2020-03-22 13:33 koushr 阅读(314) 评论(0) 推荐(0) 编辑

2020年3月17日

一致性协议:paxos

摘要: paxos 阅读全文

posted @ 2020-03-17 17:08 koushr 阅读(23) 评论(0) 推荐(0) 编辑

2020年1月10日

java服务生产问题定位

摘要: 应用CPU占用高,如何定位问题? 找到CPU占用高的线程:假设进程id是115 top -H -p 115 显示如下: 可以看到PID 2539 这个占用的CPU最多。2539到底是进程id,还是线程id呢?什么都不是。不过我们可以通过这个找到对应的线程。 把2539转16进制,是9eb。16进制前 阅读全文

posted @ 2020-01-10 23:10 koushr 阅读(227) 评论(0) 推荐(0) 编辑

2019年11月29日

分布式任务调度框架

摘要: https://github.com/apache/shardingsphere-elasticjob Saturn是唯品会开源的一款分布式任务调度框架,目前还在持续维护中。Saturn是土星的意思。 阅读全文

posted @ 2019-11-29 13:14 koushr 阅读(165) 评论(0) 推荐(0) 编辑

2019年11月26日

grpc第四篇:grpc-go、grpc-java桩代码生成及服务端、客户端开发

摘要: 假设有一个proto文件,内容同https://github.com/grpc/grpc-go/blob/master/examples/helloworld/helloworld/helloworld.proto,如何生成golang或者java的桩代码? 生成golang桩代码: 1、安装pro 阅读全文

posted @ 2019-11-26 20:55 koushr 阅读(248) 评论(0) 推荐(0) 编辑

kafka副本同步机制

摘要: kafka的复制机制,既不是单纯的同步复制,也不是单纯的异步复制。同步复制要求所有的follower都复制完,这条消息才会被commit,这种复制方式极大的影响了吞吐率。而异步复制方式下,数据只要被leader写入log就认为已经commit,这种情况下,如果follower都还没有复制完,落后于l 阅读全文

posted @ 2019-11-26 18:44 koushr 阅读(153) 评论(0) 推荐(0) 编辑

2019年11月21日

五大常用算法第五篇:回溯法及习题(要记住套路)

摘要: 英文是Backtracking Algorithms leetcode题目: 46、全排列。medium 阅读全文

posted @ 2019-11-21 19:47 koushr 阅读(385) 评论(0) 推荐(0) 编辑

2019年11月5日

线性表、栈、队列、串、树、图

摘要: 1、线性表 线性表是由n个数据元素组成的有限序列。n定义为线性表的长度,n=0时,称为空表。 线性表的存储结构分为顺序表和链表。 顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。 链表也是一种线性表,但是它不会按线性的顺序存储数据,而是在每一个 阅读全文

posted @ 2019-11-05 16:18 koushr 阅读(291) 评论(0) 推荐(0) 编辑

2019年10月20日

线程池第二篇:线程池相关类

摘要: 一、线程池类ThreadPoolExecutor ThreadPoolExecutor实现了ExecutorService接口,是线程池的代表类。 构造器最多有7个参数,各参数意思如下: 二、ForkJoinPool ForkJoinPool也实现了ExecutorService接口,参考https 阅读全文

posted @ 2019-10-20 01:43 koushr 阅读(170) 评论(0) 推荐(0) 编辑

2019年10月14日

线程池第一篇:线程池相关接口

摘要: 线程池ExecutorService 线程池用ExecutorService接口表示。ExecutorService继承了Executor接口。Executor接口就只有一个方法void execute(Runnable command),执行任务,没有返回值。 ExecutorService接口方 阅读全文

posted @ 2019-10-14 21:23 koushr 阅读(413) 评论(0) 推荐(0) 编辑

2019年10月9日

mysql InnoDB引擎与MyISAM引擎区别及索引原理

摘要: mysql InnoDB引擎和MyISAM引擎的主要区别: 1、MyISAM只支持表级锁,不支持行级锁。而InnoDB既支持表级锁,又支持行级锁。 2、MyISAM的索引是b树类型,而InnoDB的索引是b+树类型。 3、MyISAM不支持事务,而InnoDB支持事务。 阅读全文

posted @ 2019-10-09 14:55 koushr 阅读(655) 评论(0) 推荐(0) 编辑

2019年8月29日

浅拷贝、深拷贝

摘要: 参考 https://juejin.im/post/5c988a7ef265da6116246d11 文章不错。以后再总结。 总结来说,浅拷贝、深拷贝的区别主要是针对要拷贝对象的引用类型变量来说的。不管是浅拷贝还是深拷贝,拷贝后的对象的地址与源对象都是不同的。假如要拷贝的对象 阅读全文

posted @ 2019-08-29 11:50 koushr 阅读(356) 评论(0) 推荐(0) 编辑

grpc第一篇:What is gRPC

摘要: 本文将介绍gRPC和protocol buffers。gRPC可以利用protocol buffers作为其接口定义语言(Interface Definition Language,IDL)和信息交换格式。 预览 在gRPC中,一个客户端应用可以直接调用不同机器上的服务端应用的方法,就好像调用本地方 阅读全文

posted @ 2019-08-29 11:39 koushr 阅读(197) 评论(0) 推荐(0) 编辑

2019年7月3日

事务

摘要: ACID A是atomicity,原子性。 C是consistency,一致性。 I是isolation,隔离性。隔离级别很重要,脏读、不可重复读、幻读,都是隔离级别相关的问题。 D是durability,持久性。 下面以mysql数据库详细讲解一下隔离级别。 隔离级别有4种,由低到高,依次为Rea 阅读全文

posted @ 2019-07-03 19:45 koushr 阅读(694) 评论(0) 推荐(0) 编辑

2019年6月19日

垃圾收集器

摘要: 着重讲解3个垃圾收集器: 1、CMS收集器 -XX:+UseConcMarkSweepGC CMS,是Concurrent Mark Sweep的简称。在jdk1.5中发布。从名字就可以看出,它是基于标记清除算法实现的。CMS收集器是一种以获取最短回收停顿时间为目标的收集器,它非常适合B/S系统服务 阅读全文

posted @ 2019-06-19 11:53 koushr 阅读(309) 评论(0) 推荐(0) 编辑

2019年6月18日

分布式锁

摘要: 分布式锁的使用场景是什么呢? 之前红包需求的时候,有一个场景要用到分布式锁。同一个openid,最多只能抢到一个子红包。 1、先判断这个openid在不在该红包对应的已抢openid hash中 String hget(String key, String field); 2、如果在,就返回。如果不 阅读全文

posted @ 2019-06-18 23:14 koushr 阅读(664) 评论(0) 推荐(0) 编辑

导航