Pistachio's Blog

Later equals never.

RabbitMQ的学习与实践

前言在一些实时性要求不是很高的场景,可以通过异步队列,将任务放在后台执行,将会大大降低接口的耗时,提高响应速度。 一、工作原理 RabbitMQ基于AMQP(高级消息队列协议) Producer:消息的生产者 Connection: 生产者/消费者与队列建立的一个TCP连接 Channel:轻量级的信道,每次与MQ连接都要建立TCP连接,开销大。若应用程序支持多线程,则每个线......

【行为型】中介者模式

一、模式定义用一个中介对象来封装(封装变化)一系列的对象交互。中介者使各对象不需要显式的相互引用(编译时依赖->运行时依赖),从而使其耦合松散(管理变化),而且可以独立地改变它们之间的交互。 与Facade模式异曲同工,也是通过新的东西来隔离对象,而区别是,Mediator解决的是系统内部各个对象的隔离,Facade则是解决系统外部与系统内部对象的隔离 二、结构 ...

go GC

前言之前已经学习过相关GC的知识,对于Go的GC细节还需要梳理一下。 GC过程而三色抽象能够清晰地表现追踪式回收过程中对象的变化过程: 1、垃圾回收开始前,所有数据都为白色; 2、把直接追踪到的root结点标记为灰色 (灰色代表基于当前结点展开的追踪还没完成) 3、当基于某个节点的追踪完成后(基于该节点追踪不到数据),便把该节点标记为黑色,表示它为存活数据,而且无需基于它进行追踪; ......

数位DP模板

一、定义数位是把一个数字按照个、十、百、千等等一位一位地拆开,关注它每一位上的数字。 数位DP通常用来解决一类特定的问题(有通用的模板),这种问题比较好辨认,一般具有这几个特征: 要求统计满足一定条件的数的数量(即,最终目的为计数); 这些条件经过转化后可以使用「数位」的思想去理解和判断; 输入会提供一个数字区间(有时也只提供上界)来作为统计的限制; 上界很大,暴力枚举验证会超时。 二、......

go编程学习

LC周赛 中有些题目涉及到自定义pair类型和自定义排序的用法,因此记录下 LC6351. 标记所有元素后数组的分数 123456789101112131415161718192021222324// nums = [2,1,3,4,5,2]func findScore(nums []int) (ans int64) { a := make([]pair, len(nums)) ......

分布式锁

前言在单机开发中,涉及并发同步时,往往使用lock或synchronize的方式实现多线程间代码同步问题。 但如果在分布式或者集群环境下就无法通过多线程的锁来解决同步问题,如多个线程同时对服务A_1、A_2进行访问,由于负载均衡权重的原因,两个服务都有可能被访问,即使给服务上锁,也会有两个线程修改同一个数据的风险。 一、分布式锁的介绍可以引入分布式锁组件,通过分布式组件给集群服务提供......

ZooKeeper

一、简介ZooKeeper是一个分布式的、开源的分布式应用程序的(Hadoop、Hive等服务)协调服务,提供配置管理、分布式锁、集群管理(发布/订阅)等功能。 配置管理:zk作为配置中心,存储了每个分布式应用公有的配置信息,每个分布式应用可以从配置中心拉取配置信息,即使配置数据发生变更,也不影响应用服务,只需要改配置中心即可,大大降低复杂度。 集群管理:zk作为注册中心,服......

分布式事务解决方案之3PC

一、定义3PC,Three-phase commit protocol,解决了2PC的阻塞问题,分为3个阶段canCommit,preCommit,doCommit 二、3PC过程 1、阶段一 CanCommit (1)事务询问:TC向各个Participants发送CanCommit,询问是否可以执行事务提交操作,并开始等待Participants的响应。 (2)反馈询问响应:Parti......

分布式事务基解决方案之2PC

一、2PC定义2PC是Two-Phase commit protocol,原子性提交的两阶段提交协议 Trasaction Coordinator(TC,事务协调器):实质是一台服务器,负责对事务进行协调 Participants(事务参与者):可以有多个,负责执行事务中部分任务的服务器叫参与者。它们各自负责自己的那部分事务,存在于不同的服务器上 只有TC来决定是否提交事务或终止事务,P......

分布式事务

Conccurency control并发控制悲观锁并发控制1、Two-Phase Locking require lock:事务对任何数据进行操作之前,都要获取该数据对应的锁; hold until done :直到事务被提交或终止之后,事务才能释放掉它所获得的锁。不能在事务执行过程中释放锁,只能对这些锁进行累加操作,直到事务结束。(此处体现了有序性Serialization的定义,本......