- 博客(18)
- 资源 (16)
- 收藏
- 关注
原创 令牌桶算法VS漏桶算法
漏桶漏桶的出水速度是恒定的,漏桶算法能很好地控制流量的访问速度,但如果瞬时大流量的话,将有大部分请求被丢弃掉(也就是所谓的溢出)。令牌桶生成令牌的速度(入水速度)是恒定的,而请求去拿令牌是没有速度限制的。这意味,面对瞬时大流量,该算法可以在短时间内请求拿到大量令牌,能够在限制数据的平均传输速率的同时还允许某种程度的突发传输。...
2019-04-03 11:23:26 546
转载 MapReduce: shuffle执行过程
Shuffle的正常意思是洗牌或弄乱,可能大家更熟悉的是Java API里的Collections.shuffle(List)方法,它会随机地打乱参数list里的元素顺序。如果你不知道MapReduce里Shuffle是什么,那么请看这张图:这张是官方对Shuffle过程的描述。但我可以肯定的是,单从这张图你基本不可能明白Shuffle的过程,因为它与事实相差挺多,细节也是错乱的。后面我会具体...
2019-04-02 18:14:28 270
转载 Kafka的设计原理
Kafka整体系统架构设计如下:一个典型的 Kafka 集群包含若干 Producer,若干 Broker,若干 Consumer,以及一个 Zookeeper 集群。Kafka 通过 Zookeeper 管理集群配置,选举 Leader,以及在 Consumer Group发生变化时进行 Rebalance。Producer 使用 push模式将消息发布到 Broker;Consumer ...
2019-04-02 17:41:02 405
原创 MySQL8.0新特性
文章目录优化器索引窗口函数InnoDB增强账号与安全通用表表达式JSON增强优化器索引窗口函数InnoDB增强账号与安全① 创建用户和用户授权的命令需要分开执行:mysql> create user ‘tony’@’%’ identified by ‘Tony@2018’;mysql> grant all privileges on . to ‘tony’@’%’;② ...
2019-03-31 00:52:52 895
原创 一些常见的消息队列面试题整理
你们公司生产环境用的是什么消息中间件?RabbitMQ、ActiveMQ、RocketMQ、Kafka优缺点与应用场景为什么在你们系统架构中要引入消息中间件?系统解耦、异步调用、流量削峰说说系统架构引入消息中间件有什么缺点?系统可用性降低(MQ挂了)、系统稳定性降低(MQ消息重发、丢失等)、分布式一致性问题(需要分布式事务方案来保障)消息中间件集群崩溃,如何保证百万生产...
2019-03-29 10:24:52 9147
转载 ZooKeeper分布式锁的实现原理
这篇文章再给大家聊一下ZooKeeper实现分布式锁的原理。同理,我是直接基于比较常用的Curator这个开源框架,聊一下这个框架对ZooKeeper(以下简称zk)分布式锁的实现。一般除了大公司是自行封装分布式锁框架之外,建议大家用这些开源框架封装好的分布式锁实现,这是一个比较快捷省事儿的方式。ZooKeeper分布式锁机制首先大家看看下面的图,如果现在有两个客户端一起要争抢zk上的一把...
2019-03-27 14:40:36 198
转载 分布式锁高并发优化实践
因为库存超卖问题是有很多种技术解决方案的,比如悲观锁,分布式锁,乐观锁,队列串行化,Redis原子操作,等等吧。但是既然面试官兄弟限定死了用分布式锁来解决库存超卖,我估计就是想问一个点:在高并发场景下如何优化分布式锁的并发性能。我觉得,面试官提问的角度还是可以接受的,因为在实际落地生产的时候,分布式锁这个东西保证了数据的准确性,但是他天然并发能力有点弱。刚好我之前在自己项目的其他场景下,确实...
2019-03-27 12:02:41 802
转载 Redis分布式锁的实现原理
说实话,如果在公司里落地生产环境用分布式锁的时候,一定是会用开源类库的,比如Redis分布式锁,一般就是用Redisson框架就好了,非常的简便易用。大家如果有兴趣,可以去看看Redisson的官网,看看如何在项目中引入Redisson的依赖,然后基于Redis实现分布式锁的加锁与释放锁。下面给大家看一段简单的使用代码片段,先直观的感受一下:怎么样,上面那段代码,是不是感觉简单的不行!此...
2019-03-27 11:41:50 641
转载 最终一致性分布式事务如何保障实际生产中99.99%高可用
在实际系统的开发过程中,可能服务间的调用是异步的。也就是说,一个服务发送一个消息给MQ,即消息中间件,比如RocketMQ、RabbitMQ、Kafka、ActiveMQ等等。然后,另外一个服务从MQ消费到一条消息后进行处理。这就成了基于MQ的异步调用了。那么针对这种基于MQ的异步调用,如何保证各个服务间的分布式事务呢?也就是说,我希望的是基于MQ实现异步调用的多个服务的业务逻辑,要么一起...
2019-03-27 11:31:32 616
转载 TCC分布式事务的实现原理
文章目录业务场景介绍落地实现TCC分布式事务1、TCC实现阶段一:**Try**2、TCC实现阶段二:Confirm3、TCC实现阶段三:Cancel总结与思考业务场景介绍咱们先来看看业务场景,假设你现在有一个电商系统,里面有一个支付订单的场景。那对一个订单支付之后,我们需要做下面的步骤:更改订单的状态为“已支付”扣减商品库存给会员增加积分创建销售出库单通知仓库发货这是一系列比...
2019-03-26 15:36:03 316
转载 微服务架构如何保障99.99%高可用
微服务架构本身最最核心的保障高可用的措施,就是两点:一个是基于Hystrix做资源隔离以及熔断;另一个是做备用降级方案。如果资源隔离和降级都做的很完善,那么在双11这种高并发场景下,也许可能会出现个别的服务故障,但是绝不会蔓延到整个系统全部宕机。业务场景介绍大家首先回顾一下下面这张图,这是上篇文章中说到的一个公司的系统。如上图,核心服务A调用了核心服务B和C,在核心服务B...
2019-03-26 11:56:08 2715
转载 每秒上万并发下的Spring Cloud参数优化实战
场景引入,问题初现朋友A的公司做互联网类的创业,组建了一个小型研发团队,上来就用了Spring Cloud技术栈来构建微服务架构的系统。一段时间没日没夜的加班,好不容易核心业务系统给做出来了,平时正常QA测试没发现什么大毛病,感觉性能还不错,一切都很完美。然后系统就这么上线了,一开始用户规模很小,注册用户量小几十万,日活几千用户。每天都有新的数据进入数据库的表中,就这么日积月累的,没想...
2019-03-26 11:35:16 627
转载 Java并发面试问题之微服务注册中心的读写锁优化
微服务注册中心的读写锁优化先来看看下面的图,现在我们知道一个微服务注册中心(可以是Eureka或者Consul或者你自己写的一个微服务注册中心),他肯定会在内存中有一个服务注册表的概念。这个服务注册表中就是存放了各个微服务注册时发送过来的自己的地址信息,里面保存了每个服务有多少个服务实例,每个服务实例部署在哪台机器上监听哪个端口号,主要是这样的一些信息。OK,那现在问题来了,这个服务注册表...
2019-03-25 21:41:52 1749
转载 微服务注册中心如何承载大型系统的千万级访问
文章目录问题起源Eureka Server设计精妙的注册表存储结构Eureka Server端优秀的多级缓存机制总结问题起源下面这些问题,大家先看看,有个大概印象。带着这些问题,来看后面的内容,效果更佳Eureka注册中心使用什么样的方式来储存各个服务注册时发送过来的机器地址和端口号?各个服务找Eureka Server拉取注册表的时候,是什么样的频率?各个服务是如何拉取注册表的?一个...
2019-03-25 21:20:04 217
转载 Spring Cloud底层原理
文章目录Spring Cloud核心组件:EurekaSpring Cloud核心组件:FeignSpring Cloud核心组件:RibbonSpring Cloud核心组件:HystrixSpring Cloud核心组件:Zuul总结Spring Cloud核心组件:Eureka如上图所示,库存服务、仓储服务、积分服务中都有一个Eureka Client组件,这个组件专门负责将这个服务的...
2019-03-25 21:02:21 255
转载 Java并发面试问题之公平锁与非公平锁
非公平锁先来聊聊非公平锁是啥,现在大家先回过头来看下面这张图。如上图,现在线程1加了锁,然后线程2尝试加锁,失败后进入了等待队列,处于阻塞中。然后线程1释放了锁,准备来唤醒线程2重新尝试加锁。注意一点,此时线程2可还停留在等待队列里啊,还没开始尝试重新加锁呢!然而,不幸的事情发生了,这时半路杀出个程咬金,来了一个线程3!线程3突然尝试对ReentrantLock发起加锁操作,此时会发生什...
2019-03-25 20:08:46 610
转载 Java并发面试问题之谈谈你对AQS的理解
ReentrantLock加锁和释放锁的底层原理好了,那么现在如果有一个线程过来尝试用ReentrantLock的lock()方法进行加锁,会发生什么事情呢?很简单,这个AQS对象内部有一个核心的变量叫做state,是int类型的,代表了加锁的状态。初始状态下,这个state的值是0。另外,这个AQS内部还有一个关键变量,用来记录当前加锁的是哪个线程,初始化状态下,这个变量是null。接...
2019-03-25 20:04:35 2632
原创 哈希取模余的基底为什么要选择素数?
蝉的哲学蝉的生命周期为13年或17年,却很少有14、15或16年,为什么呢?蝉是弱势群体,有很多天敌,选择素数作为其生命周期能最大减少与其天敌们共存的时间,增加自己的存活率,这也是自然选择的结果。原理分析从蝉的哲学中获得启示,将哈希取余的基底选择为素数能最大减少哈希冲突情况的发生,使哈希分布更均匀。假设hash(key) = key % M,若 M = 2k, 则 key % M = k...
2019-03-25 00:00:12 1480
Head First 设计模式(英文版)
2018-10-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人