分布式
文章平均质量分 92
ZNineSun
大道至简,返璞归真
展开
-
第一章:初识DDD
DDD分为战略设计与战术设计。一般来说,领域建模是属于战略层的,而DDD工程落地是属于战术层的,两者是否结合使用,视实际情况而定,比如传统的MVC架构也能使用DDD进行领域建模,DDD架构最好是先做DDD领域建模。在进行具体的实践之前我们必须对一些专有名词进行了解,本章,就带着大家一起去对领域驱动设计有个初步的认知。原创 2024-01-15 11:11:49 · 1410 阅读 · 0 评论 -
SpringBoot接入轻量级分布式日志框架GrayLog
Graylog 日志监控系统Graylog 是一个开源的日志聚合、分析、审计、展现和预警工具。在功能上来说,和 ELK 类似,但又比 ELK 要简单很多。依靠着更加简洁,高效,部署使用简单的优势很快受到许多人的青睐。当然,在扩展性上面确实没有比 ELK 好,但是其有商业版本可以选择。部署 Graylog 最简单的架构就是单机部署,复杂的也是部署集群模式,架构图示如下所示。我们可以看到其中包含了三个组件,分别是 Elasticsearch、MongoDB 和 Graylog。其中。原创 2023-12-18 19:12:53 · 3157 阅读 · 0 评论 -
注解方式优雅的实现Redisson分布式锁
通常我们都会将redisson实例注入到方法类里面,然后调用加锁方法进行加锁,如果其他业务方法也需要加锁执行,将会产生很多重复代码,由此采用AOP切面的方式,只需要通过注解的方式就能将方法进行加锁处理。/*** @date 2023年11月27日String errorDesc() default "系统正常处理,请稍后提交";/*** @date 2023年11月27日String errorDesc() default "系统正常处理,请稍后提交";/**原创 2023-11-27 20:08:05 · 858 阅读 · 0 评论 -
RabbitMQ 保证消息不丢失的几种手段
我们通过分析消息从生产者发送消息到消费者消费消息的全过程,得出了消息可能丢失的几种场景,并给出了相应的解决方案,如果需要保证消息在整条链路中不丢失,那就需要生产端、mq自身与消费端共同去保障。生产端:对生产的消息进行状态标记,开启confirm机制,依据mq的响应来更新消息状态,使用定时任务重新投递超时的消息,多次投递失败进行报警。mq自身:开启持久化,并在落盘后再进行ack。如果是镜像部署模式,需要在同步到多个副本之后再进行ack。原创 2023-04-16 23:07:30 · 4911 阅读 · 0 评论 -
MySQL 数据同步到 Redis 缓存方案
为了减轻数据库的压力,我们一般会通过加入缓存的方式来解决,本着先查询缓存在查询数据库的原则,那么数据库中的数据如何写入缓存则成为首要问题。本文就以redis缓存为例带着大家一起了解一下数据同步的方案。binlog。原创 2023-03-12 18:20:03 · 2232 阅读 · 0 评论 -
分布式追踪与监控:Skywalking
APM(Application Performance Management)应用性能管理,通过各种探针采集并上报数据,收集关键指标,同时搭配数据展示以实现对应用程序性能管理和故障管理的系统化解决方案。目前主要的一些 APM 工具有: Cat、Zipkin、Pinpoint、SkyWalking,这里主要介绍SkyWalking,它是一款优秀的国产 APM 工具,包括了分布式追踪、性能指标分析、应用和服务依赖分析等。Zabbix、Premetheus、open-falcon等监控系统主要关注。原创 2022-11-11 16:12:28 · 774 阅读 · 0 评论 -
Redis中有哪些阻塞点以及如何解决
我们从 Redis 内部及外部因素总结一下有哪些会影响redis性能的因素。我们就以上四种情况简单分析一下。原创 2022-10-28 15:30:45 · 831 阅读 · 0 评论 -
4种Redis集群方案及优缺点对比
在服务开发中,单机都会存在单点故障的问题,及服务部署在一台服务器上,一旦服务器宕机服务就不可用,所以为了让服务高可用,分布式服务就出现了,将同一服务部署到多台机器上,即使其中几台服务器宕机,只要有一台服务器可用服务就可用。redis也是一样,为了解决单机故障引入了主从模式master节点故障后服务,需要人为的手动将slave节点切换成为maser节点后服务才恢复。redis为解决这一问题又引入了哨兵模式。原创 2022-10-24 19:25:00 · 390 阅读 · 0 评论 -
Redis 的大 Key 对持久化有什么影响?
当 AOF 写回策略配置了Always 策略,如果写入是一个大 Key,主线程在执行 fsync() 函数的时候,阻塞的时间会比较久,因为当写入的数据量很大的时候,数据同步到硬盘这个过程是很耗时的。AOF 重写机制和 RDB 快照(bgsave 命令)的过程,都会分别通过 fork() 函数创建一个子进程来处理任务。创建子进程的途中,由于要复制父进程的页表等数据结构,阻塞的时间跟页表的大小有关,页表越大,阻塞的时间也越长;原创 2022-10-10 13:19:58 · 254 阅读 · 0 评论 -
服务网关与流量网关
在了解这个问题 之前,我们需要知道什么是网关,很多地方将网关比如成门, 没什么问题, 但是需要区分网关与网桥的区别。工作在数据链路层,在不同或相同类型的LAN之间存储并转发数据帧,必要时进行链路层上的协议转换。可连接两个或多个网络,在其中传送信息包。是一个大概念,不具体特指一类产品,只要连接两个不同的网络都可以叫网关,网桥一般只转发信息,而网关可能进行包装。原创 2022-10-09 19:11:00 · 2805 阅读 · 0 评论 -
为什么禁止在docker中跑Mysql
容器的定义:容器是为了解决“在切换运行环境时,如何保证软件能够正常运行”这一问题。目前,容器和 Docker 依旧是技术领域最热门的词语,无状态的服务容器化下面我们通过以下几个方面简单聊聊Docker 不适合跑 MySQL 的 N 个原因!原创 2022-09-28 23:06:06 · 1026 阅读 · 0 评论 -
Redis+Guava实现高性能的二级缓存
我们开发中经常用到 Redis 作为缓存,将高频数据放在 Redis 中能够提高业务性能,降低 MySQL 等关系型数据库压力,甚至一些系统使用 Redis 进行数据持久化,Redis 松散的文档结构非常适合业务系统开发,在精确查询,数据统计业务有着很大的优势。同时我们在处理redis的热key时,最常用的解决方案便是通过本地缓存+redis缓存的方式,当然本地缓存的实现有很多,如:caffeine,ehcache,guava等,这样的话就可以将缓存的数据直接读到本地缓存了,本文通过google的。原创 2022-09-28 00:27:43 · 3197 阅读 · 1 评论 -
负载均衡的常见几种算法
我们不管是使用nginx还是使用分布式架构下的路由组件都一定会遇到负载均衡的问题,因为在分布式架构下,一般都不会中提供一个单独的数据服务结点,而是通过若干个服务集群的形式保证系统的高可用。下面我们来谈一谈负载均衡的一些常见的算法。......原创 2022-08-31 18:21:42 · 580 阅读 · 0 评论 -
一文梳理SpringCloud常见知识点
Spring cloud 流应用程序启动器是基于 Spring Boot 的 Spring 集成应用程序,提供与外部系统的集成。Spring cloud Task,一个生命周期短暂的微服务框架,用于快速构建执行有限数据处理的应用程序。微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分为一组小的服务,每个服务运行在其独立的自己的进程中,服务之间相互协调、互相配合,为用户提供最终价值。...原创 2022-08-29 17:55:32 · 386 阅读 · 0 评论 -
Spring Cloud Gateway夺命连环10问,带你彻底了解gateway
Predicate来自于java8的接口。Predicate接受一个输入参数,返回一个布尔值结果。该接口包含多种默认方法来将Predicate组合成其他复杂的逻辑(比如:与,或,非)。可以用于接口请求参数校验、判断新老数据是否有变化需要进行更新操作。Spring Cloud Gateway内置了许多Predict,这些Predict的源码在org.springframework.cloud.gateway.handler.predicate包中,有兴趣可以阅读一下。原创 2022-08-19 23:31:43 · 1464 阅读 · 0 评论 -
既然有 HTTP 协议,为什么还要有 RPC
纯裸 TCP 是能收发数据,但它是个无边界的数据流,上层需要定义消息格式用于定义消息边界。于是就有了各种协议,HTTP 和各类 RPC 协议就是在 TCP 之上定义的应用层协议。RPC 本质上不算是协议,而是一种调用方式,而像 gRPC 和 Thrift 这样的具体实现,才是协议,它们是实现了 RPC 调用的协议。目的是希望程序员能像调用本地方法那样去调用远端的服务方法。同时 RPC 有很多种实现方式,不一定非得基于 TCP 协议。...原创 2022-08-02 22:37:01 · 711 阅读 · 0 评论 -
一文理解分布式开发中的服务治理
我们在分布式开发中经常听到的一个词就是“服务治理”。在理解“服务治理”的概念之前让我们先理解什么是分布式系统,分布式系统之间如何通过RPC(RemoteProcedureCall,远程过程调用)方式通信,以及如何解决RPC框架存在的问题,这样才能真正地理解服务治理的核心思想。.........原创 2022-07-29 15:01:59 · 384 阅读 · 0 评论 -
负载均衡有哪几种实现方式?
负载均衡是集群的一种应用。通过流量的分摊,从而提高并发处理能力,一般我们指web负载均衡,下面我们去探讨一下负载均衡有多少种方式呢?首先我们要明确一点负载均衡是为了解决什么问题?把用户的请求分发到多太服务器,解决高并发的问题。......原创 2022-07-17 15:37:11 · 1417 阅读 · 0 评论 -
一文梳理Dubbo常见面试问题
随着分布式的发展,也演变出一些很出色的分布式架构,如Spring Cloud、Dubbo等;今天带着大家一起来看看Dubbo有哪些常见的问题。在了解一些定义之前,大家可以实操一下,去真实的感受一下Dubbo的开发流程,这些在往下看这些问题时可能感悟更深一些。大家可以先通过这篇文章去跟着简单的实操一下:《springBoot集成dubbo》相关文章推荐:下面我们回到正题Dubbo是一个基于分布式的远程调用框架,通过Dubbo,开发者能像调用本地方法一样调用部署在远端机器上的方法。而RPC是Remote P原创 2022-07-11 23:23:36 · 500 阅读 · 0 评论 -
实现接口的限流各种算法
当然在现在的分布式架构下,我们可以通过服务的快速熔断,降级,隔离,限流等方式来应对单个微服务崩溃而导致整个服务不可用的情况,如果你使用的是SpringCloud,你可以使用Hystrix,如果你使用的是SpringCloud-alibaba,那么你可以使用Sentinel来帮助你实现接口的限流,但是,如果我们不依赖于其它组件,那该如何去实现接口的限流呢?实现接口限流的方法有很多,我大概带着大家一起探讨一下。计数器法是限流算法里最简单也是最容易实现的一种算法。比如我们规定,对于 A 接口来说,我们 1 分钟的原创 2022-07-02 19:38:03 · 4366 阅读 · 3 评论 -
分库分表-ShardingSphere
有人就开始疑惑Sharding-JDBC和Sharding-Sphere有什么区别呢?sharding-jdbc后续发展为Sharding-Sphere,包含sharding-jdbc、Sharding-Proxy、Sharding-Sidecar。概述:ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成。 他们均提供标准化的数据分片、分布式事务和数原创 2022-06-19 01:28:49 · 545 阅读 · 0 评论 -
秒杀场景:如何通过redis减库存
Redis扣库存,主要目的是减少对数据库的访问,之前的减库存,直接访问数据库,读取库存,当高并发请求到来的时候,大量的读取数据有可能会导致数据库的崩溃。大家可以先读一下《秒杀系统设计》对整体的秒杀流程有个了解之后,在来读一下这篇文章。本文只是解决秒杀系统中的一个场景即数据预加载,即把库存数据事先加载到缓存,然后通过缓存来更新库存。使用思路:系统初始化的时候,将商品库存加载到Redis 缓存中保存。收到请求的时候,先在Redis中拿到该商品的库存值,进行库存预减,如果减完之后库存不足,直接返回逻辑原创 2022-05-30 17:32:18 · 2335 阅读 · 7 评论 -
springCloud alibaba:Nacos Config-服务配置
文章目录1.为什么要引入配置中心2.Nacos Config入门2.1 搭建nacos环境2.2 添加依赖2.3 新建bootstrap.yml,后面的配置都要写在这个文件里2.4 在naco服务里添加配置3.Nacos Config深入3.1 配置动态刷新3.2 配置共享同一个微服务的不同环境之间共享配置不同微服务之间的配置共享1.为什么要引入配置中心配置文件相对分散。在一个微服务架构下,配置文件会随着微服务的增多变的越来越多,而且分散在各个微服务中,不好统一配置和管理。配置文件无法区原创 2022-05-25 14:42:54 · 548 阅读 · 0 评论 -
千万级并发架构下,如何进行关系型数据库的分库分表
最近项目上线后由于用户量的剧增,导致数据库的数据量剧增,随之而来的就是海量数据存储的问题,针对最近解决数据的优化过程,谈谈sql语句的优化以及数据库分库分表的方案。建议大家先阅读一下数据库的优化方案《数据库大数据量的优化方案》,里面从1.优化现有数据库:数据库设计之初的考虑sql编写的注意分区、分库、分表、分库2.升级数据库类型3.更换nosql或habas以上三个方面去提供方案和优化的办法和思路本文主要讲一下具体如何去分库分表的方案在研究如何分库分表之前我们先回答几个常见的原创 2022-05-18 16:26:42 · 2155 阅读 · 0 评论 -
解决异步调用fegin报空指针异常的问题
产生错误的代码段: CompletableFuture<Void> addressFuture1 = CompletableFuture.runAsync(() -> { //处理国籍信息 dealNationality(tbProfessionPageInfo.getList()); }, executor);由于dealNationality方法通过fegin调用基础信息服务模块,但是因为加了异步之后产生了空指针异常原创 2022-05-04 20:58:53 · 3812 阅读 · 1 评论 -
使用MQ的时候,怎么确保消息100%不丢失?
1.案例背景我们以京东系统为例,用户在购买商品时,通常会选择用京豆抵扣一部分的金额,在这个过程中,交易服务和京豆服务通过 MQ 消息队列进行通信。在下单时,交易服务发送“扣减账户 X 100 个京豆”的消息给 MQ 消息队列,而京豆服务则在消费端消费这条命令,实现真正的扣减操作。在实现以上操作的过程中,我们会遇到哪些问题呢?2.案例分析首先我们需要先知道我们引入 MQ 消息中间件最直接的目的是:做系统解耦合流量控制,追其根源还是为了解决互联网系统的高可用和高性能问题。系统解耦:用 MQ 消息原创 2022-05-02 23:54:52 · 397 阅读 · 0 评论 -
springCloud alibaba:Sleuth--链路追踪
文章目录1.什么是链路追踪2.集成Sleuth2.1 Sleuth介绍2.2 Sleuth入门3.Zipkin的集成3.1 ZipKin介绍3.2 ZipKin服务端安装3.3 Zipkin客户端集成3.4 ZipKin数据持久化3.4.1 基于mysql的数据持久化操作3.4.1 基于elasticsearch的数据持久化操作1.什么是链路追踪在大型系统的微服务化构建中,一个系统被拆分成了许多模块。这些模块负责不同的功能,组合成系统,最终可以提供丰富的功能。在这种架构中,一次请求往往需要涉及到多个服务原创 2022-04-30 23:19:51 · 988 阅读 · 0 评论 -
springCloud alibaba:Seata--分布式事务
文章目录1.搭建服务2.建表2.1 order服务下的表2.2 stock服务下的表3.实现服务3.1 新建下单服务(OrderServer模块)3.2 添加商品信息获取以及库存消减服务(stockServer模块)4.启动Seata4.1 安装 Seata5.使用Seata实现事务控制5.1 初始化数据表5.2 添加配置5.2.1 添加依赖5.2.2 DataSourceProxyConfig5.2.3 registry.conf5.2.4 修改application.properties文件5.3 在服原创 2022-04-27 23:49:09 · 1294 阅读 · 0 评论 -
docker部署Seata
1.拉取镜像docker pull seataio/seata-server 2.新增配置文件2.1 registry.conf在我们服务器目录上创建文件:registry.confregistry.conf内容如下:registry { # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa type = "nacos" nacos { application = "seata-server" serverAddr .原创 2022-04-21 15:49:17 · 3767 阅读 · 5 评论 -
分布式事务解决方案
文章目录1.分布式事务基础1.1 事务1.2 本地事务1.3 分布式事务2.分布式事务场景2.1 单体系统访问多个数据库2.2 多个微服务访问同一个数据库2.3 多个微服务访问多个数据库3.一致性3.1 强一致性3.2 弱一致性3.3 最终一致性4.分布式事务理论4.1 CPA理论4.1.1 一致性(Consistency)4.1.2 可用性(Availability)4.1.3 分区容忍性(Partition tolerance)4.1.4 为什么只能在A和C之间做取舍?BASE理论4.2.1 BA(Ba原创 2022-04-20 15:50:35 · 3293 阅读 · 0 评论 -
rabbitmq实现幂等性操作
文章目录 1.场景描述1.1 场景11.2 场景22.原理3.实战开发3.1 建表3.2 集成mybatis-plus3.3 集成RabbitMq3.3.1 安装mq3.3.2 springBoot集成mq3.4 具体实现3.4.1 mq配置类3.4.2 生产者3.4.3 消费者 1.场景描述消息中间件是分布式系统常用的组件,无论是异步化、解耦、削峰等都有广泛的应用价值。我们通常会认为,消息中间件是一个可靠的组件——这里所谓的可靠是指,只要我把消息成功投递到了消息中间件,消息就不会丢失,即消息肯定会至少原创 2022-04-15 09:19:42 · 5608 阅读 · 0 评论 -
短链接系统的设计
文章目录1.什么是短链接?2.为什么需要URL短链接3.系统要求和目标3.1 功能要求3.2 非功能要求3.3 用户体验优化4.容量要求和限制4.1 访问量估计4.2 存储估计4.3 带宽估计4.4 内存预估5.系统API设计5.1 创建短链接接口5.2 删除短链接6.数据库设计7.系统基本设计与算法7.1 对原URL进行编码7.2 离线生成密钥7.2.1 并发问题7.2.2 单点故障问题7.2.3 如何完成密钥的查找8.数据分区和复制8.1 基于范围分区8.2 基于hash值分区9.缓存9.1 缓存容量9原创 2022-04-11 23:18:55 · 4018 阅读 · 2 评论 -
美团Leaf实战(分布式Id算法)
文章目录1、 Leaf-segment号段模式1.1 数据库配置1.2 导入并修改leaf项目1.3 Leaf-segment双buffer模式1.4 Leaf segment监控1.5 优缺点2.Leaf-snowflake2.1 Leaf-snowflake的启动过程2.2 优缺点目前主流的分布式ID生成方式,大致都是基于数据库号段模式和雪花算法(snowflake),而美团(Leaf)刚好同时兼具了这两种方式,可以根据不同业务场景灵活切换。1、 Leaf-segment号段模式Leaf-segm原创 2022-04-07 21:26:32 · 11677 阅读 · 3 评论 -
浅谈悲观锁、乐观锁
文章目录1.为什么会产生悲观锁、乐观锁?2.脏读、幻读、不可重复读2.1 脏读2.2 幻读2.3 不可重复读2.4 数据库隔离级别读未提交(Read Uncommited)读已提交(Read Committed)可重复读(Repeatable Read)可串行化(Serializable)3.悲观锁(Pessimistic Lock)3.1 悲观锁的实现4.乐观锁(Optimistic Locking)4.1 乐观锁的实现5.具体实现5.1 悲观锁的实现5.2 乐观锁的实现6.理解 CAS 底层7.CAS原创 2022-03-17 22:09:19 · 683 阅读 · 0 评论 -
Reids解决海量重复提交问题
在目前高并发的生产环境下,一个对外暴露的接口往往会面临很多次请求,此时我们需要对这些请求进行过滤,来保证幂等性的问题。1.什么叫幂等性任意多次执行所产生的影响均与一次执行的影响相同所以按照这个幂等性的定义,我们通俗来讲就是对数据库的影响只能是一次性的,不能重复处理。2.如何保证幂等性1.数据库建立唯一性索引,可以保证最终插入数据库的只有一条数据2.token机制,每次接口请求前先获取一个token,然后再下次请求的时候在请求的header体中加上这个token,后台进行验证,如果验证通过删原创 2022-03-16 11:36:17 · 3093 阅读 · 5 评论 -
分布式服务架构的设计方案上—分布式基础理论知识
文章目录1.什么是分布式架构2.SOA架构和微服务架构2.1 SOA架构2.2 MSA 微服务架构微服务特征2.3 SOA 架构和微服务架构的区别3.节点与网络3.1 节点3.2 网络4.分布式架构的演进4.1 初始阶段4.2 应用服务和数据服务分离4.3 使用缓存改善性能缓存的业务场景4.4 应用服务集群4.5 数据库读写分离4.6 反向代理和CDN加锁4.7 分布式文件系统和分布式数据库4.8 通过DNS轮询实现机房间的负载均衡4.9 引入noSQL和搜索引擎nosql、sql搜索引擎4.10 业务拆分原创 2022-03-13 22:07:30 · 5231 阅读 · 0 评论 -
分布式服务架构的设计方案下—通过业务场景浅谈分布式设计思路
文章目录分布式业务场景分析分布式系统提高承载量的基本手段并发模型(多线程、异步)缓存/缓冲硬件故障资源利用率优化软件服务内容更新数据统计目录服务消息队列服务(ActiveMQ、ZeroMQ、Jgroups,RocketMQ、RabbitMQ)事务系统分布式锁自动部署工具(Docker)日志服务(log4j)异步编程工具:协程、Futrue、Lamda云服务模型:IaaS/PaaS/SaaS文章篇幅较长,可以分多次阅读分布式业务场景分析当每天有1000万个用户访问你的网站时,无论你使用什么样的服务器硬件原创 2022-03-13 22:01:09 · 4142 阅读 · 0 评论 -
分布式缓存上—浅谈缓存的理解
文章目录1.概述1.1 概念1.2 作用1.3 原理2.缓存的分类2.1 CDN缓存应用场景优点2.2 反向代理缓存应用场景2.3 本地应用缓存应用场景缓存介质实现1.通过编程实现2.Ehcahe缓存数据过期策略3.分布式缓存3.1 Memcached基本介绍特点基本架构缓存数据过期策略数据淘汰内部实现分布式集群实现数据存储步骤:分布式算法3.2 Redis基本介绍数据模型数据淘汰策略数据淘汰内部实现持久化方式底层实现部分解析Redis缓存设计原则3.3 Redis与Memcached比较PS:在了解分布原创 2022-03-13 21:54:55 · 1813 阅读 · 0 评论 -
分布式缓存下—缓存架构设计常见问题以及解决方案
1.缓存架构设计2.缓存常见的文图数据一致性缓存穿透缓存雪崩缓存高可用缓存热点下面逐一介绍分析这些问题以及相应的解决方案。2.1 数据一致性因为缓存属于持久化数据的一个副本,因此不可避免的会出现数据不一致问题。导致脏读或读不到数据的情况。数据不一致,一般是因为网络不稳定或节点故障导致场景以及解决方案场景1.先写缓存,在写数据库描述:缓存写成功,但写数据库失败或相应延迟,则下次读取(并发读)缓存时,就会出现脏读解决:这种写缓存的方式本身就是错误的,需要改为先写持久化介质,在原创 2022-03-13 21:49:56 · 1201 阅读 · 0 评论