架构
刘莅
黄沙百战穿金甲,不破楼兰终不还
展开
-
Sentinel:流控规则
上一篇文章,我们一起探讨了Sentinel流量控制的简单用法,本小节,我们一起探讨Sentinel的三种流控规则。说到系统接口的限流,我们一般会想到用几种限流的算法,比如漏桶算法、令牌桶算法,在单机内,我们可以采用Guava中提供的API帮我们实现限流功能。而在分布式环境中,我们可以用Redis、MQ等中间件来实现限流的功能。然而,Sentinel为我们提供了更加灵活的限流规则和策略,同时也支持单机和集群模式,方便我们根据不同的应用场景,选择不同的流控、限流的规则。常用的有如...原创 2020-10-16 17:22:09 · 2684 阅读 · 1 评论 -
Apache Dubbo系列:Dubbo线程模型
导读我们都知道,Dubbo使用默认的网络传输框架是Netty,服务提供方NettyServer使用两个NIO线程池EventLoopGroup(boss)和EventLoopGroup(worker),前者负责接收客户端的连接,并分发给后者处理。我们把这两个线程组成为I/O线程(或Netty线程)。如果服务提供方能快速处理客户端的请求,那么直接在I/O线程(Netty线程)上处理比较合适。否则(如查DB、请求三方接口等),需要将客户端的请求,分派(Dispatcher)给业务线程池(Dubbo.原创 2020-10-16 16:40:51 · 454 阅读 · 0 评论 -
KeepAlived配置与Nginx高可用
keepalived安装和nginx高可用一、安装keepalived1.1 下载keepalived官方网址 http://keepalived.org ,下载1.1.19版本: wget http://www.keepalived.org/software/keepalived-1.1.19.tar.gztar -xf keepalived-1.1.19.tar.gz...原创 2018-04-11 15:40:25 · 11238 阅读 · 0 评论 -
分布式环境下利用Redis实现分布式锁
在某些高并发的业务场景下,例如秒杀、选课等系统,为了避免出现商品超卖、选课人数超出课程规定人数的问题发生,读写数据库时需要进行加锁操作,保证某时刻已有一个用户在操作。在Java单机应用中,直接使用synchronized关键字没有任何毛病,但在分布式系统中就不行了,这时就需要引入分布式锁来解决问题。分布式锁可以用Zookeeper或Redis来实现,本文重点讲解使用Redis实现分布式锁。...原创 2018-04-22 21:25:38 · 11371 阅读 · 0 评论 -
RabbitMQ中的事务与confirmSelect模式
好久没写技术文章了,由于公司马上要做消息相关的业务,所以最近在Docker上搭了一台RabbitMQ并研究研究。从网易蜂巢上拉取的镜像:docker pull hub.c.163.com/library/rabbitmq:latest启动容器:docker run -d --hostname my-rabbit --name some-rabbit -p 15672:15672...原创 2018-08-06 19:34:58 · 13931 阅读 · 1 评论 -
Apache 开源的curator 基于Zookeeper实现分布式锁以及源码分析
前一段时间,我发表了一篇关于Redis实现分布式锁 分布式环境下利用Redis实现分布式锁,今天我带领大家熟悉用zookeeper实现分布式锁。在学习分布式锁之前,让我们想一想,在什么业务场景下会用到分布式锁以及设计分布式锁要注意什么?分布式锁介绍1、在什么业务场景中会使用到分布式锁当多个客户端访问服务器上同一个资源的时候,需要保证数据的一致性,比如秒杀系统,举个栗子:某件商品...原创 2018-08-25 20:38:50 · 7905 阅读 · 0 评论 -
Nginx性能调优,解决C10K问题
公司的技术总监最近出了一道架构方面的问题让我们同组的开发人员设计,题目是这样的:有个签到功能,需要记录每个⽤户每年每⼀天的签到情况。假设⽤户量在千万,甚⾄亿级,该如何设计。思考这个问题后,我给出的设计方案如下:第一层:通过DNS,同一个域名绑定多个IP,在DNS上进行负载均衡。第二层:中央Nginx集群,通过DNS负载均衡后,通过nginx二次负载均衡(Nginx的配置...原创 2018-09-10 20:06:07 · 10745 阅读 · 0 评论 -
Dubbo如何正确捕获业务异常
笔者所在的公司,项目正在重构,从一个SpringBoot项目往Dubbo上迁移,但在拆分后发现一个问题,服务消费者(后文用Consumer代替)无法正确捕获服务提供者(后文用provider代替)所抛出的非受检查异常。在未拆分之前,项目都是打成一个jar包运行,service层未处理的unchecked异常,在controller层捕获到后可以正常打印出异常的堆栈信息,方便开发人员快速定位...原创 2019-02-09 21:28:17 · 10848 阅读 · 3 评论 -
从数据存储角度分析Redis性能为何如此高
胸藏文墨怀若谷,腹有诗书气自华前言Redis作为一种KV缓存服务器,有着极高的性能,相对于memcache,Redis支持更多中数据类型,因此在业界广泛应用。正文记得笔者刚毕业那会参加面试,面试官会问我Redis为什么快,由于当时技术水平有限,我只能回答出如下两点:数据是存储在内存中的。 Redis是单线程的。当然,将数据存储在内存中,读取的时候后不需要进行磁...原创 2019-01-30 13:19:04 · 4001 阅读 · 0 评论