Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

48 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

aweb

A lightweight social project developed in Go, based on accumulated experience.


简介

基于 Gin + Gorm + Redis + MySQL + Kafka + Etcd 开发的轻量级社交项目。


技术亮点

  • 自定义中间件

    • 基于 IP 的限流
    • JWT 用户鉴权
  • 高可用客户端

    • 断路器、超时、重试、指数退避策略封装自定义 REST Client
    • RPC 客户端拦截器,用于调用第三方服务
  • 第三方服务集成

    • 对 Twitter、Discord Oauth2 服务进行统一 RPC 封装
  • 社交关系与互动

    • 建立关注关系、关注/关注者统计
    • 实现用户发帖
    • 使用邻接表设计用户评论
  • 高性能消息系统

    • 二次封装基于 Sarama 的 Kafka 客户端
    • 生产-消费者模式实现高性能帖子阅读、点赞、收藏计数
    • 用户交互时并发发送计数消息,异步消费
  • 热榜与缓存

    • 基于热度公式实现高并发帖子热榜计算
      • 定时任务 + 分布式锁,异步计算热榜
      • 基于最小堆的优先队列构造排行
      • 本地缓存(原子变量+自定义过期时间)+ Redis 缓存组成高性能方案
  • 全文检索与相关性提升

    • 使用 ES 对文章建立索引
    • 利用用户交互(点赞、收藏)提升相关性和搜索体验
  • Feed 流实现

    • 基于用户交互行为(关注、点赞、发帖),采用拉/推模型、收/发信箱设计
    • 线性交互关系:全推模型,产生用户收信箱事件
    • 非线性交互关系:混合推拉模型
      • Feed 写流程:用户粉丝数大于阈值时,使用拉模型创建自己的发信事件;否则查询粉丝,使用推模型创建粉丝的收信事件
      • Feed 读流程:查询关注者发信箱事件 + 查询自己的收信箱事件,合并排序
  • 微服务与架构

    • 除基础用户服务外,全部服务 gRPC 微服务化
    • 使用 Etcd 进行服务注册、发现与续约
    • DDD 分层建模
    • 基于接口,采用 Wire 依赖注入,构造代码依赖链路

About

developing a web service using golang based on accumulated experience.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages