![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
分布式
文章平均质量分 79
summer_west_fish
本科毕业深圳大学,拥有Java开发10年的经验。 拥有Devops、敏捷和项目管理多年的经验,并且获得PMP、ACP和DOP等相关证书。
展开
-
kafka broker
如果生产者错误地将消息发送到了一个非leader副本,或者消息在网络传输过程中被路由到了一个非leader副本,那么这个非leader副本需要识别出这一情况,并将消息转发给正确的leader副本。需要注意的是,Kafka的生产者客户端通常会配置为直接与目标分区的leader副本通信,以避免不必要的消息转发和延迟。在Kafka的broker集群中,如果一条消息到达了一个broker节点,但该节点并不是目标分区的leader节点,那么这条消息需要被转发到相应的leader节点进行处理。原创 2024-04-02 16:55:15 · 321 阅读 · 0 评论 -
ElasticSearch
Gossip协议是一种分布式系统中常用的通信协议,主要用于节点之间传播信息。它的设计目标是高效、可靠地将消息传递给所有节点,并保证最终一致性。Gossip协议的核心思想是通过节点之间的随机通信,将信息在整个网络中传播开来,从而达到全局共识的目的。具体来说,每个节点持有一个消息队列,用于存储待传播的消息。被选中的节点在收到消息后,会继续将消息传播给其他节点,以此类推。这种方式使得信息能够以一种去中心化的方式在网络中扩散,每个节点都有能力接收并转发消息。原创 2024-03-11 12:05:34 · 951 阅读 · 0 评论 -
浅谈分布式系统中的补偿机制设计问题
我们知道,应用系统在分布式的情况下,在通信时会有着一个显著的问题,即一个业务流程往往需要组合一组服务,且单单一次通信可能会经过 DNS 服务,网卡、交换机、路由器、负载均衡等设备,而这些服务于设备都不一定是一直稳定的,在数据传输的整个过程中,只要任意一个环节出错,都会导致问题的产生。这样的事情在微服务下就更为明显了,因为业务需要在一致性上的保证。也就是说,如果一个步骤失败了,要么不断重试保证所有的步骤都成功,要么回滚到以前的服务调用。转载 2023-05-11 10:25:37 · 197 阅读 · 0 评论 -
分布式事务协议
分布式事务协议分布式一致性回顾分布式事务2PC准备阶段提交阶段所有参与者成功参与者出现异常二阶段提交缺点3PCCanCommit阶段PreCommit阶段doCommit阶段2PC与3PC的区别分布式一致性回顾在分布式系统中,为了保证数据的高可用,通常,我们会将数据保留多个副本(replica),这些副本会放置在不同的物理的机器上。为了对用户提供正确的增\删\改\差等语义,我们需要保证这些放置在不同物理机器上的副本是一致的。为了解决这种分布式一致性问题,前人在性能和数据一致性的反反复复权衡过程中总结原创 2020-12-02 17:13:26 · 745 阅读 · 0 评论 -
Kong简介
Kong 是一个开源的云原生 API 网关和服务网格,它提供了强大的流量控制、请求转发、日志记录、认证和授权等功能。原创 2023-07-13 11:17:45 · 662 阅读 · 0 评论 -
Seata的AT(Automatic Transaction)
在Seata的AT模式下,应用程序在执行分布式事务时,通过在关键的业务操作前后插入补偿逻辑,以保证事务的一致性。当发生事务回滚时,通过执行补偿逻辑来撤销之前的操作,从而达到回滚的效果。1. 应用程序通过Seata的API启动一个全局事务,并获取一个全局事务ID。2. 在事务执行期间,应用程序按照业务逻辑执行数据库操作,并在关键操作前后插入补偿逻辑。4. 当应用程序调用事务的提交接口时,Seata会协调各个分支事务的提交,并等待分支事务的响应。原创 2023-06-01 11:37:40 · 604 阅读 · 0 评论 -
微服务架构下网关的技术选型
网关的角色是作为一个API架构,用来保护、增强和控制对于API服务的访问。它是一个处于应用程序或服务(提供REST API接口服务)之前的系统,用来管理授权、访问控制和流量限制等。这样REST API接口服务就被网关保护起来,对所有的调用者透明。因此,隐藏在API网关后面的业务系统就可以专注于创建和管理服务,无需关心这些策略性的请求。原创 2023-05-12 11:07:41 · 544 阅读 · 0 评论 -
微服务架构路线
众所周知,单体应用程序,由于其种种不足,几乎不支持敏捷方法。如果你想为一个大型或复杂的业务创建一个软件项目,最好从微服务架构开始。微服务架构是一种灵活的架构,可以显著性地提高应用程序灵活性、可扩展性等。原创 2023-05-12 09:39:56 · 457 阅读 · 0 评论 -
Git设置SSH Key
(1)打开 git 命令窗口(2)配置用户名(填自己的姓名)(3)配置用户邮箱(填自己的邮箱)(4)生成公钥、秘钥(填自己的邮箱,执行后需要按几次 enter 直到结束)(5)配置 ssh 变量。原创 2023-03-09 17:50:37 · 6644 阅读 · 0 评论 -
Elasticsearch基本概念和索引原理
索引中的每一个文档都有一个类型,每种类型都有它自己的映射,一个映射定义了文档结构内每个字段的数据类型。使用。原创 2023-02-10 16:50:41 · 754 阅读 · 0 评论 -
DDD 领域驱动设计落地实践系列:战略设计和战术设计
本文主要围绕 DDD 领域驱动设计落地时间的三大过程进行了阐述,详细说明了战略设计阶段以及战术设计阶段的输入和输出。原创 2022-11-17 12:03:22 · 535 阅读 · 0 评论 -
Linux安装Keepalived
【代码】Linux安装Keepalived。原创 2022-11-09 15:57:30 · 1600 阅读 · 0 评论 -
SpringCloud OpenFeign
Feign 提供了很多的扩展机制,让用户可以更加灵活的使用。:修改日志级别,包含四种不同的级别:NONE、BASIC、HEADERS、FULL。:响应结果的解析器,http远程调用的结果做解析,例如解析json字符串为java对象。:请求参数编码,将请求参数编码,便于通过http请求发。:支持的注解格式,默认是SpringMVC的注解。:失败重试机制,请求失败的重试机制,默认是没有,不过会使用Ribbon的重试。1、日志配置可以通过配置Feign的日志级别来显示需要的日志。原创 2022-11-07 22:21:54 · 428 阅读 · 0 评论 -
Docker安装Prometheus + Grafana
【代码】Docker安装Prometheus + Grafana。原创 2022-11-07 17:56:00 · 1144 阅读 · 0 评论 -
SkyWalking监控视角与指标介绍
cpm 全称 call per minutes,是吞吐量(Throughput)指标。下图是拼接的全局、服务、实例和接口的吞吐量及平均吞吐量。第一条185cpm=185/60=3.08个请求/秒。原创 2022-11-07 10:10:50 · 3817 阅读 · 1 评论 -
Zookeeper作为协调服务发展史
zookeeper作为一款优秀的协调服务,在数据量不是特别大且读多写少的场景下,还是很好用的。但是随着数据量越来越大,处理压力也越来越大,这种情况下zookeeper也越来越力不从心了。这点从新一代大数据组件很少使用zookeeper,而使用zookeeper的组件正在减少对zookeeper的依赖(HBase)或者尝试摆脱zookeeper(2.8版本以后的kafka,尝试使用raft代替zookeeper)就可以看得出来。但是这也正是技术的魅力,江山代有人才出,各领风骚数百年。原创 2022-11-06 17:35:09 · 222 阅读 · 0 评论 -
SSO 单点登录和 OAuth2.0
SSO是Single Sign On的缩写,OAuth是Open Authority的缩写,这两者都是使用令牌的方式来代替用户密码访问应用。流程上来说他们非常相似,但概念上又十分不同。SSO大家应该比较熟悉,它将登录认证和业务系统分离,使用独立的登录中心,实现了在登录中心登录后,所有相关的业务系统都能免登录访问资源。OAuth2.0原理可能比较陌生,但平时用的却很多,比如访问某网站想留言又不想注册时使用了微信授权。原创 2022-11-04 22:12:59 · 564 阅读 · 0 评论 -
服务端高并发分布式架构演进
本文以淘宝作为例子,介绍从一百个到千万级并发情况下服务端的架构的演进过程。同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知。文章最后汇总了一些架构设计的原则。特别说明:本文以淘宝为例仅仅是为了便于说明演进过程可能遇到的问题,并非是淘宝真正的技术演进路径。原创 2022-10-30 09:32:13 · 574 阅读 · 0 评论 -
如何清理Docker占用的磁盘空间?
Docker一直非常稳定,没有出什么问题。但是,它有一个不大不小的问题,会比较消耗磁盘空间。如果Docker一不小心把磁盘空间全占满了,你的服务也就算玩完了,因此所有Docker用户都需要对此保持。当然,大家也不要紧张,这个问题还是挺好解决的。原创 2022-10-21 17:26:26 · 3497 阅读 · 0 评论 -
Linux安装haproxy
Linux安装haproxy原创 2022-10-19 18:02:24 · 1328 阅读 · 0 评论 -
Docker安装Kong
首先我们创建一个 Docker 自定义网络,以允许容器相互发现和通信。在下面的创建命令中 kong-net 是我们创建的 Docker 网络名称。Kong 目前使用 Cassandra 或者 PostgreSQL,你可以执行以下命令中的一个来选择你的 Database。请注意定义网络 --network=kong-net。原创 2022-10-17 12:07:32 · 2811 阅读 · 0 评论 -
SOFAJRaft 选举机制剖析 | SOFAJRaft 实现原理
我们在本文中采用了类比的方式来剖析源码,主要是为了让读者能更容易的理解如何在分布式环境中达成共识,其实这也是整个 SOFAJRaft 要实现的目标。行文至此,作者感觉已经把选举说清楚了,如果还有没提到的地方,或者一些流程中的分支任务,欢迎从源码中进一步寻找答案。最后贴出上面提到的四个方法的源码。图14 - preVote 预投票图15 - electSelf 投票图16 - handlePreVoteRequest 处理预投票图17 - handleRequestVoteRequest 处理投票。转载 2022-10-12 18:15:31 · 352 阅读 · 0 评论 -
ElasticSearch基础语法
【代码】ES基础语法。原创 2022-10-12 12:03:39 · 663 阅读 · 0 评论 -
Logstash数据同步
结果:原创 2022-10-12 11:31:23 · 1119 阅读 · 0 评论 -
Linux安装DBLE
1、下载并安装通过此链接( https://github.com/actiontech/dble/releases )下载最新版本的安装包 2、修改db.xml配置文件3、启动dble4、测试dble分库,使用man1账户 结果:2、cluster.cnf配置文件内容3、修改bootstrap.cnf文件中instance不修改会引起如下错误:原创 2022-10-10 11:51:36 · 692 阅读 · 0 评论 -
Sharding-JDBC实现分库分表
Sharding-JDBC实现分库分表原创 2022-10-09 11:46:28 · 623 阅读 · 0 评论 -
MySQL单表数据到达2000w,为什么就需要考虑分表?
我们假设主键ID为bigint类型,长度为8字节(面试官问你int类型,一个int就是32位,4字节),而指针大小在InnoDB源码中设置为6字节,所以就是 8+6=14 字节,16k/14B =16*1024B/14B = 1170。B+树高度一般为1-3层,如果B+到了4层,查询的时候会多查磁盘的次数,SQL就会变慢。这是因为索引一般是B+树结构,数据千万级别的话,B+树的高度会增高,查询就变慢啦。因此,一棵高度为2的B+树,能存放1170 * 16=18720条这样的数据记录。原创 2022-10-09 10:48:23 · 1515 阅读 · 0 评论 -
MySQL两阶段提交
执行器先找到引擎取ID=2这一行。ID是主键,引擎直接用树搜索找到这一行。如果ID=2这一行所在的数据也本来就在内存中,就直接返回给执行器;否则,需要先从磁盘读入内存,然后再返回。将redo log的写入拆成了两个步骤:prepare 和 commit,这就是两阶段提交。执行器拿到引擎给的行数据,把这个值加上1,得到新的一行数据,再调用引擎接口写入这行新数据。然后告知执行器执行完成了,随时可以提交事务。原创 2022-10-09 10:16:51 · 261 阅读 · 1 评论 -
Zookeeper集群搭建
到apache官网下载对应的zookeeper:Apache ZooKeeperhttps://zookeeper.apache.org/进入安装目录的 目录下,拷贝配置样本并进行修改:指定数据存储目录和日志文件目录(目录不用预先创建,程序会自动创建),修改后完整配置如下:配置参数说明:分别在三台主机的 目录下新建 文件,并写入对应的节点标识。Zookeeper 集群通过 文件识别集群节点,并通过上文配置的节点通信端口和选举端口来进行节点通信,选举出 Leader 节点。1、创建存原创 2022-10-08 11:43:02 · 752 阅读 · 0 评论 -
分布式系统的缓存设计
缓存就是数据交换的缓冲区。缓存的本质是一个内存 Hash。缓存是一种利用空间换时间的设计,其目标就是更快、更近:极大的提高性能。将数据写入/读取速度更快的存储(设备);将数据缓存到离应用最近的位置;将数据缓存到离用户最近的位置。缓存中的数据可能是提前计算好的结果、数据的副本等。典型的应用场景:有 cpu cache, 磁盘 cache 等。本文中提及到缓存主要是指互联网应用中所使用的缓存组件。缓存命中率是缓存的重要度量指标,命中率越高越好。缓存命中率 = 从缓存中读取次数 / 总读取次数。原创 2022-10-07 12:22:28 · 203 阅读 · 0 评论 -
服务网关与流量网关
传统的单体架构中只需要开放一个服务给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,如果没有网关,客户端只能在本地记录每个微服务的调用地址,当需要调用的微服务数量很多时,它需要了解每个服务的接口,这个工作量很大。那有了网关之后,能够起到怎样的改善呢?但是 API 网关也存在不足之处,在微服务这种去中心化的架构中,网关又成了一个中心点或瓶颈点,它增加了一个我们必须开发、部署和维护的高可用组件。原创 2022-10-07 08:22:31 · 1512 阅读 · 0 评论 -
SpringBoot性能优化
在开始对SpringBoot服务进行性能优化之前,我们需要做一些准备,把SpringBoot服务的一些数据暴露出来。比如,你的服务用到了缓存,就需要把缓存命中率这些数据进行收集;用到了数据库连接池,就需要把连接池的参数给暴露出来。我们这里采用的监控工具是Prometheus,它是一个是时序数据库,能够存储我们的指标。SpringBoot可以非常方便的接入到Prometheus中。创建一个SpringBoot项目后,首先,加入maven依赖。然后,我们需要在配置文件中,开放相关的监控接口。原创 2022-10-05 21:07:17 · 1367 阅读 · 0 评论 -
分库分表思考
什么是分库分表为什么需要分库分表如何分库分表?什么时候开始考虑分库分表分库分表会导致哪些问题分库分表中间件简介。原创 2022-10-01 10:37:37 · 176 阅读 · 0 评论 -
架构的本质和架构分类
Linux有架构,MySQL有架构,JVM也有架构,使用Java开发、MySQL存储、跑在Linux上的业务系统也有架构,应该关注哪一个?转载 2022-09-27 09:55:50 · 607 阅读 · 0 评论 -
解决RabbitMQ脑裂问题
如果一个节点在一段时间内(默认是60秒)无法与对等端节点联系,则节点将认为其对等节点是否已关闭。如果两个节点重新接触,都认为另一个已关闭,则这些节点将确定已发生分区原因:集群脑裂。原创 2022-09-26 18:12:40 · 1574 阅读 · 0 评论 -
Maven常见的编译报错
Maven 编译SpringBoot程序出现错误:2022-09-21 06:38:52 UTC| Exception in thread "main" java.lang.AssertionError上传好第三方jar和jar相关pom文件到私有仓库。原创 2022-09-23 14:29:58 · 6911 阅读 · 1 评论 -
零拷贝技术
零拷贝如果简单用 Java 里面对象的概率来理解的话,其实就是使用的都是对象的引用,每个引用对象的地方对其改变就都能改变此对象,永远只存在一份对象。原创 2022-09-15 11:00:07 · 160 阅读 · 0 评论 -
实战RabbitMQ:消息丢失、消息重复 、消息积压
本篇主要讲了RabbitMQ的三种常见问题及解决方案,同时分享了一些作者本人工作中使用的心得,我想网上是很难找到的,如果哪一天用到了,不妨再打开看看,也许能避免一些生产环境可能出现的问题。我总结下来就是三点:1)、消息100%投递会增加运维成本,中小企业视情况使用,非必要不使用;2)、消息确认机制影响性能,非必要不使用;3)、消费者先保证消息能签收,业务处理失败可以人工补偿。工作中怕的永远不是一个技术不会使用,而是遇到问题不知道有什么解决思路。原创 2022-09-14 10:13:51 · 341 阅读 · 0 评论 -
Docker Login私有仓库
Docker Login私有仓库原创 2022-08-19 10:22:22 · 3588 阅读 · 0 评论 -
Maven发布jar到Nexus
Maven发布jar到Nexus原创 2022-08-17 17:32:40 · 858 阅读 · 0 评论