• Stars
    star
    280
  • Rank 147,492 (Top 3 %)
  • Language
    CSS
  • Created about 9 years ago
  • Updated almost 9 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

即时通讯服务集群,可用于构建聊天等实时交互系统

Gru

Gru是一个长连接服务解决方案,可用于各种类型的实时交互应用。

目前主要模块

  • common 通用的一些代码、工具类等
  • idgen 消息id、某些业务id生成服务
  • ticket
    • 处于最前端,客户端首先请求该服务拿到ticket才能建立长连接
    • 目前实现了基于一致性hash的负载均衡,将客户端路由到不同的spear节点
    • 其它位于前端的策略,如准入机制等可在此模块扩展
  • stat 统计模块、业务模块
    • 目前实现了在线统计,数据存储在redis
    • 若还需要后端接入其他业务服务,可在此模块扩展
  • spear 长连接服务模块
    • 提供长连接接入的模块
    • 最小化模式部署时只需要此模块的一个实例即可
  • minions 监控模块
    • 目前可监控集群长连接服务spear节点数、每个节点的用户数等
    • 节点间管理、用户管理可在此模块扩展
  • spear-client 客户端模拟,压测示例代码
  • 示例项目: gru-example
    • 以IM作为示例展示基于Gru构建实时应用
    • 支持群聊和单聊

特性

  • 支持单点部署和集群模式部署
  • 采用socket.io协议
  • 各模块均支持水平扩展
  • 单节点可服务10W+以上长连接,具体为在不断发消息的情况下(1000条/秒),单长连接服务节点支持的稳定连接数量在10W+(8核16G)
  • 节点间通讯支持多种方式:进程内、redis、rocketmq

安装部署

git clone https://github.com/sumory/gru.git /data/tmp/gru

最小安装,单点部署

如果只想体验单节点的部署模式,不需要监控、负载均衡及其它业务服务,只需要部署一个spear节点即可。部署方式如下:

cd /data/tmp/gru
mvn install #本地安装
cd spear
mvn clean package -Pdev #生成spear可运行包,使用dev的配置文件
cd target/release #该目录下有所有spear运行需要的文件
ll conf # 主要配置文件位于conf/system.properties下,默认以single模式运行,不依赖zookeeper/redis等
sh bin/start.sh # 启动

以上步骤完成后即可在本地的31001端口开启一个spear实例监听,等待客户端连接。

若想查看如何使用该spear实例,请移步gru-example,启动该项目,访问http://127.0.0.1:60000即可。

集群方式部署

集群的安装配置较为复杂,详见Gru集群安装配置

监控后台screenshots

More Repositories

1

lor

a fast, minimalist web framework for lua based on OpenResty
Lua
1,015
star
2

openresty-china

OpenResty China Community
JavaScript
284
star
3

sumorio

a sns system for developers based on nodejs
JavaScript
133
star
4

moklr

another "postman", status server, http request mock.
JavaScript
87
star
5

uc

UC是一个用于处理分布式系统中ID生成,唯一性字段值管理的通用模块.
Java
69
star
6

gru-example

Gru使用示例 - Web Chat
JavaScript
61
star
7

BTC

all about to build a bitcoin mining pool, auto-pay system, scanning blocks etc.
Python
59
star
8

confd

configuration management
Go
44
star
9

lincell

lincell是用Node.js开发的轻型文件编辑器,只需一条命令即可将文件夹变成一个工作空间供远程访问
JavaScript
33
star
10

sumory-note

all about to build a bitcoin mining pool, auto-pay system, scanning blocks etc.
Python
31
star
11

idgen

id generator based on 'snowflake'
Go
29
star
12

nodis

Prefix match search and Segment words search built on Node.js and Redis
JavaScript
16
star
13

ciao

a minimal C++ web framework (beta)
C++
13
star
14

beauty

Beautiful console: colorful && stylized. Use it without doing anything to `console`.
JavaScript
7
star
15

baseN

Encode number to base(2~62) hash string and decode it back.
JavaScript
7
star
16

gotty

A tcp server framework for Golang.
Go
5
star
17

ltcblockchain

a Litecoin data explorer, just like blockchain.com or ltc.block-explorer.com
JavaScript
4
star
18

runbot

与`moklr`搭配的status api请求检查服务
Go
3
star
19

litchi

websocket server experiment just for fun.
Lua
3
star
20

social_oauth

3
star
21

milor

a minimal lib for http utility.
2
star
22

scripts

dotfiles/useful scripts etc.
Shell
2
star
23

orange.sumory.com

website for `orange`
CSS
2
star
24

sumory.github.io

my personal site.
HTML
2
star
25

hexo-theme-fatty

just a theme for hexo
CSS
1
star
26

jwt

a java web project template - based on Spring MVC and Spring JDBC
Java
1
star
27

baseN4go

baseN for go
Go
1
star
28

log4go

Go
1
star
29

mas

a state management library.
C++
1
star
30

orange-peel

Orange Dashboard
JavaScript
1
star
31

lor_site

documents for `lor` framework
HTML
1
star
32

mkd

cli to view and edit markdown files.
JavaScript
1
star