ALOVN

志当存高远

Protobuf 之 Varint 编码

Protobuf Varint

protobuf编码基础是Varint, Varint是将一个整数序列化为一个或多个Bytes的方法,这是一种紧凑的表示数字的方法,越小的整数,使用的Bytes越少. Varint 中的每个 byte 的最高位 bit 有特殊的含义,如果该位为 1,表示后续的 byte 也是该数字的一部分,如果该位为 0,则结束。其他的 7 个 bit 都用来表示数字。因此小于 128 的数字都可以用一个...

了解 Golang Context

golang context

golang在context包下提供了一个Context,它可以用来在多个goroutine之间传递信号 1 2 3 4 5 6 7 8 9 10 type Context interface { Deadline() (deadline time.Time, ok bool) Done() <-chan struct{} Err() error ...

SpringBoot事务提交后执行后续操作

sprintboot transaction after commit

业务要求 操作A操作数据库失败后,事务回滚,那么操作B不能执行。 操作A执行成功后,操作B若失败,B需要回滚,A不需要回滚。 实现方案 使用TransactionSynchronizationManager在事务提交之后操作 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28...

Go语言基础之包

Golang package

包(package)是多个Go源码的集合,是一种高级的代码复用方案,Go语言为我们提供了很多内置包,如fmt、os、io等。 定义包 我们还可以根据自己的需要创建自己的包。一个包可以简单理解为一个存放.go文件的文件夹。 该文件夹下面的所有go文件都要在代码的第一行添加如下代码,声明该文件归属的包。 1 package 包名 注意事项: 一个文件夹下面只能有一个包,同样一个...

Go语言基础之结构

Golang struct

Go语言中没有『类』的概念,也没有『类』的继承等面向对象的概念。Go语言中通过结构体再配合接口比面向对象具有更高的扩展性和灵活性。 类型别名和自定义类型 自定义类型 在Go语言中有一些基本数据类型,如字符串、整型、浮点型、布尔型,还可以使用 type 实现自定义类型。自定义类型是定义了一个全新的类型, 如下通过 type 关键字定义,MyInt就是一种新的类型,它具有int的特性: ...

kubernetes 增加 workder 节点

kubernetes add worker node

在 node 节点安装依赖容器 1 2 3 4 5 //依赖容器 kube-proxy kube-scheduler flannel pause 可通过以下命令将master 节点的镜像打包并导入到新的worker节点上 1 2 3 4 5 //master节点上执行打包镜像 docker save -o k8s-v1.14.3.tar k8s.gcr.io/kube-proxy k...

go-micro安装笔记

go-micro installation notes

安装go-micro遇到了不少问题。 第一步 安装go-micro 1 go get github.com/micro/go-micro 第二步 安装 grpc 和 protobuf 1 2 3 4 5 # install protobuf brew install protobuf # install protoc-gen-go go get -u github.com/gol...

微信红包的架构设计

weixin red packets design

业务上做一个类似微信拆红包的功能,网上查找资料参考和学习下微信红包的架构设计。 抢红包后台操作 抢红包分为抢和拆,抢操作在Cache层完成,通过原子减操作进行红包数递减,到0就说明抢光了,最终实际进入后台拆操作的量不大,通过操作的分离将无效请求直接挡在Cache层外面。这里的原子减操作并不是真正意义上的原子减操作,是其Cache层提供的CAS,通过比较版本号不断尝试,存在...

Kafka 数据删除策略

The kafka data delete strategy

数据存储位置 数据存储的位置根据配置决定: log.dirs 数据删除策略 1 2 3 4 5 6 # 日志保留的最小时间,因为是定时检查的,所以是不是精确时间, # The minimum age of a log file to be eligible for deletion log.retention.hours=168 # 定时检查周期,发现数据存了超过上面配置的时间,就清...

git merge 和 git merge --no-ff的区别

The diffrence between git merge and git merge --no-ff

GItFlow工作流的文章里面,都会推荐在合并分支的时候加上–no-ff参数。 这里我将介绍一下merge的三种状态及 git merge 和 git merge –no-ff 的区别 –ff (fast-forward) –ff是指fast-forward命令。当使用fast-forward模式进行合并时,将不会创造一个新的commit节点。默认情况下,git-merge采用fast-...