Think twice before using Helm

查看原文

本文作者的一家之言是使用 Helm 之前需要三思,列举了几样 Helm 的缺点,想使用 Helm 的同学一定要想清楚怎么克服这些困难。

  • 它貌似没带来什么价值。
  • 需要额外在 k8s 的 auth/access control 外再加一层 tiller 的 auth/access control, 负担大。
  • 模板工具其实可以用 k apply --dry-run 来做类似的事情
  • Kubernetes Secrets 的管理没有变的更简单。
  • Helm 无法做 Infrastructure 级别的组件管理,例如 kibe-dns, cni provider, cluster autoscaler.
  • Helm state 存在 ConfigMap 里面,有 1MB 的限制 …
read more

Microservice Architecture at Medium

查看原文

本文介绍了 Medium 的 Microservices 架构。Medium 跟进的比较晚,在不伤害开发的生产力的前提下,他们总结出了几点策略:

  • 新服务需要有价值,要么是产品上的,要么是工程上的。
  • 服务之间不要共享存储。具体来说,可以抽象一个服务专门处理一类数据,或者 grpc/http pubsub, 或者用 ETL 管线同步数据。
  • 区分 building a service & running a service。
  • 服务需要很容易被观测
  • 不是每个服务都需要从头撸
  • 仔细处理服务失效
  • 防止 microservice syndromes 粗线:用 微服务会引入更多问题。例如需要仔细建模,衡量引入的语言和技术栈,服务耦合,observability,倾向于开发新服务而不是修bug。

Medium 目前的技术栈是:一个大 Node 应用为主,一些小服务为辅 …

read more

What is the SSL Certificate Subject Alternative Name

查看原文

SSL SAN 是一个 SSL 证书的扩展,允许在证书里面声明额外的域名。

一般的证书只能适配一个域名,例如 一个 enqueuezero.com 的证书是不可以用在 donate.enqueuezero.com 网站上的(Technically,你可以,但是浏览器会标记网站不安全,可能会被窃听)。

SAN 可以让你在给 enqueuezero.com 签发的证书里面再塞入一个 Subject Alternative Name,例如 *.enqueuezero.com。这样这个证书可以同时使用在 enqueuezero.com, donate.enqueuezero.com 上。

衍生思考:为什么要有这么个东西? 估计是最开始设计证书这一套的人没有想到大家会有这样的需求吧。。。

read more

GitHub October 21 事故分析

查看原文

本文总结了为什么 GitHub 挂了一天多。

简单来说,有那么 43 秒的时间,东海岸的网络hub跟机房网络不通,导致 MySQL Raft Orchestrator 把 master 从东海岸切到了西海岸。就是一次脑裂,东西两边都有数据写进了数据库。工程师们决定保障数据一致性,所以就给服务降级,再慢慢迁移数据。

思考:

  • 应急响应的博客服务怎么可以用自家服务呢,还是尽量用第三方服务/或者完全在别的地方托管比较好。
  • 是否可以增加一份预算,当备份传输太慢的时候,直接让工程师带上硬盘,用几小时直飞到另外一个机房去作为 Plan B?
  • 公有云的 blob 服务是否合适用于备份 TB 级别的数据?解压出来进新的 MysQL 服务器也需要很久时间。最能治本的方案可以在 Raft 集群外再做一个热备的 master,也即是文末提到的 multiple data centers in an active …
read more

AWK FAQ

查看原文

本文整理了关于 AWK 的书籍和资源。目前有十多种 awk 的实现,其中 gawk 用的比较多。不用 perl 而用 awk 的原因是 awk 很可能已经预装在各种系统里面马上就能用。

clear perl code is better than unclear awk code; but NOTHING comes close to unclear perl code

在 awk 中使用环境变量比较简单的办法:awk -v name="$USER" '{print name}' 或者 awk '{print ENVIRON["USER"]}'

read more

Dropbox Traffic Infrastructure Edge Network

查看原文

本文介绍了 Dropbox 的 Edge 网络层的设计,涉及 GSLB,RUM DNS,L4 负载均衡,Nginx 配置,以及一些 gRPC 代理。

  • Dropbox 的数据量级不小,注册用户数大约五亿: 这意味着网络流量和请求数量也非常大。
  • Edge 是 Dropbox 构建的 points of presence (PoP)。如下图,Edge 可以在离用户更近的地方处理连接,然后再连到服务器处理,虽然增加了一个 RTT,但是响应时间减半。
  • PoP 的地点选取很讲究,有人为选定,也有算法辅助。
  • GSLB 是 Edge 负责负载均衡的算法。BGP anycast 是最简单的 BGP 负载均衡方法,但有时候性能不太好 …
read more

A Bitter Guide To Open Source

查看原文

本文是开源的入门贴。

  • 为什么开源:学习,成长,回馈社区,找工作可能加分,等等。
  • 如何开始:遇到了问题,有一个解决办法,把解决办法用漂亮的 API 封装好让别人可以用。Just do it。
  • 准备发布:写文档,写测试,写类型,准备 README,CONTRIBUTING,LICENSE,metadata
  • 发布:掐好大家搭车或者饭点发出去。
  • 维护:不管有没有人用,写了就要维护好,修修修 bug,做改进。不管嘲笑的人,做好自己的事情。小版本迭代改进。
read more

SQLite Database Authorization and ACL

查看原文

SQLite 数据库也可以使用简单的 ACL,方法是通过 sqlite 内建的 authorizer. SQLite 连接对象可以设置 authorizer 控制 sql 的操作是否可以通过: https://www.sqlite.org/c3ref/set_authorizer.html

简单来说,这个 authorizer 方法可以接受几个设定的参数,你自己需要写哪些操作可以通过,哪些不可以。例如:

import sqlite3

db = sqlite3.connect('/tmp/auth-demo.db')

def authorizer(action, arg1, arg2, db_name, trigger_name):
    if action == SQLITE_DELETE and arg1 == 'users':
        return …
read more

Alternative code styles

查看原文

本文介绍了一些奇怪的 code styles:C macros(C代码往脚本语言方向走),代码居中,fib identation(可以避免写太多嵌套), braces 放到最后把语言往 Python 缩进的样式走。

read more

« Page 4 / 54 »