- 博客(39)
- 收藏
- 关注
原创 redis怎么设计一个高性能hash表
在 dictExpand 函数中,具体执行是由 _dictNextPower 函数完成的,以下代码显示的 Hash 表扩容的操作,就是从 Hash 表的初始大小(DICT_HT_INITIAL_SIZE),不停地乘以 2,直到达到目标大小。事先声明一个很大的hash表嘛,这种肯定是不现实的,不说大小怎么确定,资源也会存在浪费。简单的说,就是分批来迁移桶内数据,并不会一次性把当前 Hash 表中的所有键,都拷贝到新位置,而是会分批拷贝,每次的键拷贝只拷贝 Hash 表中一个 bucket 中的哈希项。
2023-10-22 17:30:35
420
原创 01、字符传实现为什么是SDS而不是char*?
同理, sdshdr16、sdshdr32、sdshdr64 三种类型来说,它们的 len 和 alloc 数据类型分别是 uint16_t、uint32_t、uint64_t,即它们能表示的字符数组长度,分别不超过 2 的 16 次方、32 次方和 64 次方。到此,我们已经了解SDS底层数据结构,那么对比一下与传统的C语言操作字符串,SDS有哪些优点:SDS 结构中记录了字符数组已占用的空间和被分配的空间,提高读写效率。同样以字符串追加为例,Redis 中实现字符串追加的函数是 sds.c 文件中的。
2023-10-21 21:08:11
740
原创 redis 数据结构
上面已经聊到了为什么要先看目标结构,这里在啰嗦两句:可以想一下,我们在做大型系统设计的时候对于包命名模块都是经过精心设计的,而设计的基本原则大概就是能划归到同一个目录下的代码文件,一般都是具有相近功能目标的。这是因为源码是原理的体现,如果对 Redis 功能的基本原理不了解,直接阅读源码,就难于理解代码逻辑,增加了代码阅读的难度。这部分主要提供一些工具的支持,做一些主流成的辅助工作,包括:用于创建 Redis Cluster 的脚本、用于测试 LRU 算法效果的程序,以及可视化 rehash 过程的程序。
2023-10-21 14:53:18
470
原创 搞一搞用例图
基于公司技术方案的设计比较重视用例图,重新学习一下相关内容。用例要说明参与者与用例之间的关系,那么对用例图相关要点进行梳理用例图的定义及组成要素用例图的4种关系常用的用例图软件用例图核心作用是将系统需求和参与者之间的关系一目了然地呈现出来,有助于管理人员、开发人员和测试人员理解业务需求,确保项目按照预期对业务进行处理。参与者用例参与者与用例之间的关系。参与者:不是特指人,是指系统以外的,在使用系统或与系统交互中所扮演的角色。因此参与者可以是人,可以是事物,也可以是时间或其他系统等等。用例。
2023-05-17 21:36:59
466
原创 linux安装ElasticSearch7.1
环境服务器环境linux7 java环境jdk1.8下载下载页面 :下载地址个人下载地址解压解压elasticsearch-7.1.1-linux-x86_64.tar.gz到/usr/local/目录:tar -avxf elasticsearch-7.1.1-linux-x86_64.tar.gz -C /usr/local/进入目录elasticsearch新建data目录: mkdir data修改config/elasticsearch.yml直接添加就可以cl
2020-06-05 15:03:01
484
原创 Spring Cloud构建微服务架构:分布式服务跟踪(整合zipkin)
前言通过之前的学习,我们已经能够利用ELK平台提供的收集、存储、搜索等强大功能,对跟踪信息的管理和使用已经变得非常便利。但是,在ELK平台中的数据分析维度缺少对请求链路中各阶段时间延迟的关注,很多时候我们追溯请求链路的一个原因是为了找出整个调用链路中出现延迟过高的瓶颈源,亦或是为了实现对分布式系统做延迟监控等与时间消耗相关的需求,这时候类似ELK这样的日志分析系统就显得有些乏力了。对于这样的问题,我们就可以引入Zipkin来得以轻松解决。Zipkin简介Zipkin是Twitter的一个开源项目,它基
2020-05-26 11:14:10
216
原创 Spring Cloud构建微服务架构:分布式服务跟踪(整合logstash)
前言前文我们已经使用Spring Cloud Sleuth实现了为各微服务的日志信息中添加跟踪信息的功能,但是如果日志文件都离散的存储在各个服务实例的文件系统之上,仅仅通过查看日志文件来分析我们的请求链路依然是一件相当麻烦的差事,所以我们还需要一些工具来帮助我们集中的收集、存储和搜索这些跟踪信息。引入基于日志的分析系统是一个不错的选择,比如:ELK平台,它可以轻松的帮助我们来收集和存储这些跟踪日志,同时在需要的时候我们也可以根据Trace ID来轻松地搜索出对应请求链路相关的明细日志。ELK平台主要有由
2020-05-25 17:30:09
333
1
原创 关于MySQL自增主键的使用
前言使用背景问题,由于之前系统生成8位终端号使用随机数的模式, 现存在公司业务越大,随机数重复的概率要更高,系统提示错误很频繁,现需要生成新的规则来屏蔽这个功能的弊端。方案使用A0000000大写字母的格式替换之前8位纯数字格式,这样可以回避随机数重复问题。Mysql主键自增值自增值保存在哪儿?不同的引擎对于自增值的保存策略不同MyISAM引擎的自增值保存在数据文件中InnoDB引擎的自增值,在MySQL5.7及之前的版本,自增值保存在内存里,并没有持久化。每次重启后,第一次打开表的时候
2020-05-25 14:51:33
318
原创 Spring Cloud构建微服务架构:分布式服务跟踪(跟踪原理)
前言通过前一篇的学习,我们已经通过Spring Cloud Sleuth往微服务应用中添加了实现分布式跟踪具备的基本要素。分布式系统中的服务跟踪在理论上并不复杂,它主要包括下面两个关键点:为了实现请求跟踪,当请求发送到分布式系统的入口端点时,只需要服务跟踪框架为该请求创建一个唯一的跟踪标识,同时在分布式系统内部流转的时候,框架始终保持传递该唯一标识,直到返回给请求方为止,这个唯一标识就是前文中提到的Trace ID。通过Trace ID的记录,我们就能将所有请求过程日志关联起来。为了统计各处理单元
2020-05-22 17:29:03
185
原创 Spring Cloud构建微服务架构:分布式服务跟踪(入门)
前言之前文章我们已经了解到搭建微服务架构的常用组件,使用它们搭建起一个基础的微服务架构系统来实现我们的业务需求了。但是,随着业务的发展,我们的系统规模也会变得越来越大,各微服务间的调用关系也变得越来越错综复杂。这时,一个Rerquest访问系统,链路会经过后端不同的服务,这样每个请求都会有复杂的请求链,那链路跟踪日志就很有必要引入,它能帮助我们快速的发现错误根源以及监控分析每条请求链路上的性能瓶颈等好处。Spring Cloud Sleuth快速入门在介绍各种概念与原理之前,我们先通过实现一个简单的
2020-05-22 15:56:04
135
原创 Spring Cloud Stream消费失败后的处理策略 :自定义错误处理逻辑
前言之前我们介绍了会生效的消息重试功能,对于一些因环境原因、网络抖动等不稳定因素引发的问题可以起到比较好的作用。但是对于诸如代码本身存在的逻辑错误等,无论重试多少次都不可能成功的问题,是无法修复的。对于这样的情况,前文中说了可以利用日志记录消息内容,配合告警来做补救,但是很显然,这样做非常原始,并且太过笨拙,处理复杂度过高。针对该类问题的一种处理方法:自定义错误处理逻辑。自定义错误处理逻辑示例准备一个会消费失败的例子,可以直接沿用前文的工程,也可以新建一个,然后创建如下代码的逻辑:@Enabl
2020-05-21 17:09:17
534
原创 Spring Cloud Stream消费失败后的处理策略
前言之前我们已经了解到怎么Spring cloud stream的基本使用,下面我们了解一下,当消息消费失败之后该如何处理的几种方式。不过不论哪种方式,都需要与具体业务结合,解决不同业务场景可能出现的问题。自动重试应用场景重试可以解决什么问题呢?由于重试的基础逻辑并不会改变,所以通常重试只能解决因环境不稳定等外在因素导致的失败情况,比如:当我们接收到某个消息之后,需要调用一个外部的Web Service做一些事情,这个时候如果与外部系统的网络出现了抖动,导致调用失败而抛出异常。这个时候,通过重试消息
2020-05-21 15:38:36
370
原创 Spring Cloud Stream如何消费自己生产的消息
前言我们通过消费组的配置解决了多实例部署情况下消息重复消费这一入门时的常见问题。本文将继续说说在另外一个被经常问到的问题:如果微服务生产的消息自己也想要消费一份,应该如何实现呢?常见错误在放出标准答案前,先放出一个常见的错误姿势和告警信息首先,根据入门示例,为了生产和消费消息,需要定义两个通道:一个输入、一个输出。比如下面这样:public interface TestTopic { String OUTPUT = "example-topic"; String INPUT =
2020-05-20 17:29:37
227
原创 Spring Cloud构建微服务架构:消息驱动的微服务(消费分区)
前言通过之前的学习,我们已经能够在多实例环境下,保证同一消息只被一个消费者实例进行接收和处理。但是,对于一些特殊场景,除了要保证单一实例消费之外,还希望那些具备相同特征的消息都能够被同一个实例进行消费。这时候我们就需要对消息进行分区处理。使用消息分区在Spring Cloud Stream中实现消息分区非常简单,我们可以根据消费组示例做一些配置修改就能实现,具体如下:在消费者应用SinkReceiver中,我们对配置文件做一些修改,具体如下:spring.cloud.stream.bindin
2020-05-19 17:47:26
178
原创 使用RedisAtomicLong优化性能
前言在项目中许多过这样的需求,记录留做备忘。需要创建一个递增序列,这个序列会提供给多个应用来使用,这样就需要保持序列的原子递增。RedisAtomicLongspring-data-redis包中提供的,可以对数据中的Long类型进行原子性操作的类,下面是这个类的头:/** * Atomic long backed by Redis. Uses Redis atomic increment/decrement and watch/multi/exec operations for CAS *
2020-05-16 13:20:09
5911
1
原创 Spring Cloud构建微服务架构:消息驱动的微服务(核心概念)
前言通过之前的文章,我们已经对Spring cloud stream有了大概的理解,比如:输入、输出通道的绑定,通道消息事件的监听等。这篇文章,我们将详细介绍一下Spring Cloud Stream中是如何通过定义一些基础概念来对各种不同的消息中间件做抽象的。结构模型通过上图,我们可以了解到以下信息:Spring Cloud Stream构建的应用程序与消息中间件之间是通过绑定器Binder相关联的,绑定器对于应用程序而言起到了隔离作用,它使得不同消息中间件的实现细节对应用程序来说是透明的。C
2020-05-15 17:34:35
179
原创 使用redis生成自增序列号码
导入依赖<!--redis--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <exclusion> <groupId>org.springframework.boot</groupId> <arti
2020-05-13 11:52:29
1608
原创 Spring Cloud构建微服务架构(六)消息驱动的微服务(入门)
前言Spring Cloud Stream是什么?Spring Cloud Stream是一个用来为微服务应用构建消息驱动能力的框架。引入了发布-订阅、消费组以及消息分区这三个核心概念,可以有效地简化开发人员对消息中间件的使用复杂度,让系统开发人员可以有更多的精力关注于核心业务逻辑的处理。由于Spring Cloud Stream基于Spring Boot实现,所以它秉承了Spring Boot的优点,实现了自动化配置的功能帮忙我们可以快速的上手使用,但是目前为止Spring Cloud Stream只
2020-05-12 18:29:46
227
原创 Spring Cloud构建微服务架构(四)分布式配置中心(续)
前言我们先来了解下之前我们都做了什么?构建了config-server,连接到Git仓库在Git上创建了一个config-repo目录,用来存储配置信息构建了config-client,来获取Git中的配置信息在本文中,我们继续来看看Spring Cloud Config的一些其他能力。高可用问题传统作法通常在生产环境,Config Server与服务注册中心一样,我们也需要将...
2020-04-24 14:48:03
132
原创 Spring Cloud构建微服务架构(四)分布式配置中心
前言Spring Cloud Config为服务端和客户端提供了分布式系统的外部化配置支持。配置服务器为各应用的所有环境提供了一个中心化的外部配置。配置服务器默认采用git来存储配置信息,这样就有助于对环境配置进行版本管理,并且可以通过git客户端工具来方便的管理和访问配置内容。构建Config Server通过Spring Cloud构建一个Config Server,非常简单,只需要三...
2020-04-21 17:37:08
117
原创 Spring Cloud构建微服务架构(三)断路器
前言在微服务架构中,我们把原来耦合在一起的系统拆分成多个模块化子系统,他们之间通过服务注册和订阅的方式相互依赖,那么这样就会遇到因为网络或者依赖程序的自身问题出现阻塞等问题,这样会引起调用方得不到线程的释放,会不断积压,最后导致系统的瘫痪。那么,我们怎么避免这样的问题发生呢?举个例子,在一个电商网站,我们可以拆分成订单、库存等多个单元服务,用户创建一个订单的时候,在调用订单服务创建订单的时候...
2020-04-21 14:28:32
129
原创 Spring Cloud构建微服务架构(二)服务消费者
前言在上一篇文章中,我们成功创建了注册中心,以及注册了服务提供者:COMPUTE-SERVICE,接下来我们看一下如何来进行消费呢 ?RibbonRibbon是一个基于HTTP和TCP客户端的负载均衡器。Ribbon可以在通过客户端中配置的ribbonServerList服务端列表去轮询访问以达到均衡负载的作用。当Ribbon与Eureka联合使用时,ribbonServerList的维护是...
2020-04-20 15:09:37
95
原创 Spring Cloud构建微服务架构(一)服务注册与发现
前言Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。微服务架构什么是“微服务架构”呢?微服务架构就是将一个完整的应用从数据存储开始垂直拆分成多个不同的服务,每个服务都能独立部署、独立维护、独立扩展,服务...
2020-04-20 14:00:36
183
原创 Spring Cloud Alibaba与Dubbo的完美融合
前言对于Spring cloud 和dubbo有很多读者会拿来做比较,但是这里我们要明确一下,Spring cloud是一套较为完整的架构方案,而dubbo只是服务治理与RPC实现方案。那么我们已经有了Spring cloud整体架构为什么还要使用dubbo来做服务治理呢?Spring cloud : 长链 dubbo : 短链 ,想一下 我么网络交互外网使用长链,内网使用dub...
2020-04-17 16:17:35
846
原创 @SentinelResource注解使用详解
前言现在我们了解到通过Sentinel控制对Spring mvc接口层级的控制,那么在我们实际项目开发时不仅仅限于接口,可能对于某个方法的调用限流,对于某个外部资源的调用限流等都希望做到控制。那么如何使用@SentinelResource注解灵活的定义控制资源以及如何配置控制策略。自定义资源点下面的例子基于您已经引入了Spring Cloud Alibaba Sentinel为基础。第一...
2020-04-14 16:50:23
28651
2
原创 Sentinel Dashboard中修改规则同步到Nacos
前言前文可以了解到Nacos修改配置文件同步到Sentinel 中,那么我们做应用大多数场景为:修改流控信息如何实现Sentinel Dashboard中修改规则同步到Nacos代码实现第一步:修改pom.xml中的sentinel-datasource-nacos的依赖,将<scope>test</scope>注释掉,这样才能在主程序中使用。<depend...
2020-04-14 14:07:17
824
2
原创 Sentinel使用Apollo存储规则
前言本篇我们来了解一下Spring Cloud Alibaba Sentinel中如何将流控规则存储在Apollo中。使用Apollo存储限流规则Sentinel自身就支持了多种不同的数据源来持久化规则配置,目前包括以下几种方式:文件配置Nacos配置ZooKeeper配置Apollo配置准备工作下面我们将同时使用到Apollo和Sentinel Dashboard,所以可以...
2020-04-13 18:32:57
210
原创 Sentinel使用Nacos存储规则
前言Dashboard中设置的限流规则在应用重启之后会有丢失了的问题,那么这篇我们来讨论下如何持久化Sentinel的规则使用Nacos存储限流规则Sentinel自身就支持了多种不同的数据源来持久化规则配置,目前包括以下几种方式:文件配置Nacos配置ZooKeeper配置Apollo配置本篇文章是为了实践使用Spring Cloud Alibaba的中整合的配置中心Nacos...
2020-04-13 15:41:24
422
原创 使用Sentinel实现接口限流
Sentinel是什么Sentinel的官方标题是:分布式系统的流量防卫兵。从名字上来看,很容易就能猜到它是用来作服务稳定性保障的。Spring cloud的服务稳定性保障组件还有Hystrix(已经停止更新),Sentinel的功能和细节比较多,那么我们说说如何把Sentinel整合到Spring Cloud应用中,以及如何使用Sentinel Dashboard来配置限流规则。使用Sen...
2020-04-11 16:47:33
1072
原创 Nacos的数据持久化
前言我们已经了解Nacos作为注册中心和配置中心,下面来了解下生产部署的角度Nacos都需要怎么配置。数据持久化Nacos服务端自身并没有做过什么特殊的配置,关于默认的单机配置的Nacos只适用于测试和开发环境,那么对于高可用的生产环境,Nacos需要做什么配置?搭建Nacos集群之前,我们需要修改Nacos的数据持久化配置为MySQL存储,默认情况下Nacos使用嵌入式数据库实现数据的存...
2020-04-09 17:47:54
272
原创 Nacos配置的多文件加载与共享配置
前言思考一个问题,现实开发中会遇到这样一个场景,我们把应用拆分成到多个配置文件中,那么Nacos怎么管理多个配置文件?加载多个配置我们已经知道Spring应用对Nacos中配置内容的对应关系是通过下面三个参数控制的:spring.cloud.nacos.config.prefixspring.cloud.nacos.config.file-extensionspring.cloud....
2020-04-09 16:56:08
3042
2
原创 Nacos配置的多环境管理
Nacos多环境管理Nacos中存在多环境管理的概念,其中Data ID、Group、Namespace 做好它们之间的层级关系就可以管理多环境的配置。如下,介绍几种配置方式:使用Data ID与profiles实现:Data ID :Nacos中,可以理解为Spring Cloud应用的配置文件名。Data ID的名称格式是这样的:${spring.application.name}.p...
2020-04-09 14:34:14
1386
原创 配置中心:Nacos
简介常见的配置中心:SpringBoot+git,zookeeper,redis等,Nacos除了实现了注册中心还把配置中心结合到了一起,通过Nacos的配置管理功能,我们可以将整个架构体系内的所有配置都集中在Nacos中存储。这样做带来的好处:分离的多环境配置,可以更灵活的管理权限,安全性更高应用程序的打包更为纯粹,以实现一次打包,多处运行的特点定位配置:Nacos的配置管理模型通...
2020-04-08 18:48:32
1789
原创 Spring-cloud-Alibaba-Nacos
Spring-cloud-AlibabaSpring-cloud-Alibaba-Nacos前言学习资料简介安装Nacos构建应用接入Nacos注册中心服务提供者服务消费者Spring-cloud-Alibaba-Nacos前言由于公司重构系统,所用技术是基于Spring-cloud-Alibaba全家桶,所以在工作之余研究该项技术。学习资料程序猿DD Spring Cloud Alia...
2020-04-07 19:00:12
451
原创 Spring Cloud Alibaba:支持的几种服务消费方式(RestTemplate、WebClient、Feign)
概述关于消费者通过Nacos来消费注册的服务时可以使用RestTemplate、WebClient、Feign等方式,他们之间有什么不一样?使用RestTemplateRestTemplate来向服务的某个具体实例发起HTTP请求,但是具体的请求路径是通过拼接完成的,对于开发体验并不好。但是,实际上,在Spring Cloud中对RestTemplate做了增强,只需要稍加配置,就能简化之前...
2020-04-07 18:59:43
447
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人