(34)...分布式
文章平均质量分 84
IT云清
技术专家,团队主管,Apache Seata Committer,公众号:java4all
展开
-
一致性hash算法java实现
一致性hash算法java版本简单实现package com.java4all.grouth.consistent;import java.util.LinkedList;import java.util.List;import java.util.SortedMap;import java.util.TreeMap;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** * 一致性hash算法java简易实现 * @au原创 2020-12-09 17:29:51 · 2939 阅读 · 16 评论 -
grafana踩坑记录
1.鼠标移动悬停时数据不变更2.数据显式和库里查询结果不同数据库为postgresqlsql为SELECTdate_trunc('HOUR', gmt_create) as time,project_name as metric,count(distinct(user_id)) as valueFROM log_info where project_name like 'middleground-pro%'GROUP BY time,metric;库里显式为:而页面显式为:后来原创 2020-08-31 12:33:40 · 4635 阅读 · 0 评论 -
分布式事务系列--SpringCloud整合byteTCC框架0.4.x版本
本文详细记录下,SpringCloud框架整合byteTCC分布式事务框架的过程。这里只展示,一个是springboot项目,引入byteTCC必备的基础步骤,不包括tcc的业务逻辑过程。请优先确定项目使用的springboot和springcloud版本,然后选择对应的byteTCC版本进行整合,0.4.x和0.5.x整合差异较大。总体而言,spring boot 1.x得用0.4.x的版本,0...原创 2019-02-19 11:40:15 · 2624 阅读 · 0 评论 -
byteTCC框架--@Compensable注解问题
在使用byteTCC框架0.5.0-BETA2版本时,发现一个关于@Compensable注解的问题,这里记录下:1.@Compensable注解问题若try的实现逻辑写在serviceImpl中,而不是controller中,那么,@Compensable需要添加在controller中,而不是serviceImpl中。如果仅仅添加在serviceImpl中,那么confirm或者canc...原创 2019-02-14 09:42:11 · 4126 阅读 · 3 评论 -
byteTCC框架--官方demo调试
调试了下作者提供的样例,记录下步骤,基于0.4.x版本。1.启动eureka注册中心先修改下hostname原本:server: port: 7000eureka: instance: hostname: inst1 client: registerWithEureka: false fetchRegistry: false serviceU...原创 2019-02-14 09:51:26 · 5946 阅读 · 1 评论 -
Consul相关资料
1.consul介绍https://www.consul.io/intro/index.html2.consul和其他组件的对比https://www.consul.io/intro/vs/index.html3.使用https://www.consul.io/intro/getting-started.html待翻译补充 。。。。。。...原创 2019-03-05 13:36:01 · 484 阅读 · 0 评论 -
注册中心技术选型分析
本文是对微服务中,注册中心的技术选型的一些思考和分析,部分技术比如etcd,本人没有在生产环境使用过,所以部分结论的得出,是在阅读了大量的资料后得出的结论。如eureka,在实际中,很多小项目,其实就是一个单点的eureka做注册中心,也没发生过什么生产事故,但就技术调研和技术储备而言,我们不能只考虑理想的场景,了解各种技术的优缺点,用的时候,起码知道这个技术的短板和可能带来的一些问题,这样在用户...原创 2019-03-07 09:14:16 · 3054 阅读 · 5 评论 -
分布式事务系列--是选TCC还是SAGA
byteTCC框架,支持两种模式,一种是TCC模式,一种是SAGA模式,二者如何选择,是一个取舍问题,没有完美方案。1.TCC模式这种模式下,我们需要操作的目标字段,都要添加一个相关的冻结字段,try操作是操作冻结字段,cc操作时,将冻结的数值更新到目标字段。示例如下: <!--try逻辑--> <update id="increaseMoney"> ...原创 2019-03-15 14:05:25 · 10925 阅读 · 4 评论 -
分布式事务系列--分布式跨库查询解决方案 mysql federated引擎的使用
分布式跨库查询时,可以尝试使用federated引擎,来创建远程表的映射,方便查询。1.开启引擎查询数据库是否支持SHOW ENGINES;有,说明支持,但是没有开启,开启一下:配置文件添加:federated,如下:[mysqld]federated## Remove leading # and set to the amount of RAM for the most i...原创 2019-03-20 11:38:15 · 2321 阅读 · 4 评论 -
聊聊分布式
欢迎关注公众号:java4all↓↓↓分布式系列目录,点击直接进入文章↓↓↓,也可进入专栏:1.分布式锁系列–01分布式锁入门介绍2.分布式锁系列–02Redis实现分布式锁3.分布式锁系列–03关于分布式锁的选型分析014.分布式锁系列–04关于分布式锁的选型分析025.分布式事务系列–SpringCloud整合byteTCC框架0.4.x版本6.分布式事务系列–SpringClo...原创 2019-03-30 15:13:06 · 910 阅读 · 2 评论 -
为什么要实施微服务架构?
微服务架构,是系统架构的一种设计风格,与之相对的是,传统企业系统架构中的单体模式。1.架构演进这里借助dubbo官网的一张图来说明架构演进之路:图片来源:dubbo官网随着互联网的发展,用户基数变得越来越大,网站应用的规模也不断扩大, 常规的单体应用和垂直应用架构已无法应对, 分布式服务架构以及流动计算架构正在成为一种趋势。1.1单一应用架构当网站流量很小时,只需一个应用,将所有功...原创 2019-04-26 17:27:36 · 1355 阅读 · 2 评论 -
seata源码中一个有趣的讨论
看到一个比较有意思的讨论,分享一下:1.起因是有人提了个issue,压测是,出现了一个问题TransactionException LockKeyConflict异常,全局锁冲突异常:然后有人contributor提出了解决方案:Move lock retry loop into ConnectionProxy.commit, that the number of LockKeyConfli...原创 2019-08-17 09:43:23 · 1115 阅读 · 0 评论 -
Redission分布式锁加锁原理源码解析
1.获取锁这里是我们自己实现,调用redission的方法,获取锁,然后加锁。lock.lock(expireTime, timeUnit)是关键,我们追进去。 /** * 获取锁,如果没有主动调用unlock解锁,expireTime后会自动释放 * @param lockKey * @param expireTime 如果没有调用unlock解锁,ex...原创 2019-08-29 14:12:45 · 1910 阅读 · 0 评论 -
seata tcc模式下的一个性能问题
本文解释Seata中,AT模式和MT模式下的一个一阶段的区别。根据两阶段行为模式的不同,Seata将分支事务划分为2种:Automatic (Branch) Transaction ModeManual (Branch) Transaction Mode1.AT模式AT 模式基于 支持本地 ACID 事务 的 关系型数据库:一阶段 prepare 行为:在本地事务中,一并提交业务数...原创 2019-09-03 13:50:56 · 5716 阅读 · 3 评论 -
seata中的grouplist的作用
在seata-server端的file.conf配置文件中,有个default.grouplist配置,是干嘛的呢?1.作用方式这个配置,只有当registry.type=file,注册中心是file方式时,才会起作用。2.值这个值可以配置多个,配置多个就是集群方式。2、关于 Seata 的 grouplist 问题:什么时候会用到 file.conf 中的 default.group...原创 2019-09-11 16:25:45 · 11092 阅读 · 2 评论 -
kafka安装教程
本文记录在linux环境下,安装kafka,并做简单测试,如果zookeeper没有安装,可参考zookeeper安装:1.下载安装包地址:http://kafka.apache.org/downloads, 注意不要下载成source了。2.上传至服务器rz命令上传至服务器解压[root@localhost local]# tar -zxvf kafka_2.11-2.1.1.t...原创 2019-02-28 11:22:00 · 3263 阅读 · 6 评论 -
分布式锁系列--04关于分布式锁的选型分析02-Redlock的实现原理
上一文分布式锁系列–03关于分布式锁的选型分析01中,我们看到了单节点的redis分布式锁在failover时产生了无法解决的安全问题,因此,Redis的作者antirez提出了一种新的基于redis的分布式锁的算法Redlock,它基于N个完全独立的Redis节点(通常情况下N可以设置成5)。1.Redlock获取锁Redlock获取锁的原理如下:1.获取当前时间(毫秒数): t1。2....原创 2019-02-18 21:11:42 · 1933 阅读 · 2 评论 -
分布式事务系列--SpringCloud整合byteTCC框架0.5.x版本2
6.tcc业务逻辑编写在使用tcc框架处理分布式事务时,需要我们自己来编写tcc业务代码。这里演示一个简单的加钱的操作。一个tcc操作,分为try,confirm,cancel三个操作。根据创建的company表,可以看到公司表有一个money金额字段,还有个frozen字段,在业务简单时,我们可以借助这个字段来实现tcc;如果业务复杂,修改多个字段时,我们可以不要这个字段,tcc的每一步,...原创 2019-02-22 14:51:55 · 2881 阅读 · 4 评论 -
分布式相关概念:ACID特性,CAP理论,BASE理论
汇总一下几个常见的理论的概念:1.ACID特性数据库管理系统中事务(transaction)的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)1、原子性原子性是指事务是一个不可再分割的工作单元,事务中的操作要么全部成功,要么全部失败。2、一致性一致性是指在事务开始之前和事务结束以后,数据库的完整性约...原创 2018-11-07 10:01:30 · 1021 阅读 · 0 评论 -
redisson的MultiLock连锁
redisson中的MultiLock,可以把一组锁当作一个锁来加锁和释放。1.官方文档的解释:Redis based distributed RedissonMultiLock object groups multiple RLock objects and handles them as one lock. Each RLock object may belong to different...原创 2018-11-29 12:21:06 · 7597 阅读 · 2 评论 -
Debezium教程翻译01:概览
官网地址:https://debezium.io/概览内容文档源地址:https://debezium.io/Debezium是一个开源分布式平台,用于捕获数据库的更改。启动它,指向你的数据库,你的应用程序就可以开始响应所有其他应用程序提交给你的数据库的插入、更新和删除操作。Debezium耐用且快速,因此您的应用程序可以快速响应,即使出现问题,也不会错过任何活动。用你的数据做更多的事情...原创 2018-12-15 11:52:55 · 1804 阅读 · 0 评论 -
Debezium教程翻译02:启动Docker,Debezium,Zookeeper,Kafka
使用Docker运行Debezium运行Debezium涉及三个主要服务:Zookeeper、Kafka和Debezium的连接器服务。本教程将指导您使用Docker和Debezium的Docker映像启动这些服务的单个实例。另一方面,生产环境需要运行每个服务的多个实例,以保证性能、可靠性、复制和容错。这可以通过OpenShift和Kubernetes这样的平台来实现,该平台可以管理运行在...原创 2018-12-15 16:29:19 · 1588 阅读 · 0 评论 -
分布式锁系列--01分布式锁入门介绍
本系列主要介绍分布式锁相关内容及实现。本文主要介绍以下内容:1.分布式锁是什么2.分布式锁约束3.分布式锁实现方式1.分布式锁是什么分布式锁,是控制分布式系统中访问共享资源的一种方式,如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰来保证一致性,在这种情况下,便需要使用到分布式锁。在单机应用的时候,如果需要对某一个共...原创 2018-12-11 09:05:49 · 657 阅读 · 0 评论 -
分布式锁系列--02Redis实现分布式锁
本文讲述,如何使用redis来实现分布式锁。这种实现方式,满足了分布式锁系列–01分布式锁入门介绍一文中,分布式锁约束的前三条:互斥性,安全性,对称性。因为是单机版本,所有无法满足第四条。自己编码来实第四点,是比较麻烦的,后面会介绍如何使用开源的Redisson框架来实现分布式锁。实现原理有一个redis服务实例,在分布式系统中,所有需要获取锁的客户端,都需要访问这个redis实例:如果锁不...原创 2018-12-11 11:03:14 · 828 阅读 · 0 评论 -
SpringCloud教程(Finchley版本)-04:断路器(Hystrix-Ribbon)
在微服务系统中,我们把系统拆分成了很多小的服务,各个服务之间通过不同的方式进行依赖和调用,为了保证服务的高可用性,单个服务通常会集群部署,此时,许多服务由于各种问题可能会调用失败,比如超时、异常等。如何能够保证在一个依赖出问题的情况下,不会出现故障传播,导致整体服务失败,这个就是Hystrix需要做的事情。Hystrix提供了熔断、隔离、Fallback、cache、监控等功能,能够在一个、或多个...原创 2018-12-11 16:00:24 · 1189 阅读 · 4 评论 -
Debezium教程翻译03:启动mysql数据库
启动mysql数据库目前,我们已经启动了Zookeeper和Kafka,但是还没有数据库服务器,Debezium可以从中捕获变化。现在,让我们使用一个示例数据库启动一个MySQL服务器。打开一个新的终端,使用它启动一个新的容器,运行一个预先配置了库存数据的MySQL数据库服务器:$ docker run -it --rm --name mysql -p 3306:3306 -e MYSQL_...原创 2018-12-17 19:15:41 · 722 阅读 · 0 评论 -
SpringCloud教程(Finchley版本)-06:断路器(Hystrix-Feign)
在微服务系统中,我们把系统拆分成了很多小的服务,各个服务之间通过不同的方式进行依赖和调用,为了保证服务的高可用性,单个服务通常会集群部署,此时,许多服务由于各种问题可能会调用失败,比如超时、异常等。如何能够保证在一个依赖出问题的情况下,不会出现故障传播,导致整体服务失败,这个就是Hystrix需要做的事情。Hystrix提供了熔断、隔离、Fallback、cache、监控等功能,能够在一个、或多个...原创 2018-12-11 19:55:16 · 1064 阅读 · 4 评论 -
TCC事务机制简介
声明:本文转载自:TCC事务机制简介关于TCC(Try-Confirm-Cancel)的概念,最早是由Pat Helland于2007年发表的一篇名为《Life beyond Distributed Transactions:an Apostate’s Opinion》的论文提出。在该论文中,TCC还是以Tentative-Confirmation-Cancellation作为名称;正式以Try...转载 2019-01-10 16:13:46 · 1297 阅读 · 0 评论 -
如何实现一个TCC分布式事务框架
声明:本文转载自:TCC分布式事务框架的一点思考关于TCC事务机制的介绍,可以参考TCC事务机制简介。TCC事务模型虽然说起来简单,然而要基于TCC实现一个通用的分布式事务框架,却比它看上去要复杂的多,不只是简单的调用一下Confirm/Cancel业务就可以了的。本文将以Spring容器为例,试图分析一下,实现一个通用的TCC分布式事务框架需要注意的一些问题。一、TCC全局事务必须基于R...转载 2019-01-10 16:20:37 · 5946 阅读 · 0 评论 -
分布式事务解决方案FESCAR
最近读了下raincat,hmily的源码,也看了ByteTcc,tcc-transaction,lcn等框架的比较。但是对于技术选型而言,还是希望学习下BAT这种体量的公司用的是什么解决方案,恰巧在查阅资料选型时,阿里开源了FESCAR,开源当天就提了几个issue,一个是有些小疑问,还有就是,想看看这个项目遇到问题时维护者是否能及时解答。事实证明,维护者和社区还是很活跃的,问题都很快得到解答。...原创 2019-01-15 19:57:22 · 5519 阅读 · 6 评论 -
byteTCC框架--关于接口返回问题的讨论
在普通的web项目中,调用接口返回数据,如下,不出错返回一种,出错了,返回另外一种。前端是直接可以拿到返回的信息的。 @GetMapping("decreaseMoney") @ResponseBody public void decreaseMoney(Integer id,BigDecimal money){ try { //do something ...原创 2019-02-15 09:11:25 · 1088 阅读 · 0 评论 -
分布式事务系列--SpringCloud整合byteTCC框架0.5.x版本1
这里详细记录下,SpringCloud框架整合byteTCC分布式事务框架的过程。版本信息1.SpringCloud2.SpringBoot3.byteTCC1.创建company-server项目创建一个SpringBoo web项目,先贴下完整的项目结构:2.引入byteTCC依赖SpringCloud其他依赖这里不做展示,仅展示byteTCC的依赖: <!--by...原创 2019-02-15 10:29:07 · 3221 阅读 · 5 评论 -
SpringCloud教程(Finchley版本)-08:eureka集群搭建
本地搭建2个eureka服务,互相注册为一个集群,生产环境可以部署更多的节点。示例中两个项目分别为eureka-server,port为8761,和eureka-server1,port为8762。这里列出重点步骤。1.引入依赖 eureka-server <!--eureka-server--> <dependency> <groupId&a原创 2019-02-16 15:43:27 · 947 阅读 · 0 评论 -
分布式锁系列--03关于分布式锁的选型分析01
本文分析,在分布式系统中,使用redis实现分布式锁,会遇到什么问题。关于分布式锁概念和redis分布式锁的具体实现,可参考前面的2篇文章。本文重点在于,对分布式锁技术选型的分析。1.redis锁单节点实现常规的,使用redis做分布式锁,主要实现如下:1.1加锁 /** * 加锁 * * @param lockName 锁名,对应被争用的共享资源 * @para...原创 2019-02-16 17:25:08 · 800 阅读 · 0 评论 -
关于分布式事务、2pc两阶段提交协议、3pc三阶提交协议
本文转载自:https://mp.weixin.qq.com/s/87-znh7Q-SvQfF9u8O3Trg随着大型网站的各种高并发访问、海量数据处理等场景越来越多,如何实现网站的高可用、易伸缩、可扩展、安全等目标就显得越来越重要。为了解决这样一系列问题,大型网站的架构也在不断发展。提高大型网站的高可用架构,不得不提的就是分布式。在分布式一致性一文中主要介绍了分布式系统中存在的一致性问题。本文...转载 2018-10-09 09:43:39 · 748 阅读 · 0 评论