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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 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 消息中间件

异步和解耦

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
3天前
|
监控 数据可视化 关系型数据库
微服务架构+Java+Spring Cloud +UniApp +MySql智慧工地系统源码
项目管理:项目名称、施工单位名称、项目地址、项目地址、总造价、总面积、施工准可证、开工日期、计划竣工日期、项目状态等。
28 6
|
4天前
|
架构师 Java 数据库连接
Java异常处理的20个最佳实践:告别系统崩溃
你是否在为如何处理异常而困扰? 你是否曾被面试官问道Java异常处理的最佳实践有哪些? 本文汇总了Java异常处理的20个最佳实践:让你告别系统崩溃,面试游刃有余
209 2
Java异常处理的20个最佳实践:告别系统崩溃
|
4天前
|
NoSQL 关系型数据库 MySQL
分布式锁:不同实现方式实践测评
分布式锁:不同实现方式实践测评
22 0
|
23小时前
|
网络协议 Java 数据安全/隐私保护
如何使用Java实现基于TCP/IP协议的即时通讯系统
TCP/IP协议是现代计算机网络通信中最常用的协议之一,而即时通讯系统则是当前互联网应用中非常普遍的一种场景。本文将介绍如何使用Java编程语言来实现基于TCP/IP协议的即时通讯系统,包括建立服务端和客户端、发送和接收消息等方面的详细步骤和示例。
|
2天前
|
Java 开发者
Java中的Lambda表达式应用与实践
【2月更文挑战第4天】Lambda表达式是Java 8引入的一项重要特性,它简洁而强大,可以极大地提高代码的可读性和简洁性。本文将深入探讨Java中Lambda表达式的应用与实践,帮助读者更好地理解和运用这一功能。
7 3
|
3天前
|
消息中间件 运维 Java
java医院综合信息管理云HIS系统源码(前后端分离、SaaS模式、云计算)
云HIS系统分为两个大的系统:综合管理系统和业务系统 1、综合管理系统:由运营商、开发商和监管机构使用,用来进行运营管理、运维管理和综合监管。 2、业务系统:由基层医院使用,用来支撑医院各类业务运转。
15 1
|
3天前
|
前端开发 JavaScript Java
利用Java Web技术实现实时通信系统的案例分析
利用Java Web技术实现实时通信系统的案例分析
|
3天前
|
IDE Java 应用服务中间件
Java Web开发入门指南:从基础到实践
Java Web开发入门指南:从基础到实践
|
3天前
|
存储 安全 算法
Java泛型与集合:类型安全的集合操作实践
Java泛型与集合:类型安全的集合操作实践
|
3天前
|
IDE Java 测试技术
使用Java进行单元测试:实践与技巧
使用Java进行单元测试:实践与技巧

相关产品

  • 云消息队列 MQ
  • 云消息队列 Kafka 版
  • 微服务引擎