自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

胜天半子

少时学语苦难圆,只道功夫半未全。到老方知非力取,三分人事七分天。

  • 博客(150)
  • 问答 (1)
  • 收藏
  • 关注

原创 基于gRPC负载均衡与健康检查实现请求只访问到server的leader

gRPC服务端将服务的最新状态,更新到一个channel通道里,健康检查服务Watcher会从此channel通道里获取此服务的最新状态,如果发现此最新状态跟之前的状态不一样,服务端会将此最新状态发送给客户端。

2024-04-22 15:33:18 420

转载 再学RocksDB

RocksDB依靠大量的配置,使之能针对不同的生产环境进行调优,包括直接使用内存,使用Flash,使用硬盘或者HDFS。支持使用不同的压缩算法,并且有一套完整的工具供生产和调试使用。RocksDB是使用C++编写的kv存储引擎,其key, value均允许使用二进制流。由Facebook基于levelDB开发, 提供向后兼容的levelDB API。RocksDB针对Flash存储进行优化,延迟极小。RocksDB使用LSM存储引擎,纯C++编写。

2023-10-09 16:47:51 127

原创 再学DataX

DataX学习文档

2022-11-21 11:52:39 657 1

原创 JRaft框架学习笔记

JRaft学习笔记

2022-10-19 11:57:07 4061

原创 再学Canal

Canal的详细设计总结

2022-10-16 16:32:01 2021

原创 Nebula graph 源码 学习笔记

nebula源码

2022-06-25 09:46:24 1525

原创 再学LevelDB Compaction

Compaction原理

2022-06-19 22:43:41 197

原创 Nebula Graph数据库 学习笔记

Nebula Graph 是一款开源的、分布式的、易扩展的原生图数据库,能够承载数千亿个点和数万亿条边的超大规模数据集,并且提供毫秒级查询。

2022-05-23 16:27:55 2520

原创 Golang学习笔记

一、Go语言的知识图谱上图表示了go的应用领域,包括容器如k8s, 服务发现如consul,kv存储如etcd,中间件如codis, 存储如minio,分布式数据库tidb,此外还有devops、区块链、人工智能、web框架、微服务等等领域的应用。二、Go语言的环境安装...

2022-05-11 11:15:18 5991

原创 RocketMQ源码学习笔记

一、环境配置1.1、下载源码下载地址:https://github.com/apache/rocketmqgit clone https://github.com/apache/rocketmq.git1.2、导入maven工程到IDE1.3、准备启动的配置1)在下载的rocketmq根目录创建新文件夹conf2)把 rocketmq\distribution\conf 下的 broker.conf, broker-a.properties, logback_broker.xml 这几个文

2022-03-30 14:38:42 2299

原创 基于Java Agent实现APM

1、Tracing概述1.1、为什么需要TracingTracing主要用于对微服务做 “监控及故障发现”,如性能监控,出现故障时发送告警,及辅助排障;更进一步可提前做故障预警。以电商系统为例,用户的请求链路会经由多个微服务系统后返回:在线上,当用户的响应时常出现异常时,怎样定位是哪引起的呢?如果没有tracing系统,研发需要去逐个排查请求链路所经历的每个微服务系统,耗时比较长,且排查定位问题麻烦。但有了Tracing监控系统,我们可以一眼找到问题。而且,在定位问题后,如果是某个微服务出现了

2022-03-18 10:45:45 3612

原创 再学零拷贝与mmap

一、零拷贝1.1、背景知识1.1.1、用户空间用户空间:运行着用户编写的应用程序的虚拟内存空间。对于32位的操作系统,每个进程有4GB的虚拟内存空间,其中0~3GB是用户空间,3~4GB 为内核空间。1.1.2、内核空间内核空间:运行着操作系统代码的虚拟内存空间。1.2、下载文件的过程客户端从服务端下载一个文件的过程:Step1:调用read函数,从磁盘经过page cache, 读取文件到用户空间的缓冲区Step2:调用write函数,把用户空间缓冲区的数据,发送给客户端的socket

2022-02-24 11:01:03 1122

原创 再学MySQL

一、MySQL的架构从MySQL架构来说,MySQL分为Server层和存储引擎层2层。Server层包括:连接器、查询缓存、分析器、优化器、执行器。内置函数、存储过程、触发器、视图等跨存储引擎的功能,都在Server层实现。Server层通过固定的API来访问存储引擎层,各种不同的存储引擎就好比OSS,COS, MinIO等,都兼容了AWS S3的API。...

2022-02-19 20:39:54 627

原创 MySQL的间隙锁

一、、为什么要引入间隙锁MySQL引入间隙锁(Gap Lock),是为了在可重复读事务隔离级别中,解决幻读问题锁引入的锁机制。二、幻读2.1、什么是幻读幻读是指,当一个事务先后两次查询同一个范围的时候,查到的结果不同,这是因为第二次这个事务查到了其他事务对数据所做的没有commit前的更改。这里,先后执行了Q1 ~ Q3 3次select *** for update读,读到的结果不同:1)sessionB由于执行了update t set d=5 where id=0, 导致新增了一条满足d

2022-02-12 09:43:39 6073 6

原创 Maven学习笔记

一、Maven简介Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。Maven是apache开源的Java编写的开源项目,基于pom(Project Object Model)来构建项目。1.1、Maven 能够帮助开发者干什么?构建文档生成报告依赖SCMs发布分发邮件列表总之,Maven 简化了工程的构建过程,并对其标准化。它无缝衔接了编译、发布、文档生成、团队合作和其他任务。1.2、Maven的约定配置当创建 Maven 工程时,Maven 会创建

2021-10-03 09:47:56 847

原创 Nginx学习笔记

一、Nginx简介Nginx是一款轻量级的反向代理服务器,也是一款轻量级的Web服务器(较少用到)1.1、Nginx的使用场景1、作为http反向代理服务器2、作为负载均衡服务器3、直接支持php(web服务器)4、作为邮件代理服务器5、帮助实现前端动静分离…1.2、Nginx特点高稳定、高性能、资源占用少、功能丰富、模块化结构、支持热部署单台NG可支撑10万并发二、Nginx的安装2.1、安装以mac安装为例:Step1:安装brew/bin/zsh -c "$(curl

2021-10-02 15:55:11 1328

原创 S3 学习笔记

一、S3概述1.1、简介S3是Standard Storage Service的简称,即标准存储服务。即分布式的、存储容量可无限扩容的、保证数据不丢失的、安全的、低成本的存储解决方案。S3旨在为公有云用户解决下面的存储痛点:1、存储可无限扩容:用户自建存储集群节点扩容时数据迁移成本高。单个bucket存储容量无限制,单个文件最大50TB限制。2、安全:保证只被授权用户访问(问题:CDN访问时怎样做授权校验?)3、数据可靠不丢失:通过冗余备份+EC纠删码的方式,保证11个9的不丢失保证。4、成本

2021-07-31 09:15:44 3011

原创 架构套路总结

系统的架构,主要会考虑下面5个点:高性能、高可用、可伸缩、可扩展、安全。一、高性能1、架构层面1.1、缓存1.2、异步2、代码层面2.1、多线程2.2、内存:空间换时间2.3、锁2.4、数据结构的时间复杂度3、DB层面3.1、索引3.2、SQL优化3.3、NoSQL4、附录:衡量性能指标4.1、TPS & QPS4.2、系统性能参数:CPU Load Average, CPU User Usage, 内存,网络IO,磁盘IOPS二、高可用1、冗余:数据冗余 &a

2021-06-14 16:21:02 14171 4

原创 架构学习笔记

第一篇 架构套路总纲一、网站架构的目标对架构师来说,无论架构大型网站,还是网站的某个子系统,都要考虑下面几个目标:高性能、高可用、可伸缩、可扩展、安全。1、高性能(performance):能够对于海量并发访问快速响应网站的性能优化,有下面常用的招:1.1、架构层面:1.1.1、缓存浏览器缓存、CDN缓存、应用服务器缓存(本地缓存和分布式缓存)1.1.2、异步本地队列(LinkedBlockingQueue)、分布式队列(Kafka, RocketMQ等)1.2、代码层面:1.2.1

2021-06-14 10:43:14 2849

原创 Protocol Buffer 原理 学习笔记

一、Protocol buffer 简介Protocol Buffer(简称PB)是google开源的序列化与反序列化的应用层协议。1)序列化:把文本转成二进制串2)反序列化:将二进制串恢复成文本二、PB的优缺点2.1、优点1、体积小序列化后可缩小3倍左右,节省带宽,传输速度快2、序列化速度快比Json或xml快20~100倍3、跨语言PB兼容多种开发语言2.2、缺点1、可读性差三、应用场景PB主要用于传输量大、网络环境不太稳定的数据传输场景,如IM即时通讯场景。PB比Jso

2021-06-08 14:34:09 2041

原创 再学Netty

一、Netty简介Netty是一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。二、为什么使用Netty2.1、手写Java NIO的缺点因为自己写Java NIO很麻烦:1)NIO类库和API复杂,要熟练掌握Selector, ServerSocketChannel, SocketChannel, ByteBuffer等2)要熟悉Java多线程编程,且涉及到Reactor模式,这样才能写出高质量的NIO程序3)臭名昭著的epoll bug,它会导致select

2021-06-06 20:27:03 197 3

原创 Reactor模式 学习笔记

一、Reactor模式简介1.1、简介Reactor模式称为“反应器模式”或“分发者模式”。Reactor模式的工作原理:由一个线程来接收所有客户端请求,然后派发请求到相关的工作线程中。1.2、为什么使用reactor模式若一个请求,服务端用一个线程处理,当并发高时会创建大量线程,维护线程需要耗费大量资源,线程间切换也耗费资源,且系统能创建的线程数是有限的。二、Reactor模式的演进过程Reactor模式有三个角色:1)Reactor:负责响应请求,将请求分发到绑定了对应事件的handle

2021-06-06 20:08:55 472

原创 WebSocket协议 学习笔记

一、WebSocket协议简介WebSocket是应用层协议。用于C/S架构应用中实现双向通信。虽然WebSocket协议在建立连接时会使用HTTP协议,但这并不意味着WebSocket协议是基于HTTP协议实现的。二、WebSocket协议与HTTP协议的区别1、通信方式不同1)WebSocket是双向通行模式,客户端与服务端之间只有在握手时使用了HTTP的“请求-响应”模式,而一旦建立连接完成后,通信则使用双向模式交互。WebSocket模式客户端和服务端可以互相发消息,而HTTP发消息是

2021-06-06 18:21:48 180

原创 MQTT协议学习笔记

一、MQTT协议概述MQTT(Message Queueing Telemetry Transport,消息队列遥测传输协议):是一种基于 发布/订阅 模式的轻量级通讯协议。MQTT协议最大的优点:可以以极少的代码和有限的带宽,为远程设备提供实时可靠的消息服务。MQTT协议作为一种低开销、低带宽占用的即时通信协议,在物联网、小型设备、移动应用等方面有广泛的应用。在物联网开发中,除了MQTT,还有XMPP和CoAP协议等,后面做对比。二、MQTT详解2.1、MQTT协议属于那一层协议MQTT位于

2021-06-06 13:33:47 2551 2

原创 Apache Pulsar MQ 学习笔记

一、Pulsar简介Apache Pulsar是一个企业级分布式消息系统,最初由雅虎在2016年开源。Pulsar的关键特性:1)Pulsar的单个实例原生支持多个集群,可跨机房再集群间无缝地完成消息复制2)极低的发布延迟和端到端延迟3)可无缝扩展到超过100万个topic4)客户端简单,支持java, go, python, c++5)支持多种topic订阅模式(独占订阅、共享订阅、故障转移订阅)6)通过Apache BookKeeper提供的持久化消息存储机制,保证消息船体。由轻量级

2021-05-31 19:08:56 1976 3

原创 限流算法之漏桶算法和令牌桶算法

一、前言在高并发场景,为了保证服务高可用,需要实现限流。如果要控制QPS,简单的做法是维护一个单位时间内的Counter,如判断单位时间已经过去,则将Counter重置零.此做法被认为没有很好的处理单位时间的边界,比如在前一秒的最后一毫秒里和下一秒的第一毫秒都触发了最大的请求数,将目光移动一下,就看到在两毫秒内发生了两倍的QPS.为了规避上述问题,常用的更平滑的限流算法有漏桶算法和令牌桶算法。二、漏桶算法(Leaky Bucket)2.1、漏桶算法的思路水(请求)先进入到漏桶里,漏桶以一定的速

2021-05-28 15:59:09 547

原创 再学分布式事务

一、背景知识1.1、事务事务需要具备ACID:以A给B转账为例A(Atomicity,原子性):A的钱减100,B的钱多100,要么全部成功,要么全部失败C(Consistency,一致性):A减100后,B一定多了100,这个数是一致的I(Isolation, 隔离性):多个事务互相不可见(读已提交、读未提交、可重复读、可串行化)D(Durability,持久性):转账后的数据会落盘持久存储,不会丢失。1.2、分布式事务CAP理论ACID的事务理论,在单个数据库情况下没问题。但在数据库

2021-05-28 12:17:15 153

原创 Redis 6.0为什么引入多线程

一、前言Redis 6.0首次引入了多线程。看下官方发布的新版和旧版的性能对比:1)get的性能对比:2)set的性能对比:可以看出,无论读还是写,多线程性能都远好于单线程,几乎翻倍了。上图仅是简单验证,仅作为参考,不能作为线上生成环境的指标。二、Redis多线程2.1、Redis 6.0之前的版本真的是单线程吗?Redis是基于Reactor模式开发了网络事件处理器,这个处理器被称为文件事件处理器。他的组成分4部分:多个socketIO 多路复用文件事件分派器事件处理器正

2021-05-27 16:52:12 1542

原创 Java Agent探针 学习笔记

一、前言当我们遇到线上问题,需要加log来辅助定位问题时,通常需要改代码上线发布,才能输出log来,这样比较麻烦。思考:是否可以在服务器上改代码让它实时生效呢?答案是可以的!从java5开始,jdk中新增了一个java.lang.instrument.Instrumentation 类,它提供在运行时重新加载某个类的的class文件的api。下面是它的一些主要api:public interface Instrumentation {/** * 加入一个转换器Transformer,之

2021-05-23 12:33:23 686

原创 java8特性总结

一、前言Lambda表达式是Java8的一个重要特性,java8是2014年Oracle发布,它主要支持函数式编程、新的JavaScript引擎、新的日期API、新的Stream API等。二、Java8的新特性Lambda 表达式 − Lambda 允许把函数作为一个方法的参数(函数作为参数传递到方法中)。方法引用 − 方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。默认方

2021-05-22 23:50:55 152

原创 AQS原理 学习笔记

一、什么是AQSAQS即AbstractQueuedSynchronizer,是一个构建锁和同步器的框架。AQS支持独占锁(exclusive)和共享锁(share)两种模式:独占锁:只能被一个线程获取到,如ReentrantLock共享锁:可以被多个线程同时获取,如CountDownLatch无论是独占锁还是共享锁,本质上都是对AQS内部的一个变量state的获取。state是一个原子的int变量,用来表示锁的状态、资源数等。二、AQS内部的数据结构及原理...

2021-05-22 20:21:55 192

原创 Java并发包APIs总结

一、前言Java5开始提供了java.util.concurrent,里面包含了绝大多数编写Java高并发代码的技巧和套路,所以不单要会用API,还需要理解concurrent包里每个API的设计方法和目的,这样在自己编写高并发程序时,才能够在需要时采用合适的技巧来解决问题。二、API接口及核心类2.1、java.util.concurrent下的接口BlockingDequeBlockingQueueCallableCompletableFuture.AsynchronousCompleti

2021-05-22 11:52:33 266 1

原创 CDN工作原理

假设你要访问的加速域名为 www.a.com,他已接入到了CDN网络,当北京的用户向这个域名发起http请求时,处理流程如下:1、当用户(北京)访问域名www.a.com下的指定资源时,请求首先会发送到 LDNS(本地DNS)进行域名解析请求2、LDNS服务检查他的缓存中是否有 www.a.com 的IP地址记录,如果有,直接返回给用户;如果没有,则向网站授权的DNS发送查询请求3、当授权的DNS解析 www.a.com 时,返回该域名CNAME 即www.a.tbcdn.com 对应的IP地址4

2021-04-13 11:10:08 750

原创 Druid学习笔记

一、Druid连接池简介Druid是阿里开源的Java版数据库连接池,并提供了监控组件。他包括三部分:1、DruidDriver代理的Driver,能够提供基于Filter-Chain模式的插件体系2、DruidDataSource:高效可管理的数据库连接池3、SQLParser:SQL解析器Druid都能干什么?1、可监控数据库的访问性能:Druid内置了一个强大的StatFilter插件,能详细统计SQL执行性能。2、Druid提供了高效、可扩展的数据库连接池3、对数据库密码加密4、

2021-03-09 12:15:01 157 1

原创 RocketMQ 文档学习

一、概念1、消费:不单可以拉,也可以选择推送的方式消费。2、生产者组:多个Producer组成一个生产者组,发送同一类消息。如果发送的是事务消息,且原始生产者在发送之后崩溃,则Broker服务会联系同一生产者组的其他生产者实例以提交或回溯消费。3、消费者组:可以集群消费或广播消费。集群消费:每个消费者平均分摊消息广播消费:每个consumer都会收到全量的消息4、普通顺序消息:发送到同一个队列中的消息,是有序的。不同队列消息无序5、严格顺序消息:消费者收到的所有消息都是有序的。6、消息:每个

2021-03-08 11:36:45 2054

原创 Redis深度历险 学习笔记

一、Redis基本数据结构类型1、string实现方式是数组,类似于java的ArrayList。单个字符串足底啊512M,字符串需要扩容时:小于1M扩容一倍;大于1M,最多只扩容1M。使用场景:1)键值对:set,get127.0.0.1:6379> set aa 11OK127.0.0.1:6379> get aa"11"2)批量键值对:mset, mget127.0.0.1:6379> get aa"11"127.0.0.1:6379> set bb

2021-03-03 16:39:12 565 1

原创 网络协议 学习笔记

一、网络协议概述1.1、网络分层的目的是什么网络为什么要分层呢?因为不同层直接有不同的沟通方式,这个叫做协议。1.2、IP地址IP地址时一个网卡在网络世界的通讯地址,相当于现实世界的门牌号。假设IP地址是10.100.122.2,这个IP地址分层4个部分,用“."分隔,每个部分是一个整数(8 bit),所以一个IP地址是32位,但这样的IP地址很快就bu够用了,因为当初没想到现在有这么多计算机。于是就有了IPV6,也就是fe80::f816:3eff:fec7:7975/64,这个有128位

2020-12-16 15:41:35 1455

原创 操作系统 学习笔记

一、操作系统概述1.1、Linux操作系统内核体系操作系统可以比喻成一个软件外包公司,其内核就是这家公司的老板。下面以“双击QQ”为入口,逐步进入操作系统的入门。1、输入设备–接待人员鼠标和键盘是计算机的输入设备,用户告诉计算机要做什么,都是通过输入设备。输入设备驱动可以比喻成外包公司里的“客户对接员”,通过他来知道用户的需求。当新插入一个鼠标时,会弹出一个通知,让你安装驱动,这就是这家外包公司给你配备对接人员呢。2、输出设备–交付人员显示器是输出设备,把计算机的处理结果呈现给客户。显

2020-12-14 13:43:38 1063

原创 美团KV存储学习笔记

参考链接:https://tech.meituan.com/2020/07/01/kv-squirrel-cellar.html一、美团点评KV存储发展历程第一代KV存储如下:上述memcached方案的问题是,在节点故障从技术摘除时,会丢数据;当需要扩容时,一致性哈希也会丢数据。随着redis的成熟,从memcached换成了redis,客户端仍用一致性hash,服务端变成了redis主从结构,当一个主节点宕机,redis通过哨兵模式完成failover,用选举一个从节点自动替代主节点,以此实现

2020-12-08 15:58:13 1163 1

原创 Domain-Driven Design 学习笔记

参考链接:https://tech.meituan.com/2017/12/22/ddd-in-practice.html一、前言早在20世纪,软件设计人员就已经意识到领域建模与设计的重要性,并形成一种思潮。Eric Evans将其定义为领域驱动设计(Domain-Driven Design, 简称DDD)。在互联网”小步快跑,迭代试错“的大环境下,DDD似乎是一种“古老而缓慢”的思想。然后,互联网也逐渐深入实体经济,业务日益复杂,所以在开发中也越来越多地遇到传统行业软件开发中所面临的问题,这时可以用

2020-12-07 15:47:47 404

空空如也

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

TA关注的人

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