29 Feb 2024 go 1.14.1 timer bug 872 words, ~3 min read go go 1.14.1 的timer 包存在bug,会导致服务hang死,问题发生在两年前,而go目前的版本也已经迭代到1.22,还是整理出来以记录当时定位问题的思路。
24 Feb 2024 100 Go Mistakes and How to Avoid Them 14,357 words, ~57 min read go 罗列了100个go开发中容易犯的错误、如何避免这些错误并深入分析其背后的原理,包括一些常见的错误,比如rang loop、defer使用问题,也有一些优化建议,比如减少内存申请次数、理解内存对齐、理解CPU缓存 cache line原理等等...
18 Mar 2023 Unit Test Best Practices 8,077 words, ~32 min read Test 前言 在传统的观念中,认为开发工程师的主要职责是编写代码,首先因为自测容易产生思维盲区,其次在紧迫的业务需求下,开发工程师可能会把测试工作放在次要位置。 实际上,开发工程师的职责应该跟随整个开发周期,包括开发、测试、持续集成和交付,而不仅仅...
21 Sep 2022 Google Code review 指南 14,728 words, ~58 min read Software Engineering Google 拥有许多覆盖所有语言和所有项目的通用工程实践。这些文档是Google长期以来形成的各种最佳做法的集体经验。 名词解释 Nit: nitpick 意思鸡蛋里挑骨头 CL: changelist LGTM: “Looks Good...
17 Dec 2019 openrestry body_bytes_sent = 0 794 words, ~3 min read network 这是服务从IDC迁移上阿里云过程中遇到的一个问题,虽然定位完成以后发现其实很简单,但也算一个典型的案例。服务是一个openrestry。 现象 服务在阿里云部署完以后内部测试通过,切域名。后来收到一个新接入客户端反馈,服务请求失败,也没说具...
22 Nov 2019 基于argocd+kustomize实现金丝雀上线 2,091 words, ~8 min read devops 最近研究了一些CI/CD开源工具,目前项目CI依赖gitlab,但gitlab的CD功能太弱,所以调研其他一些工具看看能不能在生产应用。 spinnaker 可谓功能最全最为成熟支持多云,也相对复杂,是java栈,所以不予考虑。 gitla...
15 Nov 2019 一次mysql锁问题排查 704 words, ~2 min read mysql 笔记 查了一个线上mysql 锁等待的问题,记录一下以后别犯这么低级的错误 背景 线上一个老业务有一个任务状态表,最早的设计是单库单表比较low。由于数据没有迁移,对完成任务也没有删除操作,日积月累导致数据越来越多影响正常业务。用了一个简单的定时...
10 Sep 2019 envoy 代理http1.1 1,407 words, ~5 min read envoy 笔记 最近处理了一个envoy代理http1.1的问题,先简单介绍一下背景 背景 我们有一个长连接通道的项目,原来是通过http2.0连接。后来因为要做扫码登录的业务,所以使用 socket.io 支持了http1.1的连接,这是同事当时支持ht...
16 Aug 2019 envoy ratelimit技术验证 1,040 words, ~4 min read envoy 笔记 nginx大法好啊,nginx5分钟解决了一个envoy带来两周的伤害。 背景 具体情况是这样的,我这边有个服务大概结构是这样的。 高峰时大概承接了150w的grpc长连接,以及小于1000的websocket长连接。 上个月底由于已发版的...
10 May 2019 istio/envoy流量控制问题 1,110 words, ~4 min read istio 笔记 最近在调研istio,很重要的一点是想利用istio金丝雀发布时精细的流量控制。我们知道在k8s的金丝雀发布一般是通过label来控制,如果需要灰度1%的流量,那么总共需要100个pod。具体可以参考这篇文章。而istio则可以通过Virt...
07 May 2019 istio 抓取应用程序的metric 1,011 words, ~4 min read istio 笔记 istio中会对网格内数据的metric数据收集,也可以自定义一些新的metric。通过这些数据有助于了解流量如何在集群中流动的。但这些数据不包括应用程序业务层的数据。 我们的应用中都有调用prometheus的go client api统...
26 Apr 2019 shell脚本变量作用域 309 words, ~1 min read shell 笔记 今天写一个shell脚本遇到一个问题,脚本为实现从文件中按行读取,拼接成一个字符串。大概代码如下 执行发现打印出来循环中打印了正确结果,而最后一个echo结果却是空。按道理content是全局变量,不会存在作用域的问题。在网上搜了一下发现其...
24 Mar 2019 cgo笔记 901 words, ~3 min read cgo 笔记 go 看了下上一次提交还是去年刚搭建这个博客的时候,之前在博客园维护过一个博客,三天打鱼半年晒网写过几篇,后面打算转战到此争取能多写几篇,没想到还是没做到。今天难得有时间,先总结一篇cgo相关的吧。 目前公司的技术栈已经全面转go,而一些业务还需...
30 Jul 2018 grpc established问题 343 words, ~1 min read grpc 问题起因 QA同事问我为什么服务建立连接以后,关闭防火墙过了一天netstat查看端口还是established状态。当时我也回答不出,但我觉得这是个好问题,于是花了点时间goole。 定位 首先找到一句话The default value...
30 Jul 2018 grpc转换为http对外服务 101 words, ~0 min read go grpc grpc转换为http对外服务 grpc支持将协议转换成http对外服务,数据通过post json提交 相对于普通的grpc服务,只需要在定义pb时稍作修改即可 调用:curl -X POST http://127.0.0.1:8080/...
30 Jul 2018 一道C++绑定面试题展开 297 words, ~1 min read c++ 面试 早上排队进地铁时候看到一个面试题,据说校招社招从来没人做对过。被肉贴肉的人流中看了一眼,不是选B吗。后面细思不对,既然没人做对,必有蹊跷,肯定是一个下意识中一定错的答案。 来到公司,运行一遍。果然选C。 仔细分析一下这题目。 在C++中,对...
30 Jul 2018 一道C语言面试题 652 words, ~2 min read c 面试 今天在群里的兄弟分享了一道考察sizeof和strlen的面试题,看似很简单,其实却不然,分析过后,还是有一些不解之处。 题目,写出下面代码打印结果 第一眼看,不就是考察sizeof和strlen吗?简单,答案应该是6,5,5,?,6,5。...
24 Mar 2018 一些TCP基础笔记 6,065 words, ~24 min read tcp 笔记 本文主要是看书看文章时做的笔记,记录一些TCP相关的基本概念。引用文章来自补充阅读,点击可到原文链接。 概念 MTU:maximum transmission unit最大传输单元 每种网络都不一样,以太网是1500。最小46字节。当数据块...