- 一个基于Go Kitex + Redis + Vue 3构建的高并发、高可用的短链接微服务系统,支持前后端分离架构。
- 高并发支持:基于Go Kitex微服务框架,高性能服务处理
- 缓存优化:
- 防止缓存穿透:实现布隆过滤器(Bloom Filter)快速判断短链接是否存在
- 防止缓存击穿:使用singleflight机制确保同一时间对同一个短链接的请求只查询一次后端
- 限流保护:集成Redis Rate Limiter实现接口限流,保护系统稳定
- 数据一致性:使用Redis事务确保数据一致性
- 优雅退出:支持平滑关闭服务
- 现代化UI设计:采用圆角风格,美观大方的界面设计
- 响应式布局:完全适配移动端和桌面端
- 用户友好体验:
- 实时表单验证和反馈
- 加载状态指示和动画效果
- 操作成功/失败消息提示
- 一键复制功能
- 双页面设计:生成短链接页面和测试重定向页面
shortlink-system/
├── backend/ # Go Kitex后端代码
│ ├── main.go # 主入口文件
│ ├── go.mod # Go模块定义
│ ├── idl/ # 接口定义文件
│ │ └── shortlink.thrift # Thrift接口定义
│ └── service/ # 服务实现
│ └── shortlink_service.go # 短链接服务实现
├── frontend/ # Vue 3前端代码
│ ├── package.json # 前端依赖配置
│ ├── src/ # 前端源码
│ │ ├── App.vue # 主应用组件
│ │ ├── main.js # 前端入口
│ │ ├── style.css # 全局样式
│ │ └── components/ # Vue组件
│ │ ├── GenerateShortlink.vue # 生成短链接组件
│ │ └── RedirectTest.vue # 测试重定向组件
│ └── dist/ # 构建输出目录
└── README.md # 项目说明文档
- API接口:
/api/generate?url=长链接 - 功能描述:将长URL转换为6位字符的短链接码
- 返回结果:包含短链接码、完整短链接URL和状态信息
- 实现逻辑:使用MD5哈希算法结合随机数生成唯一短链接码,存储长链接与短链接的双向映射
- 访问方式:
http://localhost:8080/r/短链接码 - 功能描述:根据短链接码查询并跳转到原始长链接
- 实现逻辑:优先通过布隆过滤器快速判断短链接是否存在,再使用singleflight机制并发查询Redis
- 布隆过滤器:用于快速判断短链接是否存在,有效防止缓存穿透
- SingleFlight:合并并发请求,防止缓存击穿
- Redis存储:高效的键值存储,支持设置过期时间
- Go:高性能后端开发语言
- Kitex:字节跳动开源的Go微服务框架
- Thrift:接口定义语言
- Redis:缓存数据库,用于存储短链接映射关系
- go-redis:Redis客户端库
- redis_rate:基于Redis的限流库
- Vue 3:渐进式JavaScript框架
- Vite:现代前端构建工具
- Axios:HTTP客户端,用于前后端通信
- CSS3:现代化样式设计
- Go 1.18+ 环境
- Node.js 16+ 环境(用于前端开发)
- Redis 6.0+ 服务
- 确保Redis服务正常运行
redis-server- 进入backend目录
cd backend- 安装依赖
go mod tidy- 生成Kitex代码(首次运行需要)
kitex -module shortlink.backend idl/shortlink.thrift-
运行后端服务
- 默认方式(不启用布隆过滤器)
go run main.go
- 启用布隆过滤器
go run main.go --bf_search=true
服务将在8888端口启动Kitex服务,在8080端口启动HTTP重定向服务。
参数说明:
--bf_search=true/false:控制是否启用布隆过滤器搜索短链接(默认:false)- 启用布隆过滤器可以防止缓存穿透,但可能增加查询响应时间
- 禁用布隆过滤器可以获得更好的查询性能,适用于对响应速度要求高的场景
- 进入frontend目录
cd frontend- 安装依赖
npm install
# 或使用cnpm(国内加速)
cnpm install- 启动开发服务器
npm run dev- 构建生产版本
npm run build前端服务默认在5173端口启动。
系统采用经典的前后端分离架构:
- 用户层:通过浏览器访问前端页面或直接请求短链接
- 前端层:Vue 3单页应用,负责用户交互和数据展示
- 后端层:Go Kitex微服务,处理业务逻辑
- 缓存层:Redis存储短链接映射关系,实现高性能访问
- 布隆过滤器优化:在Redis中实现的布隆过滤器可以快速判断短链接是否存在,避免无效的数据库查询
- SingleFlight并发控制:合并同一时间的相同请求,减少Redis压力
- Redis事务:使用事务确保数据一致性
- URL过期机制:所有短链接默认有效期为30天,可自动清理过期数据
- 限流保护:对生成短链接接口进行限流,防止恶意请求
- 请确保Redis服务正常运行,否则系统将无法存储和查询短链接
- 短链接生成算法使用MD5哈希结合随机数,理论上可能存在冲突,但概率极低
- 系统默认使用本地开发配置,生产环境需要调整相关配置
- 如需部署到生产环境,建议配置HTTPS和域名解析
- 添加用户认证和权限管理
- 实现短链接点击统计和分析功能
- 支持自定义短链接码
- 添加短链接有效期自定义选项
- 部署多实例并配置负载均衡
- 添加监控告警系统