12 Factor App & AWS Serverless Applications
12-Factor App 整理了一系列关于配置,部署,运行时,服务间通信等话题的方法论;这篇文章则讲述了如何在写 AWS Lambda + API Gateway 程序的时候符合这套标准。
- 每个 Serverless 应用使用单独的库托管代码,编译成单独的交付产物拿去部署。拆库的标准是处理共享的事件的代码,需要放在一个仓库中。
- 使用各种语言标准的库依赖管理软件,例如 node.js npm, python pip, java maven, NuGet-c#, go get 等。
- 应用的配置放在环境变量中。应用读取配置的时候用类似
process.env
,os.environ
等方法读取。如果配置是敏感的,那么将 key-value 存放在 KMS 这样的服务中。在 API Gateway 中这种配置可以是 stage …
使用 Dot 和 Graphviz 画图
Dot 是一个使用文本描述流程图的小语言,Graphviz 是开源的画图软件,这篇文章介绍了如何使用 Graphviz 将 Dot 文本描述的结构化图表生成图片。
- 最基本的图表是节点和边,例如
graph G { a -- b; b --c; a -- c; }
。 - 我们可以用
graph G { rankdir=LR; a -- b; }
生成左右方向的图表。 - 有向图表可以用
digraph G { a -> b; b -> c; }
。 - 节点名字太长可以用标签:
digraph G { A [label="Apple"]; B [label="Banana"]; A -> B}
。 - 不满足方框节点,可以写各种形状,例如:
A …
世界上使用 Python 的大公司们
这篇文章列出了几家使用了 Python 的大公司。
- Industrial Light and Magic,做 CG 的公司,开发过像星战,星际迷航等知名影片。他们本来使用 Unix shell,后来从 Python 1.4 开始就积极跟进,性能不高的部分用 C/C++ 写,然后用 Python 包上接口给他们的标准图形库用。他们的 Python 拳头产品是 OpenEXR。
- Google,龟叔以前上班的地方。Google 曾经的决定是“能用 Python 的地方用 Python,只有必须了才换成 C++”。
- Facebook,在 C++ 和 PHP/Hack 技术栈背后是很多 Python …
分布式系统管理的变迁
这篇文章的作者做了一份调查,调研了过去和现在大家都是怎么管理分布式系统的,并展望了下未来。
- 手动部署和配置,例如 MySQL。当运行在 Master/Slave 模式下,它需要人工安装配置 ini 文件,然后用 shell 做运行时的 orchestration,尽管有一丢丢的脚本可以做一些简单地自动化,但它依然缺失内建的自动化设施,整套流程比较笨重。同类型的应用例如常见的网络交换器(Cisco IOS), Classic Redis, Zookeeper。
- Host-Centric 配置管理。使用诸如 Puppet,Chef,Ansible,Salt 基于主机自动化配置所有东西。缺点是当配置 cluster 的时候会有点不太方便。主要是因为这类工具的对象是 host, 而基于集群的操作则是基于应用节点。
- 两类基于 Host-Centric 配置管理衍生的类型,一类的操作对象是分布式系统的 infrastructure 本身,例如 Hashicorp Terraform …
如何评定服务的可用性 - Google Cloud Platform 博客
本文介绍了什么情况下服务是 success 的,以及如何评定服务是 success 的。而 success 的前置条件是 availability(可用性)。可用性指的是在给定时间段内服务有否达到其预期的功能。
有人用 success-requests-count / total-requests-count, 有人用 up-time / total-time,不管哪个指标,都希望其到达 99.9% 甚至 99.999%。例如,假设使用了 99.9% 用于 up-time, 那么服务一个月不能超过宕机 43.2min (30days)。此外,Mean Time Between Failures (MTBF): total uptime / # of failures; Mean Time to Repair …
read moreGoogle Cloud Platform Blog: SLO v/s SLI v/s SLA
本文介绍了 Google 内部如何为系统定制 Service Level Objective (SLO)。这个指标用于表示系统是否正在可靠高效地运行着,以及指导设计与架构变迁能够在继续满足要求。一般来说 Service Level Indicator (SLI) 适合 SLO 保持一致的,我们用 SLI 得到 service availability percentage,与 SLO 做对比,如果抵御 SLO,那系统可能性就偏低了,可能需要起新的健康的实例恢复指标。
SLO 存在的意义是,它指出了服务的 downtime 在多大限度内是可接受的。否则的话,一有问题,就有人打小报告。我们需要认识到:unhealthy 也是一种 healthy。
SLA 是跟客户约定的保障服务稳定运行的合约,违反了一般会有 Penalty。怎么算钱要跟客户实现说清楚。
文章末尾建议
- 如果从头构建系统的时候 …
Pymotw - http.server
Python http.server
库提供了写 Web Server 的基础接口。
- 继承 BaseHTTPRequestHandler 处理请求。
- 继承的类中,定义
do_GET
,do_POST
等方法用于处理 GET, POST 等请求 - 状态码可通过
self.send_response(200)
设定 - 响应头可通过
self. send_header('Content-Type', 'application/json')
设定 - 内容可以通过
self.wfile.write(content)
设定 - url 可以通过
urllib.parse.urlparse(self.path)
得到解析后的数据 - 表单需要通过
cgi.FieldStorage(fp=self …