架构师训练营第 0 期第 7 周作业
发布于: 2020 年 07 月 22 日
作业一:
以下两题,至少选做一题
性能压测的时候,随着并发压力的增加,系统响应时间和吞吐量如何变化,为什么?
用你熟悉的编程语言写一个 web 性能压测工具,输入参数:URL,请求总次数,并发数。输出参数:平均响应时间,95% 响应时间。用这个测试工具以 10 并发、100 次请求压测 www.baidu.com。
第二题
// web-stress-testing.gopackage stress_testingimport ( "net/http" "sort" "sync" "time")type StressTestingRunner interface { Run(url string, request int, concurrent int) (int64, int64)}type WebStressTestingRunner struct {}func NewStressTestingRunner() StressTestingRunner { return &WebStressTestingRunner{}}func (r *WebStressTestingRunner) Run(url string, request int, concurrent int) (int64, int64) { elapsedTimes := make([]time.Duration, 0, request) for i := 0; i < request/concurrent; i++ { elapsedTimes = append(elapsedTimes, r.run(url, concurrent)...) } if request%concurrent > 0 { elapsedTimes = append(elapsedTimes, r.run(url, request%concurrent)...) } elapsedNanoseconds := make([]int64, request) for i, elapsed := range elapsedTimes { elapsedNanoseconds[i] = elapsed.Nanoseconds() } sort.Slice(elapsedNanoseconds, func(i, j int) bool { return elapsedNanoseconds[i] < elapsedNanoseconds[j] }) var sum int64 for _, elapsed := range elapsedNanoseconds { sum += elapsed } p50 := sum / int64(request) p95 := elapsedNanoseconds[int(float64(request)*0.95)-1] return p50, p95}func (r *WebStressTestingRunner) run(url string, request int) []time.Duration { wg := sync.WaitGroup{} elapsedTimes := make([]time.Duration, 0, request) for i := 0; i < request; i++ { wg.Add(1) go func() { start := time.Now() // ignore response and error http.Get(url) elapsedTimes = append(elapsedTimes, time.Since(start)) wg.Done() }() } wg.Wait() return elapsedTimes}// web-stress-testing_test.gopackage stress_testingimport "testing"func TestWebStressTestingRunner_Run(t *testing.T) { runner := NewStressTestingRunner() url := "https://www.baidu.com" request := 100 concurrent := 10 for i := 0; i < 5; i++ { p50, p95 := runner.Run(url, request, concurrent) t.Logf("WebStressTesting: url=%s, request=%d, concurrent=%d, p50=%dns, p95=%dns\n", url, request, concurrent, p50, p95) }}// output=== RUN TestWebStressTestingRunner_Run TestWebStressTestingRunner_Run: web-stress-testing_test.go:12: WebStressTesting: url=https://www.baidu.com, request=100, concurrent=10, p50=166807071ns, p95=467995313ns TestWebStressTestingRunner_Run: web-stress-testing_test.go:12: WebStressTesting: url=https://www.baidu.com, request=100, concurrent=10, p50=386995794ns, p95=1422057192ns TestWebStressTestingRunner_Run: web-stress-testing_test.go:12: WebStressTesting: url=https://www.baidu.com, request=100, concurrent=10, p50=106412302ns, p95=151324861ns TestWebStressTestingRunner_Run: web-stress-testing_test.go:12: WebStressTesting: url=https://www.baidu.com, request=100, concurrent=10, p50=267705842ns, p95=1020937437ns TestWebStressTestingRunner_Run: web-stress-testing_test.go:12: WebStressTesting: url=https://www.baidu.com, request=100, concurrent=10, p50=126596884ns, p95=158419194ns--- PASS: TestWebStressTestingRunner_Run (14.22s)PASSProcess finished with exit code 0
作业二:
根据当周学习情况,完成一篇学习总结。
性能优化:性能优化是架构师展现自己技术全面性的时刻
性能测试
全链路压测
案例分析
软件性能优化的两个原则
你不能优化一个没有测试的软件
你不能优化一个你不了解的软件
操作系统
锁
文件与磁盘IO
数据结构与算法
网络通信协议
非阻塞网络IO
数据库架构原理及性能优化
JVM虚拟机原理及编程优化
Java代码优化
秒杀
划线
评论
复制
发布于: 2020 年 07 月 22 日阅读数: 50
无名氏
关注
还未添加个人签名 2017.09.11 加入
还未添加个人简介
评论