自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 go 服务注册与发现

注册中心连接不上服务端会进行重试,若多次重试连接不上,就认为服务端挂了,通知客户端。可能是因为客户端和服务端中有防火墙,当服务端连接不上时,客户端需要从本地的可用节点列表中移除相应的服务实例;从可用性的角度考虑,客户端继续服务,并尝试重新连接注册中心,这段时间使用缓存数据。若是服务端主动续约,没有心跳的情况:取决于租约超时时间和注册中心租约超时重试机制。从一致性的角度考虑,客户端立即终止服务调用,直到与注册中心恢复连接。若是注册中心主动与服务端保持心跳的情况:取决于心跳重试的次数和间隔。

2025-06-09 19:55:14 947

原创 go 连接池

在简单tcp服务中,每次请求耗费一个连接net.dial()。所以我们可以考虑复用连接,实现连接池。说明:仅简单测试,未提供完备测试用例。

2025-06-09 14:29:54 230

原创 go 缓存

一般情况下,击穿不会有问题,访问一次db就能回写redis;key数量超大时,需要限制,比如限制轮询key的个数或者轮询时长。问题:定时轮询不能访问到所有key,所以有过期key没处理,不能单独定时轮询。大量goroutine同时访问一个key时,singleflight会让其他的原地等待,只有一个访问db。存在第三方比如bloomFilter,先确认db上是否hasKey,存在再请求db。穿透:大量不存在的key访问redis不存在,打到db上。击穿:key不在缓存中,但在db中。

2025-06-03 16:32:31 365

原创 go 任务池

任务池用来管理并发任务,没有任务池面临的问题:并发任务来一个开一个goroutine。无缓冲缓冲小了会阻塞任务提交;缓冲过大会导致资源浪费。快任务、慢任务分开放在两个任务池中配置、处理。// 这篇文章我喜欢他的场景示例和数据对比。task pool中task介绍。// todo: 压缩图片上传。

2025-05-30 13:43:30 308

原创 go 消息队列 涉及channel、ring buffer

文章主要是针对消息队列的思考,消息队列核心实现使用了channel、ring buffer和map结构。文章开篇介绍了channel的实现原理,然后是对消息队列的分析与实现,其中消息缓冲使用ring buffer存储,所以在文章第三部分介绍了ring buffer。

2025-05-29 15:33:19 316

原创 文件上传系统 go

文件上传系统是前后端分离项目,实现普通文件上传、大文件分片上传功能;大文件分片上传提供断点续传、并发上传等能力,通过分片md5、文件md5验证完整性。

2025-04-28 09:58:56 236

原创 用户身份认证的核心机制 go

readme&源码: https://gitee.com/luyue_zhang/sso_oauth2/blob/master/single_sign_on/readme.md。readme&源码: https://gitee.com/luyue_zhang/sso_oauth2/blob/master/oauth2/readme.md。readme&源码: https://gitee.com/luyue_zhang/sso_oauth2/blob/master/sso/readme.md。

2025-04-08 10:12:52 221

原创 单点登录&OAuth2.0

在多系统共存环境下,一个系统登录后,其他系统无需登录;即一处登录后获得所有系统信任。全局独一份内容,比如是否登录存中央session中;个性信息存在自己的服务中。说明:此处代码实现分别存储session的sso。多设备指手机、笔记本、电脑等,需要分别登录。负载均衡、熔断限流、来源验证 // 最好网关做。鉴权:是合法用户的你有哪些权限。

2025-04-02 17:11:11 313

原创 Cookie、Session和Token的关系和区别

Cookie是服务端发送给浏览器并储存在本地的一小段文本数据(通常<=4KB),浏览器后续请求自动携带该数据回传服务端核心作用会话跟踪:记录用户行为,如购物车商品身份认证:存储用户登录后的身份标识,如session_idSession是服务器为每个用户分配的唯一会话标识,存储用户登录状态或临时数据与cookie的关系服务端通过Cookie将session_id返回客户端客户端后续请求携带该id,服务端通过该id从内存或数据库中查找对应的会话数据为什么需要Session。

2025-04-02 16:58:17 456

原创 go 微服务架构

比如缓存模式下,正常情况下,缓存中查不到就查询数据库;当触发限流后,缓存中查不到可以返回默认值或错误。可以结合failover考虑,返回客户端302重定向,让客户端重新找一个可用节点。当触发限流后,服务接收到请求直接返回202,再异步处理请求。触发限流后直接返回固定响应这一步可以在服务拦截器里实现。故障检测触发限流,限流缓解故障影响、检测优化限流策略。微服务框架服务于微服务架构,核心:通信、治理。漏桶、令牌桶、固定窗口、滑动窗口。go 微服务框架-广播实现讲解。分而治之,独立部署、治理。

2025-03-20 18:36:45 407

原创 go protobuf 使用教程

编译器地址:https://github.com/protocolbuffers/protobuf/releases/tag/v3.19.4。相关教程:https://blog.csdn.net/weixin_51952373/article/details/123098967。相关教程:https://blog.csdn.net/suwei825/article/details/123770845。下载 win-64版本,把bin文件夹的路径放到环境变量path下。

2025-03-17 14:59:24 300

原创 go rpc调用

【代码】go 简版pool连接池实现。

2025-03-11 18:02:15 274

原创 go 原子操作、加锁、MVCC多版本并发控制

MVCC是Mysql InnoDB用于进行数据并发访问控制的协议。MVCC主要是通过版本链实现的。在InnoDB引擎里面,每行都有额外两列:trx_id和roll_ptr。trx_id表示修改该行数据的事务ID。roll_ptr表示回滚指针。InnoDB引擎通过回滚指针将不同版本串联起来,构成版本链。这些串联起来的历史版本,存在undolog里面。当某一事务发起查询时,MVCC会根据事务的隔离级别生成相应的read view, 返回合适的数据。

2025-02-26 11:15:10 503

原创 go 反射reflect速记

reflect go 基础梳理

2025-02-14 10:18:33 256

原创 批量清除本地分支

在多个项目频繁切换、快速迭代过程中,我们在本地开发环境创建过许多feature、bugfix分支没有清理。我们期望能够提供一键清空本地无用分支的脚本。核心:批量操作+自定义指令。

2023-08-29 17:13:43 208 1

原创 flex布局实现等比5个盒子--logo配置组件

1. 整体使用弹性布局,整体宽度高度由空间大小决定2. 5个box等比展示3. 按钮使用固定高度,绝对底部4. title、img、description按内容大小自动分配空间

2023-08-01 14:55:38 378 1

原创 事件循环与任务队列

JS单线程意味着它同一时间只能做一件事,所有的任务需要排队。而CPU的处理速度比I/O设备快很多,等待I/O设备是不合理的,所以同步任务在主线程调用栈中调用,异步任务在任务队列中排队。当调用栈清空,就去任务队列里拿一个过来task,反复这个过程。

2023-01-04 21:34:32 125

原创 数组方法:多维数组拍平小发现、创建定长等值数组、数组排序

数组方法:多维数组拍平小发现、创建定长等值数组、数组排序

2023-01-04 21:24:54 188

原创 switchhosts没有写入权限解决方法

switchhost提示没有写入权限,无法进行切换的解决方案

2022-12-29 16:02:58 8447 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除