分布式系统基础
A distributed system is: A collection of independent computers that appears to its users as a single coherent system
目标
- 使资源易于访问
- 资源的范围很广泛
- 打印机、存储、数据、文件等
- 透明
- 用户看到的就像是一台机器
- 开放
- 对外有统一的接口
- 可扩展:使得系统匹配资源规模的增长
- 纵向扩展scale-up:提高单台机器的处理能力
- 横向扩展scale-out:增加机器的数量
例子
- 分布式计算系统
- 科学计算(计算密集型)
- CPU是计算过程的瓶颈
- 数据管理(数据密集型)
- 数据IO是计算过程的瓶颈
- 科学计算(计算密集型)
- 分布式信息管理系统
- 事务处理系统
- 分布式普适系统
- 智慧家庭
- 传感网络
大数据处理
- Volume 大量化
- 数据增长量大
- Velocity 快速化
- 从数据的生成到消耗,时间窗口非常小,生成决策的时间少
- Variety 多样化
- 大部分是非结构化数据
- Value 价值化
- 价值密度低,商业价值高
- Veracity 质量
- 数据的准确性和可信赖度,即数据的质量
大数据产生的原因
- 存储容量上升
- CPU处理性能提高
- 网络带宽加大
- 人的参与
分布式数据处理系统
两大核心技术
- 分布式事务管理
- NoSQL/NewSQL
- 分布式数据处理系统
- 批处理/流计算
分布式编程模型
分布式并行编程
- MPI
- 容错差/扩展性差/共享式
- MapReduce
- DAG
进程通信
线程 vs 进程
- 进程
- 系统进行资源分配和调度的一个独立单位,进程有独立的地址空间
- 线程
- 是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位
区别
- 一个程序至少有一个进程,一个进程至少有一个线程
- 线程的划分尺度小于进程,使得多线程程序的并发性高
- 进程在执行过程中拥有独立的内存单元, 而多个线程共享内存
- 线程不能够独立执行,必须依赖进程
- 操作系统资源分配的基本单位是进程
进程间通信方式
进程间有不同的用户地址空间
- 同一台机器/不同机器
通过操作系统内核实现
IPC(Inter-prodcess communication)
- 控制 Control Flow
- 信号(Signal)
- 由内核发送给进程
- 信号量(Semaphore)
- 进程间对共享数据的互斥访问
- 消息(Message)队列
- 两个不相关进程间,独立于发送进程、接受进程而存在
- 信号(Signal)
- 数据 Data Flow
- 文件(file)
- 管道/匿名管道(pipe)
- 匿名管道只能有一个方向流动,只能用于父子进程
- 实质上是一个内核缓冲区(独立于文件系统)
- 有名管道(FIFO)
- 有名管道的名字存在于文件系统中,内容存放在内存中
- 共享内存(shared memory)
- 需要同步机制来得到进程的同步和互斥
- 套接字(socket)
- 跨网络通信
远程过程调用 RPC
在形式上像本地函数一样去调用远程的函数
参数传递
- 传值调用 vs. 传址调用
- 如何根据函数名称进行函数调用?
- 反射
- 根据方法名调用该类
- 代理
- 让使用者在不知觉的情况下,代替调用者完成远程访问的功能
- 反射
传送协议
- 网络传输 (TCP/IP)
数据表示
- 不同体系结构的机器之间
序列化和压缩
序列化与反序列化
- 序列化
- 把对象状态按照一定的格式转换成有序字节流,以便在网络上传输或者保存在本地文件中
- 反序列化
- 从文件中或网络上获得序列化后的对象字节流后,根据字节流中所保存的对象状态及描述信息,重建对象
数据压缩的原理
- 压缩:通过一些有别于原始编码的特殊编码方式来保存数据,使数据占用的存储空间比较小
- 减少网络传输的时间
- 压缩本身需要时间
- 解压缩:将被压缩的数据从特殊编码方式还原为原始数据的过程
- 解压需要时间
KEYS
- 大数据的5个V
- 进程和线程的区别