CFC-Golang 开发规范
CFC-Golang 开发规范 注:此开发规范整合了部分网络上有价值的参考意见和开发实践中的总结 Github地址:https://github.com/Kirov7/cfc-golang-develop-norms 为什么需要编程规范? 编程规范又叫代码规范,是团队之间在程序开发时需要遵守的约定。俗话说,无规矩不成方圆,一个开发团队应该就一种编程规范达成一致。编程规范有很多好处,我们简单说几个最…
Window-TinyLFU缓存实现
在我的一个基于LSM-Tree结构的存储引擎项目中,由于LSM-Tree结构的查询操作高度依赖缓存,所以我需要一个高性能的本地缓存模块来提高查询效率,抱着学习的目的,我们来 重复造轮子 亲自实现一个拥有良好性能的缓存模块。 所谓缓存,本质上就是 映射+淘汰策略 ,如何在有限的空间存储最”有用“的数据,也就是如何设定淘汰策略往往是我们所需要关注的,在Redis中,我们很多时候都是用的TTL(Time…
速通HDD与SSD基本原理
速通HDD与SSD基本原理 作为MIS专业的小弱鸡,对硬件组成的了解并不深入,而本人正在学习LSM-T结构的存储引擎,发现有些内容一定是要对硬件有所了解之后才能又更好的认知,比如在阅读了LSM-T的经典开山论文后,有了解到LSM-T结构化随机写为顺序写的特性,可以契合HDD的特点可以极大的加快磁盘写入的速度。而在Wiskey论文中,又提出了对SSD友好的KV分离式存储结构,并通过并行读取最大化发挥…
速通WebSocket协议 – 建立在HTTP之上的应用层”TCP”协议
由于最近在看一些IM系统相关的内容,学习到了webSocket协议,感觉很有意思,但是感觉感觉网上没有找到很清晰描述webSocket的文章,故有此篇,文章整理了网络上的一些资料并加上我的个人理解,如有错误,欢迎指出 WebSocket WebSocket是一种网络传输协议,可在单个TCP连接上进行全双工通信,WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推…
WEB服务端系统架构演进概述 – CFC例会2022.9.18
注:本系列内容为个人整理与总结的架构演进的鸟瞰图,其中部分概念的解释由我个人总结得出,仅代表我个人的理解,难免存在纰漏,如有任何问题均可随时提出并指正 服务端 or 客户端 什么是服务端和客户端,它和前端后端有什么关联和区别 认识 “服务” 服务,是根据功能抽象出的概念。比如说,处理用户登录信息的认证服务,负责持久化存储数据的数据库服务,以及为了加快查询速度的缓存服务等 服务、进程、端口? 端口的…
记一次gorm.ErrRecordNotFound踩坑记录
在某个项目中,有个数据验证的业务,即在数据库中查询数据是否存在,若数据已存在则返回错误并给前端提示。稍想了一下就能写出如下代码Func01 Func01 func (t *ServiceInfo) Find(c *gin.Context, tx *gorm.DB, search *ServiceInfo) (*ServiceInfo, error) { out := &ServiceInf…
Golang实现支持中间件的简易TCP框架
在golang的标准库中没有为tcp直接提供像http那样简单易用的服务框架,我们不妨自己手动实现一个 主体思路 我们的实现的主题思路分为以下四个内容 监听服务 获取构建新连接对象并设置超时时间及keepalive 设置方法退出时连接关闭 调用回调接口 TcpHandler 主要结构体和接口 首先是TCPServer的结构体,我们希望用户可以自由构建TcpServer并设置超时时间等自定义选项 t…
Golang实现四种负载均衡算法
负载均衡算法实现 在这篇文章中,我将实现最常见的四种负载均衡算法,即随机负载、轮询负载、加权负载和一致性hash负载 随机负载 随机挑选目标服务器ip type RandomBalance struct { curIndex int rss []string } // 添加新的服务ip func (r *RandomBalance) Add(params ...string) error { if…