【概念】神马是分布式?

SueWakeup​​​​​

个人主页:SueWakeup

系列专栏:学习Java框架

个性签名:保留赤子之心也许是种幸运吧


本文封面由 凯楠📷 友情赞助播出!

目录

前言

[1. 系统架构的演变](#1. 系统架构的演变)

[2. SOA 与微服务的关系](#2. SOA 与微服务的关系)

[3. 分布式核心知识](#3. 分布式核心知识)

[3.1 分布式中的远程调用](#3.1 分布式中的远程调用)

[RESTful 接口](#RESTful 接口)

[总结:什么是 RESTful 架构?](#总结:什么是 RESTful 架构?)

[RPC 协议](#RPC 协议)

[RPC 协议的优点](#RPC 协议的优点)

[RESTful 和 RPC 的区别与联系](#RESTful 和 RPC 的区别与联系)

[3.2 分布式中的 CAP 原理](#3.2 分布式中的 CAP 原理)

[分布式系统(distributed system)的难点](#分布式系统(distributed system)的难点)

注:手机端浏览本文章可能会出现 "目录"无法有效展示的情况,请谅解,点击侧栏目录进行跳转


前言

随着互联网的发展,网站应用的规模不断扩大,常规的应用架构已无法应对,分布式服务架构以及微服务架构势在必行,必需一个治理系统确保架构有条不紊的演进。

在阅读本文前,推荐阅读【计算机网络】什么是http?


1. 系统架构的演变

| 架构 | 描述 | 优点 | 缺点 |
| 单体应用架构 | 将所有的功能模块打包到一起 并放在一个 web 容器中运行 | * 所有的功能集成在一个项目工程中 * 项目架构简单,前期开发成本低,周期短,小型项目的首选 | * 全部功能集成在一个工程中,对于大型项目不易开发、扩展及维护 * 系统性能扩展只能通过扩展集群结点,成本高、有瓶颈 |
| 垂直应用架构 | 将应用拆成互不相干的几个应用 | * 项目架构简单,前期开发成本低,周期短,小型项目的首选 * 通过垂直拆分,原来的单体项目不至于无线扩大 * 不同的项目可采用不同的技术 | * 全部功能集成在一个工程中,对于大型项目不易开发、扩展及维护 * 系统性能扩展只能通过扩展集群结点,成本高、有瓶颈 |
| 分布式 SOA 架构 | 根据需求,进行分布式部署、组合和使用 一个服务以独立的形式存在于操作系统进程中 | * 抽取公共的功能为服务,提高开发效率 * 对不同的服务进行集群化部署解决系统压力 * 基于 ESB / DUBBO 减少系统耦合 | * 抽取服务的粒度较大 * 服务提供方与调用方耦合度较高 |
| 微服务架构 | 在 SOA 上做升华,强调 "业务需要的彻底的组件化和服务化" ,原有的单个业务系统拆分成多个可以独立开发、设计、运行的小应用 | * 通过服务的原子化拆分,以及微服务的独立打包、部署和升级,小团队的交付周期将缩短,运维成本也将大幅度下降 * 微服务遵循单一原则。采用 Restful 等轻量协议传输 | * 微服务过多,服务治理成本高,不利于系统维护 * 分布式系统开发的技术成本高(容错、分布式事务等) |

服务网格化 引入一个独立的网络层,实现服务之间的通信、发现、负载均衡等功能 * 服务之间的通信更加透明,无需关注底层通信细节 * 提供统一的安全性和监控机制,能够收集服务之间的通信数据 * 可以根据需求动态地扩展和调整服务之间的通信配置 * 增加系统的复杂性,需要投入更多精力和资源管理服务网格 * 引入额外的网络通信会带来一定的性能开销

2. SOA 与微服务的关系

| 功能 | SOA | 微服务 |
| 组件大小 | 大块业务逻辑 | 单独任务或小块业务逻辑 |
| 耦合 | 通常松耦合 | 总是松耦合 |
| 公司架构 | 任何类型 | 小型、专注于功能交叉团队 |
| 管理 | 着重中央管理 | 着重分散管理 |

目标 确保应用能够交互操作 执行新功能、快速扩展开发团队

3. 分布式核心知识

3.1 分布式中的远程调用

存在多个服务之间存远程调用的需求

远程调用通常包含两个部分:序列化和通信协议

目前常见的序列化协议包括:json、xml、hession、protobuf、thrift、text、bytes等

目前主流的远程调用技术:基于 HTTP 的 RESTful接口、基于 TCP 的 RPC 协议


RESTful 接口

Representational State Transfer 的缩写,如果一个架构符合 REST 原则,就称它为 RESTful 架构

资源(Resources): 网络上的一个实体或一个具体信息,可以用 URI (统一资源定位符)指向它,每种资源对应一个特定的**URI**

**表现层(Representation):**将 "资源" 具体呈现的形式称为 "表现层"。

比如,文本可以用 txt 格式表现,也可以用 HTML 格式、XML 格式、JSON 格式、"二进制"格式表现。

**状态转化(State Transfer):**在访问一个网站时,需要客户端和服务器进行互动,在这个过程中,如果客户端需要操作服务器上,必需通过 HTTP 协议,让服务器端发送 "状态转化"。

比如,通过 GET 获取资源、POST 新建或更新资源、PUT 更新资源、DELETE 删除资源。

总结:什么是 RESTful 架构?
  • 每一个 URI 代表一种资源
  • 客户端和服务器之间,传递这种资源的某种表现层
  • 客户端通过 GET、POST、PUT、DELETE 对服务器端资源进行操作,实现 "表现层状态转化"

RPC 协议

Remote Procedure Call 的缩写,一种进程间的通信方式。允许像调用本地服务一样调用远程服务。

**主要目标:**让远程服务调用更简单、透明。

**角色:**负责屏蔽底层的传输方式(TPC 或 UDP)、序列化方式(XML / JSON / 二进制)和通信细节。

RPC 协议的优点
  • 微服务架构的基础组件,大大降低架构微服务化的成本,提供调用方与服务提供方的研发效率
  • 屏蔽跨进行调用函数(服务)的各类复杂细节

RESTful 和 RPC 的区别与联系

| 比较项 | RESTful | RPC |
| 通讯协议 | HTTP | 一般使用 TCP |
| 性能 | 略低 | 较高 |
| 灵活度 | 高 | 低 |

应用 微服务架构 SOA 架构

3.2 分布式中的 CAP 原理

分布式系统(distributed system)的难点

各个结点的状态同步。CAP 定理是这方面的基本定理,也是理解分布式系统的起点。

**Consistency(一致性):**数据一致更新,所有数据的变化都是同步的

**Availability(可用性):**在集群中一部分节点故障后,集群整体是否还能响应客户端

**Partition tolerance(分区容错性):**某个节点的故障,并不影响整个系统的允许

| 选择 | 描述 |
| CA | 加强一致性和可用性 传统的关系型数据库的选择 |
| AP | 追求分区容错性和可用性 分布式系统设计、非关系型数据库系统的选择 |

CP 追求一致性和分区容错性 基本不会选择,网络问题会让整个系统瘫痪
相关推荐
weixin_4539650017 分钟前
[单master节点k8s部署]31.ceph分布式存储(二)
分布式·ceph·kubernetes
坎坎坷坷.28 分钟前
分布式理论:拜占庭将军问题
分布式
攸攸太上2 小时前
JMeter学习
java·后端·学习·jmeter·微服务
妍妍的宝贝3 小时前
k8s 中微服务之 MetailLB 搭配 ingress-nginx 实现七层负载
nginx·微服务·kubernetes
程序员-珍4 小时前
使用openapi生成前端请求文件报错 ‘Token “Integer“ does not exist.‘
java·前端·spring boot·后端·restful·个人开发
架构师吕师傅5 小时前
性能优化实战(三):缓存为王-面向缓存的设计
后端·微服务·架构
极客先躯7 小时前
高级java每日一道面试题-2024年10月3日-分布式篇-分布式系统中的容错策略都有哪些?
java·分布式·版本控制·共识算法·超时重试·心跳检测·容错策略
niu_sama7 小时前
仿RabbitMQ实现消息队列三种主题的调试及源码
分布式·rabbitmq
鸡c7 小时前
rabbitMq------客户端模块
分布式·rabbitmq·ruby
王彬泽7 小时前
【微服务】服务注册与发现、分布式配置管理 - Nacos
微服务·服务注册与发现·分布式配置管理