安全使用 Linux 服务器
为了打造安全的系统,我们需要考虑的东西有方方面面。本文介绍了一份安全检查的清单。
- 访问控制列表 (ACLs): 系统架构必须按组和角色授权访问系统的不同部分。Linux 相关的命令:acl
- 系统审计:用户登录机器,必须能够做到审计用户执行的所有命令。Linux 相关命令:auditd / go-audit
- 静态分析:内存安全要用工具来保障,代码要审计,静态分析,甚至被 fuzzed。可以用各种静态分析的工具来做,甚至用 Rust 这种语言写。
- 网络分区:服务器妥善地放在负载均衡后面。如果网络挂掉或者没有路由,这些主机应该可以存活。配置 VPN,给机器配置内网和公网地址。iptables, ufw.
- Compartmentalization: 让员工将他们的电脑去分开工作和非工作的部分。工具可以是虚拟机:Qubes / VirtualBox.
- 文件权限和 umask: 妥善设置好每个配置文件的 r, w, x.
- 容器:确认谁有权限构建和推送镜像到生产环境。这些要被签名 …
迁移 Python 2 to 3 的经验帖
本文介绍一个团队将二十多万行的代码库升级到 Python 3 的经验帖。
- Python2 → Six → Python3。2to3 这个库会导致代码坏掉。用 six 写一些兼容两个版本的代码会方便很多。
- Python-modernize 把 py2 仓库转成 six-compatible 的仓库。
- 依赖不太支持 Python3 的,上游不搞,就自己 fork 修一下先支持。
StringIO.StringIO
在 Python3 中需要思考是要用 io.StringIO, io.BytesIO 还是 six.StringIO。- 看上去 Python 3 的支持迟早要做,早晚的问题。
Linkerd 是什么
Linkerd 是一款 service mesh 软件,它用于处理 service-to-service 通信的管理,控制,和监控。在复杂的系统中,最大的问题很有可能不是出在服务本身,而是出在服务间的通信。Linkerd 的解决方案是引入一个专门控制流量的中间层,负责通信相关的各种需求,例如 latency-aware 的负载均衡,instrumentation,TLS,控制,request-level routing 等等。
运行 linkerd 示例,配好地址后,应用先联系 linkerd,然后 linkerd 再 proxy 到目标服务。linkerd 在底层做的事情是应用路由规则,联系 service discovery,获得目标服务,然后负载均衡流量过去。引入 service mesh 的好处是:有一张生产环境所有服务的全局的拓扑图,服务 …
read moreAlpine 项目的来龙去脉
Alpine Linux 是一个非常小的 Linux distro,它的核心理念是整个 distro 能装在内存中运行(甚至可以做到每次重启都重装)。Docker 的很多 official images 都从 alpine 开始构建。Alpine 的最突出的特性就是小而高效。当然缺点相对的,就是不如 RedHat / SUSE / Ubuntu 这样的系统打磨得非常易用。虽然 Alpine 源自 Gentoo,但目前是可以独立运行的,它的基本套件是 Linux Kernel + MuslC + BusyBox + LibreSSL + OpenRC。Alpine Package Keeper (apk) 是 Alpine 的包管理工具,不用 gentoo pacman 的原因还是 run-from-ram。打包后使用 …
read more实战:Facebook 直播如何应对流量高峰
视频直播服务很容易收到特殊事件的冲击导致出现流量高峰。对于 Facebook Live 服务,他们的系统有三种常见的模式:Routine(作息导致的高峰和低谷),完全无法预测的高峰(例如自然灾害或者灾难或者哪里枪击案了),预期的高峰(例如节日)。要让系统很好地应对流量高峰,首先需要对系统架构有认知,找出瓶颈,然后逐个测试其上限,平时做演练,最后真刀真枪时上备好的服务器增强容量。
对于 Facebook Live,他们的架构分三层,直播的客户端的 RTMPS TCP 流数据通过 Edge PoP 到达 Facebook Live Servers (FBLS), 完成 HD/SD encoding 以后永久存储到 Distributed Media Storage,同时数据会通过 Facebook CDN 到达 回放的客户端。
这个系统架构的主要资源消耗在这几个组件中:
- Edge PoP …