Giter Site home page Giter Site logo

micro-message-system's Introduction

基于go micro的分布式即时通信系统

技术架构

1.微服务框架:go micro 基于go-plugins可插拔模式
2.服务发现:etcd
3.服务端限流:令牌桶(ratelimit)
4.熔断机制:hystrix
5.消息中间件:kafka
6.web框架:gin  gorm
7.数据库:mysql
8.token认证:jwt-go
9.搜索:ES
10.链路追踪:jaeger

系统模块

1. 用户服务:
    用户API服务 - 用户注册登录
    用户RPC服务 - 用户鉴权 网关gate调用
2. IM服务:
    IM消息发送服务 - produce消息到kafka 网关gate调用
    IM消息订阅服务 - 订阅kafka消息供websocket展示
3. 网关:
    调用userrpc验证用户token是否存在
    调用imrpc发送消息到kafka
    获取并绑定用户与IM websocket服务地址
4. Upload服务:
    文件分块上传  api没有放到网关,避免网关流量过大

系统架构图:

Image text

系统环境要求

golang >= 1.14
protoc >= 3.6.1

用户服务-userservice

生成pb

cd userserver/protos
protoc --proto_path=. --micro_out=. --go_out=. user.proto

启动user rpc服务

cd /userserver/cmd/rpc
go run user_rpc.go -f ../config/config_rpc.json

启动user api

cd /userserver/cmd/api
go run user_api.go -f ../config/config_api.json

IM通信服务-imservice

生成pb

cd imserver/protos
protoc --proto_path=. --micro_out=. --go_out=. im.proto

启动kafka消息推送rpc服务 供网关gateway调用

cd imserver/cmd/
go run rpcproducer/im_rpc.go

启动kafka消息订阅消费者服务(进程) 订阅kafka消息推送到websocket

cd imserver/cmd/
go run imconsumer/im_server.go -f ./config/config_im_1.json
go run imconsumer/im_server.go -f ./config/config_im_2.json

网关API-gateway 需token认证并调用userservice和imservice

调用rpc发送消息到kafka(/send)

cd /userserver/cmd/rpc
go run user_rpc.go -f ../config/config_rpc.json

cd imserver/cmd/
go run rpcproducer/im_rpc.go

cd gateway/cmd
go run api/gateway_api.go

获取并绑定用户与IM服务地址(/address)

cd /userserver/cmd/rpc
go run user_rpc.go -f ../config/config_rpc.json

cd gateway/cmd
go run api/gateway_api.go

docker 方式运行

详见 docker目录

k8s 方式运行

详见 k8s目录
sh batch_deploy.sh

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.