
系统设计
系统设计
伴鱼技术团队
伴鱼少儿英语是目前飞速成长的互联网在线英语教育品牌之一。团队既有来自今日头条的产品合伙人-黄河,来自阿里、头条、百度、小米、迅雷的互联网大牛,也有来自新东方、好未来、瑞思等教育公司的教育专家。我们期望打造更创新、更酷、让学英语更有效的新一代互联网产品。
展开
-
如何系统性地学习分布式系统
本文的缘起是回答知乎圆桌会议「分布式系统之美」的问题「如何系统性地学习分布式系统?」,后面稍微整理了一下,形成了这一篇文章(知乎 ID:kylin)。前言学习一个知识之前,我觉得比较好的方式是先理解它的来龙去脉:即这个知识产生的过程,它解决了什么问题,它是怎么样解决的,还有它引入了哪些新的问题(没有银弹),这样我们才能比较好的抓到它的脉络和关键点,不会一开始就迷失在细节中。所以,在学习分布式系统之前,我们需要解决的第一个问题是:分布式系统解决了什么问题?分布式系统解决了什么问题?第一.原创 2020-09-13 12:41:19 · 1370 阅读 · 1 评论 -
AB 测试平台的设计与实现
AB 测试(以下称为「试验」),本质是把选择权交给用户,让用户决定什么是最好的。我们给参与试验的不同用户,分配不同的方案,收集用户数据并加以分析,最终确定最优方案。试验方案的分配可抽象为一个哈希函数,它将一个用户映射为一个试验方案。用户数据一般通过用户行为隐式收集,比如点击、购买、停留时长等。数据的分析则需要依据统计学的假设检验,确保结论的合理性。需求,从简到繁这里涉及的概念有「试验」(experiment)和「用户」(user),而逻辑则有「分配方案」、「收集数据」和「分析并得出结论」等。我们从最简原创 2020-05-26 19:08:30 · 2415 阅读 · 0 评论 -
缓存与存储的一致性策略:从 CPU 到分布式系统
在计算机系统设计实践中,我们常常会遇到下图所示架构:为了解决单个存储器读吞吐无法满足要求的问题,常常需要在存储器上面增加一个或多个缓存。但由于相同的数据被复制到一个或多个地方,就容易引发数据一致性问题。不一致的数据可能出现在同级 Cache 之间 (Cache Coherence) 和上下级 Cache 之间。解决这些数据一致性问题的方案可以统称为 Cache Policies。从本质上看,所有 Cache Policies 的设计目的都可以概括为:在增加一级缓存之后,系统看起来和没加缓存的行为一致,但原创 2020-05-26 19:41:56 · 1145 阅读 · 0 评论 -
Dapper, a Large-Scale Distributed Systems Tracing Infrastructure (2010)
早在 2008 年,Google 就已开始分布式调用链追踪的工作,经过两年的打磨后,Dapper 系统问世,并通过这篇文章将其设计公之于众。遗憾的是,Dapper 并不是开源项目,但它的设计理念依然深刻影响到后来的 Jaeger、Zipkin 等开源分布式追踪项目,以及相关的标准 Opentracing、OpenTelemetry。本文不是原文的精准翻译,而是一次重述和简述,旨在记录分布式调用链追踪要解决的核心问题和潜在解决方案。Why & Design Goals云原生环境中,一次请求的处理翻译 2020-05-26 19:56:19 · 814 阅读 · 0 评论 -
Distributed Locking
提到分布式锁,很多人也许会脱口而出 “redis”,可见利用 redis 实现分布式锁已被认为是最佳实践。这两天有个同事问我一个问题:“如果某个服务拿着分布式锁的时候,redis 实例挂了怎么办?重启以后锁丢了怎么办?利用主从可以吗?加 fsync 可以吗?”因此我决定深究这个话题。备注:本文中,因为信息源使用的术语不同,Correctness 与 Safety 分别翻译成正确性和安全性,实际上二者在分布式锁话题的范畴中意思相同。Efficiency & Correctness如果想让单机/原创 2020-05-26 20:08:13 · 645 阅读 · 0 评论 -
Scaling Memcache at Facebook (2013)
本文介绍 FB 基于 memcached 构建统一缓存层的最佳实践。全文递进式地讲述 单集群 (Single Front-end Cluster)、多集群 (Multiple Front-end Clusters)、多区域 (Multiple Regions) 环境下遇到的问题和相应的解决方案。尽管整个解决方案以 memcached 为基本单元,但我们可以任意地将 memcached 替换成 redis、boltDB、levelDB 等其它服务作为缓存单元。在下文中,需要注意两个词语的区别:memca翻译 2020-05-26 20:30:50 · 1691 阅读 · 0 评论 -
报警平台的匹配器演进
简介本文介绍伴鱼内部服务报警平台中匹配器模块的演进,及其利用 Lex 和 Yacc 同类工具构建 DSL 编译器的过程。背景报警平台是伴鱼内部各端、应用、基础设施等服务异常状态信息的集散中心。整体流程如下图所示:信息源将信息投递给报警平台,后者将这些信息最终通过邮件、即时消息、电话呼叫的形式路由给理应关心它的人。总体而言,路由的需求可以分为以下几种:路由给服务的负责人及其团队路由给服务依赖方人员及其团队路由给所有值班人员所在的即时消息群为了满足这样的需求,报警平台采用树状结构组织路由原创 2020-05-27 09:28:50 · 539 阅读 · 0 评论 -
The Evolution of Prometheus Storage Layer
Prometheus 是当下最流行的监控平台之一,它的主要职责是从各个目标节点中采集监控数据,后持久化到本地的时序数据库中,并向外部提供便捷的查询接口。本文尝试探讨 Prometheus 存储层的演进过程,信息源主要来自于 Prometheus 团队在历届 PromConf 上的分享。时序数据库是 Promtheus 监控平台的一部分,在了解其存储层的演化过程之前,我们需要先了解时序数据库及其要解决的根本问题。TSDB时序数据库 (Time Series Database, TSDB) 是数据库大家庭原创 2020-05-27 09:39:48 · 554 阅读 · 0 评论 -
Time, Clocks, and the Ordering of Events in a Distributed System (1978)
简介本文是分布式系统理论的开山鼻祖、2013 年图灵奖获得者 Lamport 的成名作,也是分布式计算领域杰出论文最佳影响力奖 Dijkstra Prize 的第一篇论文,高达 11692 的引用量(截至 2019/12/08)足以证明其广泛的影响力:本文主要讨论 3 个话题:分布式系统中的事件偏序利用逻辑时钟实现事件偏序利用逻辑时钟实现事件全序事件顺序生活中的事件顺序生活中,当两个事件 A 和 B 发生时,我们可以利用其发生的时刻来确定它们的先后关系,如:A:2019-1...翻译 2020-05-27 09:45:15 · 458 阅读 · 0 评论