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 …
read more

Python range 不是 iterator

查看原文

这篇文章解释了为什么 Python 3 中 range 产生的对象不是 iterator。

  • range 和 iterators 都是 lazy 的(延时求值),但是他们最重要的区别是 iterator 是一次性的,而 range 不是。
  • 你可以写 iter(range(3)) 或者 tuple(range(3)),但不能写 next(range(3)),后者会报错 TypeError。
  • range 对象定义了 start,end,step,以便我们遍历的时候算出来,从这点来说,range 是 lazy 的。但 iterator 用过一次就不能用了,例如 …
read more

Write Dumb Code

查看原文

本文介绍的主要话题是少写代码,保持简单。以下是作者的主要观点:

  • 给开源项目贡献的最好方法是:删代码。
  • 写容易被人看懂的代码。
  • 软件像是用来支付解决问题用的货币,相应地,付越少越好。
  • 用尽可能简单的技术,这样大多数人才能使用和扩展它而不需要理解很多。
  • 更少的代码,花费别人更少的时间去读,去 code review,去维护。
read more

使用 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 …
read more

世界上使用 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 …
read more

分布式系统管理的变迁

查看原文

这篇文章的作者做了一份调查,调研了过去和现在大家都是怎么管理分布式系统的,并展望了下未来。

  • 手动部署和配置,例如 MySQL。当运行在 Master/Slave 模式下,它需要人工安装配置 ini 文件,然后用 shell 做运行时的 orchestration,尽管有一丢丢的脚本可以做一些简单地自动化,但它依然缺失内建的自动化设施,整套流程比较笨重。同类型的应用例如常见的网络交换器(Cisco IOS), Classic Redis, Zookeeper。
  • Host-Centric 配置管理。使用诸如 Puppet,Chef,Ansible,Salt 基于主机自动化配置所有东西。缺点是当配置 cluster 的时候会有点不太方便。主要是因为这类工具的对象是 host, 而基于集群的操作则是基于应用节点。
  • 两类基于 Host-Centric 配置管理衍生的类型,一类的操作对象是分布式系统的 infrastructure 本身,例如 Hashicorp Terraform …
read more

如何评定服务的可用性 - 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 more

Google 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。怎么算钱要跟客户实现说清楚。

文章末尾建议

  • 如果从头构建系统的时候 …
read more

文档驱动开发 - 一种统一函数风格的方法

查看原文

本文作者提到了一个写代码文档时候的痛点:函数文档有很多重复的地方,不停地写会很烦。作者提出的方法是:找出共性,然后把这些公有的部分写入 JSON 作为 metadata。如果遇到了特例,那就很有可能遇到了风格不统一,那就把它修复。这样做以后,整个程序的风格也会一致起来。

read more

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 …
read more

« Page 31 / 54 »