包子分布式系统科普系列 1

欢迎大家订阅包子leetcode的视频讲解: https://www.youtube.com/c/baozitraining

通过这一段时间的观察发现,多数学员对分布式系统都不太了解。无论是刚毕业的小码农,还是工作多年的老码工, 对分布式理论,算法,及具体的实践都是知之甚少或着根本就不知道。其实现在大家热炒的云计算云技术就是把研究多年的分布式系统打个包来卖。只要了解了分布式的一些基本的理论知识就不会被各大云厂商忽悠的云里来雾里去。小编在网上找了半天也没发现很好的简单易懂的资料,所以小编决定自己写一个分享给给大家。由于小编水平有限,错误之处望大家指正并多多包涵。本系列将介绍分布式基本原理,算法,以及典型的系统实现像DynamoDB, Spanner, Cassandra。小编将以最通俗易懂的语言来讲解。开始吧!

  1. 什么是分布式系统

什么是分布式系统?简单地说就是计算在一台机器上完不成,数据在一台机器里装不下,需要几台或多台机器同时协调来共同完成任务。现在没有谁还在做单机版的系统了吧?不说自己的程序装在几百台,几千台服务器上,是不是都不好意识出来见人。下图是最普遍的,大家见的最多的而且也是最简单的系统。负载均衡器后边是一排WEB服务器, 然后来个缓存, 再后来个数据库。是不是很熟悉?之所以说它是最简单的系统, 是因为WEB服务器之间没有协同工作,是无态的。想加几个就加几个。当数据量大了,所有的压力都落到了后台数据服务器上。这个时候就要想法子把数据服务分布一下。

  1. 数据的分区(Partition)和复制(Replicate)

把数据放到多台机器上一般有两种方法。一种方法是按照数据的某一键值分块,不同块放在不同机器上。另外一种方法是完全拷贝同样数据然后放在其他机器上。分区是分而治之,不同机器可以同时处理数据的不同部分。这样系统的效率和性能就会大大提高。复制可以增加用户读数据的机器,还可以备份数据,防止数据丢失。实际应用中是先分区再复制,两者结合着用。既然数据被放到了多台机器上, 那数据不一致了怎么办?

  1. 帽子理论(CAP)

现在数据放到了几台机器上,这下不用担心后台撑不住了。用户可以从任何机器拿数据。可是新的问题出现了。要知道数据之间的复制是通过网络传输的,如果网断了,那数据就传不过去了,或者有可能丢了。然后用户在不同机器拿到的数据就不一样了。为了解决这种问题,人们引出了“鱼和熊掌不可兼得”的帽子理论。

C: 代表一致性 (Consistency), 所有机器上的数据时刻保持一致。

A: 可用性 (Availability), 某个机器出现故障,系统还能响应客户读写请求。

P: 分区容错 (Partition tolerance), 系统响应客户请求尽管机器之间的网路断了。

CAP理论指出在分布式系统里,一致性,可用性,网路分区容错,我们只能取其中两个,不可能三个兼得。这个道理很简单。当机器之间网断了,如果系统接受客户更改请求,那么数据就会不一致,如果要求数据一致,系统就不能响应客户写请求。

这个时候就要根据实际情况来取舍了。如果是银行系统,那肯定是要数据一致了。如果是社交网路系统,一致性就无所谓了,更看重的是系统可用性。

在接下来的几篇里,我们会了解具体的算法像Consistent hashing, 2PC, Paxos, Vector clock 等等。待续。

原文发布于微信公众号 - 包子铺里聊IT(baozitraining)

原文发表时间:2016-09-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云豹直播系统开发

短视频APP开发主要依赖于短视频SDK架构设计

短视频 SDK 架构中主要做的一些事情,这其中最重要的就是短视频 SDK 的架构设计,包括架构设计理念、架构图、整体数据流程、模块架构设计等。今天小编就简单介绍...

2993
来自专栏程序人生

闲扯code review

今天早上要开会,所以文章早点放出来。 如果说git终于让工程师在合作撰写代码的过程中找回了丢失已久的乐趣,那么,code review的过程还是让人相当地抓狂。...

3255
来自专栏Android 开发者

Android P 开发者预览版首发!

2452
来自专栏芋道源码1024

Redis 深度历险:核心原理与应用实践

Redis 是如今互联网技术架构中,使用最广泛的缓存。支持复杂的数据结构,支持持久化,支持主从集群,支持高可用,支持较大的value存储...

2212
来自专栏java一日一条

测试是一件浪费时间的事吗?

作为开发人员,我们都知道我们应该测试我们的代码。我们应该写单元测试,但这也通常是我们发现没时间时跳过的第一步。

702
来自专栏FreeBuf

物联网安全研究之二:IoT系统攻击面定义分析

在前文中,我们了解了IoT技术的基本架构,本文我将来说说IoT安全,在此过程中,我们会尝试定义一种新方法来理解IoT安全,同时也会创建一个结构化流程来方便认知I...

3829
来自专栏服务端技术杂谈

架构细节 | 看看 Medium 的开发团队用了哪些技术?

image.png 说到底,Medium是个社交网络,人们可以在这里分享有意思的故事和想法。据统计,目前累积的用户阅读时间已经超过14亿分钟,合两千六百年。 ...

4246
来自专栏地方网络工作室的专栏

Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(一)基础知识概述

Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(一)基础知识概述 前言 2016年,我写了一系列的 VUE 入门教程,当...

2339
来自专栏木子昭的博客

推荐一些效率实用的"生产力"应用钻石党非Mac独占

网络调试工具 surge ? surge ? mac版surge 在网络代理软件的圈子里,surge是真正的神兵利器! surge发布了mac版和ios版,...

70411
来自专栏CSDN技术头条

我们如何使用Go打造了Uber QPS最高的服务

2015年初,我们建立了一个微服务来负责这项任务:地理围栏查找(geofence lookups),结果完成很出色。如今已过一年,这项技术在Uber数以百计的生...

30510

扫码关注云+社区

领取腾讯云代金券