自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 apisix 本地开发环境部署

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

2024-08-30 22:40:06 379

翻译 Go 并发指南

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

2024-08-28 00:00:35 34

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

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

2024-08-18 13:49:33 1028

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

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

2024-08-14 22:48:17 638

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

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

2024-08-12 08:15:00 80

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

在电商系统中,价格是一个核心数据元素,其存储设计直接影响系统的性能、可靠性和可扩展性。本文将详细探讨价格字段的数据库设计和相关接口设计。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 783

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

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

2024-08-10 14:12:59 625

原创 代码分支管理规范

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

2024-08-07 09:30:00 332

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

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

2024-08-05 08:39:49 904

原创 如何熟悉一个新系统

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

2024-05-31 00:43:05 111

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

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

2024-05-22 23:53:50 693

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

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

2024-01-30 20:35:53 1064

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

原创 HBase:大数据中的NoSQL

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

2023-10-17 16:47:17 316

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

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

2023-10-10 22:32:49 381

原创 布隆过滤器的使用

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

2023-10-08 15:31:19 272

原创 Go 限流器使用

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

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

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

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

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

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

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

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

原创 Go mmap 文件内存映射

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

2023-06-20 18:31:21 2316

原创 TIME_WAIT的处理方式

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

2023-06-09 18:31:51 1190

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

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

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

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

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

2023-05-23 11:29:34 1036

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

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

2023-04-23 16:48:10 738

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

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

2023-04-21 23:40:19 1454

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

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

2023-03-28 17:09:11 725

原创 DNS域名解析服务

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

2023-03-24 12:02:09 544

转载 Confluence 增加浮动导航目录

Confluence浮动导航目录

2023-02-21 14:23:27 1032

原创 Redis常见集群方案

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

2023-01-07 20:38:06 736

原创 分布式系统架构

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

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

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

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

2023-01-03 16:28:37 351

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

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

2022-10-09 17:44:35 494

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

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

2022-10-08 19:23:39 1709

原创 注册中心原理分析

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

2022-09-23 18:38:28 1422

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

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

2022-09-21 17:30:57 1989

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

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

2022-09-16 11:10:02 3117

原创 RPC 核心原理理论分析

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

2022-09-09 19:33:36 974

原创 微服务API网关

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

2022-09-05 19:35:00 787

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

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

2022-08-28 11:38:41 741

python3.x爬虫代码

python3.x爬虫代码

2016-07-20

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

TA关注的人

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