1.分布式系统介绍
1.1初始分布式系统
1.1.1 分布式系统的定义
组件分布在网络计算机上,
组件之间仅仅通过消息传递并通信
如浏览器去访问淘宝。有的负责请求,有的负责存储,有的负责计算
1.1.2 分布式系统的意义
1.2 分布式系统的基础知识
单个节点代表单个计算机
1.2.1组成计算机的5个要素
1.2.2 线程与进程的执行模式
1.2.2.1 互不通信的多线程模式
1.2.2.3 基于共享容器的多线程模式
比如:生产者和消费者
1.2.2.5 多进程模式
1.2.3 网络通信基础知识
1.2.3.1 OSI与TCP/IP网络模型
1.2.3.2 网络IO实现方式
1.BIO
BlockingIO,采用阻塞方式实现
2.NIO
Nonblocking,基于事件驱动采用Reactor模式
3.AIO
1.2.4 如何把应用从单机扩展到分布式
1.2.4.3 控制器的变化(控制方式)
单机系统,控制器就是CPU 中的控制器
分布式系统中,由多个节点通过网络连接在一起并通过消息的传递进行协调系统
控制器的主要作用就是协调或控制节点之间的动作和行为
硬件负载均衡这是一种控制方式
软件的有2点不足,1增加网络开销,出现延迟
2.如果代理出现不足,所有请求都会出现问题
软件负载均衡也称透明代理
没有代理服务器的存在,而是请求发起与请求处理的直连
名称服务负责处理请求处理的地址交给请求发起方
规则服务器类似于名称服务器,但是具体请求发起去寻找哪个请求处理由规则服务器指定
由Master去控制交给worker工作任务
1.2.4.4 运算器的变化
分布式中的运算器是运用多个节点计算能力来协同完成整体的计算任务
1台变2台
用户该去访问哪个服务器呢?
解决办法:
用户根据DNS的解析去寻找网站服务器的地址,有点像名称服务或者规则服务器
DNS存的都是负责均衡的地址,通过这样去找服务器
1.2.4.5 存储器的变化
存储器指的是内存和外存
扩展存储器由代理服务器负责转发
根据规则服务器的规则,进行sharding
2.大型网站及其架构演进过程
2.1 什么是大型网站
大型网站支撑着海量的数据和非常高并发的访问量
2.2.1 用java技术和单机来构建的网站
2.2.2 从一个单机的交易网站说起
2.2.3 单机负载告警,数据库与应用分离
将数据库从应用中抽离
2.2.4 应用服务器负载告警,如何让应用服务器走向集群
应用从单机变为集群
增加一台服务器
2.2.4.1 引入负载均衡设备
服务器的选择上面通过负载均衡访问
2.2.4.2 解决应用服务器变为集群后的Session的问题
会话开始时,分配唯一的会话标识(SessionId),通过Cookie把这个标识告诉浏览器,以后每次请求的时候,浏览器都会带上这个会话标识来告诉Web服务器请求属于哪个会话。
不能保证每次请求每次都落在同一边的服务器上。
1.session sticky
需要负载均衡根据每次请求的会话标识来进行请求转发
2.session Replication
Session replicatin请求不必每次到同一个服务器上,而在Web 服务器上会增加会话数据同步,通过同步保证了不同Web服务器之间的Session数据的一致
3.Session数据集中存储
把session数据集中存储起来,然后不同web服务器从同样的的地方来获取Session
Session可以存在数据库或者其他分布式系统中
4.Cookie Based
把session数据放到cookie中,然后在Web服务器上从Cookie中生成对应的session数据
2.2.5 数据读压力变大,读写分离吧
2.2.5.1 采用数据库作为读库
只负责读的服务
2.2.5.2 搜索引擎其实是一个读库
2.2.5.3 加速数据读取的利器—缓存
1.数据缓存
一般我们在缓存中存放的是“热”数据而不是全部数据,那么填充方式就是通过应用完成的,即应用访问缓存,如果数据不存在,则从数据库读出数据后放入缓存。
2、页面缓存
2.2.6 弥补关系型数据库的不足,引入分布式存储系统
2.2.7 读写分离后,数据库又遇到瓶颈
2.2.7.1 专库专用,数据垂直拆分
垂直拆分的意思是把数据库中不同的业务数据拆分到不同的数据库中
2.2.7.2 垂直拆分后的单机遇到瓶颈,数据水平拆分
数据水平拆分就是把同一个表的数据拆到两个数据库中
数据垂直拆分和水平拆分的区别是,垂直拆分是把不同的表拆到不同的数据库中去,
而水平拆分是把同一张表拆到不同的数据库中。
进一步把用户表拆分到两个数据库中,它们的结构一模一样的用户表。
2.2.8 数据库问题解决后,应用面对的新挑战
2.2.8.1 拆分应用
随着业务的发展,应用的功能会越来越多,应用也会越来越大
第一种方式,根据业务的特性把应用拆开
2.2.8.2 走服务化的路
2.2.9 初始消息中间件
消息中间件:是分布式系统完成消息发送和接收的基础软件
消息中间件的好处:解耦和异步
A与B只于中间件打交到,2个应用不直接联系
整体结构图