Skip to content

分布式 和 cap理论 ​

分布式 ​

分布式计算:两个或者多个软件共享信息,这些软件可以运行在同一台机器上,也可以通过网络连接起来共同实现计算

分布式系统:解决集中式 架构的性能瓶颈问题
核心:可扩展性, 通过对服务和存储的扩展,提高系统的处理能力

服务:  软性:专门某种语言 提供运行服务的
			php---> apache nginx
			java ---> tomcat
			硬性: 硬件服务器
通过对多态服务器的系统工作,完成高并发和大数据量的任务

分布式的特点:
	分布式系统 不出现单点故障  或  服务和存储无状态的特点:
	单点故障: 在系统中 ,一台机器出现问题,导致整个系统无法正常工作
	无状态:无状态的服务器可以满足系统需求,部分机器宕机 不影响全部 随时扩展
问题:
	节点之间通信  网络分区故障 数据不一致****

cap理论 ​

一个分布式系统:只能同时满足  一致性  可用性 和 分区容忍性  其中的两项
	一致性: 所有节点 同时 看到的数据是相同的,更新操作和返回客户的结果是一致的
	可用性: 任意时刻,读写操作都是成功的 即服务一直可用
			系统稳定性>99.9
			sla 服务水平协议  99.95%  故障时间 每月只能由 0.05% 时间
	分区容忍性:当部分节点消息丢失,出现分区故障,分布式系统仍然能正常运行

小结: 在分布式系统中,系统是层层拆分的,p(分区)固定的, cp应用模型是cp架构和ap架构的
	  保证 a 和 c 稳定性

高并发 ​

并发: 一个时间段内, 有多少进程在执行,由于时间对于计算机来说,是非常短暂的,人看起来 是同时执行的,所以我们认为是一起发生  并发
	  同一时刻有多少进程在同时执行   1微秒内

注意:如果只有一个cpu 是无法实现并行的,同一时刻 只能执行一个进程,如果执行多个进行,必须切换多个cpu ,可以同时开启多进程,这种称之为并行

高并发:可以在同一时间段内 处理大量的请求,10万请求/秒

node的高并发 和 分布式集群(线程 和 进程) ​

进程 ​

cpu承担运算, 操作系统是管理者,应用程序运行在操作系统之上的 一个具有独立功能的程序在一个数据集上依次动态执行的过程,是操作系统进行资源分配和调度一个独立单位 由程序(描述功能),数据集合(程序执行所需的数据和工作区),进程控制块(包含进程的描述信息和控制信息,唯一标识)

特证:
	动态性: 产生和消亡过程
	并发性:
	独立性: 独立单位
	结构性: 程序 数据 控制块

启动一个程序,同时可能启动一个以上的进程

线程 ​

线程是一个单独执行的任务吗,不会另外消耗多余的资源了
	线程之间可以共享资源
	线程可以创建和销毁另外一个线程
	线程可以并发执行

线程和进程的五个阶段: 创建 就绪 运行 阻塞 终止

区别: ​

一个进程有多个线程  线程是进程一个任务
进程之间是相互独立的,同一个进程下的线程是共享空间,线程可以相互创建和销毁
进程 是操作系统分配资源的最小单位  线程是程序执行的最小单位(线程只是一个任务)

线程切换速度 比进程快得多

多线程: ​

多进程:操作系统同时运行多个程序
多线程:在同一个程序中 有个任务在顺序轮流执行
多进程:操作系统能够同时运行多个任务
多线程:在同一个程序中 又多个线程在运行

主线程 ​

它可以产生其他子线程
通常主线程一般最后完成执行  重要功能 关闭各种子线程

为什么使用多线程 ​

线程启动和退出比较快,资源消耗比较少
线程调用更多的核心的硬件和软件对象

多线程优势 ​

占据时间较长的程序任务交给后台执行
在一个等待型的任务中, 用户输入 文件读写 网络收发消息 .... 线程资源消耗比较少
所有的应用软件中,线程都是占有重要作用的

多线程缺点 ​

线程过多,也会大量消耗资源   合理应用
由于线程可以互相创建---》 可能会形成阻塞  死锁

node特性 ​

单线程 ​

node中js主线程与其他线程(i/o线程),是无法共享状态的
node单线程优势:不用管其他线程  避免死锁  避免线程切换带来的资源消耗
缺陷: 无法高效利用 多核cpu   ,有可能引起cpu阻塞  , 一点出问题导致整个程序退出

利用多核cpu ​

第一种:使用child_process的核心模块cluster,child_process和net组合应用
	  在一台多核服务器上 创建多个进程,使用fork来充分利用每一个核心(处理好进程之间的通信)

第二种:将物理机划分为多态单核的虚拟机 通过pm2等工具,管理多态单核虚拟机形成的集群

cpu时间轮转  使用pm2工具 绕开坏点,执行正常的服务器的程序

异步I/O ​

node 具有异步I/O特性的  当遇到I/O请求的时候,node会分配给他一个线程,置于后台运行了
node去执行主线程上的其他任务,I/O返回的时候,node把返回传输出去

事物驱动 ​

主线程通过event loop事件循环 触发线程运行 这是node支持高并发的重要原因

分布式node架构 ​

node集群 ​

nginx(调度和负载均衡)--》node集群---》redis同步数据和状态

redis是操作内存的,读写速度非常快,但实际上 ,不可能让redis 过多的内存资源 数据管理 会添加mysql进行的

减轻内存的负担,项目运行中后期,需要对数据查询和分析的时候,mysql的优势很明显了(sql数据库)
注:短时间内 更新大量数据的时候,优先考虑redis 以达到快速存取的目的

nginx 是流量接入层: 对所有流量进行处理
	流量缓冲,分流和转发
	超时检测  建立链接超时  读取用户数据超时  后端响应超时  关闭链接超时.....

	在集群中 又坏点,隔离 修复 直到正常位置
	建立连接池和保存链接会话

	流量接入层----》 负载层 ---》根据时机情况发送到各台node机器上

提供的服务:
	文件上传下载
	线上配置各种环境
	设置定时任务
	镜像服务
	通信....

node 集群层 ​

编写和执行node代码,为用户提供后端服务
与数据交互,包括redis mysql 等数据库
管理和监控机器状态

数据库层 ​

创建数据和数据结构,方便node程序 增删改查各种数据
部署redis  且想node提供响应数据接口

apache tomcat .....

node集群层的使用 ​

单核运行

多线程操作 ​

单台机器上 如何让node 使用多核得cpu

node 但进程
  	32位操作系统  512M内存
  	64位 		 1G

node中cluster模块  主进程和n个worker进程,由主进程控制和协调 worker进程得运行

注意:
  	新建得链接 需要主进程完成,再有主进程把tcp链接 分配给worker完成