架构
未读
分布式事务---saga模式
补偿操作的幂等性是确保分布式系统处理补偿操作的一致性和可靠性的关键原则之一。在分布式系统中,由于网络延迟、故障转移或系统故障恢复等情况,可能会出现操作重复执行的情况。为了处理这种情况并确保系统的稳定性和数据一致性,补偿操作需要设计成幂等的。
一、幂等性的定义和重要性
幂等性指的是一个操作无论执行多少次,其效果都是相同的。在分布式系统中,如果补偿操作不是幂等的,那么在网络抖动或超时重试的情况下,可能会导致同一个补偿操作被多次执行,从而引发一系列的问题和不确定性。幂等性确保了补偿操作的可靠性和一致性,即使在面对重复执行的情况下也能保持系统的正确性。
二、补偿操作幂等性的实现方式
1. 利用唯一事务ID实现幂等性:每个补偿操作分配一个唯一的事务ID,并在执行操作前检查该ID是否已经处理过。如果已经处理过,则不再执行操作;否则执行操作并记录处理状态。这种方式可以通过数据库或分布式缓存来实现。
2. 基于状态的操作:操作只会在满足特定状态时执行,执行完成后更新状态。通过状态检查来阻止操作重复执行。这种方法需要合理设计和管理系统状态。
3. 写入幂等性操作:利用数据库或缓存的自然幂等性操作来实现。例如,使用数据库的INSERT IGNORE或ON DUPLICATE KEY UPDATE语句,以及在Redis中使用SETNX指令。
4. 消息去重:如果补偿操作依赖于消息驱动,可以在消费消息前检查消息的唯一ID是否已存在,以避免重复消费和处理。
三、总结
补偿操作的幂等性是确保分布式系统在面对重复执行的情况下仍然保持正确性和一致性的关键。通过利用唯一事务ID、基于状态的操作、写入幂等性操作或消息去重等方式,可以实现补偿操作的幂等性,从而确保系统的稳定性和可靠性。在设计和实现分布式系统时,应充分考虑并遵循这一原则,以应对各种挑战和问题。
未分类
未读
跳表 SkipList
摘要:
跳表是一种有序数据结构,通过多层索引链表加速查找过程。底层链表包含所有元素并保证有序,而高层链表包含较少的随机选择元素。构建跳表时,每隔一定数量元素会选取一个元素构建上层链表。查找时,从高层开始逐步缩小范围至底层。插入和删除操作的时间复杂度也为O(log N)。跳表适用于需要频繁查询和动态更新数据的场景,如Redis的Sorted Set。
rabbitMQ+应用架构设计
这段内容主要介绍了RabbitMQ的基本概念、使用原因、分类以及具体的使用场景和配置。RabbitMQ是一个开源的消息队列软件,主要用于应用程序的解耦、流量削峰、异步处理、广播和最终一致性。使用RabbitMQ可以提高系统的可用性、可伸缩性和可靠性。
文中还提到了RabbitMQ的几种类型,包括ActiveMQ、Kafka、RocketMQ和RabbitMQ,并分别介绍了它们的优缺点。此外,文中还详细解释了RabbitMQ的四大核心概念,即生产者、交换机、队列和消费者,以及RabbitMQ中的交换机和交换机类型,如Direct、Topic、Fanout和Headers。
最后,文中还提到了RabbitMQ的消息分发策略,如轮询分发、不公平分发和限流,以及消息确认和持久化机制。消息确认机制用于确保消息可靠地投递,而持久化机制则用于保障队列和消息在RabbitMQ服务重启或崩溃后依然可以恢复。
对于RabbitMQ客户端,文中提供了一个RabbitClient类,它提供了发送消息和异常处理的方法,并使用了Spring框架的Retryable和Recover注解来实现消息的重试和恢复机制。此外,还介绍了一些RabbitMQ的配置类,如RabbitMqConfiguration和RabbitMqResender,用于配置RabbitMQ的行为和处理失败的消息。
文中还提到了幂等性保障,这是确保消息队列系统中不会因为消息重复消费而导致数据不一致的关键机制。最后,文中还提到了RabbitMQ的具体配置和YAML配置示例,包括生产者端和消费者端的配置。
整体而言,这段内容全面介绍了RabbitMQ的基本概念、使用原因、分类、使用场景、配置和客户端实现,以及RabbitMQ中的消息分发、消息确认和持久化机制,并强调了幂等性保障的重要性。
XXL-JOB+架构设计
### 环境配置与XXL-JOB部署摘要
#### 环境配置
1. 拉取镜像:从Docker Hub拉取`xxl-job-admin`镜像。
2. 创建目录和配置文件:创建`/data/soft/xxl-job/applogs`目录用于存放应用日志,并在`/data/soft/xxl-job/application.properties`中配置相关属性。这种方式是Spring Boot外部加载配置的一种。
#### Web服务器配置
设置服务器端口为8080,并设置上下文路径为`/xxl-job-admin`。
#### actuator配置
配置健康检查等相关的actuator配置。
#### resources配置
配置Spring MVC的静态资源路径等。
#### freemarker配置
配置Freemarker的模板加载路径、字符集等。
#### mybatis配置
配置MyBatis的mapper文件位置。
#### xxl-job及数据源配置
配置数据源URL、用户名、密码、驱动类名等,以及数据源池相关参数。还包括邮件配置和AccessToken。
#### 创建数据库
创建`xxl_job_2.3.1`数据库,并导入`xxl_job_2.3.1.sql`脚本。
#### 启动XXL-JOB admin界面
使用Docker运行容器,并映射到宿主机端口8088,启动成功后通过指定URL及账号/密码登录。
#### 执行器配置
1. 添加执行器依赖:在微服务项目中引入`xxl-job-core`依赖。
2. 配置XXL-JOB:在微服务中配置执行器相关属性,如地址、App名称、端口等。这些信息需要在nacos中配置shared-xxl-job.yaml,并在jzo2o-foundations中加载此配置文件。启动微服务后,执行器会自动注册到调度中心。
#### 定义缓存更新任务
编写任务方法,使用`@XxlJob`注解标识,并通过调度中心配置任务。这里以更新开通区域列表的缓存为例,定时清理缓存并查询开通区域列表进行缓存。任务配置完成后,在调度中心启动任务。测试时,通过启用或禁用区域观察Redis中开通区域列表缓存是否更新。
状态机+应用架构设计
摘要:
该文描述了一个状态机系统,涉及状态管理、状态变更和快照记录等核心功能。系统通过定义状态身份证(StatusDefine)来标识不同状态及其描述和编号。状态变更通过指令单(StatusChangeEvent)实现,规定了从哪个状态变到哪个状态,确保状态变更的合理性。状态变化处理器(StatusChangeHandler)负责处理状态变更时的业务逻辑。此外,系统还提供了快照功能(StateMachineSnapshot),用于记录状态机在某个时刻的状态,方便回溯或调试。订单快照(OrderSnapshot)作为具体实现,包含了订单号、状态编号和订单金额等信息。整体而言,该系统是一个用于管理和记录状态变更的框架。
Canal+Rabbit+ES实战
本文档描述了配置Canal+MQ数据同步环境和Elasticsearch数据同步环境的详细步骤。首先,介绍了如何配置MySQL主从同步,以支持Canal的数据同步需求。接着,描述了如何安装Canal并配置其与MQ的连接,确保Canal可以将数据变化同步到MQ中。然后,详细说明了如何安装和配置Elasticsearch,以及如何使用Kibana进行索引管理。最后,文档还提供了关于数据不同步、MQ同步消息无法消费等常见问题的解决方案。
摘要总结:
1. 配置MySQL主从同步,为Canal数据同步提供基础。
2. 安装Canal并配置其与MQ的连接,实现数据变化同步到MQ。
3. 安装和配置Elasticsearch,创建必要的索引结构。
4. 提供了关于数据不同步和MQ同步消息无法消费等常见问题的解决方案。
注意:在实际操作过程中,需要根据具体的数据库版本、MQ类型和Elasticsearch版本进行相应的调整。同时,应确保所有组件之间的兼容性和版本一致性,以确保数据同步的准确性和稳定性。
Elasticsearch+应用架构设计
摘要:
在Elasticsearch中,索引类似于数据库中的表,用于存储文档数据。文档是由多个字段组成的JSON格式对象,每个字段存储一个数据项的具体值。映射定义了文档的结构,类似于数据库表的定义。正向索引和倒排索引是两种不同的索引方式,正向索引根据文档ID索引,倒排索引则根据词条找到包含词条的文档ID。
在Elasticsearch中,可以使用多种查询方式,如全文搜索、多字段查询、模糊查询、通配符查询、短语匹配查询等。同时,Elasticsearch支持动态模板和索引模板,允许为特定字段定义映射规则,并为一组索引定义共享设置和映射。
文档操作包括创建、查询、删除和修改。创建文档使用POST请求,查询文档使用GET请求,删除文档使用DELETE请求,修改文档可以使用PUT或POST请求。
在架构设计中,可以通过配置Elasticsearch客户端和ElasticSearchTemplate来简化与Elasticsearch的交互。对于文档操作,可以通过实现DocumentOperations接口并提供具体的实现方法,如插入、批量插入、更新、删除、查询和批量查询等。
在处理地理位置数据时,可以使用地理距离查询和地理距离排序,以及使用地理距离衰减函数来调整搜索结果的相关性得分。
最后,对于某些复杂的查询或需要自定义评分规则的场景,可以使用函数评分查询,通过定义一系列函数来调整查询结果的相关性得分。
架构
未读
浅谈SaaS 模式及企业应用解析
摘要:
SaaS模式是软件交付的一种新模式,区别于传统的购买和交付方式。SaaS提供商提供软件服务,用户按需租用。CRM、OA和ERP是企业管理中常用的三种软件工具,分别用于客户管理、内部管理和物资管理。CRM主要管理客户信息,OA用于办公室自动化,ERP涵盖企业资源计划如生产制造等。HR软件用于人事管理,而进销存系统则管理企业的采购、库存和销售过程。