大型网站系统与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上面上去。

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 消息中间件

异步和解耦

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
目录
相关文章
|
10月前
|
人工智能 安全 Java
分布式 Multi Agent 安全高可用探索与实践
在人工智能加速发展的今天,AI Agent 正在成为推动“人工智能+”战略落地的核心引擎。无论是技术趋势还是政策导向,都预示着一场深刻的变革正在发生。如果你也在探索 Agent 的应用场景,欢迎关注 AgentScope 项目,或尝试使用阿里云 MSE + Higress + Nacos 构建属于你的 AI 原生应用。一起,走进智能体的新世界。
1768 100
|
10月前
|
关系型数据库 Apache 微服务
《聊聊分布式》分布式系统基石:深入理解CAP理论及其工程实践
CAP理论指出分布式系统中一致性、可用性、分区容错性三者不可兼得,必须根据业务需求进行权衡。实际应用中,不同场景选择不同策略:金融系统重一致(CP),社交应用重可用(AP),内网系统可选CA。现代架构更趋向动态调整与混合策略,灵活应对复杂需求。
|
10月前
|
移动开发 监控 小程序
java家政平台源码,家政上门清洁系统源码,数据多端互通,可直接搭建使用
一款基于Java+SpringBoot+Vue+UniApp开发的家政上门系统,支持小程序、APP、H5、公众号多端互通。涵盖用户端、技工端与管理后台,支持多城市、服务分类、在线预约、微信支付、抢单派单、技能认证、钱包提现等功能,源码开源,可直接部署使用。
712 24
|
10月前
|
设计模式 消息中间件 传感器
Java 设计模式之观察者模式:构建松耦合的事件响应系统
观察者模式是Java中常用的行为型设计模式,用于构建松耦合的事件响应系统。当一个对象状态改变时,所有依赖它的观察者将自动收到通知并更新。该模式通过抽象耦合实现发布-订阅机制,广泛应用于GUI事件处理、消息通知、数据监控等场景,具有良好的可扩展性和维护性。
661 8
|
10月前
|
安全 前端开发 Java
使用Java编写UDP协议的简易群聊系统
通过这个基础框架,你可以进一步增加更多的功能,例如用户认证、消息格式化、更复杂的客户端界面等,来丰富你的群聊系统。
333 11
|
10月前
|
机器学习/深度学习 人工智能 自然语言处理
Java与生成式AI:构建内容生成与创意辅助系统
生成式AI正在重塑内容创作、软件开发和创意设计的方式。本文深入探讨如何在Java生态中构建支持文本、图像、代码等多种生成任务的创意辅助系统。我们将完整展示集成大型生成模型(如GPT、Stable Diffusion)、处理生成任务队列、优化生成结果以及构建企业级生成式AI应用的全流程,为Java开发者提供构建下一代创意辅助系统的完整技术方案。
440 10
|
10月前
|
人工智能 监控 Java
Java与AI智能体:构建自主决策与工具调用的智能系统
随着AI智能体技术的快速发展,构建能够自主理解任务、制定计划并执行复杂操作的智能系统已成为新的技术前沿。本文深入探讨如何在Java生态中构建具备工具调用、记忆管理和自主决策能力的AI智能体系统。我们将完整展示从智能体架构设计、工具生态系统、记忆机制到多智能体协作的全流程,为Java开发者提供构建下一代自主智能系统的完整技术方案。
1118 4
|
消息中间件 存储 负载均衡
消息中间件的选择:RabbitMQ是一个明智的选择
消息中间件的选择:RabbitMQ是一个明智的选择
385 0
|
消息中间件 存储 中间件
【消息中间件】详解三大MQ:RabbitMQ、RocketMQ、Kafka
【消息中间件】详解三大MQ:RabbitMQ、RocketMQ、Kafka
14854 1
|
消息中间件 编解码 Docker
Docker部署RabbitMQ消息中间件
【7月更文挑战第4天】Docker部署RabbitMQ消息中间件
633 3

热门文章

最新文章