Celery Task States

查看原文

Celery Task 默认有 PENDING STARTED SUCCESS FAILURE RETRY REVOKED 这六种状态。可以通过 task.update_state(state='YOUR-CUSTOM-STATE', meta={}) 设置成自己想要的状态。这对于设置自定义的任务状态机很有用。

read more

Dropbox - The architecture of Nautilus

查看原文

本文介绍了 Dropbox 的搜索引擎:Nautilus。和 Web 搜索引擎不同,文件分享平台的搜索引擎设计需要处理的文档很多时候仅限某个个人用户可以查看,另外还需要追踪和更新文档的多个版本。系统设计的要求没别的,就是快点找到仅某个用户可以看到的文件,还有就是允许工程团队接入更多文件类型的流水线。架构图如下:

read more

Some possible career goals

查看原文

本文介绍了作为技术人,在技术,工作,产品,创业,沟通等方面的潜在目标,每个人追求各有不同,但本文覆盖了蛮多的选择。

  • 技术:成为领域专家 / 学习前沿技术 / 维护大项目 / 贡献开源项目 / 从头开始打造一个关键系统 / 理解复杂系统 / 快速造原型
  • 工作:大公司 / 小公司 / 走 manager 路线 / 走技术路线(architect,senior,principle。。。) / 参与知名公司的软件编写
  • 产品:打磨工具 / 写网站 / 内网工具 / 解决领域问题(例如天气)/ 开发者工具
  • 沟通:写书 / 做演讲 / 做周边 / 写博客

反正,每一种都能让技术人停不下来。

read more

pypeln - Python data pipeline library

查看原文

Pypeln 是一款基于 Processes, Threads and asyncio.Tasks 进行并发任务操作的库,旨在提供优雅的 API,而需求又不至于到要去用 Spark or Dask 的程度。

from pypeln import process as pr
stage = pr.map(task1, data, workers = 3, maxsize = 4)
stage = pr.filter(task2, stage, workers = 2)
data = list(stage)

或者

from pypeln import thread as th
stage = th …
read more

How does Dropbox rollout Python 3 for desktop applications

查看原文

本文描述了 Dropbox 如何将 macOS,Windows,和 Linux 客户端应用程序迁移到 Python 3.

  • Python 带来的好处:类型注解,Coroutine。
  • 挑战:发布客户端的 Freezers 脚本要应对 TypeScript/HTML, Rust, and Python, as well as Objective-C and C++ 的混合代码库。
    • 特别是近些年操作系统开始要求代码部署需要做签名,或者更新的 API(macOS FinderSync)
  • 解决方案:在各种打包工具不太好使的情况下,转投嵌入式 Python (Embedding Python)。这样可以基于特定操作系统的接口搭底层,然后往上套一层 Python,再往上运行业务逻辑。
  • 发布分成3步
    • 客户端停用现有的 freezer scripts …
read more

The Observability Pipeline

查看原文

本文的话题是使用 The Observability Pipeline 帮助更好地理解系统。问题产生的背景是现代软件不再局限于裸机+Nagios 这种组合,而是趋向于 cloud-native and container-based systems。可能你 Debug 着,容器就被干没了。所以,要想解决这个问题,就得让应用自己传出结构化的日志记录用于分析 - 这产生了新问题:如何处理这些日志呢?结论是建一条 Observability Pipeline。

监控是关于known-unknowns and actionable alerts, observability 是关于 unknown-unknowns,并帮助开发更容易理解系统行为。以下是开发 The Observability Pipeline 的一些要点:

  • 确保日志是 Structured 的。你要写 spec,spec 要能区分 logs, metrics, traces, events …
read more

Inside cpyext - Why emulating CPython C API is so Hard

查看原文

本文是 Pypy 更新的博文,探讨的是如何通过 cpyext 提升 Pypy 的 benchmark。

cpyext 是 Pypy 的组件,用于为 CPython C 插件运行在 Pypy 上提供兼容层。换句话说,在 C 插件中只要用到了 Python.h 这个依赖,那么在 Pypy 中其实就是在用 cpyext。现状是:cpyext 刚处于能用的状况,这些 C 插件运行在 Pypy 上其实比 CPython 还慢一些。

在 CPython 中,解释器使用的是引用计数,PyObject 对象分配在堆上。当引用降到 0 时可以被安全 …

read more

Learning Go by Comparing to Python

查看原文

本文为 Python 使用者提供了一份与 Go 对比的 Cheat sheet。

  • fmt.Println v/s print
  • fmt.Print v/s print(string, end='')
  • //, /* ... */ v/s #, """ ... """
`This is 
a multi-line string.`

v/s

"""This is
a multi-line string.
"""
  • vector/list initialize: var numbers [5]int v/s [0] * 5
  • slice: some_numbers := numbers[1:3 …
read more

Load Balancing for Latency

查看原文

本文介绍了在某些特定情况下比 Round Robin 更适用的负载均衡算法。负载均衡要完成的两个大目标是:Scale(支持更多数量的 backend),和 Resilience(坏掉的一些 backends 不影响服务总体)。本文探讨了如果引入 Latency 用于负载均衡也会有很不错的效果。一般健康检查校验服务是否挂了,而 Latency 能校验服务现在合不合适承接流量。本文的立论是:一个好的负载均衡也应该同等检查 failure 和 latency。

本文介绍的两种算法分别是:

  • least loaded, 负载均衡维护每台机器的流量,路由新流量去负载最低的机器。
  • peak exponentially-weighted moving average (“peak EWMA”): 负载均衡维护每台机器的 round-trip time,需要的话乘上权重,路由新流量去平均响应时间最短的那台机器。

一般最常见的还是 round robin;这两种算法见于 Twitter Finagle 的 RPC …

read more

« Page 6 / 54 »