![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
分布式+高并发
文章平均质量分 56
快乐崇拜234
学习笔记
展开
-
zookeeper与etcd的对比
背景最近在看到Pachyderm的介绍时,看到作者拿YARN和Kubernetes做类比,拿Zookeeper和etcd做对比。YARN和Kubernetes的类比还相对比较好理解,毕竟他们都有资源管理和调度的职能,只不过YARN上运行的对象是JVM,而Kubernetes上运行的是容器。但是拿Zookeeper和etcd来类比我就有些不懂了,在我之前的概念里zookeeper并不是一个存储组件啊,因此有了本文的过程。Zookeeper和etcd可以做类比吗?etcd的官网介绍是一个分布式的K/V存储转载 2020-11-25 12:04:14 · 1842 阅读 · 0 评论 -
高并发分布式环境中获取全局唯一ID[分布式数据库全局唯一主键生成]
需求说明在过去单机系统中,生成唯一ID比较简单,可以使用mysql的自增主键或者oracle中的sequence, 在现在的大型高并发分布式系统中,以上策略就会有问题了,因为不同的数据库会部署到不同的机器上,一般都是多主实例,而且再加上高并发的话,就会有重复ID的情况了。至于为什么会有重复就不多说了,技术人员都懂的。本文讲述的案例不仅仅局限于数据库中的ID主键生产,也可以适用于其他分布式环境中的唯一原创 2016-12-26 11:06:17 · 17554 阅读 · 1 评论 -
Twitter的分布式自增ID算法snowflake(有改动Java版)
分布式ID生成器 全局唯一ID生成 分布式纯数字ID 其实这也不是Twitter独有的,mongodb也采用类似的方法生产自增ID。对于全局唯一ID的说明请参考我另一篇文章 : 高并发分布式环境中获取全局唯一ID[分布式数据库全局唯一主键生成] 该算法最大的好处就是:纯数字;基本有序递增为了简单起见,我这里对snowflake算法进行了一点点修改,修改后的格式为:41位时间戳 |原创 2017-07-04 19:33:01 · 5180 阅读 · 2 评论 -
RxJava 驯服数据流之时间平移
Rx 最大的特征之一就是无法预测何时会有数据发射。有些 Observable 会同步的即可发射所有的数据,比如 range ,有些按照一定的时间间隔发射数据、有些根本无法确定到底何时发射数据。例如,鼠标移动时事件和 UDP 数据包到达的时刻。我们需要合适的工具来处理这些无法确定何时发射的事件。Buffer 缓存Buffer 可以收集数据并缓存起来,等缓存到固定的数目后一起发射,而不是来一个发射一个。转载 2017-08-13 14:34:17 · 1040 阅读 · 0 评论 -
Redis学习笔记(九)redis实现时时直播列表缓存,支持分页[热点数据存储]
需求说明在直播平台中,用户查看直播列表,这个列表数据具有时时性,并且是强热点数据,也就是说每时每刻都可能会有新的直播。这些数据如果每次都去数据库读取肯定是不可取的,所以这可以考虑使用redis来实现。使用redis队列来保存直播列表原创 2016-12-23 14:12:07 · 14627 阅读 · 5 评论 -
Redis学习笔记(六)redis实现分布式锁
分布式锁介绍 注:本文讲的是分布式互斥锁在很多互联网产品应用中,有些场景需要加锁处理,比如:秒杀,全局递增ID,楼层生成,还有一些分布式任务调度等等。大部分的解决方案是基于DB实现的,Redis为单进程单线程模式,采用队列模式将并发访问变成串行访问,且多客户端对Redis的连接并不存在竞争关系。其次Redis提供一些命令SETNX,GETSET,可以方便实现分布式锁机制。本着批判性原则,现在网原创 2016-12-21 12:08:59 · 17536 阅读 · 14 评论 -
dubbo优雅停机原理分析[dubbo2.5.10]
这里我们使用的是Apache dubbo官方提供的starter[0.1.0版本]。其使用的dubbo版本是2.5.10。我们将通过源码分析一下dubbo 的优雅停机是如何实现的。引入Apache dubbo starter<!-- 注意这里要引入zkclient,否则会找不到zkclient jar包 --><dependency> &...原创 2018-04-16 12:04:38 · 5729 阅读 · 2 评论 -
分布式熔断、限流与服务保护:深入 Hystrix 原理及使用
原文链接,也是本人写的:http://gitbook.cn/books/5a61644f6a16de239e22e55d/index.html我的hystrix几篇文章目录:分布式熔断、限流与服务保护:深入 Hystrix 原理及使用RxJava 驯服数据流之时间平移Hystrix 1.5 滑动窗口实现原理总结目录集成到springboot集成到springMV...原创 2018-03-29 16:07:57 · 15906 阅读 · 0 评论 -
阿里开源分布式事务seata demo示例(原Fescar)
seata demoseata 分布式事务seata demo示例原创 2019-01-22 20:33:04 · 6303 阅读 · 3 评论 -
阿里巴巴开源分布式事务解决方案 seata(原Fescar)
Fescar 是阿里巴巴开源的分布式事务中间件,以高效并且对业务0 侵入的方式,解决微服务场景下面临的分布式事务问题。本文介绍fescar的简单原理,官方实例运行请参考:阿里开源分布式事务Fescar demo示例1. 什么是微服务化带来的分布式事务问题?首先,设想一个传统的单体应用(Monolithic App),通过 3 个 Module,在同一个数据...转载 2019-01-22 20:52:53 · 2670 阅读 · 0 评论 -
Hystrix 1.5 滑动窗口实现原理总结
文章目录总览BucketedCounterStream总览事件流的写入共享的事件流事件流聚合为桶BucketedRollingCounterStreamHealthCountsStream总结本文转载自:Hystrix 1.5 滑动窗口实现原理总结总览Netflix Hystrix 通过类似滑动窗口的数据结构来统计调用的指标数据。Hystrix 1.5 将滑动窗口设计成了数据流(reacti...转载 2019-01-23 16:51:36 · 4691 阅读 · 0 评论 -
服务化实战之 dubbo、dubbox、motan、thrift、grpc等RPC框架比较及选型
概述前段时间项目要做服务化,所以我比较了现在流行的几大RPC框架的优缺点以及使用场景,最终结合本身项目的实际情况选择了使用dubbox作为rpc基础服务框架。下面就简单介绍一下RPC框架技术选型的过程。原创 2017-01-23 11:08:30 · 67365 阅读 · 7 评论 -
akka学习教程(一)简介
为什么要用akkaAkka提供可扩展的实时事务处理。Akka是一个运行时与编程模型一致的系统,为以下目标设计:垂直扩展(并发)水平扩展(远程调用)高容错在Akka的世界里,只有一个内容需要学习和管理,具有高内聚和高一致的语义。Akka是一种高度可扩展的软件,这不仅仅表现在性能方面,也表现在它所适用的应用的大小。Akka的核心,Akka-actor是非常小的,可以非常方便地放进你的应用中,提供原创 2016-12-21 12:15:21 · 45230 阅读 · 5 评论 -
java高并发:CAS无锁原理及广泛应用
前言在现在的互联网技术领域,用户流量越来越大,系统中并发量越来越大,大公司的日活动辄成百上千万。如何面对如此高的并发是当今互联网技术圈一直在努力的事情。 应对高并发需要在各个技术层面进行合理的设计和技术选型才可以。本文只讲述微观层面是如何应对多线程高并发的,介绍著名的CAS原理以及其广泛应用。 本文中jdk版本使用的是jdk1.7.0_55. 不同版本实现可能稍有差异.CAS无锁实现原理为什原创 2016-12-20 12:53:39 · 30053 阅读 · 3 评论 -
disruptor学习教程(一)helloWord
一、什么是 Disruptor 从功能上来看,Disruptor 是实现了“队列”的功能,而且是一个有界队列。那么它的应用场景自然就是“生产者-消费者”模型的应用场合了。可以拿 JDK 的 BlockingQueue 做一个简单对比,以便更好地认识 Disruptor 是什么。我们知道 BlockingQueue 是一个 FIFO 队列,生产者(Producer)往队列里发布(publish)一项事原创 2016-12-20 12:54:19 · 3602 阅读 · 0 评论 -
akka学习教程(十四) akka分布式实战
上一篇文章介绍了akka集群的搭建,现在假如服务的生产者与消费者两个角色,模拟真实的服务调用。 本篇文章主要参考 使用Akka构建集群(二)整体架构服务端三个服务,端口为2552,2553,2551;客户端有两个:2554,2555 服务端角色为[server];客户端角色为[client]服务端集群角色首先配置服务端集群角色为[server]:akka { loglevel = "I原创 2017-01-18 17:48:04 · 24013 阅读 · 7 评论 -
akka学习教程(十三) akka分布式
akka集群概述Akka群集提供容错分散的对等群集成员服务,没有单点故障或单点瓶颈。 它使用gossip协议和自动故障检测器。原创 2017-01-18 15:55:27 · 92312 阅读 · 2 评论 -
akka学习教程(十二) Spring与Akka的集成
概述 近年来随着Spark的火热,Spark本身使用的开发语言Scala、用到的分布式内存文件系统Tachyon(现已更名为Alluxio)以及基于Actor并发编程模型的Akka都引起了大家的注意。了解过Akka或者Actor的人应该知道,这的确是一个很不错的框架,按照Akka官网的描述——使用Akka使得构建强有力的并发与分布式应用将更加容易。由于历史原因,很多Web系统在开发分布式服务时首转载 2017-01-18 15:13:19 · 10729 阅读 · 0 评论 -
akka学习教程(十) agent
我们知道在JDK中,编写多线程代码时要谨慎处理临界区的数据,可以加锁或者使用JDK自带的CAS库:atomic相关包。那么在akka中怎么处理呢?akka给我们提供了一个agent。可以使用agent来实现共享变量的安全处理。下面示例为10个actor并发累加countAgent变量。每个累加10000次。如果正确的话,最终结果应该是10W。原创 2017-01-16 18:56:42 · 6437 阅读 · 1 评论 -
akka学习教程(九) STM软件事务内存
软件事务内存(STM):顾名思义,这是事务。与关系型数据库中的事务类似,具有ACID属性。 在分布式任务中,有可能会有和事务相关的处理,这里将举例说明AKKA中STM的用法。假设公司给员工发工资业务,CompanyActor是公司actor, EmployeeActor是员工actor,公司账户减钱,员工账户加钱,这就要求事务。代码中有重要注释。package akka.stm;import ak原创 2017-01-16 18:22:44 · 6914 阅读 · 1 评论 -
akka学习教程(八) Actor中的Future-询问模式
和java线程中的future挺像的,可以将一个actor的返回结果重定向到另一个actor中进行处理,主actor或者进程无需等待actor的返回结果。原创 2017-01-16 16:32:23 · 8807 阅读 · 2 评论 -
akka学习教程(七) 内置状态转换Procedure
在actor运行过程中,可能会有多种状态,各个状态间可能会存在切换的情况,akka已经帮我们考虑到这种情况情况的处理:Procedure. 下面模拟一个婴儿。婴儿有两种不同的状态,开心和生气,婴儿有个特点就是好玩,永远不会累,所以让其睡觉婴儿就会生气,让他继续玩就会很高兴。 简单代码如下:package akka;import akka.actor.*;import akka.event.Lo原创 2017-01-16 15:58:20 · 5860 阅读 · 4 评论 -
akka学习教程(六) 路由器Router
通常在分布式任务调度系统中会有这样的需求:一组actor提供相同的服务,我们在调用任务的时候只需要选择其中一个actor进行处理即可。 其实这就是一个负载均衡或者说路由策略,akka作为一个高性能支持并发的actor模型,可以用来作为任务调度集群使用,当然负载均衡就是其本职工作了,akka提供了Router来进行消息的调度。由于负载均衡原理过于简单,既不多说了,直接上代码(这里借用之前章节的Inb原创 2017-01-16 14:48:20 · 12283 阅读 · 5 评论 -
akka学习教程(五) inbox消息收件箱
我们知道,整个akka的actor系统是通过消息进行传递的,之前的几个教程都是通过一个actor来给另一个actor发消息。其实还可以使用inbox消息收件箱来给某个actor发消息,并且可以进行交互。package akka;import akka.actor.*;import akka.event.Logging;import akka.event.LoggingAdapter;impor原创 2017-01-12 14:40:53 · 9846 阅读 · 0 评论 -
akka学习教程(四) actor生命周期
akka值actor生命周期原创 2017-01-05 15:48:25 · 15204 阅读 · 1 评论 -
akka学习教程(三) 不可变对象
我们都知道在编写java线程的时候,要传递不可变对象,这里akka也是如此 下面这个例子就是传递不可变对象:package akka.unmodifiable;import java.util.Collections;import java.util.List;/** * Created by liubenlong on 2017/1/5. * * actor中传递的对象要是不可变对象。当原创 2017-01-05 15:41:23 · 13235 阅读 · 0 评论 -
akka学习教程(十一) akka持久化
akka系列文章目录akka学习教程(十四) akka分布式实战akka学习教程(十三) akka分布式akka学习教程(十二) Spring与Akka的集成akka学习教程(十一) akka持久化akka学习教程(十) agentakka学习教程(九) STM软件事务内存akka学习教程(八) Actor中的Future-询问模式akka学习教程(七) 内置状态转换Procedur原创 2017-01-17 16:26:47 · 7758 阅读 · 0 评论 -
ZKClient zookeeper 丢失事件 分析
由于ZK的watch一次性注册原因,以及client断开连接到重新连接上这一段时间差,可能导致zookeeper客户端不能够接收到完所有的ZK事件 不要强依赖于ZK的事件,要知道ZK事件可能丢失,也可能多个事件收到的数据是相同的(注意等幂性)。ZK能做到的是分布式数据一致性服务,可以保证最终一致性。在开发的时候要谨慎处理。 下面是测试以及原因分析原创 2016-12-17 16:25:54 · 10507 阅读 · 0 评论