【概念】神马是分布式?

news2024/11/23 10:41:41
SueWakeup​​​​​

                                                      个人主页:SueWakeup

                                                      系列专栏:学习Java框架

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

 

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

 目录

前言

1. 系统架构的演变

2. SOA 与微服务的关系

3. 分布式核心知识

3.1 分布式中的远程调用

RESTful 接口

总结:什么是 RESTful 架构?

RPC 协议

RPC 协议的优点

RESTful 和 RPC 的区别与联系

3.2 分布式中的 CAP 原理

分布式系统(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 的区别与联系

比较项RESTfulRPC
通讯协议HTTP一般使用 TCP
性能略低较高
灵活度
应用微服务架构SOA 架构

3.2 分布式中的 CAP 原理

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

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

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

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

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

选择描述
CA

加强一致性和可用性

传统的关系型数据库的选择

AP

追求分区容错性和可用性

分布式系统设计、非关系型数据库系统的选择

CP

追求一致性和分区容错性

基本不会选择,网络问题会让整个系统瘫痪

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1532455.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PCL QT visualizer

PCL QT visualizer 用Qt创建PCL 可视化应用程序。 项目组织 UI界面 Compile & Run cmake -B build -S . -DCMAKE_TOOLCHAIN_FILED:\vcpkg\scripts\buildsystems\vcpkg.cmakecmake --build build --config Releasewindeployqt6.exe .\pcl_visualizer.exe.\build\Release\…

“因聚而生,数智有为”实在智能Agent牵手华为生态合作

近日,2024华为中国合作伙伴大会顺利闭幕,实在智能受邀出席,携TARS大模型及实在Agent(智能体)数字员工精彩亮相,与华为生态伙伴共同探讨如何帮助客户抓住数智化转型的巨大机遇,加速培育“新质生产…

Python数学建模-2.9Matplotlib库

Matplotlib库是Python中一个非常流行的绘图库,它提供了大量的绘图工具,可以生成各种类型的静态、动态、交互式的图表。Matplotlib的设计初衷是为了与NumPy配合使用,从而提供一个强大的数学绘图工具。 1.Matplotlib的主要特点 丰富的图表类型…

vue2 中使用音频

vue2 中使用音频 在 template 页面 写入 audio 标签 <template><div><audio ref"moreAudio" :src"moreAudioSrc"></audio><audio ref"noAudio" :src"noAudioSrc"></audio></div> </t…

MySQL 索引的分类和优化

​ 优质博文&#xff1a;IT-BLOG-CN 索引是什么 &#xff1a; MySQL 官方对索引的定义&#xff1a;索引&#xff08;Index&#xff09;是帮助 MySQL 高效获取数据的数据结构。可以得到索引的本质&#xff1a;索引是数据结构。索引的目的在于提高查询效率。可以简单理解为&#…

css实现的3D立体视觉效果鸡蛋动画特效

这是一个基于纯css实现的3D立体视觉效果鸡蛋动画特效&#xff0c;喜欢的朋友可以拿来使用演示动态效果 css实现的3D立体视觉效果鸡蛋动画特效

音频和视频标签

音频用audio标签 controls表示控制栏 loop循环播放音频 autoplay自动播放&#xff08;浏览器基于隐私一般不支持&#xff09; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Com…

从零到一构建短链接系统(八)

1.git上传远程仓库&#xff08;现在才想起来&#xff09; git init git add . git commit -m "first commit" git remote add origin OLiyscxm/shortlink git push -u origin "master" 2.开发全局异常拦截器之后就可以简化UserController 拦截器可以…

分布式文件存储与数据缓存(二)| Redis

目录 Redis概述_什么是NoSQLNoSQL的四大分类KV型NoSql&#xff08;代表----Redis&#xff09;列式NoSql&#xff08;代表----HBase&#xff09;文档型NoSql&#xff08;代表----MongoDB&#xff09;搜索型NoSql&#xff08;代表----ElasticSearch&#xff09; 关系型数据库和非…

【Kotlin】扩展属性、扩展函数

1 类的扩展 Kotlin 提供了扩展类或接口的操作&#xff0c;而无需通过类继承或使用装饰器等设计模式&#xff0c;来为某个类添加一些额外的属性或函数&#xff0c;我们只需要通过一个被称为扩展的特殊声明来完成。通过这种机制&#xff0c;我们可以将那些第三方类不具备的功能强…

Css提高——Css3盒子模型border-box

1、盒子模型的种类与区别 CSS3 中可以通过 box-sizing 来指定盒模型&#xff0c;有2个值&#xff1a;即可指定为 content-box、border-box&#xff0c;这样我们 计算盒子大小的方式就发生了改变。 CSS3 盒子模型 可以分成两种情况&#xff1a; 1. box-sizing: content-box 盒…

智慧安全:守护智慧城市的安全屏障

随着信息技术的迅猛发展&#xff0c;智慧城市已成为现代城市发展的重要方向。智慧城市通过集成应用先进的信息通信技术&#xff0c;实现城市管理、服务、运行的智能化&#xff0c;为城市的可持续发展注入了新的活力。然而&#xff0c;在智慧城市的建设过程中&#xff0c;安全问…

华为openEuler系统卸载jdk

华为openEuler系统卸载jdk 1.查看openEuler上已安装的 Java 版本&#xff1a; 在终端中运行以下命令&#xff0c;查看系统中已经安装的 Java 版本。 sudo alternatives --config java这将列出已安装的 Java 版本&#xff0c;你可以看到当前使用的是哪个版本 2.卸载 Java&am…

SpringCloudAlibaba Nacos配置及应用

Nacos搭建及配置 nacos本机服务搭建 windows上搭建单机nacos&#xff1a; Releases alibaba/nacos GitHub 下载安装包 下载本地&#xff0c;解压&#xff0c;直接运行&#xff08;保证安装包的绝度路径只有英文字符&#xff0c;有中文会导致运行失败&#xff09;&#xff…

测试平台——前端框架

一、创建vue项目 npm init vitelatest web_class wylWYLdeMacBook-Air testplatform % npm init vitelatest web_class ✔ Select a framework: › Vue ✔ Select a variant: › JavaScriptScaffolding project in /Users/wyl/workspace/testplatform/web_class...Done. Now…

【云原生 • Kubernetes】认识 k8s、k8s 架构、核心实战

文章目录 Kubernetes基础概念1. 是什么2. 架构2.1 工作方式2.2 组件架构 3. k8s组件创建集群步骤一 基础环境步骤二 安装kubelet、kubeadm、kubectl步骤三 主节点使用kubeadm引导集群步骤四 副节点加入主节点步骤五 部署dashboard Kubernetes核心实战1. 资源创建方式2. Namespa…

Flink RocksDB状态后端优化总结

截至当前&#xff0c;Flink 作业的状态后端仍然只有 Memory、FileSystem 和 RocksDB 三种可选&#xff0c;且 RocksDB 是状态数据量较大&#xff08;GB 到 TB 级别&#xff09;时的唯一选择。RocksDB 的性能发挥非常仰赖调优&#xff0c;如果全部采用默认配置&#xff0c;读写性…

知乎x-zse-96逆向

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;wx a15018601872 本文章…

C数据类型(C语言)---变量的类型决定了什么?

目录 数据类型&#xff08;Data Type&#xff09; 变量的类型决定了什么&#xff1f; &#xff08;1&#xff09;不同类型数据占用的内存大小不同 如何计算变量或类型占内存的大小 &#xff08;2&#xff09;不同数据类型的表数范围不同 &#xff08;3&#xff09;不同类型…

【论文阅读】通过组件对齐评估和改进 text-to-SQL 的组合泛化

Measuring and Improving Compositional Generalization in Text-to-SQL via Component Alignment NAACL 2022| CCF B Abstract 在 text-to-SQL 任务中&#xff0c;正如在许多 NLP 中一样&#xff0c;组合泛化是一个重大挑战&#xff1a;神经网络在训练和测试分布不同的情况…