背景 最近遇到zk无法使用,zk断开后无法重连等问题,排查了下用到的zk sdk,顺便写文章记录下这个sdk是如何高效复用连接的。 流程分析 获取连接 服务启动时,会创建zk connection,本质上就是一个TCP连接。 如果失败,就从zk配置里取下一个zk server地址,进行连接。 func (c *Conn) connect() { l…
问题现象 当前有个目录 a,需要对其创建一个软链接 b。 tree . `-- a |-- a1.txt `-- a2.txt 1 directory, 2 files 第一次执行ln -s a b 成功执行,符合预期 tree . |-- a | |-- a1.txt | `-- a2.txt `-- b -> a 2 directories, …
最近字节的朋友要在公司分享Copilot,但是他们公司当前是禁止使用Copilot的,所以找到了我。正好总结下半年来的使用感受。 减少重复的、逻辑少的工作。 例如经常写依赖注入wire的New方法,没有包含太多逻辑,仅仅是依赖注入,初始化对象。针对这类代码,Copilot一般都能正确生成。 参照本地项目里已有逻辑(不限于当前项目,不限IDE),生成…
搭建博客的服务器还有半年就要过期了。以前都是到期了再去买一个,后来发现,即使是用新用户,优惠也比不上双十一。想起有年双十一,同事买了个腾讯云的1h2g三年才200多,简直比杀了我还难受! 这次学聪明了,服务器到期前的双十一就开始做打算。是续费,还是重新买一个,要不要选择其他云厂商,或者想想有没有其他选择。 当前拥有的服务器资源 一台国内阿里云服务器…
前言 邮件已成为日常工作中必备的工具,常常作为正式交流的一种方式,那发送一封邮件是如何到达目标邮箱的呢? 相关协议 邮件系统中各组件之间交互使用的协议。 SMTP Simple Mail Transfer Protocol,即简单邮件传输协议,用来发送邮件。 POP3 Post Office Protocol,邮局协议第3版,用于支持使用客户端远程…
背景 运营同学经常需要将运营系统上的url拷贝到virustotal去查询安全性,这个重复操作想优化下,提高效率。通过调研,发现virustotal是支持api查询的,就想在运营系统的前端集成这个查询功能,因此产生了跨域问题。 解决方案 Apisix的cros插件 这个插件是通过给后端接口响应头里增加支持跨域的响应头以支持跨域请求,不符合我们的场景…
背景 我们的应用发布都是以镜像为基础,git打tag触发cicd,发布对应version的镜像。现在有个应用需要部署到客户内网中,如果以导出镜像的形式,再给客户部署,是比较繁琐的。并且无法做一些额外的工作,例如安装前的环境检测,卸载时删除镜像,以及更新等。当然这些都可以通过脚本实现,但不够优雅。而同事之前做过以linux安装包的形式发布容器应用,这…
背景 kafka可以通过多个partition实现并发,但是针对单个partition,必须顺序提交。假如消息发送顺序为1,2,3,如果先提交3,会导致1,2被提交。所以不能并发执行后立即提交。 解决思路 记录接收消息的顺序到listA,然后并发执行,执行成功的消息,记录到setB。起个goroutine定时提交,顺序遍历listA,依次判断该消息…
背景 我平时爱看一些高清电影,4k、HDR之类的,还有很多国内视频软件没有的电影。我媳妇也喜欢看剧,平时做饭的时候,都会用平板播放电视剧。所以我家对影音这块是有需求的。 之前觉得nas太重了,还调研过个人云存储:联想NAS A1调研,由于外网访问速度太低,最终没有入手。现在看来还好没有入手,那玩意没有docker,可玩性太低,特别是对于影音系统,需…
前言 数据库变更管理是软件发布必不可少的环节,理想状态是只需发布一个镜像,就能更新应用和数据库。我们项目使用gorm来操作数据库,gorm是具有数据库迁移功能的,但是没有SQL脚本直观。另外我们的应用是同库多服务的微服务,还有些服务存在多个实例的情况,这就需要考虑数据竞争问题了。经过调研,最终选择了Github 10k star 的golang-m…