day 15 - 从执行时间开始优化

经过了前面几天的步骤, 已经算是走过一遍本机开发到交付的流程了,
接下来再依照团队推上k8s的流程新增好对应的deployment.yaml,
服务架上共用环境之後就会开始进行画面介接跟规格确认, 异动跟新增的需求也会开始随之而来。

趁着这个空档可以检视一下API接口执行时间: 首先先评估API被呼叫的平均频率大部分会落在哪里, 然後再评估API被呼叫的频率高峰次数会落在哪里, 最後是高峰频率乘上3~5倍来测试, 透过调整呼叫API的频率来观察API执行回应时间是否在可接受的范围内。
这边我会写个简单的可以看出执行时间差异的测试程序:

package main

import (
	"context"
	"fmt"
	"log"
	"sync"
	"time"

	coconut "github.com/evelynocean/coconut/pb"
	"github.com/go-redis/redis"
	"google.golang.org/grpc"
)

func main() {
	// 连线到远端 gRPC 服务器。
	conn, err := grpc.Dial("localhost:32100", grpc.WithInsecure())
	if err != nil {
		log.Fatalf("conn 连线失败:%v", err)
	}

	defer conn.Close()

	coco := coconut.NewCoconutClient(conn)

	n := 1000 
	var sum float64
	req := &coconut.PointsRequest{
		Level_1: "aaa",
		Level_2: "bbb",
		Level_3: "ccc",
	}
	wait := &sync.WaitGroup{}

	for i := 0; i < n; i++ {
		wait.Add(1)
		go func() {
			defer func() {
				wait.Done()
			}()
			start := time.Now()
			_, _ = coco.UpdatePoints(context.Background(), req)
			sum += time.Since(start).Seconds()
		}()
	}
	wait.Wait()

	fmt.Println("total count:", n, ", avg execute_time:", (sum / float64(n)))
}

func newRedisConnection() (client *redis.Client, err error) {
	client = redis.NewClient(&redis.Options{
		Addr: "127.0.0.1:6379",
		DB:   2,
	})

	_, err = client.Ping().Result()

	return
}

  • 先测试跑 10 次看一下平均执行时间
total count: 10 , avg execute_time: 0.04420415439999999
  • 跑100次的平均执行时间
total count: 100 , avg execute_time: 0.14994730453000005
  • 跑 1000 次的平均执行时间
total count: 1000 , avg execute_time: 1.034294797929

看起来随着并发打API的次数拉高, API平均回应时间也跟着拉长了,
可以尝试针对这支API的内容进行调整, 看看是否能缩短执行时间。

今天就先到这里, 明天再来调校程序!


<<:  Day8 NiFi - Processor Group

>>:  自动化测试,让你上班拥有一杯咖啡的时间 | Day 9 - 如何上传图片

Day 18 | 常用范例:表格分页 Pagination 前後端做好只需三分钟!?

今天的范例是超级无敌常用,有用到表格就一定会有的 分页(Pagination),从零到有不用三分钟!...

Day 18 - Spring Boot 日志纪录

日志纪录是网站的一个非常重要的功能,不论是对外的使用者或是对内的管理,实际运营上一定都会遇到许许多多...

Day 3:构成网站的重要三要素-HTML、CSS、JavaScript

HTML、CSS和JS为什麽形影不离? HTML、CSS和JS各自的作用是什麽? 事实上,HTML、...

IT 铁人赛 k8s 入门30天 -- day19 k8s Task Coarse Parallel Processing Using a Work Queue

前言 这个章节将要来实作 Coarse Parallel Processing Using a Wo...

TailwindCSS 从零开始 - 价目表卡片实战 - 基础卡片样式

上一篇完成了基础设置,这次就来建立一个基础卡片。 设定基础卡片样式外观 标题部分因为了整个内容更完...