欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

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

发布时间:2025/4/16 32 豆豆
生活随笔 收集整理的这篇文章主要介绍了 大型网站系统与Java中间件实践 01 认识分布式 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

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 分布式系统的基础知识

    1.2.1 组成计算机的5要素

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

    计算机组成5要素

    1.2.2 线程和进程

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

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

  • 互不通讯的多线程模式
  • 互不通讯
  • 基于共享容器协同的多线程模式
  • 生产者和消费者模型。

    共享容器协同
  • 基于事件协同的多线程模式
  • 事件协同
  • 多进程模式
  • 1.2.3 网络通信基础和知识

    1.2.3.1 OSI与TCP/IP
    1.2.3.2 网络IO实现方式
  • BIO 阻塞式IO
  • NIO 非阻塞式IO 基于事件驱动采用Reactor模式
  • 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技术单机构建的网站

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

    单体应用

    2.2.2 数据库与应用分离

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

    数据和应用分开部署

    2.2.3 应用服务器集群

    负载均衡

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

    需解决Session的问题

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

    缺点:

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

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

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

  • 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 缓存
  • 数据缓存
  • 页面缓存
  • 2.2.6 引入分布式存储系统
    读写分离

    2.2.7 数据库瓶颈

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

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

    不能关联查询。

    2.2.7.2 数据水平分表

    主键一致性

    数据库拆分

    2.2.8 应用面对新挑战

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

    服务化

    2.2.9 消息中间件

    异步和解耦

    《新程序员》:云原生和全面数字化实践50位技术专家共同创作,文字、视频、音频交互阅读

    总结

    以上是生活随笔为你收集整理的大型网站系统与Java中间件实践 01 认识分布式的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。