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

《曾国藩传》这本书放在书架上挺久了,现在终于有时间看了,我用了差不多一周的时间,不快也不慢,一旦我看到感兴趣的内容,都放下节奏慢慢品味,因为,越看才越觉得,曾国藩太牛了。

我看完之后,还在一直回味,这本书本身的写作水平好坏先不论,各种评论中也有人吐槽作者的写作风格,我看到里面居然有星座这个说法的时候也是很懵:这是写历史人物的,用这样不严谨的文字略显低下了。只是整体上还是可以看的,毕竟传记本身的人物才是重点。

阅读全文

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

这篇文章是接着上篇 SSL 界中 Linux:Let’s Encrypt 写的。(是的,这周灵感不够 🙈 )

阅读全文

SSL 界中 Linux:Let's Encrypt

今天我们来说说造福人类的 Let’s Encrypt(以下简称 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》整本书最有价值的地方就是它的附录资源,书的内容粗读即可。

阅读全文

Golang validator 详解

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

阅读全文

如何优雅重加载 Web 应用

但凡在各种环境中,尤其是生产环境中部署过应用的,比如更新应用或者配置,就会了解到,应用的重启或者升级多少都会影响用户访问,那这种影响会到什么程度呢?

影响用户的重启

表面上看,轻则是页面不能正常加载,让用户以为是网络不好(事实上,这也经常成为服务器出问题的背锅原因,有的 APP 则直接在前端硬编码报错信息,所有的错误统一显示:网络出错了,请重试)。
重则影响用户的支付流程,导致用户放弃支付,更严重的则是用户支付过程中处理数据不当的话,就会丢失数据,导致对账失败。

阅读全文

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

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

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

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

阅读全文

MongoDB 的复制集

MongoDB 如今还是很受欢迎的,毕竟它简单易用,方便拓展等等,然后它的一些高级功能不知道你有没有了解过,比如它的复制集。

为何需要复制集

假如经历过业务量的慢慢增长,就能感受到数据库拓展过程中的一些痛苦,以及,复制集的重要性了。毕竟单台机器的性能总是有限的,等业务量到达一定程度,就需要考虑使用多台来分散读写压力,常见的业务场景中,我们面对的都是读多写少的场景,因此,可以在相当的一段时间里,只考虑分散读的压力

阅读全文

善用工具,节约时间

这个月似乎忙得晕头转向了,一到该写的日子,什么灵感都没,于是拖了一天,最后打算总结下自己的一些 DevOps 技巧以及比较好用的工具。

工具列表

Gitlab CI

这是必须的内容,每个我经手的项目,必须要有 CI 功能,其中会选择性加入代码静态检查以及单元测试等步骤,另外就是编译打包 Docker 镜像步骤,方便之后的部署。

阅读全文

谈谈 996.ICU:原来我们可以这样抗争

最近这一两周里,996.ICU 成了热门,我也不免随了这股大流,毕竟,这是切身相关的。

阅读全文

权限引擎之 casbin

上次介绍了权限系统的设计后,这次我们来说说如何实现系统的实现。

阅读全文