一、什么是分布式系统
A distributed system is one in which components located at network computers communicate and coordinate their actions only by passing messages.出自《Distributed Systems Concepts and Design》
我理解的:分布式系统是由多个节点(一个节点为一台电脑)组成的,这些节点是互相连通的,这些节点上部署了我们的服务,这些服务之间会有协同。
举例:alibaba、aliexpress、taobao、tmall这些都是分布式系统
在分布式系统中有些负责存储、有些负责计算、有些负责请求转发等,总之各司其职,干什么的都有。
二、分布式系统的意义
高性能:单机性能总是有限的,通过更换硬件以垂直扩展的方式提升性能成本会越来越高,而且总会遇到瓶颈
高可用:单机出现故障咋办,整个系统就挂掉了,如果是分布式系统只是部分可用,再加上故障转移和自动恢复的功能,用户是感受不到不可用的。
高吞吐:增加机器可以线性提高吞吐量,比如单机可以支撑1000QPS,再增加一台理论上可以支撑2000QPS
三、分布式系统基础知识
线程与进程的执行模式
对于单线程来说,我们都知道摩尔定律,18个月性能增加一倍。
对于多线程来说,我们需要知道阿姆达尔定律,充分利用多核的优势来提升性能、提高吞吐量
多线程模式
互不通信的多线程模式:没有交集,互不通信,各自执行各自的
基于共享容器协同的多线程模式:注意共享容器的安全性(方案:1、加锁——互斥锁、读写锁等;2、Copy on write)
通过事件协同的多线程模式:一个线程的执行要等待另一个线程的通知,注意死锁(方案:获取锁的顺序)
多进程模式
线程是属于进程的,一个进程内的多个线程共享了进程的内存空间;而多个进程之间的内存空间都是独立的,因此多个进程间通过内存共享、交换数据的方式与多线程是不同的。另外,进程间的通信、协调、事件通知、互斥锁的释放跟多线程也是不一样的,不同的平台所支持的方式也不同。
多进程与单进程多线程相比,劣势在哪:1、进程的通信,会涉及序列化与反序列化,开销比线程更大;2、多进程占用资源比多线程占用资源多。
多进程与单进程多线程相比,优势在哪:1、多进程资源控制更容易;2、多进程中的单个进程问题不会造成整体的不可用,例如nginx的worker进程。
分布式系统就是由多机组成的系统,可以近似看为单机多进程变为了多机多进程。多机多进程的可用性会更高。
网络通信基础
ISO的OSI网络模型,TCP/IP模型,TCP/IP的3次握手、4次挥手,TCP/IP的各状态,以及TCP/IP协议的包头包体的组成部分等等,大家自行查找相关资料学习。
网络IO实现方式
BIO
NIO
AIO
冯.诺依曼提出计算机组成与分布式系统的对比
输入设备
输出设备
控制器
运算器
存储器
分布式系统难点
缺乏全局时钟
面对故障独立性
处理单点故障
事务的挑战
锁
网友评论