自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 im系统设计

这一篇文章写得不错,记录下:https://xie.infoq.cn/article/19e95a78e2f5389588debfb1c

2021-05-16 14:25:23 253

转载 Protocol Buffer 序列化原理大揭秘

这篇文章写得非常的棒,很清晰的介绍protobuf的原理。mark一下~连接:https://blog.csdn.net/carson_ho/article/details/70568606

2021-05-08 11:03:13 183

原创 Elasticsearch分⽚及其⽣命周期

分⽚的内部原理什么是 ES 的分⽚: ES 中最⼩的⼯作单元 / 是⼀个 Lucene 的 Index。 ⼀些问题: 为什么 ES 的搜索是近实时的(1 秒后被搜到)? ES 如何保证在断电时数据也不会丢失? 为什么删除⽂档,并不会⽴刻释放空间? 倒排索引不可变性倒排索引采⽤ Immutable Design,⼀旦⽣成,不可更改 不可变性,带来了的好处如下:⽆需考虑并发写⽂件的问题,避免了锁机制带来的性能问题 ⼀旦读⼊内核的⽂件系统缓存,便留在哪⾥。只要⽂件系统存有⾜够的

2021-04-18 19:20:01 279

原创 Elasticsearch⽂档分布式存储

⽂档存储在分⽚上⽂档会存储在具体的某个主分⽚和副本分⽚上:例如 ⽂档 1, 会存储在 P0 和 R0 分⽚上 ⽂档到分⽚的映射算法 确保⽂档能均匀分布在所⽤分⽚上,充分利⽤硬件资源,避免部分机器空闲,部分机器繁忙 潜在的算法 随机 / Round Robin。当查询⽂档 1,分⽚数很多,需要多次查询才可能查到 ⽂档 1 维护⽂档到分⽚的映射关系,当⽂档数据量⼤的时候,维护成本⾼ 实时计算,通过⽂档 1,⾃动算出,需要去那个分⽚上获取⽂档 ⽂档到分⽚的路由算法shard = ha

2021-04-18 19:06:31 116

原创 Elasticsearch集群及选主与脑裂问题

分布式特性 Elasticsearch 的分布式架构带来的好处 存储的⽔平扩容,⽀持 PB 级数据 提⾼系统的可⽤性,部分节点停⽌服务,整个集群的服务不受影响 Elasticsearch 的分布式架构 不同的集群通过不同的名字来区分,默认名字 “elasticsearch” 通过配置⽂件修改,或者在命令⾏中 -E cluster.name=geektime 进⾏设定 Coordinating Node处理请求的节点,叫 Coordinating Node 路由请求到正确的节

2021-04-18 17:11:03 311

原创 Elasticsearch基本概念(2)

节点Master-eligible nodes 和 Master Node每个节点启动后,默认就是一个Master eligible节点 可以设置 node.master:false 禁止 Master-eligible节点可以参加选主流程,成为Master节点 当第一个节点启动时候,它会将自己选举成Master节点 每个节点上都保存了集群的状态,只有Master节点才能修改集群的状态信息 任意节点都能修改信息会导致数据的不一致性 集群状态(C山ster State),维护了一个集.

2021-04-18 14:35:57 95 1

原创 Elasticsearch基本概念(1)

Elasticsearch基本概念Index索引type类型 document文档Node节点Shard节点文档(Document)Elasticsearch是面向文档的,文档是所有可搜索数据的最小单位 日志文件中的日志项 一本电影的具体信息/—张唱片的详细信息 MP3播放器里的一首歌/ 一篇PDF文档中的具体内容 文档会被序列化成JSON格式,保存在Elasticsearch中 JSON对象由字段组成 ..

2021-04-18 01:08:15 81

原创 传输控制协议(TCP)

一、TCP报文段结构二、TCP连接管理(1)三次握手为什么要三次握手?1.防止过期、失效的连接请求到达后,导致无效连接的建立。2.确保连接双方彼此完全清楚对方状态,保证可靠、稳定的建立连接。(2)四次挥手为什么要四次挥手?1.为了确保连接断开的可靠,不会由于不可靠连接断开破坏TCP的可靠数据传输。2.四次挥手断开连接称为对称断开连接,要求两端都主动提出断开连接请求,这样可以确保双方均能确认是否全部收到对方的数据,达到可靠传输的目的为什么客户端需要等..

2021-04-14 23:40:10 410

原创 seata源码解析:AT模式-启动分析

引言在官方例子中,AT模式启动主要会加载:io.seata.spring.annotation.GlobalTransactionScanner 这个bean,使用AT模式必须在执行业务功能的方法上加上@GlobalTransactional注解,接下来我们来看看seata启动时做了哪些事情。xml配置bean:dubbo-business.xml<bean class="io.seata.spring.annotation.GlobalTransactionScanner">

2021-04-14 23:28:02 582

原创 seata源码解析:RPC模块详解

前言Seata是一个分布式事务解决方案框架,既然是分布式性质的事务解决方案,那么Seata必然涉及到网络通信。Seata内部实现了一个RPC模块用于RM、TM、TC进行事务的创建、提交、回滚等操作之间的通信。项目结构Seata rpc模块位于core项目中,代码结构整体预览如下所示:源码分析Seata是使用netty做为RPC的底层通信,接下来我们先分析下Seata对netty模块的使用。Seata封装的rpc通信类图如下:1.Netty Server通信模块1.1

2021-04-14 21:51:06 1230 1

原创 Sentinel源码阅读:集群限流

使用场景在某种产景下,我们提供的服务器资源不是很平均如下图所示,4个服务提供者分别有2c4g的配置它最高tps为1000,有4c8g的配置最高tps为2000。在这种产景下我们为了更加充分的利用服务器资源和保障服务不被流量压垮,那么对不同配置的服务器添加不同的限流阈值。如果我们引入Sentinel这种机制,它无法对多个机器配置不同的限流阈值。所以我们需要引入另外的一种限流机制--集群限流。集群限流主要是为所有的provider设置一个整体阈值,比如上图中可以设置一个整体为6000的阈值。

2021-04-14 19:05:04 236 1

原创 Setinel源码阅读:系统自适应保护

概述Sentinel 系统自适应限流从整体维度对应用入口流量进行控制,结合应用的 Load、CPU 使用率、总体平均 RT、入口 QPS 和并发线程数等几个维度的监控指标,通过自适应的流控策略,让系统的入口流量和系统的负载达到一个平衡,让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。Sentinel系统自适应限流参考了TCP BBR实现,根据系统能处理的请求和允许进来的请求来做一个平衡,而不是通过一个系统load来做限流,它最终的目的是在系统不被拖垮的情况下,提高系统吞吐量,而不是load一定

2021-04-14 18:59:00 476

原创 Sentinel源码阅读:RateLimiterController匀速排队

RateLimiterController 详解这一篇文章主要介绍Sentinel中关于匀速排队的限流机制。匀速排队限流的核心思想是以固定的时间间隔让请求通过,当请求到来时如果当前请求距离上个请求通过的时间间隔不小于预设的值则让请求通过。否则,计算当前请求预期通过时间,如果当前请求通过的时间小于预设的timeout时间,则计算当前时间与预设时间的差值,休眠等待直到预设时间到来(排队等待处理)。若预期时间大于timeout时间则拒接该请求通过。这种限流机制主要是限制突发流量,这时我们不希望把所有的

2021-04-14 18:53:36 1134 1

原创 Sentinel源码阅读:流控管理

Sentinel FlowSlot 流控管理sentinel 触发流控的类为FlowSlot,在sentinel中触发流控需要经过以下几个步骤:设置流控规则 采集调用信息 根据调用信息、流控规则决定是否进行限流1.FlowSlot我们先来了解下FlowSlot的类注释,通过注释来认识FlowSlot类有哪些功能,会做一些什么样的处理:合并了从以前的插槽(NodeSelectorSlot,ClusterNodeBuilderSlot和StatisticSlot),FlowSlot收.

2021-04-14 18:45:38 477

原创 Sentinel源码阅读:实时数据采集

Sentinel实时数据采集要实现限流需要进行数据采集,这一篇文章将重点解析数据采集的实现原理。由上图可知,Sentinel中负责数据采集StatisticSlot是在责任链靠前的位置,StatisticSlot组件负责收集调用信息为后面的Slot进行相应的限流、熔断提供支撑,可以说StatisticSlot是Sentinel中核心之一。StatisticSlot类的注释,当进入这个Slot时我们需要分别计算以下各项: 资源ID的集群节点的总统计信息 来自不同调用者/来源的群集节点

2021-04-14 18:34:32 505

原创 Elasticsearch中text与keyword的区别

text类型1:支持分词,全文检索,支持模糊、精确查询,不支持聚合,排序操作; 2:test类型的最大支持的字符长度无限制,适合大字段存储;使用场景: 存储全文搜索数据, 例如: 邮箱内容、地址、代码块、博客文章内容等。 默认结合standard analyzer(标准解析器)对文本进行分词、倒排索引。 默认结合标准分析器进行词命中、词频相关度打分。keyword类型1:不进行分词,直接索引,支持模糊、支持精确匹配,支持聚合、排序操作。2:keyword

2021-04-14 15:12:40 129

原创 常用注册中心对比

常用的注册中心如下:根据上表的对比我们可以从以下几个维度得出结论: 生态:各注册中心对Go语言都有支持,但是Nacos、 Consul、Etcd 社区活跃,zookeeper和Eureka社区活跃度较低; 易用性:Nacos、Eureka、Consul都有现成的管控平台,Etcd、zookeeper本身作为kv存储,没有相应的管控平台,Nacos支持中文界面,比较符合国人使用习惯; 场景支持:CP模型主要针对强一致场景,如金融类,AP模型适用于高可用场景,Nacos可以同时

2021-04-13 22:16:10 1558 3

原创 常见的ES面试题

题记git上发现了网友总结的Elasticsearch BAT大厂面试题。只有题目,部分有答案,但不全。 正好抽出一些时间一起梳理一下。 既然是面试题,每个人都会有自己的结合业务场景的答案,没有非常标准的答案。 欢迎大家留言拍砖指正。1、elasticsearch了解多少,说说你们公司es的集群架构,索引数据大小,分片有多少,以及一些调优手段 。面试官:想了解应聘者之前公司接触的ES使用场景、规模,有没有做过比较大规模的索引设计、规划、调优。 解答: 如实结合自己的实践场景回答即可。 比如:

2021-04-11 14:42:58 1339

原创 下一代低延迟垃圾收集器:ZGC

ZGC垃圾收集器介绍ZGC(Z Garbage Collector)是一款由Oracle公司研发的,以低延迟为首要目标的一款垃圾收集器。它是基于动态Region内存布局,(暂时)不设年龄分代,使用了读屏障、染色指针和内存多重映射等技术来实现可并发的标记-整理算法的收集器。在JDK 11新加入,还在实验阶段,主要特点是:回收TB级内存(最大4T),停顿时间不超过10ms。动态RegionZGC的Region可以具有如图所示的大、中、小三类容量:小型Region(Small Region):

2021-04-11 14:23:56 137

原创 Seata源码解析:术语表

TC (Transaction Coordinator) - 事务协调者维护全局和分支事务的状态,驱动全局事务提交或回滚。TM (Transaction Manager) - 事务管理器定义全局事务的范围:开始全局事务、提交或回滚全局事务。RM (Resource Manager) - 资源管理器管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。...

2021-04-11 13:11:19 140

原创 Seata源码解析:初探官方例子

快速开始让我们从一个微服务示例开始。官方例子使用的是seata分布式事务中的AT模式,也就是例子是基于:基于支持本地 ACID 事务的关系型数据库。 Java 应用,通过 JDBC 访问数据库。。用例用户购买商品的业务逻辑。整个业务逻辑由3个微服务提供支持:仓储服务:对给定的商品扣除仓储数量。 订单服务:根据采购需求创建订单。 帐户服务:从用户帐户中扣除余额。架构图​仓储服务public interface StorageService { /...

2021-04-11 12:08:21 442 2

原创 CMS收集器与G1收集器区别

CMS垃圾收集器特点:内存区域分为:年轻代 年老代 永久带回收过程初始标记 并发标记 重新标记 并发回收cms垃圾收集器回收过程由以上几个步骤组成,其中1、3步骤会stop-the-world。优点:并发、低停顿缺点:无法清理浮动垃圾,4.并发回收 阶段也会产生垃圾,这部分垃圾CMS是无法进行回收只有等到下次垃圾回收周期才能进行清理。 对cpu资源敏感,如果cpu资源不够用会比其他垃圾收集器性能更差。 CMS采用“标记-清除”算法会产生空间碎片,碎片过多

2021-04-11 11:56:31 603

原创 G1垃圾收集器

G1概述较旧的垃圾收集器(串行,并行,CMS)将堆分成三个部分:固定内存大小的年轻代,旧代和永久代。所有内存对象最终都属于这三个部分之一:年轻代 年老代 永久带G1收集器采用了不同的方法。 堆被划分为一组大小相等的堆区域,每个堆区域都包含一个连续范围的虚拟内存。某些区域集被分配了与较旧的收集者相同的角色(eden,幸存者,旧角色),但是它们的大小并没有固定。这在内存使用方面提供了更大的灵活性。执行垃圾收集时,G1以类似于CMS收集器的方式运行。G1执行并发全局...

2021-04-11 10:36:47 70

原创 Sentinel源码阅读:工作流程

1.工作主流程介绍sentinel工作主要流程前我们先思考一个问题:如果是你来实现一个限流框架你会怎么做?我先讲下我的一些思考,主要从这么几个方面去做: 确定好限流算法,如计数器、漏桶、令牌桶等算法 实现限流需要哪些条件?装配配置的限流接口限流阈值限流策略等,采集调用信息、触发限流规则 框架拓展性考虑引入spi机制 用什么设计模式去实现,方便拓展? 接下来我们带着我们的思考与实现思路,看下Sentinel的主要工作原理,以及他的设计实现。Sentinel整体架构设计图:

2021-04-06 13:19:00 462

原创 Sentinel源码阅读:滑动窗口实现原理

Sentinel限流实现原理要实现限流、熔断等功能,首先要解决的是如何对资源的访问信息进行收集。例如将一个接口限制调用设置为1w/tps,那么我们如何知道当前接口的实时tps?1.滑动窗口核心类图Sentinel是采用滑动窗口来实时收集接口的调用信息,核心的类图结构如下:Metric指标收集核心接口,主要定义一个滑动窗口中成功的数量、异常数量、阻塞数量,TPS、响应时间等数据。LeapArray滑动窗口顶层数据结构,包含一个一个的窗口数据。ArrayMetric..

2021-04-04 14:14:02 911 1

转载 微信红包系统设计方案

2017 年 1 月 28 日,正月初一,微信公布了用户在除夕当天收发微信红包的数量——142 亿个,而其收发峰值也已达到 76 万每秒。百亿级别的红包,如何保障并发性能与资金安全?这给微信带来了超级挑战。面对挑战,微信红包在分析了业界“秒杀”系统解决方案的基础上,采用了 SET 化、请求排队串行化、双维度分库表等设计,形成了独特的高并发、资金安全系统解决方案。实践证明,该方案表现稳定,且实现了除夕夜系统零故障运行。本文将为读者介绍百亿级别红包背后的系统高并发设计方案,包括微信红包的两大业务特点、微信红

2021-04-04 10:59:16 2716

原创 Sentinel源码阅读:dubbo适配原理

Sentinel是如何适配dubbo?Sentinel适配dubbo的代码在:sentinel-dubbo-adapter模块中,如下图所示:SentinelDubboProviderFilter代码中实现了Dubbo Filter接口。有上图所知,sentinel是利用了Dubbo Filter 和spi机制进行限流拓展,这样做的好处可以做到无需改动业务代码就能支持限流、熔断等功能。如果对Dubbo Filter机制不太了解的,可以去Dubbo官网了解下Dubbo Filter机.

2021-02-28 15:44:46 468 2

原创 Sentinel源码阅读:整体架构设计

Sentinel框架设计Sentinel内部构建一个一个调用关系树做为入口,内部采用高性能滑动窗口实现来进行数据采集,同时将各种不同拦截功能构造成一个连接链组成了限流、熔断等核心功能。Sentinel 将ProcessorSlot作为 SPI 接口进行扩展(1.7.2 版本以前SlotChainBuilder作为 SPI),使得 Slot Chain 具备了扩展的能力。您可以自行加入自定义的 slot 并编排 slot 间的顺序,从而可以给 Sentinel 添加自定义的功能。Sen...

2021-02-28 15:23:22 403 1

原创 kubernetes二进制安装

1.准备工作:k8s主机地址:192.168.0.4 k8s-master01192.168.0.5 k8s-master02192.168.0.6 k8s-master03192.168.0.7 k8s-node01192.168.0.8 k8s-node02etcd主机地址:192.168.0.26 etcd-01192.168.0.27 etcd-02192.168.0.28 etcd-03Service 和 Pods Ip 段划分:名称IP网段备注s

2021-02-24 01:27:09 1876 2

原创 etcd集群安装

1、安装cfsslwget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64chmod +x cfssl_linux-amd64 cfssljson_linux-amd64mv cfssl_linux-amd64 /usr/local/bin/cfsslmv cfssljson_linux-amd64 /usr/local/bin/cfssljson

2021-02-23 18:44:31 268

原创 Sentinel第一个例子

Sentinel项目结构介绍sentinel-coreSentinel 核心模块,实现限流、熔断等基本能力。sentinel-dashboardSentinel 可视化控制台,提供基本的管理界面,配置限流、熔断规则等,展示监控数据等。sentinel-adapterSentinel 适配,Sentinel-core 模块提供的是限流等基本API,主要是提供给应用自己去显示调用,对代码有侵入性,故该模块对主流框架进行了适配,目前已适配的模块如下:sentinel-cluster

2021-02-23 01:14:17 162

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除