Docker multi-stage builds

今天来介绍一个 Docker build 很有用的特性:Multi-stage builds,即多阶段打包。 前言这个特性很早之前,在 2017 年初的时候就可以使用了。如果你没有用到,很有可能你不需要编译语言,就比如 C/C++/Golang/Java 之类的语言。 现在网上有非常多的教程告诉我们,打包 Docker 镜像...

阅读全文

如何用 PXE 在一小时内安装完 10 台以上的操作系统

上周折腾了一件事,让我觉得还是有必要把过程记录下来的,方便大家之后也要做这件事的时候,可以节约不少时间。 这件事就是:如何在一小时内装完 10 台以上的操作系统? 以前我们是怎么做的首先我们需要同步一下信息:对于新机器的常见的安装方式,我们需要在 U 盘,CD 等储存上刻一个系统,然后从 BIOS 选择从这些存储上引导启动安装程序,然后按照步骤安装即可。...

阅读全文

大清王朝最后的领航者:曾国藩

《曾国藩传》这本书放在书架上挺久了,现在终于有时间看了,我用了差不多一周的时间,不快也不慢,一旦我看到感兴趣的内容,都放下节奏慢慢品味,因为,越看才越觉得,曾国藩太牛了。 我看完之后,还在一直回味,这本书本身的写作水平好坏先不论,各种评论中也有人吐槽作者的写作风格,我看到里面居然有星座这个说法的时候也是很懵:这是写历史人物的,用这样不严谨的文字略显低下了...

阅读全文

如何实现一个安全的 SaaS/PaaS 服务

这篇文章是接着上篇 SSL 界中 Linux:Let’s Encrypt 写的。(是的,这周灵感不够 🙈 ) 功能上次说到,如果我们实现的 SaaS/SaaS 服务中的客户需要自定义域名,我们需要给客户提供相应的功能。这个功能大致如何运作? 客户在 DNS 解析中,设置 CNAME 到我们给他提供的唯一子域名上 (注意,之后客户可以直接通过...

阅读全文

SSL 界中 Linux:Let's Encrypt

今天我们来说说造福人类的 Let’s Encrypt(以下简称 LE)。为什么说它造福人类?因为免费。 我之前在划一划 HTTPS 以及 SSL/TLS 的重要知识点说过,各路权威 CA 机构通过颁发证书来获利,然后保证服务质量,不去作弊,获得长久的可持续发展。只是,这同时也在一定程度上阻碍了 HTTPS 证书的大范围推广。而现在,LE 通过免...

阅读全文

Golang 中饱受争议的 context

今天来说说 Go 中,一个存在争议的包:context。官方在博客中给了一个例子,说的是在 Go 实现的服务中,对于每一个请求,都会有一个 goroutine 去处理,然后这些处理的地方,又会启动一些额外的 goroutine,去请求数据库,或者其他 RPC 服务,这些请求的过程中,它们会携带一些与单个请求相关的数据,如截止时间、认证信息,而当超时或者被客户端取消的时候,goroutine 应该快速释放它所占用的资源,好让其它请求去使用。1

做过微服务的同学们,听起来有点熟悉对不?这说的不就是微服务的那套东西么:比较明显就是分布式追踪(忘了的同学可以看看我之前写的)以及熔断,几乎每个微服务都会用到,而 Golang 实现这些东西的基础,便是 context。

阅读全文

项目质量的前哨部队:Git hooks

我在之前持续交付的实践与思考中提到过,为了提高项目的内建质量,我们需要尽可能早地发现以及解决问题,这对于任何一个开发团队来说,都是非常重要的事情,尽管它不紧急。目前我们在开源世界中有了各种各样的工具来帮助我们减少错误、提高项目代码的质量,利用它们,可以让你把这件事情真正做好。

阅读全文

面试大招之系统设计

在我们团队经常进行的面试中,往往会用关于算法、数据库与架构设计之类的问题来考察候选人的能力。不过我一般不会直接问,而是将这些问题安排在系统设计里面,或者也可以叫做情景题。

阅读全文

Golang 中的异步任务队列

在一些常见的场景中,如果遇到了某些请求特别耗时间,为了不影响其它用户的请求以及节约服务器资源,我们通常会考虑使用异步任务队列去解决,这样可以快速地处理请求、只返回给用户任务创建结果,等待任务完成之后,我们再告知用户任务的完成情况。

对于 Golang,我们可以通过 Worker pool 异步处理任务,在大多数情况下,如果不在意数据丢失以及服务器性能足够,我们就没有必要考虑别的方案,毕竟这样实现非常简单。

接下来我们先来说说如何用 Worker pool 解决异步任务的问题。

阅读全文

OKR 实践

最近看完了《OKR 工作法》以及《这就是 OKR》,再加上团队实践 OKR 有小段时间了,趁着热度还在,赶紧总结下。 顺便简单评价下这两本书,《OKR 工作法》整体不错,用茶叶商的故事娓娓道来,内容也很有指导性,而《这就是 OKR》整本书最有价值的地方就是它的附录资源,书的内容粗读即可。 简介OKR 就是 Object 与 Key Result 的缩写,...

阅读全文

Golang validator 详解

在 Web 应用中,有一块内容非常重要,却很容易被我们忽略:参数验证,忘了之后常常会给我们造成大量的处理错误问题,甚至直接造成应用崩溃。之前我在 你的团队需要更好的 API 文档流程 提到过,Joi 的验证非常好用,可以帮助我们验证客户端用户的上传数据以及返回数据,而在 Golang 中,我们该如何做呢?

阅读全文

如何优雅重加载 Web 应用

但凡在各种环境中,尤其是生产环境中部署过应用的,比如更新应用或者配置,就会了解到,应用的重启或者升级多少都会影响用户访问,那这种影响会到什么程度呢? 影响用户的重启从表面上看,轻则是页面不能正常加载,让用户以为是网络不好(事实上,这也经常成为服务器出问题的背锅原因,有的 APP 则直接在前端硬编码报错信息,所有的错误统一显示:网络出错了,请重试)。重则影...

阅读全文

如何理性地失败:黑匣子思维

《黑匣子思维》这本书是很早之前就看过一部分的,不过忘了什么原因没看下去。这个月把这本书重新拿出来看的时候,好后悔,当初为什么不把它看完。这些天看完后,觉得我之前在 谈谈服务稳定性 提到的一些内容与观点,相比之下都过于粗浅了。

相信你在看到黑匣子这几个字的时候,会联想起飞机,我们知道,在航空业中,每架飞机都会装两个几乎无法被破坏的黑匣子:一个记录着发往机上电子系统的操作指令,另一个记录着驾驶舱内的对话与声音,一旦事故发生,黑匣子记录的数据就会被取出分析,事故原因也就一目了然。

这跟我们今天说的内容,有什么关系?现在,不妨让我们从一次作者在开篇提到的手术事故说起(以下内容涉及剧透)。

阅读全文

MongoDB 的复制集

MongoDB 如今还是很受欢迎的,毕竟它简单易用,方便拓展等等,然后它的一些高级功能不知道你有没有了解过,比如它的复制集。 为何需要复制集假如经历过业务量的慢慢增长,就能感受到数据库拓展过程中的一些痛苦,以及,复制集的重要性了。毕竟单台机器的性能总是有限的,等业务量到达一定程度,就需要考虑使用多台来分散读写压力,常见的业务场景中,我们面对的都是读多写少...

阅读全文

善用工具,节约时间

这个月似乎忙得晕头转向了,一到该写的日子,什么灵感都没,于是拖了一天,最后打算总结下自己的一些 DevOps 技巧以及比较好用的工具。 工具列表Gitlab CI这是必须的内容,每个我经手的项目,必须要有 CI 功能,其中会选择性加入代码静态检查以及单元测试等步骤,另外就是编译打包 Docker 镜像步骤,方便之后的部署。 目前还是使用 Gitlab 为...

阅读全文