架构服务
文章平均质量分 83
Lidisam
一路有TA同行
展开
-
RocketMQ存储层原理
1.1 topic、订阅组group、消费进度consumerOffset1.2 多个配置文件config,故障恢复的存储Checkpoint和Filelock1.3 记录主备备份Epoch/SNtopic对应多个逻辑分区(Partition),称为队列(MessageQueue)其中ConsumeOffset用于管理订阅组消费进度(如Map)RocketMQ采...原创 2022-07-02 19:42:16 · 704 阅读 · 1 评论 -
Apollo Server服务端解析
如需参考源码解析,请访问:https://gitee.com/lidishan/apollo-code-analysis阅读前声明:本文不做相关用法说明,只解析Apollo源码Apollo整体架构图Apollo服务端的核心作用在于什么?配置变更和发现配置变更与发现配置的变更与发现基于一张表处理ReleaseMessage实现步骤Admin Service发布配置后,插入数据到ReleaseMessage表数据格式:AppId+Cluster(集群名称)+NameSpace(命名空间)原创 2022-02-26 23:40:25 · 1022 阅读 · 0 评论 -
RocketMQ NameServer启动流程解析
具体分析可参考Gitee项目NameServer解析部分 =》代码地址什么是NameServer简易Topic路由注册中心,用于支持Broker的服务注册与发现。类似Dubbo的zookeeper主要能力Broker集群管理:管理Broker集群注册信息,心跳检测broker存活路由信息管理:保存Broker集群路由信息,然后producer、consumer通过nameserver获取路由信息进行投递、消费NameServer启动流程步骤创建controller解析命令及配置文原创 2021-11-30 22:52:14 · 1560 阅读 · 0 评论 -
RocketMQ调试环境搭建
参考资料:rocketmq那些事儿之本地调试环境搭建编译代码下载下载地址:Github地址单点部署执行步骤:先将三个xml文件拷贝到本地对应目录文件夹下。我这里放到D:\code\opensource\rocketmq\conf目录下,启动时会指定这个配置文件将broker.conf修改为如下(具体路径根据自己文件来)brokerClusterName = DefaultClusterbrokerName = broker-abrokerId = 0deleteWhen =原创 2021-10-05 20:34:57 · 254 阅读 · 0 评论 -
Hystrix执行目标与断路执行分析
依赖如下<dependency> <groupId>com.netflix.hystrix</groupId> <artifactId>hystrix-core</artifactId> <version>1.5.18</version></dependency>什么是Hystrix2018.11发布了最后一个版本,目前处理维护阶段,不再升级版本用途:停止级联故障。原创 2021-10-05 10:49:22 · 285 阅读 · 0 评论 -
Hystrix数据收集及滑动窗口机制解析
依赖如下<dependency> <groupId>com.netflix.hystrix</groupId> <artifactId>hystrix-core</artifactId> <version>1.5.18</version></dependency>什么是Hystrix2018.11发布了最后一个版本,目前处理维护阶段,不再升级版本用途:停止级联故障。原创 2021-09-27 21:46:29 · 1437 阅读 · 0 评论 -
Apollo-client加载数据解析
如需参考源码解析,请访问:https://gitee.com/lidishan/apollo-code-analysis阅读前声明:本文不做相关用法说明,只解析Apollo-client源码阅读本文前请参考《Apollo-client 初始化入口流程解析》上面解析到了initialize()初始化,其是通过ConfigService.getConfig()来加载数据,那这个调用方式是怎么加载的?见下面实时获取apollo配置解析ConfigService.getConfig()如何使用?例子如下原创 2021-07-24 22:54:55 · 738 阅读 · 1 评论 -
Apollo-client 初始化入口流程解析
如需参考源码解析,请访问:https://gitee.com/lidishan/apollo-code-analysis阅读前声明:本文不做相关用法说明,只解析Apollo-client源码apollo中有一个注解,接下来先看一下这个启动注解@EnableApolloConfig 为什么要使用这个注解?系统启动时,会检索对应xml配置信息,并拉取apollo数据在postProcessAfterInitialization阶段进行覆盖配置注解初始化流程如下:第一步:在启动类上添加注解@原创 2021-07-24 22:51:49 · 1552 阅读 · 6 评论 -
ByteBuddy基本用法
ByteBuddy是一种字节码技术框架,其广泛用于中间件原创 2021-06-20 22:01:56 · 2285 阅读 · 0 评论 -
Xxl-Job调度器原理解析
项目解析源码地址:https://gitee.com/lidishan/xxl-job-code-analysisxxl-job版本:2.3.0Xxl-Job分为执行器、调度器。而我们平时的客户端就属于一个执行器,执行器启动的时候会自动注册到调度器上,然后调度器进行远程调度。调度器初始化过程步骤如下1 国际化相关配置参数: xxl.job.i18n=zh_CN,这里设置为中文简体2 初始化快线程fastTriggerPool、慢线程池slowTr...原创 2021-06-01 22:48:43 · 3776 阅读 · 1 评论 -
Xxl-Job执行器原理解析
xxl-job版本:2.3.0Xxl-Job分为执行器、调度器。而我们平时的客户端就属于一个执行器,执行器启动的时候会自动注册到调度器上,然后调度器进行远程调度。执行器初始化过程步骤如下1通过加了@Conguration注解的XxlJobConfig初始化,并生成beanName=xxlJobExecutor的Bean2注册的BeanName=XxlJobConfig,会进行初始化,步骤如下:-扫描所有bean,加载加了@XxlJob注解类,并记录在job...原创 2021-05-31 22:49:40 · 7827 阅读 · 0 评论 -
Redis AOF持久化原理解析
Redis版本:Redis 4.0.1Redis是一个键值对数据库服务器,存储在内存中,如果重启没进行持久化,数据会丢失。所以需要持久化策略RDB和AOF。涉及Redis源码解析:https://gitee.com/lidishan/redis-source-code-analysis/blob/master/src/aof.cAOF与RDB的区别- AOF保存Redis所执行的写命令来记录数据库状态,RDB是直接保存键值对数据- AOF纯文本,RDB二进制...原创 2021-05-27 23:25:58 · 618 阅读 · 2 评论 -
Redis RDB持久化原理解析
Redis版本:Redis 4.0.1Redis是一个键值对数据库服务器,存储在内存中,如果重启没进行持久化,数据会丢失。所以需要持久化策略RDB和AOF。涉及Redis源码解析:https://gitee.com/lidishan/redis-source-code-analysis/blob/master/src/rdb.c前提知识归纳RDB用于保存和恢复数据库所有键值对使用save或bgsave报错,其中bgsave是fork子进程不会造成阻塞rdb文...原创 2021-05-23 11:54:25 · 400 阅读 · 0 评论 -
Apollo客户端源码解析
本节主要对 Apollo 客户端设计原理进行解析。设计原理简要描述了 Apollo 客户端的实现原理注册bean spring启动时调用bean初始化 获取namespace并初始化配置并写一份配置到文件中,开启线程长轮训+定时拉取配置 添加监听listener 扫描字段、方法转化成SpringValue,保存在SpringValueRegistry中 http长轮训+定时拉取服务端配置 更新SpringValue准备工作利用EnableApolloConfig...转载 2021-05-17 21:57:48 · 1060 阅读 · 0 评论 -
Redis服务端初始化流程
参考链接:https://redissrc.readthedocs.io/en/latest/init/server.html https://www.jianshu.com/p/1166288c6d32?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation https://bl...原创 2021-05-16 09:10:21 · 3730 阅读 · 0 评论 -
Redis对象及其类型与编码
Redis对象包含多种数据结构和类型,其组成如RedisObjecttypedef struct redisObject { unsigned type:4;// 类型:字符串、列表、哈希、集合、有序集合 /** * 编码:long类型的整数、embstr编码的简单动态字符串、简单动态字符串、字典、双端链表、压缩列表、整数集合、跳表 * ** 不同类型对应的编码 * **** 字符串:long类型的整数、embstr编码的简单动态字符串、简单...原创 2021-05-15 19:52:23 · 574 阅读 · 0 评论 -
Redis压缩列表ziplist的实现
参考链接:-- 《Redis设计与实现》-- 源码解析:https://www.cnblogs.com/yinbiao/p/11249161.html关键代码位置:src/ziplist.c数据结构概述说明:-ziplist是 列表list 或 hash 的底层实现之一,只有数据量小的时候才会用,举个例子如下:-- hash结构:键值均<64字节 && 键值对数量 < 512-目的是为了节省内存,在数据量少的时候就省内存。由一系列特...原创 2021-05-14 21:26:19 · 626 阅读 · 0 评论 -
Redis整数集合的实现
参考链接:-- 《Redis设计与实现》-- 源码解析:https://www.cnblogs.com/yinbiao/p/11249161.html--结构说明:https://redissrc.readthedocs.io/en/latest/compress-datastruct/intset.html关键代码位置:src/intset.c数据结构概述说明:-是集合的底层实现之一-底层实现是数组(连续的内存结构),有序、无重复-整数集合类型可升级(16位-&...原创 2021-05-09 18:36:46 · 688 阅读 · 0 评论 -
Redis跳表数据结构
参考链接:-- 《Redis设计与实现》-- 源码解析:https://www.cnblogs.com/yinbiao/p/11238374.html关键代码位置:src/ t_zset.c时间复杂度:O(logN)数据结构概述说明:-每个跳表层高1~32层-跳跃表是有序集合的实现之一-按照分值升序排序其核心结构源码如下:typedef struct zskiplistNode {// 保存当前跳跃表的节点信息 sds ele;...原创 2021-05-08 21:47:37 · 210 阅读 · 0 评论 -
Redis字典数据结构
参考链接:-- 源码解析:https://www.cnblogs.com/yinbiao/p/10766357.html--结构说明:https://redissrc.readthedocs.io/en/latest/datastruct/dict.html关键代码位置:src/dict.h字典是一种键值对映射,但C语言无这种数据结构,Redis自己实现了一套。另外字典是hash的底层实现之一。数据结构概述说明:- ht数组有两个元素,没有rehash情况下,默认...原创 2021-05-08 21:44:22 · 329 阅读 · 0 评论 -
Redis列表数据结构
关键代码位置:src/adlist.h列表作为一种常用的数据结构,Redis也有,其数据结构含:- 头节点、尾节点、节点值复制函数、节点值释放函数、节点值对比函数、链表长度记录、dup复制函数、free释放函数、match匹配函数相关函数如下(随便看下就好了):源码分析如下:typedef struct listNode { // 前置节点 struct listNode *prev; // 后置节点 st...原创 2021-05-08 21:40:29 · 288 阅读 · 0 评论 -
RocketMQ设计原理简析
参考连接:https://github.com/apache/rocketmq/tree/master/docs/cn一、消息存储1消息存储整体架构CommitLog:消息主体以及元数据的存储主体(可包含多个topic)-- 定长,文件默认1G,文件名为20位,为偏移量的数值来命名。文件顺序写(性能几乎等于内存读)。---- 比如第一个文件名:00000000000000000000,由于第一个文件大小为1G=1073741824,第二个文件名应该为:00...原创 2021-04-27 23:05:43 · 324 阅读 · 0 评论 -
Skywalking启动加载过程
搭建文档:https://www.jianshu.com/p/ec8ef2b91e92本次讲解版本:apache-skywalking-apm-8.5.01 Skywalking整体架构主要组成:UI(数据显示)、Storage(存储层)、Agent(客户端数据收集)、OAP(服务端数据接受处理)2源码解析如下首先skywalking用的是javaagent技术,入口为:org.apache.skywalking.apm.agent.SkyWalkingAge...原创 2021-04-24 15:36:59 · 2296 阅读 · 0 评论 -
Redis常用数据结构及其场景归纳
1 mset、mget、msetnx批量处理字符串更新、获取、加锁场景:文章的标题、内容、作者等多个key 批量发布和查看(对于这种可以直接用序列化反序列化。。)2 strlen、getrange统计文章字数、预览文章(截取文章)场景:博客字数统计和文章预览3 append拼接字符串场景:日志拼接(也是很少用)4 hset、hget场景:记录生成次数5 lindex、lset、linsert、ltrim、lrem、lpus...原创 2021-04-18 10:30:11 · 562 阅读 · 0 评论 -
Redis String底层数据结构
参考链接: https://www.jianshu.com/p/160fb0f73841如想看源码就看上面的链接就好~~~~~~~~~~~~~~~~~~~1 Redis底层存储是一个hash结构,与HashMap差不多,都是一个数据+链表组成的,然后拉链法解决冲突2 其hash节点含key、value、next指针,如下:/** 哈希表节点*/typedef struct dictEntry {// 键void *key;// 值...原创 2021-04-18 10:23:13 · 1576 阅读 · 0 评论 -
Paxos与ZAB、Raft对比
什么是Raft?Raft一种用来管理日志复制的一致性算法分为三个角色:leader(集群主节点)、follower(跟随节点)、candidate(无leader情况下会有follower升级为这个)升级顺序:follower->candidate->leader (不能跨级别晋升)选举过程:- 服务刚启动全部都是follower角色,并经过一段时间才会有follower成为candidate(避免出现多个candidate分散选票),另外raft会把日志写入...原创 2020-09-20 09:59:38 · 2134 阅读 · 0 评论 -
RabbitMQ推拉模型
聊聊消息中间件的Push模型和Pull模型RabbitMQ两种模式都有,一般用Push模式,设置Qos避免内存爆了。- Pull模式大致用:-------------------- GetResponse response = channel.basicGet(QUEUE_NAME, false); System.out.println(new String(response.getBody())); channel.basicAck(response...原创 2020-08-13 21:36:20 · 3055 阅读 · 0 评论 -
短链接原理分析
参考链接: https://blog.csdn.net/weixin_37186559/article/details/84833108为什么要用短链接?原来的链接长度过长,发微博什么之类展示也不好看。比如下面这串:https://www.baidu.com/s?wd=%E7%9F%AD%E9%93%BE%E6%8E%A5&rsv_spt=1&rsv_iqid=0x...原创 2020-03-29 09:37:27 · 902 阅读 · 0 评论 -
简述一次线上dubbo超时重复赠送问题
产生问题业务方反馈用户赠送次数异常,经排查后发现存在重复的赠送记录。排查过程然后进行排查,排查SQL为:# 查出所有赠送有问题的的数据select user_id,count(*) AS total from `xxxx`.`record`WHERE change_num=10 AND `source`=100 AND gmt_create >...原创 2020-03-18 20:03:43 · 362 阅读 · 0 评论 -
维表与事实表
BI平台分为事实表、维表,然后两种表聚合成一个宽表。(注意这里取的BI平台是Davinci:https://edp963.github.io/davinci/)其维表、事实表的关系图如下:一个维表会对应多个事实表,而维表和事实表所有关联起来就形成一个宽表,其关系如同mysql中的外键索引,如A表中有B_id,A作为维表,B作为事实表,A(维表)可通过B_id来关联B...原创 2020-03-05 23:12:15 · 12426 阅读 · 0 评论 -
JVM简单调优及工作中例子记录
前序:Jvm调优需要我们对系统有所了解,其中比较关键的是对核心业务的理解,特别是会造成频繁GC的部分,比如高并发造成的不及时回收。要知道为什么会造成频繁GC,首先我们要懂怎么估算java类的大小下面列举各个基本类型和字符串估算的表格,以及测试的类 基本类型 大小(字节) 取值范围 装箱基...原创 2019-12-29 15:27:39 · 846 阅读 · 1 评论 -
用Redis快速实现BloomFilter!
转自: https://zhuanlan.zhihu.com/p/55574882背景最近工作上有个类似需求是: 现有约3亿条数据词典存在于一个csv文件A中,作为数据源。对于 用户输入的任意单词M,需要快速的在A中匹配M单词是否存在。(A文件约3G大小左右,总行数三亿)拿到这个需求,你的第一想法怎么做呢?正常思路可能是: 将csv文件A导入某关系型数据库。 s...转载 2019-11-22 20:21:16 · 402 阅读 · 0 评论 -
Redis HyperLogLog使用简述
参考文章: https://www.xuchuruo.cn/%E7%BB%9F%E8%AE%A1UV%E6%95%B0%E6%8D%AE-HyperLogLog.html工作中用到了Redis的HyperLogLog,下面就做一个记录场景:有一个to C端的H5程序,现需要统计每个页面的用户访问UV(每天共有多少个ip访问的总次数),本来想用redis的set做一个去重...原创 2019-11-21 22:50:50 · 439 阅读 · 0 评论 -
Spark单机与集群安装与简单命令行使用
参考自书籍《Hadoop+Spark 大数据巨量分析与机器学习》环境依赖:jdk 1.7hadoop 2.8.4 (hadoop安装请见https://blog.csdn.net/qq_28666081/article/details/81843369)scala 2.11.6spark 2.1.21 安装scala$ wget https://www.scala-lang.org...原创 2018-09-14 22:42:23 · 832 阅读 · 0 评论 -
Linux网络编程“惊群”问题总结
转自:https://www.cnblogs.com/Anker/p/7071849.html1、前言 我从事Linux系统下网络开发将近4年了,经常还是遇到一些问题,只是知其然而不知其所以然,有时候和其他人交流,搞得非常尴尬。如今计算机都是多核了,网络编程框架也逐步丰富多了,我所知道的有多进程、多线程、异步事件驱动常用的三种模型。最经典的模型就是Nginx中所用的Master-Work...转载 2018-10-06 23:26:44 · 133 阅读 · 0 评论 -
秒杀系统设计思路笔记
设计原因:为什么要针对秒杀设计一个完善的方案?因为系统可能会因为1%的秒杀业务影响其余99%正常业务的运行,所以需要将秒杀系统独立出来。待解决问题:主要解决两个问题:并发读、并发写。整体架构要求:概括为:"稳、准、快",即对应"高可用、一致性、高性能",其介绍分别如下: 高可用:保证系统的高可用和正确性,设计PlanB进行兜底。 一致性:保证秒杀减库存中的数据一...原创 2018-10-13 22:57:05 · 42620 阅读 · 5 评论 -
为什么说分布式事务不再适用于微服务架构
转载自:https://blog.csdn.net/javahongxi/article/details/54177741传统应用使用本地事务和分布式事务保证数据一致性,但是在微服务架构中数据都是服务私有的,需要通过服务提供的API来访问,所以分布式事务不再适用微服务架构。那么微服务架构又该如何保证数据一致性呢?本文就来谈谈这个话题。 传统分布式事务不是微服务中数据一致性的最佳选择 ...转载 2018-09-16 17:48:11 · 275 阅读 · 0 评论 -
Jenkins安装及部署脚本配置教程
环境版本:jenkins:jenkins-2.60.3-1.1.noarchJDK:jdk1.7maven:3.3.9 什么是jenkins:解决开发中的人为编译操作会影响项目个模块。 安装JDK、Maven、Tomcat环境:参考链接:https://blog.csdn.net/qq_28666081/article/details/81629764...原创 2018-09-01 16:28:02 · 21028 阅读 · 0 评论 -
Redis伪集群及哨兵集群配置教程和shell脚本编写
下载redis,解压并安装:# wget http://download.redis.io/releases/redis-4.0.2.tar.gz# tar xzf redis-4.0.2.tar.gz # cd redis-4.0.2 # make# mv redis-4.0.2 /usr/local/redis 启动并测试:# /usr/local/red...原创 2018-08-21 12:02:37 · 755 阅读 · 0 评论 -
springmvc+dubbo+mybatis 接入大众点评 CAT 监控平台
转自:https://fanlychie.github.io/post/springmvc-dubbo-mybatis-with-cat.html CAT(Central Application Tracking)是基于Java开发的实时应用监控平台,包括实时应用监控,业务监控。关于CAT的具体介绍可移步到CAT官网进行查阅。 CAT平台的搭建可移步到「搭建大众点评C...转载 2018-08-17 15:09:13 · 4231 阅读 · 0 评论