分布式事务
本地事务与分布式事务本地事务本地事务,也就是传统的单机事务。在传统数据库事务中,必须要满足四个原则:
分布式事务分布式事务,就是指不是在单个服务或单个数据库架构下,产生的事务,例如:
跨数据源的分布式事务
跨服务的分布式事务
综合情况
在数据库水平拆分、服务垂直拆分之后,一个业务操作通常要跨多个数据库、服务才能完成。例如电商行业中比较常见的下单付款案例,包括下面几个行为:
创建新订单
扣减商品库存
从用户账户余额扣除金额
完成上面的操作需要访问三个不同的微服务和三个不同的数据库。
订单的创建、库存的扣减、账户扣款在每一个服务和数据库内是一个本地事务,可以保证ACID原则。
但是当我们把三件事情看做一个”业务”,要满足保证“业务”的原子性,要么所有操作全部成功,要么全部失败,不允许出现部分成功部分失败的现象,这就是分布式系统下的事务了。
此时ACID难以满足,这是分布式事务要解决的问题。
理论基础解决分布式事务问题,需要一些分布式系统的基础知识作为理论指导。
CAP定理1998年,加州大学的计算机科学家 Eric Brewer 提出,分布式系统有三个指标。
Consi ...
消息队列
五一假期回来,我尝试使用RabbitMQ实现数据库和ES索引库的消息同步,结果发现RabbitMQ的知识忘了不少,吓得我赶紧翻阅了一下资料简单回忆了一下,为了以防未来再犯同样的问题,于是便有了这篇文章,希望下次再忘记的时候能迅速回忆起来!!
区分同步通讯和异步通讯同步通讯:比如打电话,需要实时响应优点:
时效性较强,可以立即得到结果
缺点:
耦合度高
性能和吞吐能力下降
有额外的资源消耗
有级联失败问题
异步通讯:发微信,不需要马上回复优点:
吞吐量提升:无需等待订阅者处理完成,响应更快速
故障隔离:服务没有直接调用,不存在级联失败问题
调用间没有阻塞,不会造成无效的资源占用
耦合度极低,每个服务都可以灵活插拔,可替换
流量削峰:不管发布事件的流量波动多大,都由Broker接收,订阅者可以按照自己的速度去处理事件
缺点:
架构复杂了,业务没有明显的流程线,不好管理
需要依赖于Broker的可靠、安全、性能
本文介绍的RabbitMQ也是异步通讯的一种噢
了解并使用RabbitMQ只需一张图就能懂:
ps:
publisher:生产者
consumer: ...
关于开发基础框架的选型
基础框架简介 基础框架可以理解为建立一个项目所需的基础框架,这个基础框架为凝聚了之前开发项目的通用、共性的方法、工具、技术等组成的代码包。建立基础框架之后,后面开发的效率将大大提高。
常见的基础框架有力软、JEECGBOOT、芋道、若依,其中力软是付费产品,jeecgboot暂时还没了解过,而yudao和ruoyi都是如今比较热门的开源框架。
ruoyi-cloud、yudao-cloud、慧图脚手架框架的对比(各自优缺点)RuoYi-Cloud项目地址:https://gitee.com/y_project/RuoYi-Cloud
项目特色:基于SpringBoot的权限管理系统 易读易懂、界面简洁美观。 核心技术采用Spring、MyBatis、Shiro没有任何其它重度依赖。直接运行即可用
ruoyi-cloud技术架构图
若依框架优势1、功能简洁包含项目需要的最小框架:定时任务、系统参数、字典、通知公告、代码生成,启动项目速度快
2、具备完整的生态,查看其他语言代码方便
若依框架槽点1.代码质量不高,虽然是Java项目,Ruoyi的代码带有明显的C#风格,这一点会让不少 ...
Mysql索引调研
什么是索引索引是为了加速对表中数据行的检索而创建的一种分散的存储结构。索引是针对表而建立的,它是由数据页面以外的索引页面组成的,每个索引页面中的行都会含有逻辑指针,以便加速检索物理数据
索引的优点(作用)
能快速获取数据
能保证数据记录的唯一性
实现表与表之间的参照完整性
在使用ORDER by、group by子句进行数据检索时,利用索引可以减少排序和分组的时间。
索引的缺点1.建立索引会占用磁盘空间的索引文件。一般情况这个问题不太严重,但如果你在一个大表上创建了多种组合索引,索引文件会得膨胀很快。
2.当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度,因为更新表时,MySQL不仅要保存数据,还要保存一索引文件。 MySQL索引是在存储引擎中实现的,而不是在服务器层中实现的。所以,每种存储引擎的索引都不一定完全相同,并不是所有的存储引擎都支持所有的索引类型。
MySQL支持的存储引擎
MyISAM
InnoDB
MERGE
MEMORY
Archive
各存储引擎对比
功能
MyISAM
MEMORY
InnoDB
存 ...
gateway
gateway简介Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等响应式编程和事件流技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。
网关(Gateway)又称网间连接器、协议转换器。网关在传输层上以实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关的结构也和路由器类似,不同的是互连层。网关既可以用于广域网互连,也可以用于局域网互连。 网关是一种充当转换重任的计算机系统或设备。在使用不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器。与网桥只是简单地传达信息不同,网关对收到的信息要重新打包,以适应目的系统的需求。同时,网关也可以提供过滤和安全功能。大多数网关运行在OSI 7层协议的顶层–应用层。
为什么需要网关gateway的作用类似于一道密码门,它可以自定义规则拦截服务的访问,是微服务的统一入口
网关的核心功能特性:
请求路由
权限控制
限流
...
Feign
Feign介绍Feign是一个声明式的Http客户端,官方地址:https://github.com/OpenFeign/feign
Feign makes writting java http clients easier!
他将需要调用的服务方法定义成抽象方法保存在本地就能够了,不需要构建Http请求了,直接调用接口就好了。
***Feign的实现原理*****通过基于****面向接口的动态代理******方式生成实现类,将请求调用委托到动态代理的实现类。
Feign的定义和使用引入依赖1234<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId></dependency>
启动类添加@EnableFeignClients注解开启Feign的功能,注意是在消费者(即需要远程调用的客户端)的启动类中添加。编写Feign客户端,主要 ...
Nacos注册中心
Nacus安装下载请前往Nacus的github主页进行下载:https://github.com/alibaba/nacos/releases
Windows启动Nacos命令:
1startup.cmd -m standalone
启动成功后控制台会显示Nacos访问地址,端口一般默认是8814,直接复制粘贴在浏览器打开就好
工程添加Nacos依赖父工程:
1234567<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.2.5.RELEASE</version> <type>pom</type> <scope>import</scope></dependency>
客户端:
12345<!-- nacos客户端依赖 ...
Eureka注册中心
Eureka的作用消费者该如何获取服务提供者具体信息?
服务提供者启动时向eureka注册自己的信息,eureka保存这些信息
消费者根据服务名称向eureka拉取提供者信息
如果有多个服务提供者,消费者该如何选择?
服务消费者利用负载均衡算法,从服务列表中挑选一个
消费者如何感知服务提供者健康状态?
服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态
Eureka会更新记录服务列表信息,心跳不正常会被剔除
消费者就可以拉取到最新的信息
Eureka架构EurekaServer:服务端,注册中心
记录服务信息
心跳监控
EurekaClient:客户端,包括Provider和Consumer
Provider:服务提供者
注册自己的信息到EruekaServer
每隔30s向EurekaServer发送自己的心跳
Consumer:服务消费者
根据服务名称从EureKaServer拉取服务列表
基于服务列表做负载均衡,选中一个微服务后发起远程调用
Erueka构建及使用步骤1.搭建EurekaServer
引入eur ...