文章目录分布式限流具体代码导入依赖属性配置Limit 注解LimitType枚举类RedisTemplateLimit 拦截器(AOP)控制层主函数统一的前端返回格式自定义异常统一的异常处理方式测试 分布式限流单机版中我们了解到 AtomicInteger、RateLimiter、Semaphore 这几种解决方案,但它们也仅仅是单机的解决手段,在集群环境下就透心凉了,后面又讲述了 Nginx
转载
2024-10-08 17:03:23
10阅读
一、zookeeper使用
1、进入linux系统使用docker安装zookeeper
docker pull zookeeper
2、运行zookeepe查看zookeeper的docker镜像的id
docker images
官方给出的docker启动命令为:$ docker run --name some-zookeeper --restart always -d zookeeper此镜
转载
2021-07-08 10:13:06
488阅读
SpringBoot 分布式系统简单了解SpringBoot 框架的使用基本是了解的差不多了,马上就进入微服务的阶段了,在此之前必须要了解什么是分布式系统。1. 分布式系统简介分布式系统(distributed system)是建立在网络之上的软件系统。在《分布式系统原理与范型》书中有分布式系统的定义:“分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统”。分布式系统是由一组
转载
2024-04-16 08:39:59
30阅读
一、SpringCloud1、SpringCloud是什么Spring Cloud是一系列框架的有序集合,这些框架为我们提供了分布式系统构建工具。2、SpringCloud包含那些项目项目项目名称服务注册于发现Alibaba Nacos、Netflix Eureka、Apache Zookper分布式配置中心Alibaba Nacos、Spring Cloud Config网关Spring Clo
转载
2024-08-13 18:48:35
36阅读
分布式id解决方案一、从mysql本身出发专门用一张表记录最后一次的idselect last_insert_id()每个mysql的库中自增的值不一样A库 从0开始每次增加2
B库 从1开始每次增加2同2相似A库 从1开始每次增加1
B库 从100万开始每次增加1二、通过生成的UUID存值String s = UUID.randomUUID().toString();数字生成为32位,浪费资源;
转载
2024-01-03 15:12:46
88阅读
文章目录前言一、背景二、ShedLock是什么?三、落地实现1.1 引入依赖包1.2 配置数据库连接信息1.3 创建Mysql数据表1.4 配置LockProvider1.5 创建定时Job四、结果分析 前言一、背景在项目服务是集群部署的时候,代码在每个人都会有定时任务,但是如果让每个节点都去跑定时任务是不大合适的。SpringBoot 中的 ShedLock 可以很好解决这个问题,下面我将为大
转载
2024-04-15 10:55:43
59阅读
文章目录一、分布式应用二、Zookeeper和DubboZooKeeperDubbo例子服务端pom.xmlapplication.propertiesservice服务端启动类注意:一定要配置@EnableDubbo客户端pom.xmlapplication.properties客户端启动类service测试类在客户端配置服务端的接口用于远程引用运行结果 一、分布式应用在分布式系统中,国内常用
转载
2024-04-03 10:07:46
47阅读
目录 1. 分布式应用2. Zookeeper 和 Dubbo2.1 安装Zookeeper作为注册中心2.2 编写服务提供者2.3 编写服务消费者 1. 分布式应用在分布式系统中,国内常用zookeeper+dubbo组合,而Spring Boot推荐使用全栈的Spring,Spring Boot+Spring Cloud。分布式系统: ·单一应用架构当网站流量很小
转载
2024-04-02 14:30:37
36阅读
一看到标题就知道,这一篇博客又是总结分布式工作环境中集群产生的问题,个人觉得分布式没有那么难以理解,可能也是自己见识比较浅,对我来说,分布式只是一种后端业务演进时的一种工作方式,而真正实现这种工作方式的是集群关于集群是什么以及如何搭建集群环境,可以参考之前我的博文,这一片博客将着重介绍Redis分布式锁,这是一个基于SpringBoot构建的高并发电商后端服务项目,并且其中框架包括的Spring
转载
2024-02-26 20:18:13
46阅读
1.分布式存储算法1.1 哈希取余算法2亿条记录即2亿个k,v,单机无法满足数据存储,需要集群。假设集群由3台机器组成,用户每次读写操作都是根据公式(hash(key)%n 台机器数),通过计算出哈希取余值,来决定数据存储到哪个节点上,或者到那个节点取数据。优点:简单并且有效,只需要提前预估数据量,规划数据节点数量,比如3、8、10台机器。使用哈希取余算法可以让固定的有i部分请求落到同一台服务器上
转载
2023-12-15 21:43:40
34阅读
分布式架构Spring Boot的实现与应用
在当今快速发展的互联网环境中,分布式架构成为了构建高可用、高性能应用的关键。然而,面对复杂的系统构建与管理,Spring Boot 作为一款高效的开发框架,提供了便捷的解决方案。以下是关于如何实施分布式架构Spring Boot的全面复盘记录。
### 背景描述
分布式架构的设计旨在高效利用资源,增加系统的伸缩性与可靠性。在构建大型应用时,如何有效
一、介绍Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。一个分布式事务链路需要多个系统参与, 不同的系统负责不同的角色. 一般来说, 分布式事务的参与者需要包含以下 3 个角色.TC (Transaction Coordinator) - 事务协调者维护
转载
2024-09-26 19:40:26
226阅读
本地事务是指事务的参与者、支持事
原创
2023-06-24 09:49:05
246阅读
Seata简介在传统的单体项目中,我们使用@Transactional注解就能实现基本的ACID事务了。 但是前提是: 1) 数据库支持事务(如:MySQL的innoDB引擎) 2) 所有业务都在同一个数据库中执行随着微服务架构的引入,需要对数据库进行分库分表,每个服务拥有自己的数据库,这样传统的事务就不起作用了,那么我们如何保证多个服务中数据的一致性呢? 这样就出现了分布式事务,而Seata就是
Spring Cloud 入门教程(四): 分布式环境下自动发现配置服务 前一章, 我们的Hello world应用服务,通过配置服务器Config Server获取到了我们配置的hello信息“hello world”. 但自己的配置文件中必须配置config server的URL(http://localhost:8888), 如果把config server搬到另外一个独立IP上, 那么作
由于Spark在使用JDBC方式读取关系型模型数据的时候,默认采用单线程任务执行。在数据量较大时,经常发现内存溢出、性能低的问题。在扩大内存读取后进行重分区,又会消耗时间,浪费资源。 因此,开发并发读取关系型模型数据,可以有效提高任务处理并发度,减少单个任务的数据处理量,进而提升处理效率。分布式并发处理优化(一)总体思路 关系型模型并发读取首先要选取分区字段,按照字段类型和分区个数确定并发分区间隔
seata 简介Seata 是 阿里巴巴2019年开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。在 Seata 开源之前,Seata 对应的内部版本在阿里内部一直扮演着分布式一致性中间件的角色,帮助阿里度过历年的双11,对各业务进行了有力的支撑。经过多年沉淀与积累,2019.1 Seata 正式宣布对外开源 。目前 Seata 1.0 已经 GA。微服务中的分
高并发编程、分布式框架、Spring等常用框架可以说是现在Java后端求职的必备技能。每一个技术方向的背后都包含了众多技术细节,以开发一个分布式系统来说,需要分布式存储/数据库/缓存、中间件、RPC、消息系统、分布式一致性处理等多种知识。面对如此多的技术细节,怎么样才能说自己的技术已经过关了呢?01基础技术体系知识技能体系化是判断技术是否过关的第一步。知识体系化包含两层含义:1、 能够知道技术图谱
作者 | 小涛虽然现在微服务越来越流行,我们的系统随之也拆分出来好多的模块功能。这样做的目的其实就是为了弥补单体架构中存在的不足。随着微服务的拆分,肯定设计到分库分表,但这之中肯定设计到分布式事务。最典型的例子就是银行转账,比如银行A给银行B转账500 块钱,流程肯定是银行A-500,银行B+500,在这个过程要么都成功,要么都成仁。首先银行A和银行B的数肯定是在不同的数据库,如果在转账
单点定时任务JDK 原生自从 JDK1.5 之后,提供了 ScheduledExecutorService 代替 TimerTask 来执行定时任务,提供了不错的可靠性。public class SomeScheduledExecutorService {
public static void main(String[] args) {
// 创建任务队列,共 10 个线程
转载
2024-10-08 18:58:00
35阅读