zoukankan      html  css  js  c++  java
  • 分布式系统概念小记

    本文主要是记录最近看的书里涉及到的概念。梳理自己对分布式里的概念理解,构建自己对分布式系统的初步理解。

    定义

    组件分布在网络计算机上,组件之间仅仅通过消息传递来通信并协调行动。
    从用户角度,面对就是一个服务器,提供需求的服务。
    分布式系统看起来就像一个超级计算机。

    计算机五大部件

    1. 控制器
    2. 运算器
    3. 存储器
    4. 输入设备
    5. 输出设备

    对于单机来说,都是在一台机器上。对于分布式系统,是由一系列网络节点组成。所以下面也按这个结构来学习。

    演进过程

    从小到大,都是遇到了真实问题,才形式的。所以好的分布式从来不是设计出来的。一般是数据量、并发,即存储和计算的问题。

    解决办法:根据职责拆分、根据要解决的真实问题去拆分。主要运用的思想是:分而治之。

    手段 : 1. 垂直拆分 2. 水平拆分

    控制器

    通过配置中心来控制运算器的节点。

    配置管理中心

    主要职责:

    1. 聚合服务器的地址信息。
    2. 服务器的生命周期感知。对服务器的上下线自动感知,并且根据这个变化去更新服务器地址信息。

    结构可以划分为:客户端,服务端。

    涉及到的知识:

    1. 网络基础知识(路由)
    2. pasoix算法(自动推荐主干节点)
    3. 负载均衡(自动负载均衡)

    运算器

    通过应用和服务在控制器下对外提供运算能力(服务)。

    服务化

    1. 通过服务化框架中间件来调用
    2. 通过消息中间件来解耦

    怎么划分应用和服务,需要根据实际情况来说,不可一概而论。一般说来:根据职责、根据业务情况来划分。

    存储器

    是分布式系统的最底层支持。

    数据类型

    1. 结构化。数据结构定义和内部分开。比如说数据库。对应的是分布式关系型数据库系统。
    2. 非结构化。比如blob类型,文件、图像、视频等。对应的是分布式文件系统。
    3. 半结构化。数据结构定义和内部耦合在一起。比如说html。对应的是分布式表格系统和分布式键值系统(是分布式表格的特例)。

    文件系统

    主要就是针对于非结构化的数据类型存储系统。一般用于存储blob类型数据。

    POSIX

    定义了应用程序访问文件系统的API标准。适应用于单机。
    要求读写并发时能够保证操作的原子性,即读操作要么读到所有结果,要么什么也读不到

    分布式文件系统,出于性能考虑,一般不会完全遵守这个标准。根据实际情况,分布式文件系统有的有树状目录,有的没有树状目录。

    键值系统

    每行记录由主键和值两部分组成,支持基于主键的crud。和传统的哈希算法很像。可以简单理解为大map.

    应用场景

    1. 缓存半结构化的数据。比如html
    2. 缓存热点数据。

    关系型数据库

    比较符合人的思维习惯。

    分布式事务

    CAP原则。一般是通过两阶段提交来实现分布式事务。

    其他问题

    1. 一致性。
    2. 查询(跨库)
    3. 复制
    4. 备份

    表格系统

    这个除了对单行的curd,还支持列,排序等一些复杂的操作。

    输入设备和输出设备

    除了普通的输入输出设备。网络节点的传输也是输入和输出

    其他支持

    自动化(容错、运维、发布、负载、测试)

    参考书单

    1. 《淘宝技术这十年》。里面讲的架构演化很有意思。也基本了分布式存储的概念。没有过多的实践细则,适合普及概念。最后的牛P系列根据个人喜爱查看
    2. 《大型网站系统与Java中间件实践》。对单机和分布式的讲述很喜欢。对中间件讲解也比较到位。涉及到一些中间件细则,根据情况自行选择。
    3. 《大型分布式网站架构设计与实践》。对部分原理讲解的还不错,比较细则。里面推荐了一些工具、算法可以做了解用。
    4. 《大型网站技术架构核心原理与案例分析》。涉及到比较多的思维方面及知识。适合在脑子里构架大的轮廓。
    5. 《大规模分布式存储系统原理解析与架构实践》。对存储系统讲的比较透。特别是原则和规范比较喜欢。也涉及一些常用的技术原则讲解。
  • 相关阅读:
    Spring 由哪些模块组成?
    spring 支持哪些 ORM 框架 ?
    @Autowired 注解有什么用?
    spring JDBC API 中存在哪些类?
    有哪些类型的通知(Advice)?
    @Component, @Controller, @Repository, @Service 有何区别?
    @Qualifier 注解有什么用?
    什么是 Aspect?
    什么是通知(Advice)?
    spring bean 容器的生命周期是什么样的?
  • 原文地址:https://www.cnblogs.com/ansn001/p/5169432.html
Copyright © 2011-2022 走看看