自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(136)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 ffly-plus 又又又一个`gin` demo项目,带你快速上手用`gin`进行`web`开发!!!!

ffly-plus又又又一个gin demo项目,带你快速上手用gin进行web开发, 在这个demo项目中,你可以学到项目结构设计、gorm的使用、gin中间件的编写、DB设计规范、Swagger文档生成、配置文件解析库viper使用、使用JWT进行身份鉴权认证、使用sentinel-go进行QPS限制、Makefile文件编写、项目文档结构设计和相关内容编写github: https://github.com/colinrs/ffly-plusffly-plus一款适合于快速开发业务的 Go G

2020-10-30 01:03:54 646

原创 一文了解如何发现并解决Redis热key与大key问题

一文了解如何发现并解决Redis热key与大key问题

2024-01-30 20:35:53 924

原创 Go 存储系列:LSM存储引擎 LevelDB

LSM-Tree 被是一种面向写多读少应用场景的数据结构 ,被 Hbase、RocksDB 等强力 NoSQL 数据库采用作为底层文件组织方式。简单的LSM-Tree 包含 2 层树状数据结构:Memtable 并完全驻留在内存中(假设 T0)SStables 存储在磁盘中(假设 T1)记录会先从 memtable T0 组件中读取,如果没有,则会从 SStables T1 组件中读取新记录被插入到 memtable T0 组件中。

2023-10-19 16:45:31 334

原创 HBase:大数据中的NoSQL

Hbase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,用于存储海量的结构化或者半结构化,非结构化的数据,底层上的数据是以二进制流的形式存储在 HDFS 上的数据块中的Go 读写HBase

2023-10-17 16:47:17 272

原创 程序员不写注释的原因

总的来说,注释是提高代码可读性和可维护性的重要工具。程序员应该意识到注释的价值,并在编写代码时采用一致的注释风格和最佳实践。

2023-10-10 22:32:49 354

原创 布隆过滤器的使用

Bloom Filter(布隆过滤器)是一种多哈希函数映射的快速查找算法。它是一种空间高效的概率型数据结构,通常应用在一些需要快速判断某个元素是否属于集合,但是并不严格要求100%正确的场合。布隆过滤器的优势在于,利用很少的空间可以做到精确率较高,空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。为什么不允许删除元素呢:删除意味着需要将对应的 k 个 bits 位置设置为 0,其中有可能是其他元素对应的位。

2023-10-08 15:31:19 216

原创 Go 限流器使用

该限流器是基于 Token Bucket(令牌桶) 实现的。简单来说,令牌桶就是想象有一个固定大小的桶,系统会以恒定速率向桶中放 Token,桶满则暂时不放。而用户则从桶中取 Token,如果有剩余 Token 就可以一直取。如果没有剩余 Token,则需要等到系统中被放置了 Token 才行。import ("context""fmt""time"// 创建一个每秒最多处理 2 个事件的限流器// 模拟处理一系列事件// 等待直到获取到处理事件的令牌err!= nil {

2023-10-07 17:25:44 302 1

原创 Go 存储系列:B+树存储引擎 boltdb

boltdb是一个纯go编写的支持事务的文件型单机kv数据库。

2023-10-07 17:09:43 1752 2

原创 TCP的粘包、拆包、解决方案以及Go语言实现

TCP 不管发送端要发什么,都基于字节流把数据发到接收端。这个字节流里可能包含上一次想要发的数据的部分信息。接收端根据需要在消息里加上识别消息边界的信息。不加就可能出现粘包问题UDP 是基于数据报的传输协议,每个数据报都是独立传输的(接收端一次只能接受一条独立的消息),不会有粘包问题。

2023-06-29 10:30:52 1310 1

原创 Go mmap 文件内存映射

mmap是个很好用的内存映射工具,它可以将文件映射到内存中,可以方便地操作文件。

2023-06-20 18:31:21 2019

原创 TIME_WAIT的处理方式

TIME_WAIT 是指在 TCP 连接关闭时,等待所有分组确认被接收的状态,这个状态会持续 2MSL(Maximum Segment Lifetime)的时间,以确保所有分组都被接收。在这段时间内,该连接不能被重用。MSL 是指分组在网络中的最大生存时间,通常为 30 秒,1分钟或2分钟。

2023-06-09 18:31:51 974

原创 Go 存储系列:Hash存储引擎 Bitcask

Bitcask 是一种底层格式为日志模样的 kv 存储,就是只追加,保证文件是一直顺序写入的,写入性能非常好大部分接触的KV存储引擎是可能都是Redis。Redis的所有数据都是装在内存的,也可以根据配置持久化在磁盘里面,但是读都是从内存里面读的,这意味着redis的读写速度都非常快。但是这有一个限制,那就是单机Redis存储的数据不能大于内存本身。而Bitcask的最大限制是内存必须装得下所有的key,因为Bitcask的value是存在磁盘上的。

2023-05-26 18:50:56 1204 1

原创 数据存储应用与原理剖析

MemTable:MemTable是在内存中的数据结构,用于保存最近更新的数据,会按照Key有序地组织这些数据,因为数据暂时保存在内存中,内存并不是可靠存储,如果断电会丢失数据,因此通常会通过WAL(Write-ahead logging,预写式日志)的方式来保证数据的可靠性。哈希存储引擎是哈希表的持久化实现,支持增、删、改,以及随机读取操作,但不支持顺序扫描,不支持排序,不支持范围查询,时间复杂度O(1), 对应的存储系统为键值(Key-Value)存储系统,Redis 就是使用的Hash 存储。

2023-05-23 11:29:34 831

原创 分布式系统反向代理设计与正向代理

代理服务器:位于发起请求的客户端与原始服务器端之间的一台跳板服务器,代理服务器分为正向代理服务器和反向代理服务器正向代理 :代理客户端,隐藏了真实的请求客户端,服务端不知道真实的客户端是谁,客户端发出的请求都被代理服务器代替,正向代理最典型的应用就是代理浏览器访问,实现资源的访问控制,缓存等功能。正向代理部署在用户端。反向代理 : 帮客户端把请求转发到真实的服务器, 用于解决单机处理能力不足问题,多机冗余部署,代理隐藏目标IP。反响代理部署在服务端。

2023-04-23 16:48:10 717

原创 分布式任务调度系统分析

分布式任务调度设计实践: 分析了一个定时任务调度最简单的架构,开源系统XXX-Job 代码

2023-04-21 23:40:19 1251

原创 MongoDB的索引事物和高可用分析

MongoDB是一个基于分布式文件存储的数据库,MongoDB是一个介于关系数据库和非关系数据库(nosql)之间的数据库产品。

2023-03-28 17:09:11 650

原创 DNS域名解析服务

DNS:域名系统(DNS)是互联网基础设施的重要组成部分。它负责将人类可读的域名映射到 IP 地址,使用户可以使用易记的名称访问网站和其他互联网资源,而不是一串数字。本技术文档将提供 DNS 系统的全面概述,包括其设计、实现和运作。

2023-03-24 12:02:09 513

转载 Confluence 增加浮动导航目录

Confluence浮动导航目录

2023-02-21 14:23:27 869

原创 Redis常见集群方案

Redis集群方案目前主流的有三种,分别是Twemproxy、Codis和Redis Cluster。

2023-01-07 20:38:06 698

原创 分布式系统架构

分布式系统:硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。

2023-01-04 18:33:38 1567 1

原创 消息队列应用与原理剖析

消息队列:在消息的传输过程中保存消息的容器,生产者和消费者不直接通讯,依靠队列保证消息的可靠性,避免了系统间的相互影响。系统间的数据流通道

2023-01-03 16:28:37 327

原创 配置中心应用与原理剖析

配置中心:分布式系统中集中化管理线上应用程序配置项的管理中心。

2022-10-09 17:44:35 440

原创 注册中心:Consul原理分析

Consul是一个高可用的分布式服务注册中心,由HashiCorp公司推出,Golang实现的开源共享的服务工具。Consul在分布式服务注册与发现方面有自己的特色,解决方案更加“一站式”,不再需要依赖其他工具。

2022-10-08 19:23:39 1448

原创 注册中心原理分析

CAP中,其中有一个P是不能保证的,因为在现实的网络环境中,不能保证一定不能出现网络分区,在出现网络分区的时候,我们应该怎么选择A 或者 C?提到服务的可用性,就会出现一个非常重要的CAP 定理。对于注册中心来说,我们应该选择一个什么样的可用性呢?

2022-09-23 18:38:28 1252

原创 RPC 实战与核心原理分析

通过分析了RPCX框架的实现原理,我们大概知道了一次RPC请求到底发生了什么事情。我们也可以知道RPC 主要用于公司内部的服务调用,性能消耗低,传输效率高,实现复杂。HTTP 主要用于对外的异构环境,浏览器接口调用,App 接口调用,第三方接口调用等。长链接。不必每次通信都要像 HTTP 一样去 3 次握手,减少了网络开销。注册发布机制。RPC 框架一般都有注册中心,有丰富的监控管理;发布、下线接口、动态扩展等,对调用方来说是无感知、统一化的操作。安全性,没有暴露资源操作。微服务支持。

2022-09-21 17:30:57 1592

原创 Go 内存释放策略:MADV_DONTNEED 和 MADV_FREE

Go 内存释放策略:MADV_DONTNEED 和 MADV_FREE, Go 的 pprof 内存和服务器RES 为什么对不上?

2022-09-16 11:10:02 2547

原创 RPC 核心原理理论分析

RPC 的全称是 Remote Procedure Call,即远程过程调用。简单解读字面上的意思,远程肯定是指要跨机器而非本机,所以需要用到网络编程才能实现。从业务角度来看,RPC有两个作用从技术角度来看,RPC有这几个作用。

2022-09-09 19:33:36 807

原创 微服务API网关

微服务的架构体系中,可以简单的看做是一个大应用拆分为多个小应用,小应用可以自成体系,可以拥有自己的数据库、框架甚至于语言等等,各个小应用一般通过Rest接口的形式被第三方、H5或者APP去调用。这个时候必然会存在一种情况,某些页面需要多个服务组合才能得到用户需要的信息。举个栗子:我们不做任何处理的时候,调用的时候是这样:该处的缺点就是前端需要调用多次服务才能拿到我们想要的数据,为了解决这个问题我们可以做一层中间的聚合层,聚合层也就是我们通常所说的BFF。

2022-09-05 19:35:00 680

原创 性能优化究竟应该怎么做

在高并发系统中,业务往往想提高系统的性能,降低接口的延迟,提高用户体验。本文介绍如何提供系统服务的一些参考方法。

2022-08-28 11:38:41 687

原创 Elasticsearch 原理与应用实践

Elasticsearch 是一个分布式、可扩展、近实时的搜索与数据分析引擎。

2022-08-22 14:37:34 485

原创 Redis的事务,Go+lua

Redis的事务,Go+luaRedis 事务Redis的基本事务(basic transaction)需要用到MULTI命令和EXEC命令,这种事务可以让一个客户端在不被其他客户端打断的情况下执行多个命令。和关系数据库那种可以在执行的过程中进行回滚(rollback)的事务不同,在Redis里面,被MULTI命令和EXEC命令包围的所有命令会一个接一个地执行,直到所有命令都执行完毕为止。当一个事务执行完毕之后,Redis才会处理其他客户端的命令。Redis事务在执行的中途遇到错误,不会回滚,而是继

2022-05-10 23:55:00 586

原创 缓存数据一致性,雪崩,大Key,热Key问题解决方案

使用缓存为什么使用缓存缓存就是数据交换的缓冲区(称作Cache),目的就是提高我们的接口性能,特别是那些需要大量CPU计算和I/O获取的数据。使用缓存带来的问题缓存虽然能够提高应用程序的性能,但也会带来一些问题。比如:缓存失效,缓存击穿,缓存雪崩,数据一致性问题缓存雪崩缓存失效为什么会带来问题呢?试想一下,单个的缓存失效其实并不会引发多大的问题,问题在于当大量的Key同时失效时,在高并发的情况下,大量的请求同时到数据库层,会给数据库层带来压力,从而引发其他的问题。解决方案优化过期时间既然是

2022-05-10 00:57:46 1154

原创 Prometheus监控业务指标

Prometheus是一个开源的监控系统和告警工具,支持多维数据指标, 可以给一条数据打上多个标签, 在查询时根据这些标签做过滤支持PromQL, 可以非常灵活地查询和汇总需要地数据支持图形界面可视化展示, 如grafana等Prometheus架构Prometheus Server 是普罗米修斯的核心服务,提供了对外的HTTP服务以及数据存储, 它将数据存储在时序数据库中.普罗米修斯支持主动和被动方式收集指标数据, 即我们常说的pull模式和push模式. 普罗米修斯会通过配置job/

2022-04-28 15:52:51 4372

原创 实现延迟队列的几种方案

背景实际项目当中,经常会使用延迟队列,执行一些延迟任务,比如:如果第一次通知失败,就延迟 X 分钟再通知一次,这在构建webhook的项目中很常见。如果用户成功消费,X 天后没有评论,就默认给予好评。这些任务具有的共同点可以抽象为:在某项任务执行完毕后,延迟一定时间执行另外一项任务。我们需要什么延迟队列:一种带有 延迟功能 的消息队列延时队列模型,就是将未来执行的事件提前存储好,然后不断扫描这个存储,触发执行时间则执行对应的任务逻辑可以选择的技术方案定时扫表服务启动时,开启一

2022-04-17 20:56:41 5165

原创 微服务架构熔断设计分析

服务雪崩效应微服务系统有多个系统组成,但由于某些原因(到达性能极限、未知bug、网络分区等)导致访问上游很慢,这时如果没有服务的熔断与降级那么调用者服务会因为上游异常而积累过多请求导致产生大量等待请求,进而调用者服务也会引发访问慢或中止服务的问题,从而引发其他系统问题,如此一来,由上游本身的问题而引发依赖服务的整个链路都出问题,这就是典型的服务雪崩效应。

2022-04-13 22:12:47 2900

原创 ElasticSearch 系列: Index Template

Index templateIndex template定义在创建新index时可以自动应用的settings和mappings。 Elasticsearch根据与index名称匹配的index模式将模板应用于新索引。这个对于我们想创建的一系列的Index具有同样的settings及mappings。比如我们希望每一天/月的日志的index都具有同样的设置。Index template仅在index创建期间应用。 对index template的更改不会影响现有索引。 create index API

2021-12-30 01:47:10 1727

原创 项目设计-服务可靠性建设

软件工程有两个显著特点,一是具备规模化快速复制扩散的能力,二是在竣工之后依然可以被改造并保持高速进化。这也就导致了软件工程一点点的不足也可能被快速扩散、无限放大造成大规模损失,进化中既有的稳定性结构可能会被不断打破,可能导致大量的救火投入,疲于奔命,极大地消耗有效而宝贵研发资源,阻碍软件的进行甚至带来灾难性后果。‘所以,我们在项目设计时需要考虑到服务的可靠性建设,稳定性保障围绕的核心在业务团队进行服务设计的时候,稳定性保障涉及应用架构代码质量、流量与封网管控、故障复盘、监控等,是一项非常系统化的工程。

2021-12-19 01:23:38 475

原创 ElasticSearch 系列:分词

分词搜索引擎的核心是倒排索引(这里不展开讲),而倒排索引的基础就是分词。所谓分词可以简单理解为将一个完整的句子切割为一个个单词的过程。在 es 中单词对应英文为 term。我们简单看个例子:ES 的倒排索引即是根据分词后的单词创建,即 我、爱、北京、天安门这4个单词。这也意味着你在搜索的时候也只能搜索这4个单词才能命中该文档。实际上 ES 的分词不仅仅发生在文档创建的时候,也发生在搜索的时候,如下图所示:读时分词发生在用户查询时,ES 会即时地对用户输入的关键词进行分词,分词结果只存在内存中,当查询

2021-09-24 01:27:07 179

原创 ElasticSearch 系列:Index

Index(Index)索引就像关系数据库中的“数据库”。它有一个定义多种类型的映射。(index)索引是一个逻辑命名空间,它映射到一个或多个主分片,并且可以有零个或多个副本分片。Index配置Index 的配置可以参考官方文档这里只是说明比较重要的两个参数。“number_of_shards”: 分片数量“number_of_replicas”: 副本数量分片ES里面的索引可能存储大量数据,这些数据可能会超出单个节点的硬件限制。为了解决这个问题,ES提供了将索引细分为多

2021-09-23 01:10:10 480

原创 ElasticSearch 系列:入门

简介Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。充分利用Elasticsearch的水平伸缩性,能使数据在生产环境变得更有价值。ElasticSearch 应用场景海量数据分析引擎站内搜索引擎数据仓库基本概念Elasticsearch 是一个分布式文档存储。Elasticsearch 不是将信息存储为列状数据的行,而是存储已序列化为 JSON 文档的复杂数据结构。当集群中有多个 Elasticsearch

2021-09-17 01:32:11 102

python3.x爬虫代码

python3.x爬虫代码

2016-07-20

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

TA关注的人

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