目录

Life in Flow

知不知,尚矣;不知知,病矣。
不知不知,殆矣。

分布式锁

分布式锁  分布式锁是控制分布式系统或不同系统之间共同访问共享资源的一种锁实现。如果不同的系统或同一个系统的不同主机之间共享了某个资源时,往往通过互斥来防止彼此干扰。 分布锁设计目的  可以保证在分布式部署的应用集群中,同一个方法在同一操作只能被一台机器上的一个线程执行。 锁的设计要求 这把锁要是一把可重入锁(避免死锁) 这把锁有高可用的获取锁和释放锁功能 这把锁获取锁和释放锁的性能要好… 分布式锁实现方案分析 获取锁的时候,使用 setnx(SETNX key val:当且仅当 key 不存在时,set 一个 key 为 val 的字符串,返回 1; 若 key 存在,则什么都不做,返回 【0】加锁,锁的 value 值为当前占有锁服务器内网 IP 编号拼接任务标识组成。在释放锁的时候进行判断。并使用 expire 命令为锁添 加一个超时时间,超过该时间则自动释放锁。 获取锁的时候调用 setnx, 如果返回 0,则该锁正在被被人使用,返回 1,则成功获取锁。还设置一个获取的超时时间,若超过这个时间则放弃获取锁。 setex (key,value,expire) 过期以秒为单....

Linux磁盘、文件系统管理

磁盘接口类型  并口的同一个线缆上可以接多个设备。  串口的同一个线缆上可以接一个设备。 IDE:并口,133MB/s、IOPS=100、非企业级 SCSI:并口,Ultrascsi320,320MB/S,Ultrascsi640,640MB/S。 IOPS=150 企业级 SATA:串口,6gbps。 IOPS=100 非企业级 SAS:串口(SCSI),6gbps。 IOPS=150 企业级 USB:串口,480MB/s 普通 SATA 固态硬盘:IOPS=9W PCI-E 固态硬盘:IOPS=10W~50W 一切皆文件 设备类型 块(block):随机访问、数据交换单位是“块”。 字符:线性访问,数据交换单位是“字符”。 设备文件  一切皆文件,设备也需要以文件的形式存在:/dev/*,设备文件主要作用是关联至设备的驱动程序。 设备号 major:主设备号,区分设备类型;用于标明设备所需要的驱动程序。 minor:次设备号,区分同种类型下的不同的设备;是特定设备的访问入口。 创建(申请)设备文件 # 创建字符类型设备,主版本号 111 次版本号 1 [root@loc....

RocketMQ集群高可用之双主双从

机器列表 server1 ssh root@192.168.159.133 部署nameServer Broker-a server2 ssh root@192.168.159.130 部署nameServer Broker-a-s server3 ssh root@192.168.159.131 Broker-b server4 ssh root@192.168.159.132 Broker-b-s 修改 RocketMQ 启动内存配置  4 个机器都要修改, 其中 runbroker.sh 修改 4 个,runserver.sh 修改 2 个 # 解决NameServer内存不满足4G的报错:修改2个 vim /test/rocketmq/distribution/target/apache-rocketmq/bin/runserver.sh #修改JAVA_OPT JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m" #....

CentOS系统启动流程

Linux 系统的组成部分   Linux 系统主要由内核、根文件系统组成。 # 内核的功能 进程管理、内存管理、网络协议栈、文件系统、驱动程序、安全功能 运行中的系统环境可分为两层 用户空间:应用程序(进程或线程) 内核空间:内核代码(系统调用) 内核设计流派 单内核设计:把所有功能集成于同一个程序。Linux 微内核设计:每种功能使用一个单独的子系统实现。Windows、Solaris 内核的组成部分 核心文件:/boot/vmlinuz-3.10.0-957.21.3.el7.x86_64 ramdisk:临时根文件系统。/boot/initramfs-3.10.0-957.21.3.el7.x86_64.img 模块文件:/lib/modules/3.10.0-957.21.3.el7.x86_64/* .* Filesystem Hierarchy Standard  文件系统层级结构标准  所有 Linux 发行版遵循的根文件系统结构的标准规范,明确规范了根下所有目录的命名规范与职能。 系统分区规划的意义 BIOS Boot (标准分区):Boot Loa....

分布式事务消息

分布式事务  单体应用被拆为分布式应用,一个借口需要调用多个服务,且操作不同的数据库,数据一致性难以保障。 常见解决方案 2PC : 两阶段提交, 基于 XA 协议 TCC : Try、Confirm、Cancel 框架 GTS -> 开源 Fescar 链接 LCN 链接 RocketMQ4.X 分布式事务消息架构 RocketMQ 事务消息  RocketMQ 提供分布事务功能,通过 RocketMQ 事务消息能达到分布式事务的最终一致。 半消息 Half Message  暂不能投递的消息(暂不能消费),Producer 已经将消息成功发送到了 Broker 端,但是Broker 端未收到 Produce 对该消息的二次确认,此时该消息被标记成“暂不能投递”状态,处于该种状态下的消息即半消息。 消息回查  由于网络闪断、生产者应用重启等原因,导致某条事务消息的二次确认丢失,消息队列 RocketMQ 服务端通过扫描发现某条消息长期处于“半消息”时,需要主动向消息生产者询问该消息的最终状态(Commit 或是 Rollback),该过程即消息回查。 整体交互流程 ....

Offset、CommitLog、ZeroCopy

消息偏移量 Offset 一个 Topic 下面有多个 message queue,message queue 是无限长的数组,一条消息进来下标就会涨 1,下标就是 offset(索引的位置),消息在某个 MessageQueue 里的位置,通过 offset 的值可以定位到这条消息,或者指示 Consumer 从这条消息开始向后处理。 message queue 中的 maxOffset 表示消息的最大 offset, maxOffset 并不是最新的那条消息的 offset,而是最新消息的 offset+1,minOffset 则是现存在的最小 offset。 fileReserveTime=48 默认消息存储 48 小时后,消息会被物理地从磁盘删除,message queue 的 min offset 也就对应增长。(1-5000,消息删除之后,1001-5000)所以比 minOffset 还要小的那些消息已经不在 broker 上了,就无法被消费。 Offset 的存储类型 本地文件类型:DefaultMQPushConsumer 的 BROADCASTING 模式,各....

RocketMQ消费者核心概念

常见核心配置 consumeFromWhere 配置 参考 CONSUME_FROM_FIRST_OFFSET: 初次从消息队列头部开始消费,即历史消息(还储存在broker的)全部消费一遍,后续再启动接着上次消费的进度开始消费 CONSUME_FROM_LAST_OFFSET: 默认策略,初次从该队列最尾开始消费,即跳过历史消息,后续再启动接着上次消费的进度开始消费 CONSUME_FROM_TIMESTAMP : 从某个时间点开始消费,默认是半个小时以前,后续再启动接着上次消费的进度开始消费 allocateMessageQueueStrategy:负载均衡策略算法,即消费者分配到 queue 的算法,默认值是 AllocateMessageQueueAveragely 即取模平均分配。 offsetStore:消息消费进度存储器 offsetStore 有两个策略: * LocalFileOffsetStore : Consumer记录消息的消费进度。 * RemoteBrokerOffsetStor : Broker记录消息的消费进度。 广播模式默认使用Lo....