大型网站系统与Java中间件实践 01 认识分布式

  1. 云栖社区>
  2. 博客>
  3. 正文

大型网站系统与Java中间件实践 01 认识分布式

liuawei 2018-09-29 18:32:00 浏览1127
展开阅读全文

01 认识分布式
02 Java中间件
03 分布式框架

如果感觉文章中的图片不清楚可以查看下面链接:

原图VISIO:
https://note.youdao.com/share/?id=7a495e3fba485308f30d700a88ab5689&type=note#/
原图PDF地址:
https://note.youdao.com/share/?id=35600647bd0177daf74252ca9ce45b77&type=note#/

后续会把原图文件同步到Github上面上去。暂时谢分享在有道云上。

1:分布式系统介绍

1.1 什么事分布式系统

1.1.1 分布式系统的定义

是一组联网计算机上的组件,组件之间通过消息传递来通信并协调行动。

1.1.2 分布式系统的意义

单机的缺陷:

  1. 升级单机处理能力的性价比越来越低。
  2. 单机处理能力存在瓶颈。
  3. 单机不能满足稳定性和可用性的考虑。

1.2 分布式系统的基础知识

1.2.1 组成计算机的5要素

输入 + 输出 + CPU + 内存 + 外存

img_87cbd2972e7eecbf9c4d76c93cbe2f58.jpe
计算机组成5要素

1.2.2 线程和进程

进程是CPU资源分配的最小单位。

线程是CPU资调度的最小单位。线程属于进程,一个进程内的多个线程共享进程的内存空间,而多个进程之间的内存空间是相互独立的。

  1. 互不通讯的多线程模式
img_d274217d5c72087621bab209219c1dd6.png
互不通讯
  1. 基于共享容器协同的多线程模式

生产者和消费者模型。

img_a6f00caf774bf2e2f1145161516a461f.png
共享容器协同
  1. 基于事件协同的多线程模式
img_fdb1693a7ec304c893ceaae06dc8b8dd.png
事件协同
  1. 多进程模式

1.2.3 网络通信基础和知识

1.2.3.1 OSI与TCP/IP
1.2.3.2 网络IO实现方式
  1. BIO 阻塞式IO
  2. NIO 非阻塞式IO 基于事件驱动采用Reactor模式
  3. AIO 异步IO

1.2.4 如何把应用丛单机扩展到分布式

1.2.4.1 输入设备的变化

人机交互的输入设备 + 系统间调用者

1.2.4.2 输出设备的变化

人家交互输出设备 + 系统间响应者

1.2.4.3 控制器的变化
1.2.3.4 运算器的变化
1.2.3.5 存储的变化

1.2.5 分布式系统的难点

1.2.5.1 缺乏全局时钟

节点时钟不一致,分布式锁

1.2.5.2 面对故障独立性

多个节点故障,怎么定位

1.2.5.3 处理单点故障

集群,单点做备份,降低垫底故障的影响范围

1.2.5.4 事物的挑战

两阶段提交 最终一致 BASE CAP Paxos

2 大型网站及架构演进过程

2.1 大型网站的特点

高并发 + 海量数据

2.2 大型网站的架构演进

2.2.1 Java技术单机构建的网站

最基本的单体应用 应用服务器和数据库服务器部署在一台机器上

img_ac4b2f32f4fdfa9805e9212ebbddd2bb.png
单体应用

2.2.2 数据库与应用分离

将数据库服务器和应用服务器部署在不同的机器上

img_264dc1f44c7015f41d8541c393361d10.png
数据和应用分开部署

2.2.3 应用服务器集群

img_318774e35597a6ccb69dbe386a0b792a.png
负载均衡

因为HTTP协议是无状态的,Session有关联用户和服务器的状态

需解决Session的问题

  1. Session Sticky

根据Session Id在负载均衡器做路由,同一个Session Id总是路由到同一台服务器。

缺点:

1:一台服务器宕机,那么机器的会话数据全部丢失。

2:会话表示是应用层的信息,那么负载均衡服务器需要在应用层进行数据解析,开销比较大。

3:负载均衡服务器变成了一个有状态的节点。

  1. Session 复制

增加会话同步机制,把会话数据同步到其他服务器上面。

缺点:

1:同步Session数据增加网络带宽的开销。

2:同步会导致每台服务器有集群的数据,导致Session数据的内容占用会很严重。

3:Session数据集中存储

将Session数据存储在存储服务器上。

缺点:

1:读写Session数据引入了网络操作,相对于读取本地数据来说,存在延时和不稳定 但是我们服务器通讯在内网,所以问题不大。

2:存储集群出现问题,就会影响我们的应用。

4:基于Cookie

把Session的数据存储在Cookie里面,

缺点:

1:Cookie长度限制。

2:安全性,依赖于客户端维持状态。

3:性能影响,带宽消耗:每次HTTP请求增加带宽消耗。

2.2.5 数据压力变大,读写分离

2.2.5.1 数据库读写分离

数据库主从同步,更新操作连接主库数据源,查询操作连接从库数据源

2.2.5.2 搜索引擎是一个读库
2.2.5.3 缓存
  1. 数据缓存
  2. 页面缓存
2.2.6 引入分布式存储系统
img_157467dd68ec485e0971ab22868de20b.jpe
读写分离

2.2.7 数据库瓶颈

2.2.7.1 专库专用,数据垂直拆分

将不同的业务数据拆分到不同的数据库中。

不能关联查询。

2.2.7.2 数据水平分表

主键一致性

img_7fc64a3255e077ea8af2126337c799c6.jpe
数据库拆分

2.2.8 应用面对新挑战

数据拆分,业务越来越大,项目很难修改

img_62812c95e534d23ba54265dfc5c685c7.jpe
服务化

2.2.9 消息中间件

异步和解耦

网友评论

登录后评论
0/500
评论
liuawei
+ 关注