分布式知识点

分布式

  • Docker【容器化引擎服务】

  • 微服务思想【服务拆分,持续集成、持续交付、持续部署】

  • Kubernetes(k8s)【容器化部署,管理云平台中多个主机上的容器化的应用】

  • 云计算【SaaS(软件即服务) 、PaaS(平台即服务) 、IaaS(基础架构即服务)】

  • Zookeeper【分布式协调服务】

  • Dubbo、Thrift(RPC 框架)【分布式服务治理】

  • 分布式事务解决方案

  • ActiveMQ、Kafka、RabbitMQ【分布式消息通信】

  • 熔断,限流,降级机制

  • Redis【分布式缓存】

  • Mycat【数据库路由】

  • Nginx【反向代理】

  • Tomcat【Web Server 服务】

  • DevOps【自动化运维】

  • Go【并发的、带垃圾回收的、快速编译的语言】

  • 分布式业务这里列举如下:

      1. 分布式存储,如GFS
      2. 分布式计算,如MapReduce
      3. 分布式锁,如Chobby
      4. 分布式数据库,如BigTable,Spanner
      5. 分布式ML,如TensorFlow分布式
      6. 分布式MQ,如Kafka

集群(cluster)是指在多台不同的服务器中部署相同应用或服务模块,构成一个集群,通过负载均衡设备对外提供服务。

分布式(distributed)指在多台不同的服务器中部署不同的服务模块,通过远程调用协同工作,对外提供服务。

把一个大的系统拆分为多个子系统,每个子系统负责自己专注的事情,然后通过网络进行通信和协调,对用户来说,就像访问的是同一台及其一样。

随着饭店的发展,慢慢的从只有一个厨师演变为多个厨师(集群),接而演变为有洗菜工、配菜工、厨师等多个职位。

这个网站架构发展也类似。网站初期,只需要搭建一个集中式的单体应用就可以了,如果业务量有很大增长,先考虑增加机器,通过集群部署提升能力。接着,就可以考虑分布式了。

 

https://github.com/h2pl/Java-Tutorial/blob/master/md/%E5%88%86%E5%B8%83%E5%BC%8F%E6%8A%80%E6%9C%AF%E5%AE%9E%E8%B7%B5%E6%80%BB%E7%BB%93.md


 

分布式的任务:把多态机器有机的组合、连接起来,让其协同完成一件任务,可以是计算任务,也可以是存储任务。大概可以包括三大部分:

1.分布式存储任务

2.分布式计算任务

3.分布式管理系统

(Google都是开创者)分布式存储是分布式系统最难、最复杂、涉及面最广的问题,大概分为四个子方向:

1.结构化存储

2.非结构化存储

3.半结构化存储

4.In-memory存储

除了这四个子方向,还有一系列理论、算法、技术作为支撑:例如Paxos、CAP、ConsistenHash、Timing、2PC、3PC等。


 

【1.结构化存储】

典型的场景就是事务处理系统或关系型数据库。比如大家耳熟能详的MySQL

传统的结构化存储系统强调的是

(1)结构化的数据(例如关系表)

(2)强一致性(例如:银行系统、电商系统等场景)

(3)随机访问(索引、增删改查、SQL语言)

然而,正是由于这些性质和限制,结构化存储系统的可扩展性通常不是很好,这在一定程度限制了结构化存储在大数据场景/环境下的表现。随着摩尔定律面临的瓶颈,传统的单机关系型数据库系统面临着巨大的挑战。

【2.非结构化存储】

和结构化存储不同的是,非结构化存储强调的是高可拓展性,典型的系统就是分布式文件系统。

早期的分布式文件系统只起到了网络磁盘的作用,其最大的问题就是不支持容错和错误恢复。

Google在2003年SOSP上推出的GFS(Google File System)则做出了里程碑的一步,其开源实现对应为HDFS

GFS的主要思想包括:

1.用master管理metadata

2.文件使用64MB的chunks来存储,并且在不同的server上保存多个副本

3.自动容错,自动错误恢复

Google设计gfs最初目的是为了存储海量的日志文件以及网页等文本信息,并且对其进行批量处理(例如配合MapReduce问文档建立倒排索引,计算网页PageRank等)。和结构化存储系统相比,虽然分布式文件系统的可拓展性、吞吐率都非常好,但是几乎无法支持随机访问操作,执行进行文件进行追加操作,这样的限制使得非结构化存储系统很难面对低延时、实时性较强的应用。

【3.半结构化存储】

解决非结构化存储系统随机访问性能差的问题。我们经常听到一些流行名词,如NoSQL、Key—Value Store,甚至包括对象存储,例如protobuf,thrift等等。这些都属于半结构化存储研究的领域,其中以NoSQL近几年发展势头尤为强劲。

NoSQL系统既有分布式文件系统所具有的可拓展性,又有结构化存储系统的随机访问能力(例如随机update、read操作),系统在设计时通常选择简单键值(K-V)进行存储,抛弃了传统RDBMS里复杂SQL查询以及ACID事务。这样做可以换取系统最大限度的可扩展性和灵活性。

在NoSQL里面比较有名系统包括:Google的Bigtable、Amazon的Dynamo、以及开源界大名鼎鼎的HBase、Cassandra等。通常这些NoSQL系统底层都是基于比较成熟的存储引擎,比如Bigtable就是基于LevelDB。底层数据结构采用LSM-Tree。除了LSM-Tree之外,B-Tree(B+tree)也是很成熟的存储引擎数据结构。

 

【4.In-Memory存储】

随着业务并发越来越高,存储系统对低延迟的要求也越来越高。同时由于摩尔定律及内存的价格不断下降,基于内存的存储系统也开始普及。

In-Memory顾名思义,就是将数据存储在内存中,从而获得读写的高性能。比较有名的系统包括memcached,以及Redis

这些基于K-V键值系统的主要目的是为基于磁盘的存储系统做cache。还有一些偏向于内存计算的系统,比如可以追溯到普林斯顿KaiLee教授早期的研究工作DSM,斯坦福的RamCloud,以及最近火的基于lineage技术的tachyon项目(Spark生态系统子项目)等等。

 

【NewSQL】

 我们在介绍结构化存储时说到,单机 RDBMS 系统在可扩展性上面临着巨大的挑战,然而 NoSQL 不能很好的支持关系模型。那是不是有一种系统能兼备 RDBMS 的特性(例如:完整的 SQL 支持,ACID 事务支持),又能像 NoSQL 系统那样具有强大的可扩展能力呢? 2012 年 Google 在 OSDI 上发表的 Spanner,以及 2013 年在 SIGMOD 发表的 F1, 让业界第一次看到了关系模型和 NoSQL 在超大规模数据中心上融合的可能性。不过由于这些系统都太过于黑科技了,没有大公司支持应该是做不出来的。比如 Spanner 里用了原子钟这样的黑科技来解决时钟同步问题,打破光速传输的限制。在这里只能对 google 表示膜拜。

 

我们在之前提到,分布式存储系统有一系列的理论、算法、技术作为支撑:例如 Paxos, CAP, Consistent Hash, Timing (时钟), 2PC, 3PC 等等。那么如何掌握好这些技术呢?以我个人的经验,掌握这些内容一定要理解其对应的上下文。什么意思呢?就是一定要去思考为什么在当下环境需要某项技术,如果没有这个技术用其它技术替代是否可行,而不是一味的陷入大量的细节之中。例如:如何掌握好 Paxos? Paxos本质上来说是一个三阶段提交,更 high level 讲是一个分布式锁。理解paxos必须一步一步从最简单的场景出发,比如从最简单的 master-backup 出发,发现不行,衍生出多数派读写,发现还是不行,再到 paxos. 之后再了解其变种,比如 fast paxos, multi-paxos. 同理为什么需要 Consistent Hash, 我们可以先思考如果用简单range partition 划分数据有什么问题。再比如学习 2pc, 3pc 这样的技术时,可以想想他们和paxos 有什么关系,能否替代 paxos。

 

作者:马超
链接:https://www.zhihu.com/question/23645117/answer/124708083
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 
 

posted @ 2019-02-14 20:00  Roni_i  阅读(363)  评论(0编辑  收藏  举报