zoukankan      html  css  js  c++  java
  • 分布式系统基础

    一: 什么是分布式系统

    《分布式系统原理与范型》一书中这样定义分布式系统:“ 分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像是单个相关系统”。

     归纳来说就是 : 硬件独立,软件统一 。

    什么是硬件独立 ?

    所谓硬件独立,是指计算机机器本身是独立的,一个大型的分布式系统,会由若干台计算机来组成系统的基础设施。

    软件统一:

    对于用户来说,用户就像是跟单个系统打交道,就好比我们每天上网看视频,视屏网站就是一个系统软件,其背后是如何运作的,如何部署的,

    部署了几台服务器,每台服务器分工是什么,这些对用户来说是透明的,不可见的。用户只关心今天网站提供什么节目,视屏是否流畅等。

    二 :如何设计分布式系统 

    设计分布式系统本质 就是 如何 合理的将一个系统拆分成多个子系统并且部署到不同的机器上。 所以,第一就要考虑 如何合理的将系统拆分,

    拆分后的各个子系统不可能孤立的存在,必然要通过网络进行连接交互。 所以如何通信,显得尤为重要。在通信中还要识别敌我,防止信息篡改和拦截。

    这就涉及到安全问题了。分布式系统要适应不断增长的业务需求,就需要考虑其扩展性。还要保证可靠性和数据的一致性。 概括的说 有这几个方面: 如何将系统拆分为子系统?

    如何规划子系统间的通信? 如何考虑通信过程中的安全? 如何让子系统扩展? 如何保证子系统的可靠性? 如何实现数据的一致性?

    三: 分布式系统面临的一些困难挑战。

    异构性:由于基于不同的网络,操作系统,计算机硬件和编程语言来构造,必须要考虑一种通用的网络通信协议来屏蔽异构系统之间的差异。一般交由中间件来处理。

    缺乏全球时钟:交换消息协调动作 需要经常依赖于程序动作发生的时间共识。

    一致性:数据被分散或复制到不同的机器上,如何保证各台主机之间的数据一致性。

    故障独立性: 允许出现故障,而不影响整个系统的正常使用。

    并发: 每个资源必须被设计成在并发环境中是安全的。

    透明性: 分布式系统中的任何组件,或者主机的升级,迁移,对于用户来说都是透明的,不可见的。

    开放性: 分布式系统由不同的程序员来编写不同的组件,最终集成为一个系统,那么组件所发布的接口必须遵守一定的规范且能够被互相理解。

    安全性:加密和拒绝服务攻击。 可扩展性: 系统要随着业务量的增加,相应的系统也必须能扩展来提供对应的服务。

    线程: 概不赘述。 通信: 网络基础知识。

    I/O模型: 

     同步和异步

    同步是指用户线程发起I/O请求之后需要等待或者轮询内核I/O 操作完成后才能继续进行执行。

    异步是指用户发起I/O请求后任然继续执行,当内核I/O操作完成后悔通知用户线程或者调用用户线程注册的回调函数。

  • 相关阅读:
    已知: 每个飞机只有一个油箱, 飞机之间可以相互加油(注意是相互,没有加油机) 一箱油可供一架飞机绕地球飞半圈,问题:为使至少一架飞机绕地球一圈回到起飞时的飞机
    简易vector的实现
    简单的内存池实现
    归并排序,递归与非递归
    堆排序
    位运算
    二叉树的建立,以及非递归遍历
    “云端融合”思想的自我摸索(很不靠谱)
    linux android开发环境搭建
    Android系统架构及内核简介
  • 原文地址:https://www.cnblogs.com/thelovelybugfly/p/9583482.html
Copyright © 2011-2022 走看看