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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
简介: 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 消息中间件

异步和解耦

相关实践学习
小试牛刀,一键部署电商商城
SAE 仅需一键,极速部署一个微服务电商商城,体验 Serverless 带给您的全托管体验,一起来部署吧!
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
1月前
|
人工智能 自然语言处理 前端开发
从理论到实践:使用JAVA实现RAG、Agent、微调等六种常见大模型定制策略
大语言模型(LLM)在过去几年中彻底改变了自然语言处理领域,展现了在理解和生成类人文本方面的卓越能力。然而,通用LLM的开箱即用性能并不总能满足特定的业务需求或领域要求。为了将LLM更好地应用于实际场景,开发出了多种LLM定制策略。本文将深入探讨RAG(Retrieval Augmented Generation)、Agent、微调(Fine-Tuning)等六种常见的大模型定制策略,并使用JAVA进行demo处理,以期为AI资深架构师提供实践指导。
281 73
|
7天前
|
存储 负载均衡 测试技术
ACK Gateway with Inference Extension:优化多机分布式大模型推理服务实践
本文介绍了如何利用阿里云容器服务ACK推出的ACK Gateway with Inference Extension组件,在Kubernetes环境中为多机分布式部署的LLM推理服务提供智能路由和负载均衡能力。文章以部署和优化QwQ-32B模型为例,详细展示了从环境准备到性能测试的完整实践过程。
|
1月前
|
并行计算 PyTorch 算法框架/工具
融合AMD与NVIDIA GPU集群的MLOps:异构计算环境中的分布式训练架构实践
本文探讨了如何通过技术手段混合使用AMD与NVIDIA GPU集群以支持PyTorch分布式训练。面对CUDA与ROCm框架互操作性不足的问题,文章提出利用UCC和UCX等统一通信框架实现高效数据传输,并在异构Kubernetes集群中部署任务。通过解决轻度与强度异构环境下的挑战,如计算能力不平衡、内存容量差异及通信性能优化,文章展示了如何无需重构代码即可充分利用异构硬件资源。尽管存在RDMA验证不足、通信性能次优等局限性,但该方案为最大化GPU资源利用率、降低供应商锁定提供了可行路径。源代码已公开,供读者参考实践。
80 3
融合AMD与NVIDIA GPU集群的MLOps:异构计算环境中的分布式训练架构实践
|
1月前
|
SQL Java 中间件
【YashanDB知识库】yasdb jdbc驱动集成BeetISQL中间件,业务(java)报autoAssignKey failure异常
在BeetISQL 2.13.8版本中,客户使用batch insert向yashandb表插入数据并尝试获取自动生成的sequence id时,出现类型转换异常。原因是beetlsql在prepareStatement时未指定返回列,导致yashan JDBC驱动返回rowid(字符串),与Java Bean中的数字类型tid不匹配。此问题影响业务流程,使无法正确获取sequence id。解决方法包括:1) 在batchInsert时不返回自动生成的sequence id;2) 升级至BeetISQL 3,其已修正该问题。
【YashanDB知识库】yasdb jdbc驱动集成BeetISQL中间件,业务(java)报autoAssignKey failure异常
|
1月前
|
人工智能 运维 监控
领先AI企业经验谈:探究AI分布式推理网络架构实践
当前,AI行业正处于快速发展的关键时期。继DeepSeek大放异彩之后,又一款备受瞩目的AI智能体产品Manus横空出世。Manus具备独立思考、规划和执行复杂任务的能力,其多智能体架构能够自主调用工具。在GAIA基准测试中,Manus的性能超越了OpenAI同层次的大模型,展现出卓越的技术实力。
|
1月前
|
Arthas 监控 Java
拥抱 OpenTelemetry:阿里云 Java Agent 演进实践
拥抱 OpenTelemetry:阿里云 Java Agent 演进实践
|
3月前
|
存储 运维 安全
盘古分布式存储系统的稳定性实践
本文介绍了阿里云飞天盘古分布式存储系统的稳定性实践。盘古作为阿里云的核心组件,支撑了阿里巴巴集团的众多业务,确保数据高可靠性、系统高可用性和安全生产运维是其关键目标。文章详细探讨了数据不丢不错、系统高可用性的实现方法,以及通过故障演练、自动化发布和健康检查等手段保障生产安全。总结指出,稳定性是一项系统工程,需要持续迭代演进,盘古经过十年以上的线上锤炼,积累了丰富的实践经验。
173 7
|
3月前
|
存储 分布式计算 Hadoop
基于Java的Hadoop文件处理系统:高效分布式数据解析与存储
本文介绍了如何借鉴Hadoop的设计思想,使用Java实现其核心功能MapReduce,解决海量数据处理问题。通过类比图书馆管理系统,详细解释了Hadoop的两大组件:HDFS(分布式文件系统)和MapReduce(分布式计算模型)。具体实现了单词统计任务,并扩展支持CSV和JSON格式的数据解析。为了提升性能,引入了Combiner减少中间数据传输,以及自定义Partitioner解决数据倾斜问题。最后总结了Hadoop在大数据处理中的重要性,鼓励Java开发者学习Hadoop以拓展技术边界。
115 7
|
3月前
|
Kubernetes Java 持续交付
小团队 CI/CD 实践:无需运维,Java Web应用的自动化部署
本文介绍如何使用GitHub Actions和阿里云Kubernetes(ACK)实现Java Web应用的自动化部署。通过CI/CD流程,开发人员无需手动处理复杂的运维任务,从而提高效率并减少错误。文中详细讲解了Docker与Kubernetes的概念,并演示了从创建Kubernetes集群、配置容器镜像服务到设置GitHub仓库Secrets及编写GitHub Actions工作流的具体步骤。最终实现了代码提交后自动构建、推送镜像并部署到Kubernetes集群的功能。整个过程不仅简化了部署流程,还确保了应用在不同环境中的稳定运行。
145 9
|
30天前
|
数据采集 存储 数据可视化
分布式爬虫框架Scrapy-Redis实战指南
本文介绍如何使用Scrapy-Redis构建分布式爬虫系统,采集携程平台上热门城市的酒店价格与评价信息。通过代理IP、Cookie和User-Agent设置规避反爬策略,实现高效数据抓取。结合价格动态趋势分析,助力酒店业优化市场策略、提升服务质量。技术架构涵盖Scrapy-Redis核心调度、代理中间件及数据解析存储,提供完整的技术路线图与代码示例。
分布式爬虫框架Scrapy-Redis实战指南