当前位置: 首页 > news >正文

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

  • 💌 所属专栏:【微服务】
  • 😀 作 者:长安不及十里
  • 💻 工作:目前从事电力行业开发
  • 🌈 目标:全栈开发
  • 🚀 个人简介:一个正在努力学技术的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:覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。

相关文章:

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

💌 所属专栏:【微服务】😀 作 者:长安不及十里💻 工作:目前从事电力行业开发🌈 目标:全栈开发🚀 个人简介:一个正在努力学技术的Java工程师,专注基…...

webpack 打包优化

在vue.config.js中配置 下载 uglifyjs-webpack-plugin 包 const { defineConfig } require("vue/cli-service"); var path require("path");module.exports defineConfig({transpileDependencies: true,filenameHashing: false, // 去除Vue打包后.cs…...

electron windows robotjs 安装教程

Robotjs 安装 前言第一步 : 安装python第二步 : 安装Visual Studio 2022第三步 : 安装robotjs 前言 robotjs可以控制鼠标键盘,获取屏幕内容,配合electron可做很多自动化操作。windows下配置环境有很多坑,很多文章都太旧了。试了很多次发现了…...

IDEA解决Git冲突详解

目录 前言: 何为冲突 冲突演示 IDEA冲突解决 小结: 前言: 相信大家多多少少都有了解和使用过Git,作为Java程序员idea可谓是无敌的存在了,那么如何使用idea解决Git冲突呢?不瞒大家前段时间在公司把同事…...

Vue3使用kkFileView预览文件pdf

kkFileView - 在线文件预览kkFileView官网 - kkFileView使用Spring Boot搭建,易上手和部署,基本支持主流办公文档的在线预览,如doc,docx,Excel,pdf,txt,zip,rar,图片等等https://kkfileview.keking.cn/zh-cn/docs/usage.html业务场景&#xf…...

建造者模式-C语言实现

UML类图&#xff1a; 代码实现&#xff1a; #include <stdio.h> #include <stdlib.h>// 产品类 typedef struct {char* part1;char* part2;char* part3; } Product;// 抽象建造者类 typedef struct {void (*buildPart1)(void*, const char*);void (*buildPart2)(v…...

Jmeter+influxdb+grafana监控平台在windows环境的搭建

原理&#xff1a;Jmeter采集的数据存储在infuxdb数据库中&#xff0c;grafana将数据库中的数据在界面上进行展示 一、grafana下载安装 Download Grafana | Grafana Labs 直接选择zip包下载&#xff0c;下载后解压即可&#xff0c;我之前下载过比较老的版本&#xff0c;这里就…...

关注这两点 或能避开一些现货黄金交易的陷阱

在现货黄金投资中&#xff0c;交易机会是处处都有&#xff0c;但是亏损的情况也可能出现。投资者要在陷阱处处的市场中获得稳定盈利&#xff0c;就需要懂得如何规避现货黄金投资的陷阱。下面我们就来介绍两个很常用的避开陷阱的方法。 看交易的活跃度。交易越活跃&#xff0c;市…...

Python 文件读写

Python 文件读写笔记整理 参数说明 open(path, flag[, encoding][,errors]) path:要打开文件的路径 flag:打开方式 encoding:编码方式 errors:错误处理 Flag打开方式表 模式 描述 r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 rb 以二进制格…...

线性分组码的奇偶校验矩阵均匀性分析

回顾信道编解码知识&#xff0c;我们知道信道编码要求编码具有检纠错能力&#xff0c;作为FEC&#xff08;forward error correction&#xff09;前向纠错编码的一类&#xff0c;线性分组码表示校验位与信息位的关系能够线性表示。 在这篇文章中&#xff0c;并不是要讨论信道编…...

leetcode算法之链表

目录 1.两数相加2.两两交换链表中的节点3.重排链表4.合并K个升序链表5.K个一组翻转链表 1.两数相加 两数相加 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(…...

2023.11.27 滴滴P0级故障或为k8s升级造成

滴滴11.27 P0级故障|打车|宕机|网约车|出租车|滴滴出行|系统故障_网易订阅 (163.com) 如何看待滴滴11月27日故障&#xff0c;对日常生产生活有哪些影响&#xff1f; - 知乎 (zhihu.com) 最新消息滴滴P0故障原因&#xff0c;是由于k8s集群升级导致的&#xff0c;后面又进行版本…...

Ubuntu16.04.4系统本地提权实验

目录 1.介绍&#xff1a; 2.实验&#xff1a; 3.总结&#xff1a; 1.介绍&#xff1a; 1.1&#xff1a;eBPF简介&#xff1a;eBPF(extendedBerkeleyPacketFilter)是内核源自于BPF的一套包过滤机制&#xff0c;BPF可以理解成用户与内核之间的一条通道&#xff0c;有非常强大的…...

Vue中使用正则表达式进行文本匹配和处理的方法

1. 正则表达式基础 正则表达式是一种用来匹配字符串的模式。它由普通字符&#xff08;例如字符 a 到 z&#xff09;和特殊字符&#xff08;称为"元字符"&#xff09;组成。以下是一些基本的正则表达式示例&#xff1a; 匹配邮箱的正则表达式&#xff1a; /^[\w-](\…...

php许愿墙代码包括前端和后端部分

以下是一个简单的PHP许愿墙代码示例&#xff0c;包括前端和后端部分&#xff1a; 前端HTML代码&#xff08;index.html&#xff09;&#xff1a; <!DOCTYPE html> <html> <head><title>许愿墙</title> </head> <body><h1>许…...

PHP 刷新缓存区的问题!

PHP流式输出&#xff0c;在Nginx下可以正常刷新缓存区 &#xff0c; 但是在Apache下会等待循环全部执行完&#xff0c;才会刷新&#xff01;有怎么解决&#xff1f; header(X-Accel-Buffering: no); // Nginx情况下必须加这一行header(Content-type: text/event-stream);header…...

Android Studio Giraffe-2022.3.1-Patch-3安装注意事项

准备工作&#xff1a; android studio下载地址&#xff1a;https://developer.android.google.cn/studio/releases?hlzh-cn gradle下载地址&#xff1a;https://services.gradle.org/distributions/ 比较稳定的网络环境&#xff08;比较android studio相关的依赖需要从谷歌那边…...

【古月居《ros入门21讲》学习笔记】14_参数的使用与编程方法

目录 说明&#xff1a; 1. 参数模型&#xff08;全局字典&#xff09; 2. 实现过程&#xff08;C&#xff09; 创建功能包 参数命令行的使用 YAML参数文件 rosparam命令 使用示例 编程方法&#xff08;C&#xff09; 配置代码编译规则 编译并运行 编译 运行 3. 实…...

Webpack 懒加载

文章目录 前言懒加载示例后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;webpack &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板。(如果出现错误&#xff0c;感谢大家指出…...

深度遍历DFS(括号生成,二叉树所有路径)

正整数 n 代表生成括号的对数&#xff0c;请设计一个函数&#xff0c;用于能够生成所有可能的并且 有效的 括号组合。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;["((()))","(()())","(())()","()(())","()()(…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...