分布式
文章平均质量分 95
一只经常emo的程序员
非淡泊无以明志,非宁静无以致远
展开
-
分布式之RabbitMQ
百度百科:RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。首先RabbitMQ基于AMQP协议开发,所以很多基于AMQP协议的功能RabbitMQ都是支持的,比如SpringCloud中的消息总线bus。原创 2024-04-24 07:00:00 · 813 阅读 · 1 评论 -
Spring框架之WebFlux
根据前面的代码,第一个发出的事件必须是与订阅相关的事件,紧跟其后的事件必须是 foo 和bar 字符串。最后, StepVerifier#expectCompletion 定义终止信号的存在。在此例中,必须是 Subscriber#onComplete 的调用,或者成功完成给定的 Flux。要执行验证,或者说对创建流进行订阅,就必须调用 .verify() 方法。verify() 是一个阻塞调用,它阻塞执行,直到流发出所有预期的事件。原创 2024-04-02 07:00:00 · 775 阅读 · 0 评论 -
分布式之分布式事务详解
业务场景:用户A转账100元给用户B,这个业务比较简单,具体的步骤:1、用户A的账户先扣除100元2、再把用户B的账户加100元如果在同一个数据库中进行,事务可以保证这两步操作,要么同时成功,要么同时不成功。这样就保证了转账的数据一致性。但是在微服务架构中,因为各个服务都是独立的模块,都是远程调用,都没法在同一个事务中,都会遇到分布式事务问题。原创 2024-04-01 07:00:00 · 1831 阅读 · 2 评论 -
分布式之缓存详解
时效式清理+数目阈值:防止:短期内,密集查询,导致缓存空间的急剧增大。–自己的完整思路。lru+软引用:保证热数据,最大限度的提高 缓存命中率,p。不建议:仅仅使用 软引用。因为我们失去了对它的控制。目的:提高缓存命中率,节省空间,=》提升性能。在系统中,每增加一个环节,就多一份风险。用是不得已。遇到风险,分析原因,解决之。原因:更新机制,清理机制。原创 2024-03-25 21:38:53 · 1422 阅读 · 0 评论 -
数据库之MongoDB应用与开发
l选择对应版本修改环境变量PATH创建mongodb存储目录启动命令:客户端连接测试下:MongoDB默认会创建admin、config、local、test数据库。test库是一个默认的数据库,除了test库外admin、config、local库为系统库。admin库主要存储MongoDB的用户、角色等信息,config库主要存储分片集群基础信息,local库主要存储副本集的元数据。原创 2024-03-24 07:00:00 · 960 阅读 · 2 评论 -
分布式之网关介绍
CompletableFuture是Java编程语言中的一个类,它在Java 8中引入作为CompletableFuture API的一部分。它属于java.util.concurrent包,并提供了一种执行异步编程和处理异步计算结果的方式。CompletableFuture代表了一个可能在未来完成的计算,并允许你将多个操作链接在一起形成一个流水线。每个操作都是异步执行的,这意味着它可以与其他操作或任务并发运行。类,它提供了更强大和灵活的功能,包括更好的异常处理、组合多个任务的结果以及异步任务的回调等。原创 2024-03-23 10:03:44 · 1102 阅读 · 2 评论 -
分布式锁简单实现
想要实现分布式锁,必须要求 Redis 有「互斥」的能力,我们可以使用 SETNX 命令,这个命令表示SET if Not Exists,即如果 key 不存在,才会设置它的值,否则什么也不做。上面的命令执行时,每个客户端在释放锁时,都是「无脑」操作,并没有检查这把锁是否还「归自己持有」,所以就会发生释放别人锁的风险,这样的解锁流程,很不「严谨」!如何解决这个问题呢?此时,加锁成功的客户端,就可以去操作「共享资源」,例如,修改 MySQL 的某一行数据,或者调用一个 API 请求。怎么解决这个问题呢?原创 2024-03-22 07:00:00 · 2754 阅读 · 0 评论 -
分布式之Skywalking
Skywalking是由国内开源爱好者吴晟开源并提交到Apache孵化器的产品,它同时吸收了Zipkin /Pinpoint /CAT 的设计思路。特点是:支持多种插件,UI功能较强,支持非侵入式埋点。目前使用厂商最多,版本更新较快。数据存储支持:Elasticsearch、MySQL、H2、TiDB。默认是H2,而且是存到内存。实际我们一般将其存到ES。主页:http://skywalking.apache.org/原创 2024-03-21 07:00:00 · 1021 阅读 · 0 评论 -
分布式之Sleuth&Zipkin
现存问题是什么?Sleuth&Zipkin:SpringCloud中的一个组件,专门链路追踪SkyWalking:Apache组织下的一个开源框架,并且是个顶级项目阿里鹰眼:没玩过~~美团Cat:没玩过~~Sleuth&Zipkin对比SkyWalking相同点,都是链路追踪框架Sleuth是收集信息,Zipkin是图形化展示。SkyWalking一锅端~~SkyWalking的报表展示比Sleuth&Zipkin更丰富。原创 2024-03-20 21:50:56 · 1220 阅读 · 0 评论 -
分布式之seata使用和源码分析
分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。官网:https://seata.io/zh-cn/docs/overview/what-is-seata.html概念:Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。AT模式:提供无侵入自动补偿的事务模式XA模式。原创 2024-03-18 07:00:00 · 722 阅读 · 0 评论 -
分布式之Nacos配置中心
官方文档:Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使用 Spring Cloud Alibaba Nacos Config,您可以在 Nacos Server 集中管理你 Spring Cloud 应用的外部属性配置。原创 2024-03-17 09:46:53 · 739 阅读 · 0 评论 -
分布式之Nacos2.1.0
找入口的方式:自动装配类 spring.factories事件驱动:NacosAutoServiceRegistration实现了applicationListener接口判断变量 1、 debug 2、 全文搜索 定位赋值位置通过ephemeral的值判断是grpc通信,还是http通信,通过这我们能判断ap模式是用的grpc模式,cp模式是用http通信。原创 2024-03-16 07:00:00 · 744 阅读 · 1 评论 -
分布式之网关Gateway
Spring Cloud Gateway 是Spring Cloud官方推出的第二代网关框架,定位于取代 Netflix Zuul。相比 Zuul 来说,Spring Cloud Gateway 提供更优秀的性能,更强大的有功能。Spring Cloud Gateway 是由 WebFlux + Netty + Reactor 实现的响应式的 API 网关。它不能在传统的 servlet 容器中工作,也不能构建成 war 包。原创 2024-03-15 07:00:00 · 3088 阅读 · 2 评论 -
分布式之Sentinel使用和源码分析
在分布式系统中,由于网络原因或自身的原因,服务一般无法保证 100% 可用。如果一个服务出现了问题,调用这个服务就会出现线程阻塞的情况,此时若有大量的请求涌入,就会出现多条线程阻塞等待,进而导致服务瘫痪。由于服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的 “雪崩效应” 。雪崩发生的原因多种多样,最常见原因: 程序Bug,大流量请求,硬件故障,缓存击穿我们无法完全杜绝雪崩源头的发生,只有做好足够的容错,保证在一个服务发生问 题,不会影响到其它服务的正常运行。也就是原创 2024-03-14 07:00:00 · 644 阅读 · 2 评论 -
分布式之LoadBalancer
Spring Cloud LoadBalancer是Spring Cloud官方自己提供的客户端负载均衡器,抽象和实现,用来替代Ribbon(已经停更),原创 2024-03-12 07:00:00 · 1649 阅读 · 2 评论 -
分布式之Ribbon使用以及原理
Spring Cloud LoadBalancer是Spring Cloud官方自己提供的客户端负载均衡器,抽象和实现,用来替代Ribbon(已经停更),import org// 服务列表 private ObjectProvider < ServiceInstanceListSupplier > serviceInstanceListSupplierProvider;} /*** 使用随机数获取服务* @return。原创 2024-03-11 21:26:06 · 2007 阅读 · 0 评论 -
分布式之SpringCloud
怎么知道断点就达到这里,那我们看一下怎样查看源码的启动的路径,我们看一下我们订单微服务的路径,我们要集成nacos的服务发现功能,我们要引入我们的discovery的包,他是一个starter,前面我们学过springboot我们知道任何starter里面一定有个spring.factories,作为一个入口。,命名空间,服务名,然后将我们参数转化为实例。这个线程会一直在转,一直运行,如果他挂了那说明整个服务就挂掉了,好,你看着里面的异常也吃掉了,所以一直会运行,如果没有数据他会阻塞,阻塞会让出cpu。原创 2024-03-10 10:21:28 · 1994 阅读 · 2 评论 -
分布式架构之Nacos配置中心
引入配置文件:刚才架构就会成为这样。是由配置中心统一管理。原创 2024-03-09 11:14:40 · 869 阅读 · 1 评论 -
Dubbo基础入门二
Triple 是 Dubbo3 提出的基于 HTTP2 的开放协议,旨在解决 Dubbo2 私有协议带来的互通性问题。另外,Google公司开发的gRPC,也基于的HTTP2,目前gRPC是云原生事实上协议标准,包括k8s/etcd等都支持gRPC协议。原创 2024-03-08 07:00:00 · 1135 阅读 · 1 评论 -
Dubbo基础入门一
Apache Dubbo 是一款易用、高性能的 WEB 和 RPC 框架,同时为构建企业级微服务提供服务发现、流量治理、可观测、认证鉴权等能力、工具与最佳实践。“Dubbo3 已在阿里巴巴内部微服务集群全面落地,成功取代运行多年的 HSF 框架。原创 2024-03-06 07:00:00 · 717 阅读 · 4 评论 -
Kafka源码搭建以及系统架构
使用截止目前为止Kafka的最新版本3.3.1版本的源码进行环境搭建。原创 2024-02-27 07:00:00 · 621 阅读 · 0 评论 -
Kafka之Consumer源码
extends 类AbstractPartitionAssignor,然后在消费者端增加参数:properties.put(ConsumerConfig.PARTITION_ASSIGNMENT_STRATEGY_CONFIG,类.class.getName());即可。原创 2024-02-26 07:15:00 · 794 阅读 · 0 评论 -
Kafka之Producer源码
这里讲一讲拦截器的使用和基本作用,拦截器一般用得不多,所以这里只是讲一讲案例,不推荐生产中使用。想要实现拦截器,我们需要先实现ProducerInterceptor接口即可,然后在生产者中设置进去即可。1、想要把发送的数据都带上时间戳2、实现统计发送消息的成功次数和失败次数在里面,根据消息发送后返回的异常信息来判断是否发送成功。一般异常如果为空就说明发送成功了,反之就说明发送失败了。然后定义两个变量,并根据Exception的值分别累加就可以统计到了。原创 2024-02-26 07:00:00 · 1435 阅读 · 0 评论 -
Kafka集群详解
设置acks=all,且副本数为3极端情况1:默认min.insync.replicas=1,极端情况下如果ISR中只有leader一个副本时满足min.insync.replicas=1这个条件,此时producer发送的数据只要leader同步成功就会返回响应,如果此时leader所在的broker crash了,就必定会丢失数据!这种情况不就和acks=1一样了!所以我们需要适当的加大min.insync.replicas的值。原创 2024-02-25 10:51:33 · 1525 阅读 · 2 评论 -
Kafka的消费流程
我们接着继续去理解最后这条消息是如何被消费者消费掉的。其中最核心的有以下内容。1、多线程安全问题2、群组协调3、分区再均衡。原创 2024-02-25 10:50:33 · 1404 阅读 · 1 评论 -
Kafka生产与消费详解
代码见:代码中使用到了自定义序列化。id的长度4个字节,字符串的长度描述4个字节, 字符串本身的长度nameSize个字节自定义序列化容易导致程序的脆弱性。举例,在我们上面的实现里,我们有多种类型的消费者,每个消费者对实体字段都有各自的需求,比如,有的将字段变更为long型,有的会增加字段,这样会出现新旧消息的兼容性问题。特别是在系统升级的时候,经常会出现一部分系统升级,其余系统被迫跟着升级的情况。解决这个问题,可以考虑使用自带格式描述以及语言无关的序列化框架。原创 2024-02-24 07:00:00 · 1561 阅读 · 0 评论 -
Kafka基础入门
我们要为Kafka选择合适的硬件时,优先考虑存储,包括存储的大小,然后考虑生产者的性能(也就是磁盘的吞吐量),选好存储以后,再来选择CPU和内存就容易得多。网络的选择要根据业务上的情况来定,也是非常重要的一环。原创 2024-02-23 07:00:00 · 1585 阅读 · 0 评论