自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(158)
  • 资源 (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 724

原创 线上问题的定位与优化-pprof、holmes和pyroscope

文章主要围绕线上问题定位与优化展开,重点介绍了在Golang技术栈中如何利用性能分析工具(如pprof)及其改进方案(holmes和pyroscope)来解决复杂的性能问题。pprof适用于基础性能分析,但手动操作限制了其在复杂场景中的应用。holmes和pyroscope通过自动化和持续采样弥补了这一不足,分别适用于异常现场捕获和长期性能监控。

2025-03-02 11:21:30 1124

原创 微服务监控与Go服务性能分析

在微服务架构下,服务监控至关重要,能够帮助快速发现问题,提升稳定性。同时,在Go服务中,性能瓶颈的排查依赖于pproftracedelve等工具,针对 CPU、内存、Goroutine、GC 等关键部分进行优化,以保证系统的高性能和稳定性。接口性能分析是保障微服务稳定性和高效运行的核心环节。通过关键指标监控、瓶颈分析、压测、优化策略,可以有效提升接口的吞吐量、降低延迟和错误率,确保系统稳定可靠。结合等工具,可以精准定位问题,持续优化微服务接口性能。

2025-02-18 17:30:27 779

原创 电商系统-产品经理

电视产品经理的工作体系:

2024-12-25 00:06:35 355

原创 深入理解延迟队列:原理、实现与应用

延迟队列是一个在实际业务中非常有用的组件,通过Redis实现的延迟队列具有高性能、可靠性好、实现简单等优点。在实际应用中,需要根据具体业务场景选择合适的实现方案,同时注意性能优化和可靠性保证。延迟队列的实现没有银弹,关键是要理解业务需求,在性能、可靠性、复杂度等方面做出合理的权衡。通过本文介绍的实现方案和最佳实践,相信读者能够更好地理解和使用延迟队列。

2024-12-20 23:15:58 1093

原创 短 URL 系统是怎么设计的?

短链系统是一个集数据追踪、用户体验优化于一体的实用性服务,通过巧妙的算法和高效的存储机制,为用户提供便捷的链接服务。

2024-12-20 22:39:10 1018

原创 2500 行代码!!使用gozero 开发一个分布式ID生成服务

分布式ID生成策略Snowflake 算法:依赖第三方库,快速生成全局唯一ID号段模式:通过数据库事务更新 max_id,批量获取ID段本地缓存机制定期同步数据库 bizTag 信息减少数据库查询,提高系统性能支持自动缓存刷新SDK 设计预获取 ID 列表,维持 1000 个 ID 缓冲异步补充 ID,保证业务持续性支持平滑获取分布式 ID。

2024-12-14 22:41:28 740

原创 全局唯一ID生成方案详解

性能要求可用性要求ID长度限制是否需要递增是否需要包含业务含义是否需要分库分表没有最好的方案,只有最适合的方案。应该根据具体业务场景和需求来选择合适的ID生成方案。

2024-11-28 00:25:39 1128

原创 系统分析与重构指南:现代软件工程的质量提升策略

系统分析与重构是一个持续的、系统性的过程。通过科学的方法论、先进的技术手段和严谨的实施流程,企业可以不断优化软件系统,提升技术竞争力。关键在于:建立前瞻性的技术视野,保持对系统架构的敏感性,并始终以提升用户体验和系统性能为根本目标。

2024-11-21 01:11:34 589

原创 分布式系统稳定性建设-性能优化篇

系统稳定性建设是系统工程的核心内容之一。

2024-11-20 00:04:40 1343

原创 分布式系统稳定性建设-高可用篇

分布式系统稳定性建设-高可用篇

2024-11-18 08:59:47 826

原创 分布式系统稳定性建设-架构设计篇

系统稳定性建设是系统工程的核心内容之一。

2024-11-16 00:36:05 849

原创 apisix 本地开发环境部署

本地开发环境部署可以采用 docker-compose 部署,配置文件如下。将apisix 在本地部署起来。

2024-08-30 22:40:06 648

翻译 Go 并发指南

这份指南基于书籍《Go 并发》和《Go 编程语言》中的一些示例构建。

2024-08-28 00:00:35 91

原创 高可用架构和系统设计思想

可用性是一个可以量化的指标,计算的公式在维基百科中是这样描述的:根据系统损害、无法使用的时 间,以及由无法运作恢复到可运作状况的时间,与系统总运作时间的比较。行业内一般用几个9表示可用性指标,对应用的可用性程度一般衡量标准有三个9到五个9;一般我们的系统至少要到 4 个 9( 99.99%)的可用性才能谈得上高可用。高可用(High Availability)的定义:(From维基百科)是 IT 术语,指系统无中断地执行其功能的能 力,代表系统的可用性程度,是进行系统设计时的准则之一。

2024-08-18 13:49:33 1435 1

原创 后端系统设计:存储系统的选择指南

关系型数据库和 NoSQL 数据库的选型,往往需要考虑几个指标:数据量、并发量、实时性、一致性要求、读写分布和类型、安全性、运维成本中后台管理型系统 - 如运营系统,数据量少,并发量小,首选关系型数据库。大流量系统 - 如电商单品页,后台考虑选关系型数据库,前台考虑选内存型数据库。日志型系统 - 原始数据考虑选列式数据库,日志搜索考虑选搜索引擎。搜索型系统 - 例如站内搜索,非通用搜索,如商品搜索,后台考虑选关系型数据库,前台考虑选搜索引擎。

2024-08-14 22:48:17 739

转载 golang 编程规范 - 项目目录结构

项目的目录结构通常也是门面,内行人通过目录结构基本就能看出开发者是否有经验。不过,笔者在实践中发现 golang-standards 的目录结构也存在一些问题。笔者将这些问题以注解的方式写在下文的具体目录讲解中,欢迎大家一起讨论。

2024-08-12 08:15:00 428

原创 电商系统价格字段的后端存储设计

在电商系统中,价格是一个核心数据元素,其存储设计直接影响系统的性能、可靠性和可扩展性。本文将详细探讨价格字段的数据库设计和相关接口设计。1.1 表结构1.2 分片策略对于大规模系统,可以考虑按product_id进行分片,以提高查询效率和系统扩展性。2.1 价格查询接口2.2 价格设置接口2.3 批量价格更新接口3.1 缓存策略3.2 并发控制3.3 数据验证3.4 日志和审计3.5 性能优化。

2024-08-11 11:42:55 1100

原创 全球化系统设计:多时区处理

当设计全球化后端服务时,时间处理设计

2024-08-10 14:12:59 1196

原创 代码分支管理规范

在使用 Git 的过程中如果没有清晰流程和规划,否则,每个人都提交一堆杂乱无章的 commit,项目很快就会变得难以协调和维护。Git 版本管理同样需要一个清晰的流程和规范,Vincent Driessen 为了解决这个问题提出了 A。

2024-08-07 09:30:00 525

原创 电商平台架构设计与微服务部署

电商业务是一个涵盖广泛、交互复杂的系统,涉及用户浏览商品、下单购物、支付、订单处理、物流配送等多个环节。从业务的角度进行拆解可以更好地理解和组织各个方面的功能。以下是对电商业务场景、业务模型和工作链路的拆解。

2024-08-05 08:39:49 1610

原创 如何熟悉一个新系统

要一个测试账号,把相关功能走一遍,这样能非常快地了解一个系统的功能;看现有的服务,业务的技术,产品文档,快速了解当前业务看关键的核心表结构,这样可以快速了解系统的领域模型;根据功能步骤找到系统对外的接口列表,了解系统的L0业务流程;下载系统工程,熟悉整个工程结构和模块职责;以一个最重要的流程为入手点,阅读代码,看清楚核心的执行逻辑,可以变看边画时序图制造一个debug场景,以debug方式走一遍流程,这样可以实际加深一下做一个小需求,掌握相关的流程和权限;

2024-05-31 00:43:05 165

原创 项目技术架构文档应该有哪一些

物理架构视图着重考虑运行软件的计算机、网络、硬件设施等情况。包含:包括如何将软件包部署到这些基础设施、基础设施的配置情况,比如代码仓库、MySQL,MQ,Redis,Nginx,CI/CD,k8s,监控,负载均衡设备等,以及注意事项。

2024-05-22 23:53:50 807

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

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

2024-01-30 20:35:53 1189

原创 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 427

原创 HBase:大数据中的NoSQL

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

2023-10-17 16:47:17 380

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

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

2023-10-10 22:32:49 404

原创 布隆过滤器的使用

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

2023-10-08 15:31:19 327

原创 Go 限流器使用

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

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

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

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

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

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

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

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

原创 Go mmap 文件内存映射

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

2023-06-20 18:31:21 2569

原创 TIME_WAIT的处理方式

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

2023-06-09 18:31:51 1295

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

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

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

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

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

2023-05-23 11:29:34 1107 1

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

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

2023-04-23 16:48:10 791

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

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

2023-04-21 23:40:19 1549

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

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

2023-03-28 17:09:11 773

原创 DNS域名解析服务

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

2023-03-24 12:02:09 574

转载 Confluence 增加浮动导航目录

Confluence浮动导航目录

2023-02-21 14:23:27 1262

python3.x爬虫代码

python3.x爬虫代码

2016-07-20

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

TA关注的人

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