Code
文章平均质量分 81
qingwave
qingwave.github.io
展开
-
Golang实现一个事务型内存数据库
MossDB的实现细节已经分析完成,支持了事务、持久化、Watch与过期删除等特性,后续可能会支持HTTP API、存储快照等功能。原创 2023-03-03 09:28:54 · 991 阅读 · 1 评论 -
Rust初探: 实现一个Ping
这两年Rust火的一塌糊涂,甚至都烧到了前端,再不学习怕是要落伍了。最近翻了翻文档,写了个简单的Ping应用练练手,被所有权折腾的够呛,相比起Golang上手难度大很多,现将开发中的一些问题总结如下。原创 2022-11-29 16:45:52 · 737 阅读 · 1 评论 -
如何实现零宕机的配置热加载
本文主要总结实现配置热更新的多种方式,手动更新可以通过Socket、信号等进程间通信手段来通知服务,自动更新可以通过inotify来感知配置变化,在分布式环境中就需要配合分布式配置中心来进行热更新。原创 2022-09-30 16:12:37 · 769 阅读 · 0 评论 -
Golang优雅之道
本文总结了Golang的一些有趣的编程模式,例如链式调用、可选配置、并发控制等,通过这些技巧或者手段,可以提高编码的质量,所有代码见gocorex。原创 2022-09-13 14:56:17 · 1000 阅读 · 1 评论 -
Golang分布式应用之ZooKeeper
本文分析了ZooKeeper在分布式锁、服务发现等场景上的实现方式,并对比了与etcd的差异点。原创 2022-08-10 11:14:37 · 1426 阅读 · 0 评论 -
Golang分布式应用之etcd
etcd是一个可靠的分布式KV存储数据库,由CoreOS开源。Kuberentes使用etcd作为其存储引擎,随着云原生的火热,etcd也逐渐广泛应用起来。本文结合Golang来编写对应的中间件。原创 2022-08-09 09:26:57 · 783 阅读 · 0 评论 -
Golang分布式应用之定时任务
本文主要总结了定时任务的两种实现方式,最小堆与时间轮,并分析其核心实现逻辑。原创 2022-07-29 11:27:26 · 1756 阅读 · 0 评论 -
Golang分布式应用之Redis
Redis作是一个高性能的内存数据库,常被应用于分布式系统中,除了作为分布式缓存或简单的内存数据库还有一些特殊的应用场景,本文结合Golang来编写对应的中间件。原创 2022-07-25 20:12:28 · 3823 阅读 · 0 评论 -
Golang访问控制框架:Open Policy Agent vs Casbin
大型项目中基本都包含有复杂的访问控制策略,特别是在一些多租户场景中,例如Kubernetes中就支持RBAC,ABAC等多种授权类型。在Golang中目前比较热门的访问控制框架有Open Policy Agent与Casbin,本文主要分析其异同。......原创 2022-06-13 09:43:55 · 1317 阅读 · 0 评论 -
Kubernetes中的Golang设计模式
随着Kubernetes成为容器编排领域的事实标准,Golang在云原生方面应用的也越来越多。今天我们跟随K8s的脚步,学习下在K8s中使用哪些经典的设计模式。创建型模式创建型模式顾名思义提供了对象的创建机制,封装了内部的复杂性,提高代码复用和灵活性。包括:单例模式工厂模式建造者模式原型模式单例模式单例模式用来保证一个类只有一个实例,并提供调用它的一个全局访问点。单例模式是设计模式中最简单,使用最广的一个,通常用来创建一个共享的实例,比如数据库连接池、线程池等。单例模式分为懒汉式(使用原创 2022-04-18 11:27:34 · 727 阅读 · 2 评论 -
Golang Channel的一些妙用
Golang中通过我们使用Channel来传递信息、信号,经典的如生产者消费者、退出信号等, 那么除此之外Channel还有哪些不常见的用法。原创 2022-02-24 10:23:58 · 396 阅读 · 0 评论 -
Golang+Vue构建全功能Web应用
Go+Vue实现前后端管理平台,支持Gin、Postgres、Redis、ELement等原创 2022-01-24 14:47:42 · 10668 阅读 · 12 评论 -
Golang自定义DNS Nameserver
某些情况下我们希望程序通过自定义Nameserver去查询域名,而不希望通过操作系统给定的Nameserver,本文介绍如何在Golang中实现自定义Nameserver。DNS解析过程Golang中一般通过net.Resolver的LookupHost(ctx context.Context, host string) (addrs []string, err error)去实现域名解析,解析过程如下:检查本地hosts文件是否存在解析记录,存在即返回解析地址不存在即根据resolv.conf中原创 2021-03-31 18:49:08 · 2406 阅读 · 0 评论 -
golang zk大量disconnected event
背景在容器平台上我们提供了zk做白名单功能,Pod启动时 sidecar会自动注册zk。昨天遇到zk server抖动,sidecar容器输出大量StateDisconnected事件,zk正常后仍无法恢复,由于大量日志造成sidecar容器 cpu占用过高,进而引发dockerdcpu占用过高,严重时影响dockerd正常调用。问题分析问题复现正常情况下,sidecar启动后会去注册zk:# docker logs -f 01a1a4a74785I0302 15:04:05.476463原创 2021-03-02 17:56:08 · 510 阅读 · 0 评论