随笔分类 -  golang

摘要:1. flag库的基本用法 下面是一个golang flag库的命令行demo程序 func main() { wordPtr := flag.String("word", "Jude", "a string") numPtr := flag.Int("numb", 42, "an int") bo 阅读全文
posted @ 2022-06-03 17:17 aganippe 编辑
摘要:一个实用的logger需要提供以下这些功能: 支持把日志写入多个输出流中,比如可以选择性的让测试、开发环境同时向控制台和日志文件输出日志,生产环境只输出到日志文件中 支持多级别的日志等级,常见的有:TRACE、DEBUG、INFO、WARN、ERROR、PANIC等 支持结构化输出,结构化输出常用的 阅读全文
posted @ 2022-06-02 14:49 aganippe 编辑
摘要:1. Hashicorp Raft实现分析 在raft算法中,典型的领导者选举在本质上是节点状态的变更。具体到raft源码中,领导者选举的入口函数就是run(),在raft.go中以一个单独的协程运行,来实现节点状态的变更 在下面的实现代码中,可以看到Follower、Candidate和Leade 阅读全文
posted @ 2022-05-23 16:58 aganippe 编辑
摘要:1. 创建型模式 这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用new运算符直接实例化这些对象 这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活 1.1 工厂模式 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,而是通过使用一个共同的接口来指向新创建的对象 代 阅读全文
posted @ 2022-05-20 20:02 aganippe 编辑
摘要:1. RabbitMQ介绍 RabbitMQ是采用Erlang编程语言实现的高级消息队列协议AMQP(Advanced Message Queuing Protocol)的开源消息队列中间件 消息队列中间件的作用: 应用解耦 流量削峰 异步处理 缓存存储 消息通信 提高系统扩展性 1.1 Rabbi 阅读全文
posted @ 2022-05-19 16:14 aganippe 编辑
摘要:1. runtime.Caller()方法介绍 runtime.Caller()函数的签名如下: func Caller(skip int) (pc uintptr, file string, line int, ok bool) 可以看到其有一个传入参数skip: skip=0:Caller()会 阅读全文
posted @ 2022-05-18 18:39 aganippe 编辑
摘要:1. 一致性哈希算法 关于一致性哈希算法的详解,可以参见这篇博客文章 一致性哈希详解 简单来说,一致性哈希通过哈希环和增加虚拟节点来解决节点变更时的大范围数据迁移和冷热不均的问题 一致性哈希的一个开源实现为:stathat.com/c/consistent 1.1 数据迁移 我们首先从数据迁移的角度 阅读全文
posted @ 2022-05-18 16:44 aganippe 编辑
摘要:1. 读取整个文件 读取整个文件是效率最高的一种方式,但其只适用于小文件,大文件一次读取会消耗大量内存 1.1 使用文件名直接读取 使用os.ReadFile()方法可以实现直接读取 func fileOne() { content, err := os.ReadFile("test.txt") i 阅读全文
posted @ 2022-05-17 15:06 aganippe 编辑
摘要:golang中的原生包endcoding/json提供了序列化和反序列化json数据的功能 我们可以使用encoding/json中的Encoder.Encode()和Marshal()实现json序列化;使用Decoder.Decode()和Unmarshal()实现json反序列化 type M 阅读全文
posted @ 2022-05-17 14:17 aganippe 编辑
摘要:1. 什么是服务器雪崩 雪崩是由于局部故障被正反馈循环,从而导致的不断放大的连锁故障,雪崩通常是由于整个系统中,一个很小的部分出现故障,进而导致整个系统不可用 雪崩出现的根本原因就是系统过载,如果在系统过载的情况下,不进行任何控制,那么会导致系统雪崩 想要避免雪崩有几种常见的方式,第一种就是快速减少 阅读全文
posted @ 2022-05-13 21:50 aganippe 编辑
摘要:1. 什么是gRPC拦截器 我们以etcd一个写请求的流程来看gRPC拦截器做了什么工作 当etcd处理一个写请求,比如 put hello world 时,首先etcd client会使用负载均衡算法选择一个etcd节点,发起gRPC调用; 然后etcd节点收到请求后经过gRPC拦截器、Quota 阅读全文
posted @ 2022-05-13 17:26 aganippe 编辑
摘要:在高并发场景中,通常需要像mysql中那样的自增主键一样的不会重复且自增的id生成 twitter的snowflake就是一种典型的解法,id数值长64位,是一个int64类型,被分为四个部分: 最高位不使用 41位表示收到请求的时间戳,单位为毫秒 5位表示数据中心的id 5位表示机器实例的id 1 阅读全文
posted @ 2022-04-10 20:20 aganippe 编辑

点击右上角即可分享
微信分享提示