Browse Source

benchmark

master
tangmingyou 3 years ago
parent
commit
eaad4b2da9
  1. 98
      benchmark/main.go
  2. 16
      deploy_k8s/docker_compose.yml

98
benchmark/main.go

@ -68,10 +68,15 @@ func init() {
}
}
// main -mode=deliver -users=10 -send=10
func main() {
runtime.GOMAXPROCS(runtime.NumCPU())
flag.StringVar(&gatewayHttp, "gateway", "http://192.168.110.36:7000", "http gateway address")
flag.StringVar(&benchmarkMode, "mode", "deliver", "benchmark mode: deliver/group")
flag.IntVar(&mockUsers, "users", 10, "mock users")
flag.IntVar(&eachUserSend, "send", 10, "each user send msg count")
flag.Parse()
if benchmarkMode == "group" {
benchmarkGroup()
@ -109,29 +114,9 @@ func benchmark() {
// go prof.StartPprof(":8888")
ctx, cancel := context.WithCancel(context.Background())
go records(ctx)
mockUsersConnect(ctx)
mockNetUsers = make([]*NetUser, mockUsers)
// initial uids
for i := 0; i < mockUsers; i++ {
uid := strconv.Itoa(110000 + i)
token, err := getToken(uid)
if err != nil {
panic(err)
}
conn, err := getConn(token)
if err != nil {
panic(err)
}
err = handleConn(ctx, uid, token, conn)
if err != nil {
panic(err)
}
mockNetUsers[i] = &NetUser{
Uid: uid,
Conn: conn,
}
}
go records(ctx)
for i := 0; i < mockUsers; i++ {
netUser := mockNetUsers[i]
@ -145,9 +130,6 @@ func benchmark() {
}
func benchmarkGroup() {
benchmarkMode = "groupDeliver"
runtime.GOMAXPROCS(runtime.NumCPU())
ctx, cancel := context.WithCancel(context.Background())
shutdown.AddHook(cancel)
@ -163,33 +145,15 @@ func benchmarkGroup() {
}
groupId := "9527"
// initial mock users, join to postal group
mockNetUsers = make([]*NetUser, mockUsers)
for i := 0; i < mockUsers; i++ {
uid := strconv.Itoa(110000 + i)
token, err := getToken(uid)
if err != nil {
panic(err)
}
conn, err := getConn(token)
if err != nil {
panic(err)
}
err = handleConn(ctx, uid, token, conn)
if err != nil {
panic(err)
}
mockNetUsers[i] = &NetUser{
Uid: uid,
Conn: conn,
}
mockUsersConnect(ctx)
for _, user := range mockNetUsers {
// join group
err = groupDeliver.GroupJoin(context.Background(), uid, []string{groupId})
err := groupDeliver.GroupJoin(context.Background(), user.Uid, []string{groupId})
if err != nil {
panic(err)
}
}
shutdown.AddHook(func() {
if err := groupDeliver.GroupDissolve(context.Background(), groupId); err != nil {
logger.Error("dissolve group error: ", err)
@ -201,7 +165,7 @@ func benchmarkGroup() {
go records(ctx)
// send group message
message := &chat.ChatMessage{Sender: "100001", Content: "hello"}
message := &chat.ChatMessage{Sender: "10001", Content: "hi"}
for i := 0; i < eachUserSend; i++ {
err := groupDeliver.DeliverGroup(context.Background(), groupId, message)
if err != nil {
@ -213,6 +177,44 @@ func benchmarkGroup() {
shutdown.Await()
}
// mockUsersConnect 并行快速创建链接
func mockUsersConnect(ctx context.Context) {
// initial mock users, join to postal group
mockNetUsers = make([]*NetUser, mockUsers)
concurrent := 100
wg := sync.WaitGroup{}
wg.Add(concurrent)
each := (mockUsers / concurrent) + 1
for i := 0; i < concurrent; i++ {
go func(segment int) {
begin, end := segment*each, (segment+1)*each
for i := begin; i < end && i < mockUsers; i++ {
uid := strconv.Itoa(110000 + i)
token, err := getToken(uid)
if err != nil {
panic(err)
}
conn, err := getConn(token)
if err != nil {
panic(err)
}
err = handleConn(ctx, uid, token, conn)
if err != nil {
panic(err)
}
mockNetUsers[i] = &NetUser{
Uid: uid,
Conn: conn,
}
}
wg.Done()
}(i)
}
wg.Wait()
}
func sendBatchChatMessage(ctx context.Context, uid string, conn *websocket.Conn, count int) {
r := rand.New(rand.NewSource(time.Now().UnixMilli()))
for i := 0; i < count; i++ {

16
deploy_k8s/docker_compose.yml

@ -8,12 +8,26 @@ services:
- SO_APP.ENDPOINTADDRESS=192.168.110.36:7001
- SO_GRPC.ADDRESS=:7011
svr-gateway-ws-2:
image: so_gateway_ws:1.0.0
network_mode: host
environment:
- SO_APP.HTTPPORT=7002
- SO_APP.ENDPOINTADDRESS=192.168.110.36:7002
- SO_GRPC.ADDRESS=:7012
svr-gateway-ws-3:
image: so_gateway_ws:1.0.0
network_mode: host
environment:
- SO_APP.HTTPPORT=7003
- SO_APP.ENDPOINTADDRESS=192.168.110.36:7003
- SO_GRPC.ADDRESS=:7012
- SO_GRPC.ADDRESS=:7013
svr-gateway-ws-4:
image: so_gateway_ws:1.0.0
network_mode: host
environment:
- SO_APP.HTTPPORT=7004
- SO_APP.ENDPOINTADDRESS=192.168.110.36:7004
- SO_GRPC.ADDRESS=:7014
svr-chat:
image: so_chat:1.0.0

Loading…
Cancel
Save