分布式技术(一)分布式的架构的演进

  • 💌 所属专栏:【微服务】
  • 😀 作 者:长安不及十里
  • 💻 工作:目前从事电力行业开发
  • 🌈 目标:全栈开发
  • 🚀 个人简介:一个正在努力学技术的Java工程师,专注基础和实战分享 ,欢迎咨询!
  • 💖 欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信 😘 😘 😘

一 单体,SOA,微服务架构

1.1 单体架构

  • 是指一个应用程序中所有的功能都集成在一个单一的代码库中。
  • 这种设计模式简单易用,开发人员可以快速地开发和维护应用程序,但是也存在一些问题。

优点

  1. 简单易懂:单体服务架构相对简单,易于理解和上手,开发人员可以更快地构建和部署整个应用程序。
  2. 快速开发:由于所有功能模块都在同一个应用程序中,开发人员可以更方便地进行代码编写、测试和集成,加快开发速度。
  3. 低成本:相对于其他架构模式,单体服务架构的开发和维护成本相对较低,因为它不需要处理分布式系统和服务间通信的复杂性

缺点

  1. 难以扩展:随着应用程序规模和流量的增长,单体服务架构变得难以扩展。增加处理能力可能需要垂直扩展整个应用,增加硬件成本。
  2. 单一故障点:在单体服务架构中,整个应用程序是一个单一的实体,当一个模块出现问题时,可能会导致整个系统崩溃,降低了系统的健壮性和可靠性。
  3. 难以维护:由于所有功能模块都集中在一个应用程序中,当需要修改或升级某个模块时,可能会涉及整个应用程序的重新部署和测试,增加了维护的复杂性。
  4. 团队协作限制:在单体服务架构中,不同功能模块之间的代码和资源是共享的,这可能导致团队之间的协作和独立开发受到限制

1.2 SOA架构

  • SOA 是 Service-Oriented Architecture 的英文缩写,就是面向服务的架构。这里的服务可以理解为 service 层业务服务。将系统拆分为不同的服务单元,通过网络协议服务单元之间进行通信。服务单元完成一个特定功能(如:验证、支付、登录等等),通过服务单元之间的集成组成完整的应用程序。
  • SOA 架构中由两个重要的角色: 服务提供者(Provider)和服务使用者(Consumer)

优点

  1. 可重用性:SOA鼓励将功能划分为独立的服务,这些服务可以在不同的应用程序中被重复使用,这种重用性可以减少开发时间和工作量,并促进系统的灵活性和可维护性。
  2. 松散耦合:SOA通过标准化接口和协议来实现服务间的通信,服务之间解耦合度高,这样,当一个服务发生变化时,其他服务不会受到影响,从而提高了系统的可靠性和稳定性。
  3. 系统集成:SOA支持异构系统之间的集成,通过定义和实现标准化的接口,不同的应用程序和服务可以相互通信和协作,实现系统间的无缝集成。

缺点

  1. 额外的开发和管理工作:实施SOA需要额外的开发和管理工作,这包括定义服务接口、制定规范、版本管理等,这些工作增加了开发团队的负担,可能导致项目开发时间延长。
  2. 性能影响:由于SOA服务间需要通过网络进行通信,因此性能和响应时间可能受到一定的影响,网络延迟和通信开销可能会增加系统的负载和响应时间,特别是在高并发和大规模的情况下。
  3. 接口设计和管理挑战:SOA的成功与否取决于良好的接口设计和管理,定义清晰、灵活和易于使用的接口是一个挑战,需要深入的系统设计和架构能力,管理多个服务的版本和兼容性也可能带来一定的复杂性。

1.3 微服务架构

  • 微服务架构是一种将应用程序拆分成小型、独立的服务的架构模式,每个服务都有自己的数据库和业务逻辑,并通过轻量级的通信机制实现服务间的交互。
  • 微服务架构具有高度的可扩展性,每个服务都可以独立地扩展和部署。它还可以促进团队的自治和快速迭代开发。
  • 然而,微服务架构也存在一些挑战,首先,微服务架构需要良好的服务拆分和界定边界,这需要深入的系统设计和架构能力,此外,微服务架构的复杂性要求具备强大的监控和管理机制。

优点

  1. 高度可扩展性:微服务架构允许每个服务独立地扩展,使得系统能够更好地应对变化的负载需求。只需要对特定的服务进行扩展,而不需要整体扩展应用程序。
  2. 独立部署:每个微服务都可以独立地进行开发、测试和部署。这使得团队能够在不影响其他服务的情况下进行快速迭代和发布,提高开发效率。
  3. 高度灵活性:微服务架构允许团队使用不同的编程语言、技术栈和工具来构建每个服务。这种灵活性使得团队能够选择最适合他们需求的技术,并独立地进行技术栈升级和演进。
  4. 独立自治:每个微服务都有自己的团队负责开发和维护。这种自治性使得团队能够独立做出决策,更好地满足特定服务的需求,并快速响应变化。

缺点

  1. 分布式系统的复杂性:微服务架构引入了分布式系统的复杂性。服务之间的通信需要通过网络进行,可能会面临网络延迟、通信故障等问题,增加了系统的复杂性和运维成本。
  2. 服务拆分的挑战:将应用程序拆分成适当的微服务需要良好的系统设计和架构能力。错误的服务拆分可能导致服务间的紧密耦合,或者服务间的边界不清晰,影响系统的可维护性和扩展性。
  3. 一致性和事务管理:由于微服务架构中的数据和业务逻辑分布在不同的服务中,确保一致性和事务管理变得更加复杂。需要采用一些技术手段来解决分布式事务和数据一致性的问题。

二 微服务架构技术方案

业界比较成熟的服务框架有很多,比如:Hessian、CXF、Dubbo、Dubbox、Spring Cloud、gRPC、thrift等技术实现,都可以进行远程调用,具体技术实现优劣参考以下分析,这也是具体在技术方案选择过程中的重要依据。

  • 区域内容分发:CDN

【白话科普】用动画告诉你 CDN是如何工作的 | CDN是什么 | 如何让你的网站网站快速打开 | CDN原理 | 服务器自由_哔哩哔哩_bilibili

  • 网络负载均衡:lvs

抓包搞懂LVS、Nginx四层七层负载均衡_哔哩哔哩_bilibili

  • 网关负载均衡、反向代理:nginx+lua、Kong、Spring Cloud Zuul、Spring Cloud Gateway
  • 服务网关:zuul,kong,springcloud gateway
  • 熔断、降级、限流:Hystrix,Sentinel
  • 服务注册与发现:eureka,nacos,consul,zookeeper
  • 服务配置:nacos,springcloud config,consul
  • 服务负载均衡:ribbon,Load Balancer
  • 组件通信:feign,RestTemplate,Dubbo RPC,OpenFeign
  • 消息队列:RabbitMQ、Kafka、ActiveMQ、RocketMQ
  • 链路追踪:zipkin,Skywalking
  • 服务部署:docker,kubernetes,jenkins
  • 服务监控:Metrics+ELK,SpringCloud Admin
  • 分布式日志:ELK
  • 分布式存储:fastDFS、OSS
  • 分布式事务:seata
  • 分布式任务调度:SchedulerX,xxl-job
  • 短信服务:SMS
  • 邮件服务:mail

2.1 核心组件

  • 注册中心
    • 服务注册
    • 服务发现
  • 服务网关
    • 安全认证和授权
    • 路由管理
    • 协议转换
    • 负载限流
  • 服务熔断
    • 监控
    • 断路器状态管理
    • 故障恢复
    • 限流
  • 分布式配置中心
    • 集中化配置管理
    • 配置信息动态刷新
    • 配置信息版本控制
    • 配置信息安全管理
    • 配置信息监控
  • 负载均衡
  • 服务调用

1.2 常见微服务架构

dubbo:zookeeper + dubbo + SpringMvc / SpringBoot

  • 配套通信方式:rpc
  • 注册中心:zookeeper / redis
  • 配置中心:diamond

SpringCloud:全家桶 + 嵌入第三方组件(Netflix)

  • 配套通信方式:http restful
  • 注册中心:eruka / consul
  • 配置中心:config
  • 熔断器:hystrix
  • 网关:zuul
  • 分布式链路系统:sleuth + zipkin

SpringCloud Alibaba(全家桶)

  • Sentinel:把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
  • Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
  • RocketMQ:一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。
  • Dubbo:Apache Dubbo™ 是一款高性能 Java RPC 框架。
  • Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。
  • Alibaba Cloud OSS:阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。
  • Alibaba Cloud SchedulerX:阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。
  • Alibaba Cloud SMS:覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。

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

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

相关文章

实现校园网开机自启动部署

❤️博客主页: iknow181🔥系列专栏: Python、JavaSE、JavaWeb、CCNP🎉欢迎大家点赞👍收藏⭐评论✍ 目录 一.准备工作 1、IDE安装 2、安装Selenium 1.介绍 2.下载 3、安装pywifi 1.介绍 2.下载 4、下载浏览器驱…

毫无基础的人如何入门 Python ?--找对学习入口是关键!

1.行百里者半三十 不少学生或职场人士总面临这样一种窘境:数字化转型大背景、大趋势下,感觉非常有必要学习Python等分析工具,但在真正学习Python的各种语言规则时,往往体验不到知识的乐趣,翻看个别章节后即束之高阁。…

7.golang指针

指针是存储另一个变量的内存地址的变量。 指针的声明 func main() {a : 255b : &afmt.Println(b)fmt.Println(*b) }& 操作符获取一个变量的指针地址。* 操作符获取指针地址的值。程序的输出为: 0xc00000a0d8 255

VUE2+THREE.JS辉光设定和解决辉光导致背景变暗的问题

THREE.JS辉光设定和解决辉光导致背景变暗的问题 THREE.JS 辉光设定THREE.JS 辉光导致背景变暗的问题1.设定背景图片2.初始化辉光3. animate 一直渲染辉光 THREE.JS 辉光设定 给我的设计好的fbx模型,已经设定好了模型发光材质,所以直接添加辉光效果,就可以自动发光 blender模型生…

前馈全连接层

B站教学视频链接:2.3.4前馈全连接层-part2_哔哩哔哩_bilibili

力扣1089题 复写零 双指针解法

2. 复写零 给你一个长度固定的整数数组 arr ,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。 注意:请不要在超过该数组长度的位置写入元素。请对输入的数组 就地 进行上述修改,不要从函数返回任何东西。 示例 1&…

微信小程序input type=nickname不能触发隐私政策?小程序隐私协议开发指南之nickname权限篇

小程序隐私协议开发指南之nickname权限篇 涉及处理用户个人信息的小程序开发者,需通过弹窗等明显方式提示用户阅读隐私政策等收集使用规则。 为规范开发者的用户个人信息处理行为,保障用户合法权益,微信要求开发者主动同步微信当前用户已阅读并同意小程序的隐私政策等收集使…

docker 推送tar包到远程仓库

tar 包 推送到远程仓库的步骤 - 导入镜像(docker load -i 镜像名称)示例:docker load -i yiyi-admin.tar- 打标签(docker tag 镜像id registry.cn-hangzhou.aliyuncs.com/空间名称/镜像名称:版本号)示例:docker tag $image_id reg…

Android 12.0 修改Android系统的通知自动成组的数量

场景: Android 系统对显示在通知列表中的同一个应用的通知进行分组管理,即相同的packageName中,当通知数量达到系统默认指定的数量时,会自动成一组. Android 12.0 中系统默认的自动成组数如下所示: 核心路径 : frameworks/base/core/res/res/values/config.xml<!-- 来自同…

AI 编程如何助力开发者高效完成架构设计工作?

▼最近直播超级多&#xff0c;预约保你有收获 今晚直播&#xff1a;《AI 编程技术架构剖析和案例开发实战》 —1— AI 编程能帮我们完成哪些工作&#xff1f; 从目前企业级种种现实场景应用来看&#xff0c;AI 编程已经成为一种帮助开发者解决架构设计复杂问题、提高编程效率以…

adb 命令获取当前页面的包名

adb shell "dumpsys window | grep mCurrentFocus"

使用OpenCompass评测rwkv模型教程

0x0. 前言 继续MLC-LLM 支持RWKV-5推理以及对RWKV-5的一些思考文章里面提到的想法&#xff0c;探索一下使用OpenCompass来评测RWKV模型&#xff0c;对模型的实际表现有一个更客观的了解。我在尝试的过程中也碰到了一些问题&#xff0c;所以这里记录一下使用OpenCompass评测的流…

Node【工具 01】Node Version Manager nvm安装使用(Node.js版本管理工具)

1.介绍 非专业前端开发工程师在构建项目时遇到如下问题&#xff1a; ERROR: This version of pnpm requires at least Node.js v16.14 The current version of Node.js is v14.17.0 Visit https://r.pnpm.io/comp to see the list of past pnpm versions with respective Nod…

【doccano】文本标注工具——属性级情感分析标注自己的业务数据

笔记为自我总结整理的学习笔记&#xff0c;若有错误欢迎指出哟~ 【doccano】文本标注工具——属性级情感分析标注自己的业务数据 1.说明2.前提条件3.doccano创建项目4.添加数据集5.添加标签6.标注数据7.导出数据转换格式 1.说明 2.前提条件 确保doccano已经安装完成 可以参考文…

Python实现的二分查找算法(非递归实现)

一、二分查找算法的优缺点&#xff1a; 二分查找又称折半查找&#xff0c;优点是比较次数少&#xff0c;查找速度快&#xff0c;平均性能好&#xff1b;其缺点是要求 待查表为有序表&#xff0c;且插入删除困难。因此&#xff0c;二分查找方法适用于不经常变动而查找频繁的有 …

事务注解@Transactional

Override Transactional(rollbackFor RuntimeException.class) public Role insert(Role role) throws Exception { userMapper.deleteById(60); if(null!role){ // 抛出Exception&#xff0c;而rollbackFor RuntimeException.class&#xff0c;不回…

H5 keng

一、url转码&#xff0c;url传值得时候中文会被转义&#xff0c;通过 decodeURIComponent&#xff08; &#xff09; 进行转码 this.url decodeURIComponent(item.split()[1]) 编码的话用encodeURI( ) son.name encodeURI(infoJson.name) 二、H5页面在ios中滑动不流畅问题&…

广州华锐视点提供AI虚拟主播定制,为品牌注入新活力!

随着科技的飞速发展&#xff0c;人工智能已经逐渐渗透到我们生活的方方面面。在这个信息爆炸的时代&#xff0c;如何让您的品牌在众多竞争对手中脱颖而出&#xff0c;成为行业的佼佼者&#xff1f;答案就是——AI虚拟主播&#xff01; 广州华锐视点提供AI数字人定制服务&#x…

一些后端测试的东西

后端测试都测试些什么 接口测试最小单元测试联调测试 接口测试 接口测试要素 可重复性 异常覆盖 环境一致 如何进行方便的接口测试 测试工具&#xff1a; idea-httpRequest &#xff0c; apifox , postman, jmeter 如何使用idea进行高效的接口测试 编写接口 启动项目直接…

二十五、DSL查询文档(全文检索查询、精确查询、地理查询、复合查询)

目录 一、全文检索查询 1、match查询 语法: 2、multi_match查询 语法: 3、match和mult_match的区别 二、精确查询 1、term查询&#xff1a; 语法&#xff1a; 2、range查询&#xff1a;&#xff08;范围查询&#xff09; 语法&#xff1a; 三、地理查询 1、geo_bou…