SpringCloud+SpringCloudAlibaba
架构的演进
1.1单体架构
将所有业务场景的表示层、业务逻辑层和数据访问层放在一个工程中,最终经过编译、打包,部署在一台服务器上。


◆ 1.1.1单体架构的优点
1)部署简单: 由于是完整的结构体,可以直接部署在一个服务器上即可。
2)技术单一: 项目不需要复杂的技术栈,往往一套熟悉的技术栈就可以完成开发。
3)用人成本低: 单个程序员可以完成业务接口到数据库的整个流程。
◆ 1.1.2单体架构的缺点
1)系统启动慢,一个进程包含了所有的业务逻辑,涉及到的启动模块过多,导致系统的启动、重启时间周期过长;
2)系统错误隔离性差、可用性差,任何一个模块的错误均可能造成整个系统的宕机;
3)可伸缩性差:系统的扩容只能只对这个应用进行扩容,不能做到对某个功能点进行扩容;
4)线上问题修复周期长:任何一个线上问题修复需要对整个应用系统进行全面升级。
1.2 SOA架构(面向服务架构)
SOA,面向服务架构。SOA中心化的实现方式就是ESB(企业服务总线),依靠ESB,集成不同系统、不同协议的服务,连接各个服务节点,做消息的转化解释和路由工作,让不同的服务互联互通;


1.2.1 RPC远程过程调用
RPC,Remote Procedure Call,即远程过程调用,建立在Socket之上的,在一台机器上运行的主程序,可以调用另一台机器上准备好的子程序。

RPC框架:
国内:
Dubbo,阿里巴巴,http://dubbo.I/O/;
Motan ,新浪微博,https://github.com/weibocom/motan;
Dubbox,当当,https://github.com/dangdangdotcom/dubbox;
Rpcx,基于 Golang 的https://github.com/smallnest/rpcx;
国外:
Thrift,facebook,https://thrift.apache.org;
gRPC,Google,http://www.grpc.I/O;
Avro,hadoop,https://avro.apache.org;
阿里巴巴的Dubbo、HSF,Spring的Spring Cloud等,底层基于NIO;
1.2.2 RMI远程方法调用
让在客户端Java虚拟机上的对象像调用本地对象一样调用服务端java 虚拟机中的对象上的方法。
使用代表:EJB。
远程方法调用步骤:
客户调用客户端辅助对象stub上的方法
客户端辅助对象stub打包调用信息(变量、方法名),通过网络发送给服务端辅助对象skeleton;
服务端辅助对象skeleton将客户端辅助对象发送来的信息解包,找出真正被调用的方法以及该方法所在对象;
调用真正服务对象上的真正方法,并将结果返回给服务端辅助对象skeleton;
服务端辅助对象将结果打包,发送给客户端辅助对象stub;
客户端辅助对象将返回值解包,返回给调用者。
客户获得返回值。
Java1.2+内置的RMI,底层基于BIO;
1.2.3 区别
1、RMI 只能在 Java 语言中使用,可以把 RMI 看作面向对象的 Java RPC;
2、RPC是一种编程模型。
1.3 微服务架构
微服务架构 = 80%的SOA服务架构思想 + 100%的组件化架构思想 + 80%的领域建模思想。
◆ 1.3.1微服务的特征
通过服务实现组件化
按业务能力来划分服务和开发团队
去中心化(此处中心化指的是去中心化数据管理和去中心化服务治理)
单一职责:微服务中每个服务都对应唯一的业务能力
微:微服务的拆分粒度很小,例如一个用户管理可以作为一个服务。每个服务很小,但是五脏俱全
面向服务:服务对外暴露Rest风格服务接口API,不限制
自治:
团队独立
技术独立:因为面向服务,不关心使用技术/语音,提供Restful接口即可
前后端分离:提供统一的Rest接口,后端不再为PC、移动端单独开发不同的接口
数据库分离:每个服务都使用自己的数据库,很少情况出现多数据源的情况
部署独立:每个服务都是独立的组件、可复用、可替换、低耦合,易维护。
◆ 1.3.2微服务的优点
拆分业务,把整体大项目分割成不同小项目运行在不同进程或者机器上实现数据隔离;
技术栈,每个服务可以由不同的团队或者开发者进行开发,外部调用人员不需要操心具体怎么实现的,只需要类似调用自己方法一样或者接口一样按照服务提供者给出来的参数传递即可;
独立部署,每一个服务独立部署,部署一个服务不会影响整体项目,如果部署失败最多是这个服务的功能缺失,并不影响其他功能的使用;
弹性。
按需部署,针对不同的需求可以给不同的服务自由扩展服务器,根据服务的规模部署满足需求的实例;
局部修改,当一个服务有新需求或者其他修改,不需要修改整体项目只要管好自己的服务就好;
◆ 1.3.3微服务的缺点
运维,微服务由于把业务拆分得细,有可能部署在不同机器上,因此对于 运维人员的管理来说,这部分的成本会加大;
接口调整,微服务之间通过接口进行通信。如果修改某个微服务的API, 可能所有使用了该接口的微服务都需要做调整;
运维,微服务由于把业务拆分得细,有可能部署在不同机器上,因此对于 运维人员的管理来说,这部分的成本会加大;
分布式,由于会把不同服务部署在不同机器上,那么对于这些服务的调用、 容错、网络延迟、分布式事务等等都是一个很大的挑战,当然微服务不一 定全部都是部署在不同服务器上
1.4 SOA架构和微服务架构的差别
微服务不再强调传统SOA架构里面比较重的 ESB 企业服务总线,同时 SOA 的思想进入到单个业务系统内部实现真正的组件化。
Docker 容器技术的出现,为微服务提供了更便利的条件,比如更小的部署单元,每个服务可以通过类似 Node或者 Spring Boot 等技术跑在自己的进程中。
SOA 注重的是系统集成方面,而微服务关注的是完全分离。
微服务机构和SOA架构都是对系统进行拆分;
微服务架构基于SOA架构;
管理方面:SOA着重中央管理(ESB),微服务注重分散管理;

1.5 SpringCloud微服务组件
SpringCoud中文网:https://www.springcloud.cc/;


注册中心:Zookeeper、Eureka、Nacos、Consul。

API服务网关:Nginx、zuul、gateway、Kong、Traefik等
功能:统一入口、路由功能、负载均衡、统一鉴权、协议转换(统一服务)、指标监控、限流熔断、黑白名单、统一日志等。
API网关 | 所属公司 | 开发语言 | 优点 | 缺点 |
Nginx | Nginx inc | C/Lua | 高性能、成熟稳固 | 门槛高,偏运维,可编程弱 |
Zuul1.x/2 | Netflix/Pivotal | Java | 成熟,简略门槛低 | 性能个别,可编程个别 |
Gateway | Pivotal | Java | 异步、Netty、配置灵便 | 晚期产品 |
Kong | Kong inc | OpenResty/Lua | 高性能、可编程API | 门槛较高 |
Traefik | Containous | Golang | 云原生、可编程API/对接各种服务发现 | 生产案例不太多 |
流量网关、业务网关。
负载均衡
硬件负载均衡设备,如F5、Array等。

软件负载均衡,如LVS、Nginx等。
微服务组件:Ribbon。

负载均衡基本算法:
RoundRobinRule轮询。默认;
AvailabilityFilteringRule有效性过滤。过滤掉打开熔断的服务或者是高并发连接数量的服务,再轮询;
WeightedResponseTimeRule权重。给每一个服务一个权重,响应时间越长,权重越小;
RetryRule重试,先按照轮询策略,如果请求服务失败,会在指定时间内(30s)进行重试;
BestAvailableRule。先过滤掉断路器的服务,然后选择一个并发量最小的;
RandomRule。随机获取一个服务。
服务调用
Dubbo、Feign等。
1、协议
Dubbo:
支持多传输协议(Dubbo、Rmi、http、redis等等),可以根据业务场景选择最佳的方式。非常灵活。
默认的Dubbo协议:利用Netty,TCP传输,单一、异步、长连接,适合数据量小、高并发和服务提供者远远少于消费者的场景。
Feign:基于Http传输协议,短连接,不适合高并发的访问。
2、负载均衡
Dubbo:
支持4种算法(随机、轮询、活跃度、Hash一致性),而且算法里面引入权重的概念。
配置的形式不仅支持代码配置,还支持Dubbo控制台灵活动态配置。
负载均衡的算法可以精准到某个服务接口的某个方法。
Feign:
只支持N种策略:轮询、随机、ResponseTime加权。
负载均衡算法是Client级别的。
3、容错策略
Dubbo:支持多种容错策略:failover、failfast、brodecast、forking等,也引入了retry次数、timeout等配置参数。
Feign:利用熔断机制来实现容错的,处理的方式不一样。
4、实际开发的用法上
Dubbo是RPC、二进制流序列化、socket通讯,而Feign是用REST API,http七步走。

熔断器
Hystrix、Sentinel。过载保护。
1.6 SpringCloudAlibaba微服务组件
SpringCloudAlibaba实是对SpringCloud实现拓展组件功能,是Spring Cloud 体系下的一套微服务解决方案的一种实现。

1.6.1 Spring Cloud Alibaba 包含组件

1.7微服务架构模型

1.7.1 洋葱架构
洋葱架构从外向里依次包括:用户界面和基础设施、应用服务、领域服务、领域模型。依赖从外向内。
1.7.2 六边形架构
六边形架构和洋葱架构很相似:使用的是端口适配器模式。把最外层定义成端口,通过适配器来完成,中间是应用程序和领域服务。
1.7.3 DDD分层架构
DDD分层包括:用户接口层、应用层、领域层、基础设施层。

相关文章:

SpringCloud+SpringCloudAlibaba
架构的演进1.1单体架构将所有业务场景的表示层、业务逻辑层和数据访问层放在一个工程中,最终经过编译、打包,部署在一台服务器上。◆ 1.1.1单体架构的优点1)部署简单: 由于是完整的结构体,可以直接部署在一个服务器上即可。2&…...
华为OD机试 - 路灯照明(C 语言解题)【独家】
最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 使用说明本期题目:路灯照明…...

Linux程序替换
Linux程序替换创建子进程的目的?程序替换如何实现程序替换?什么是程序替换?先见一见单进程版本的程序替换程序替换原理多进程版本的程序替换execl函数组简易版Shell创建子进程的目的? 目的:为了帮助父进程完成一些特定的任务&…...
@JsonFormat @DataTimeFormat 时间格式
省流:用JsonFormat即可有时候会看到入参dto里,在时间类型的变量上用DateTimeFormat,代码如下。public class XXXdto{DateTimeFormat(pattern "yyyy-MM-dd hh:mm:ss")private Date startDate; }这是为了入参传日期格式的值。即前端…...

带你玩转modbusTCP通信
modbus TCP Modbus TCP是一种基于TCP/IP协议的Modbus通信协议,它是Modbus协议的一种变体,用于在以太网上进行通信。Modbus TCP协议是一种开放的通信协议,它支持多种编程语言和操作系统,并且可以在不同的硬件和软件平台上进行通信…...
2021牛客OI赛前集训营-提高组(第三场)T2交替
2021牛客OI赛前集训营-提高组(第三场) 题目大意 一个长度为nnn的数组aaa,每秒都会变成一个长度为n−1n-1n−1的新数组a′aa′,其变化规则如下 如果当前数组aaa的大小nnn为偶数,则对于新数组a′aa′的每一个位置i(1≤…...

论文投稿指南——中文核心期刊推荐(金融)
【前言】 🚀 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊 🎄 在期刊论文的分布中,存在一种普遍现象:即对于某一特定的学科或专业来说,少数期刊所含…...
华为OD机试 - 不等式(C 语言解题)【独家】
最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 使用说明本期题目:不等式题…...

90后老板用低代码整顿旅行社,创2000万年收,他是怎么做到的?(真实)
热爱旅游的92年成都小伙猴哥,大学毕业后开了一家旅行社,主要从事川藏、云南定制游服务。 从今年春节开始,国内各地旅游业开始复苏,向旅行社打电话咨询的人越来越多。 旅游的人多是好事,也是一种烦恼,因为…...

Apache Dubbo 存在反序列化漏洞(CVE-2023-23638)
漏洞描述 Apache Dubbo 是一款轻量级 Java RPC 框架 该项目受影响版本存在反序列化漏洞,由于Dubbo在序列化时检查不够全面,当攻击者可访问到dubbo服务时,可通过构造恶意请求绕过检查触发反序列化,执行恶意代码 漏洞名称Apache …...

【YOLO】YOLOv8训练自定义数据集(4种方式)
YOLOv8 出来一段时间了,继承了分类、检测、分割,本文主要实现自定义的数据集,使用 YOLOV8 进行检测模型的训练和使用 YOLOv8 此次将所有的配置参数全部解耦到配置文件 default.yaml,不再类似于 YOLOv5,一部分在配置文件…...

linux重置root用户密码
重置root密码 法一:rd.break 第 1 步:重启系统编辑内核参数 第 2 步:找到 linux 这行,在此行末尾空格后输入rd.break (End键也可直接进入行尾) 成功后显示页面为: 第 3 步:查看。…...

【DBC专题】-10-CAN DBC转换C语言代码Demo_接收Rx报文篇
案例背景(共15页精讲): 该篇博文将告诉您,CAN DBC转换C语言代码Demo,只需传递对应CAN信号关联参数,无需每个信号"左移"和"右移",并举例介绍:在CANoe/Canalyzer中CAPL中的应用ÿ…...
AtCoder292 E 思维
题意: 给定一副n(n≤3000)n(n\leq 3000)n(n≤3000)个顶点,mmm条有向边的图,可以在图中添加有向边,求添加的最少边数,使得这副图满足:如果顶点aaa到顶点bbb有边,顶点bbb到ccc右有边,…...

20230309英语学习
What Is Sleep Talking? We Look at the Science 为什么人睡觉会说梦话?来看看科学咋说 Nearly everyone has a story about people talking in their sleep.Though it tends to be more common in children, it can happen at any age:A 2010 study in the jour…...

CAD转换PDF格式怎么弄?教你几种方法轻松搞定!
CAD是从事与艺术创作相关等行业的打工人们必需的工作软件,可以用来完成建筑设计图、设计图纸等。在日常的工作中,一些伙伴经常需要传输图纸给合作方来完成探讨。但是CAD图纸需要使用专业软件才能打开,这就给文件传送带来了一定的困难。而且传…...
AtCoder 259E LCM
题意: 以唯一分解形式给出nnn个数: aipi,1ei,1pi,2ei,2...pi,tei,ta_{i}p_{i,1}^{e_{i,1}}p_{i,2}^{e_{i,2}}...p_{i,t}^{e_{i,t}} aipi,1ei,1pi,2ei,2...pi,tei,t 现在可以将某个数改为111,求所有改法中,有多少个…...

MQTT协议-取消订阅和取消订阅确认
MQTT协议-取消订阅和取消订阅确认 客户端向服务器取消订阅 取消订阅的前提是客户端已经通过CONNECT报文连接上服务器,并且订阅了一个主题 UNSUBSCRIBE—取消订阅 取消订阅的报文同样是由固定报头可变报头有效载荷组成 固定报头由两个字节组成,第一个…...

90后小伙,用低代码“整顿”旅游业,年入2000万,他是怎么做到的?
热爱旅游的92年成都小伙猴哥,大学毕业后开了一家旅行社,主要从事川藏、云南定制游服务。 从今年春节开始,国内各地旅游业开始复苏,向旅行社打电话咨询的人越来越多。 旅游的人多是好事,也是一种烦恼,因为…...

C51---PWM 脉冲宽度调制
1.PWM:脉冲宽度调制,它是通过一系列脉冲宽度进行调制,等效出所需要的波形(包含形状以及幅值)。对模拟信号电平进行数字编码。也就是说通过调节占空比的变化来调节信号、能量等的变化,占空比就是指在一个周期内,信号处于…...

测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...

地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...

UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...

376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
Vite中定义@软链接
在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...

前端开发者常用网站
Can I use网站:一个查询网页技术兼容性的网站 一个查询网页技术兼容性的网站Can I use:Can I use... Support tables for HTML5, CSS3, etc (查询浏览器对HTML5的支持情况) 权威网站:MDN JavaScript权威网站:JavaScript | MDN...

【免费数据】2005-2019年我国272个地级市的旅游竞争力多指标数据(33个指标)
旅游业是一个城市的重要产业构成。旅游竞争力是一个城市竞争力的重要构成部分。一个城市的旅游竞争力反映了其在旅游市场竞争中的比较优势。 今日我们分享的是2005-2019年我国272个地级市的旅游竞争力多指标数据!该数据集源自2025年4月发表于《地理学报》的论文成果…...

第2课 SiC MOSFET与 Si IGBT 静态特性对比
2.1 输出特性对比 2.2 转移特性对比 2.1 输出特性对比 器件的输出特性描述了当温度和栅源电压(栅射电压)为某一具体数值时,漏极电流(集电极电流...