Elm Architecture

查看原文

Elm 的架构源自开发团队早期对他们各自项目研究找到的一个共有 pattern:定义 Model,编写 Update,编写 View - 基本上他们的任何需求都可以用这套写法来写。这套 Pattern 影响了诸如 Redux 之类的框架,它的思路可以用如下代码说明:

import Html exposing (..)

-- MODEL

type alias Model = { ... }

-- UPDATE

type Msg = Reset | ...

update : Msg -> Model -> Model
update msg model =
  case msg of
    Reset -> ...
    ...

-- VIEW

view : Model -> Html Msg
view model =
  ...
read more

分布式系统的健康检查

查看原文

本文对分布式系统的健康检查列出了很多个观点。有人认为 ping/cpu_load/error_rates 这些都不够,要发出真正的端对端测试才行;有人则认为健康检查要简单才行,ping 就很好。本文作者认为:

  • 健康检查是一条光谱,不是非黑即白。
    • 健康检查通过 = 服务也许没问题, 看你怎么做的检查。
    • 健康检查没通过 = 有些地方可能出了问题。
  • Ping 能够检查出 up/down, e2e 能够检查出系统能否执行某些特定的功能。
  • 在分布式系统中, 就算 ping 没挂,也有可能因为别的原因没能执行一些计算,那跟服务挂了也没差了。
  • 服务彻底挂了很好判出来,但是服务到底有多健康这个见仁见智。
  • 健康检查是手段,我们要关注 quality-of-service, 即任务多久能执行完,以及能否执行出正确的结果。
  • 完全健康的服务根本就不存在,我们要承认的事实是:服务有个健康度,有可能这部分好的那部分是坏的。
  • Orchestration 层可以只关心服务 up/down, 但是 Load Balancing 层需要更细的粒度并相应触发 …
read more

Docopt - CLI description language

查看原文

Docopt 是一款用来编写命令行工具的库,与其写一堆 parse("--option") 代码,不如直接写出漂漂亮亮的文档来,然后根据这个文档来自动生成解析命令行参数的代码。这个库可以让你用写代码文档的方式定义接口,可读性提高了很多。

"""Naval Fate.

Usage:
  naval_fate.py ship new <name>...
  naval_fate.py ship <name> move <x> <y> [--speed=<kn>]
  naval_fate.py ship shoot <x> <y>
  naval_fate.py mine (set|remove) <x> <y> [--moored | --drifting]
  naval_fate.py (-h | --help)
  naval_fate.py --version …
read more

Learn X in Y Minutes

查看原文

这个 GitHub 仓库给出了数十种语言的简明入门的语法教程,非常适合有志多学几门语言的同学们。举个例子,python3 的示例中,从四则运算,类型,字符串格式化,列表字典使用,函数,控制结构,类,总数加起来 999 行。

衍生思考:似乎最近学习笔记类的仓库很多人很喜欢。

read more

Green Threads 100L 代码实现

查看原文

Green Thread 是在语言运行时调度,而非由操作系统调度的线程。这意味着,有如下优缺点:

  • 优点
  • 几乎不能更快的新建 gthread 速度,比起 thread, process
  • gthread 切换开销特别小,可能就只有几个字节
  • 内存花的更小
  • 缺点
  • 你只能写异步代码
  • 差不多只能运行在单核上,即便你有多处理器(有办法突破)
  • 你只能写异步代码, again. 调试代码挺麻烦

GThread 一般要求你显示提供 yield 方法做上下文切换,调用 gthread 方法也必须套在一个 context 下面

关于简介,查看 https://c9x.me/articles/gthreads/intro.html

从代码上看,这份实现比较简单,能算是比较好的概念实现,离实用有不少距离。核心数据结构:gt …

read more

Trello 从 RabbitMQ 转投 Kafka

查看原文

本文是 Trello 的工程博客,讲述为什么他们停止使用用了三年的 RabbitMQ, 而改用 Kafka。

Trello 线上使用 15 个 RabbitMQ 示例承接 WebSockets 的推送更新。后端服务把数据推到 RabbitMQ,然后 WebSockets 的服务端应用处理连接,从队列中拉数据下来,给出响应推给浏览器端。

后端服务推数据时,通过一个 3 实例的 rabbitmq-inbound cluster 把数据 shard 到 16 个队列中。WebSockets 服务端程序订阅所有队列拉取所需的数据。

问题主要出在 Sharding 的时候,当 Cluster 坏掉或者出现脑裂,复制的数据可能会不一致,从而导致奇怪的客户端行为。额外的问题是,Rabbit 新建和删除 Queue Bindings 比较慢 …

read more

Multi-tenancy 应用程序架构

查看原文

Multi-tenancy 指的是应用程序为每个客户都跑一套示例。Salesforce 可能是在这套架构下跑的比较大的一家。它面临的挑战是:要去维护每套程序的配置,做数据升级时也更麻烦,如何更高效的在保证隔离性的同时共享一些资源。

read more

使用 Python Annotation 编写宏代码

查看原文

这位同学通过滥用 python annotation 语法来完成动态编程。其基本原理是,Python annotations 的数据存储在实例的 __annotation__ 这个 dict 中,而它其实并不限制类型数据一定要是类型,也可以是任何合法的 Python 表达式。例如

@inrange
class MyClass:
    var: "0 < var < 1"

这个 var 通常会需要写成一种类似 var: ZeroToOneIntegerClass 这样的语法,但是通过 @inrange 解析这个字符串动态生成了如下代码:

class MyClass:
    var: "0 < var < 1"

    def __init__(self):
        self._var = None

    @property
    def var(self …
read more

为各种类型的场景使用优化的数据库

查看原文

本文传达的观点是:数据库是为某种需求而生的,为特定场景适配特定的数据库可以写出高性能,可扩展的程序。目前比较常见的数据库类型包括:关系数据库,键值数据库,文档数据库,图数据库,内存数据库,搜索数据库,时间序列数据库等。

read more

« Page 11 / 54 »