Masutangu

也許我這一生 始終在追逐那顆九號球

强化学习之 AlphaGo 的诞生

从井字棋说起 很多人都玩过井字棋,下棋的时候怎么提高自己赢的概率呢?高手又是怎么下棋的呢?如何找到胜率更高的下法? 其实非常简单,不管是井字棋,还是象棋或者围棋,在下棋的时候,我们都会在脑海里进行模拟: 通过模拟,每走一步前,提前想好后面十步,以提高胜率。在井字棋中,甚至可以通过模拟来找到必胜走法(例如上图中的第一步)。 只要能穷举出所有可能的落子和棋局,我们就能算出每个棋局的胜率...

一致性哈希的应用

一致性哈希 一致性哈希是业界最常用的哈希方案,通常在分布式系统中会采用一致性哈希的方式对请求进行路由。 哈希算法的好坏有四个标准:均衡性(Balance)、单调性(Monotonicity)、分散性(Spread)和负载(Load),具体可以参考论文 Consistent Hashing - A Distributed Caching Protocol。 这里重点提一下单调性。哈希桶数...

从路由层说起

背景 在游戏后台中,路由是一个比较重要的模块。路由作为中间层,可以解耦服务调用方和服务响应方: 常见的路由方式包括随机、轮询、一致性哈希、取模、主(备)等,同时还可以在路由层实现负载均衡的能力。以战斗服为例,后台架构通常如下: 因为 BattleSvr 是带状态的。通常我们会将房间 Id 做为 key 值,采用一致性哈希的方式路由,保证同一个房间 Id 的消息始终路由到同一台 ...

Hello 2021

不经意间 2020 就这样过去了。按照惯例,开年写一篇回顾和期望。 关于博客 博客今年只更新了一篇文章,不过不是偷懒。之前一直有整理 wiki 的想法,刚好朋友介绍了 Notion,一款将笔记、知识库和任务管理整合在一起的工具,体验下来非常满足我的需求。因此这一年记录的重心基本上都在 Notion 上。同时因为笔记内容不打算公开,除了在一开始构建框架时花费了一些精力,把架子搭好后,就能随心...

Kubernetes 初体验

Kubernetes(简称 K8s)是 Google 推出的开源容器管理系统,提供了强大的容器编排能力。这篇文章主要是读<Kubernetes in Action> 和官方文档以及Kubernetes Handbook和Istio Handbook的一些总结,图例均取网上资料。 微服务 在介绍 K8s 之前,先聊聊后台架构的演化历程。随着业务的复杂性不断提高,后台架构也从单体...

告别 2019

马上就 2020 年了,翻看去年年终总结《2018,值得反思的一年》对自己立下的期望:“2019年,我想成为一名优秀的工程师,成为真真正正的技术工程师”时,内心是无比惭愧的。 先说说今年做了什么吧,今年年初就计划写一系列介绍分布式的文章,因为我在学习过程中,发现很难理清楚分布式系统中各个概念的关联性,举例来说,初次接触逻辑时钟和版本向量这两个概念会觉得很类似,为什么有了逻辑时钟还需要版本向...

漫谈分布式:线性一致性与共识算法

前言 这篇文章是《漫谈分布式》系列文章的第五篇,主题为线性一致性和共识算法,以理清概念为主,不涉及具体的共识算法,如有兴趣参考文章 MIT 6.824 学习笔记(二) 介绍了 Raft 算法以及 The Part-Time Parliament 论文笔记 记录了 Paxos 论文的笔记。 一致性保证 大部分分布式数据库都至少提供最终一致性。但因为其表现和单线程读写变量并不一致,单线程并...

漫谈分布式:事务和隔离性级别

前言 这篇文章是《漫谈分布式》系列文章的第四篇,重点讨论单点数据库中事务的 ACID 特性中的隔离性、所提供的不同隔离级别:提交读(Read Committed)、可重复读(Repeatable Read)、快照隔离(Snapshot Isolation)、可串行化(Serializability)以及不同隔离级别的实现和开销,关于分布式数据库的事务将在下篇文章讨论。 事务 事务是一系...

漫谈分布式:数据分区

前言 这篇文章是《漫谈分布式》系列文章的第三篇,主要内容为分布式系统中划分数据的方式和分区的再平衡策略。 数据划分 Partitioning 上一篇文章《漫谈分布式:数据复制》 提到数据复制可以提高系统的可用性。但是当数据量过大,复制整个数据集显然不现实,此时需要将数据进行划分(partitioning),也称为 sharding。数据划分带来最大的好处是提高了系统的扩展性,将数据划分...

漫谈分布式:数据复制

前言 这篇文章是《漫谈分布式》系列文章的第二篇,讲解分布式系统中数据复制的方式,讨论了分布式系统的一致性模型,以及在分布式系统中如何确定事件时序,如何解决不同数据复制方式下的一致性问题和写冲突问题。 数据复制 复制即将同一份数据备份在多台不同的节点,节点之间网络互通。为什么需要复制?复制能带给什么好处? 数据多地部署,用户可以选择就近接入,减少时延。 提高可用性,部分节点挂...