From eaad4b2da9fdf937762a5e47b6be84efdad4cd09 Mon Sep 17 00:00:00 2001 From: tangmingyou Date: Sat, 17 Feb 2024 22:15:34 +0800 Subject: [PATCH] benchmark --- benchmark/main.go | 98 ++++++++++++++++++----------------- deploy_k8s/docker_compose.yml | 16 +++++- 2 files changed, 65 insertions(+), 49 deletions(-) diff --git a/benchmark/main.go b/benchmark/main.go index 585bc3c..9291fe3 100644 --- a/benchmark/main.go +++ b/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++ { diff --git a/deploy_k8s/docker_compose.yml b/deploy_k8s/docker_compose.yml index 4388556..9b023f8 100644 --- a/deploy_k8s/docker_compose.yml +++ b/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