摘要:
笔者目前所在公司存在多套 Redis 集群: * A 集群 主 + 从 共 60 个分片,部署在 3 + 3 台物理机上,每台机器各承载 10 个端口 * 主库 30 个端口在广州,从库 30 个端口在中山 * B 集群共 72 个端口,部署架构一模一样 上云后,均为广东的某个云厂商的 2 个可用区 阅读全文
摘要:
最近在开发一个常驻进程、定时任务统一调度系统,以应对开发在进程管理方面遇到的各种复杂问题。 组里开发项目,一般来说是一个人承包整个项目,包括调度器设计,还有后台系统。我还有一部分工作,是队列相关的信息,这个由监控同学负责,到时候我后台聚合他的数据一并展示。 然后我就遇到问题了: 我以前刚入职公司的时 阅读全文
摘要:
## 一、背景 #### 1. 业务上云带来性能收益 公司从去年全面推动业务上云,而以往 IDC 架构部署上,接入层采用典型的 4 层 LVS 多机房容灾架构,在业务高峰时期,扩容困难(受限于物理机资源和 LVS 内网网段的网络规划),且抵挡不住 HTTPS 卸载引发的高 CPU 占用。 而经过压力 阅读全文
摘要:
## 传统部署的坑: 1202 年了,如果你连 Docker 都不知道是什么,我建议买一本书看看——或者谷歌一下,博客已经写烂了。 为什么有这篇文章,是因为我在真正做容器化改造的时候,发现公司生产环境存在大量的坑: * 传统虚拟机部署,基本依赖克隆或者手工编译。由于人力原因,SRE 历来单传,编译出 阅读全文
摘要:
上一篇文章 [《大白话讲讲 Go 语言的 sync.Map(一)》](https://imlht.com/archives/234/) 讲到 entry 数据结构,原因是 Go 语言标准库的 map 不是线程安全的,通过加一层抽象回避这个问题。 当一个 key 被删除的时候,比如李四销户了,以前要撕 阅读全文
摘要:
阅读本文大约需要 4.25 分钟。 程序是枯燥乏味的。 在讲 sync.Map 之前,我们先说说什么是 map(映射)。 我们每个人都有身份证号码,如果我需要从身份证号码查到对应的姓名,用 map 存储是非常合适的。 map[000...001] = 张三 map[000...002] = 李四 . 阅读全文
摘要:
## 背景 对于大多数 Gopher 来说,编写 Go 程序会直接在目录建立 main.go,xxx.go,yyy.go…… 不是说不好,对于小型工程来说,简单反而简洁明了,我也提倡小工程没必要整一些花里胡哨的东西。 毕竟 Go 语言作为现代微服务的开发新宠,各个方面都比较自由,没有很多约束。我想, 阅读全文
摘要:
今天在业务上云的时候,遇到了些问题。最终发现问题的根源不好排查,于是—— 把生产环境的全量配置文件,还有日志全量打包下载到开发机器分析! 刚入职不是很久的整个运维团队,也不是很熟悉生产环境(有时候觉得自己就是个运维哈哈哈哈),于是把机器下线后,一顿 tar 压缩,就准备 scp 发送了。 生产和开发 阅读全文
摘要:
![phpmyadmin](https://www.phpmyadmin.net/static/images/logo.png) 真的很喜欢 phpmyadmin 这个 PHP 程序。 虽然工作上基本都用 Navicat,但是很多东西都是习惯了,就很难改变! 比如建表,执行 SQL 语句,界面操作肯 阅读全文
摘要:
最近在思考一个问题,针对用户的输入,能不能快速校验? 比方说下面的 struct,大家用过 gin 的就知道,支持指定某个字段为 required,用户如果不输入,就检验不通过。 ```go type LoginForm struct { Username string `json:"usernam 阅读全文