Little’s law in performance testing กฎเล็กๆ ที่ไม่เล็ก

oz4899
doppiotech
Published in
3 min readNov 25, 2023

สวัสดีครับ เพื่อนๆ ทุกคนกลับมาพบกับเรื่องราว Tech Tech กันอีกครั้งกับ Blog ของ Doppiotech วันนี้อยากพาทุกคนมารู้จักกับ ทฤษฎี หรือ กฎ อันนึงที่ชื่อ Littles’ law เชื่อว่าหลายๆ คนที่ทำงานในสาย performance testing อาจจะเคยได้ยินมาบ้าง หรือถ้าไม่เคยได้ยินก็ไม่เป็นไร วันนี้เราลองมาทำความรู้จักกับเจ้ากฎนี้กัน ซึ่งการได้รู้จักกฎนี้จะช่วยให้เราสามารถคิดคำนวณ Load ที่เราต้องใช้ในการทำ performance testing ได้อย่างมีระเบียบแบบแผนมากขึ้นนั่นเอง (แต่จะแม่นยำแค่ไหนก็ขึ้นกับ Input ที่เราใส่เข้าด้วยไปนะ)

Little’s law นี่มันคืออะไรก่อน ??

จริงๆ เจ้า Little’s law นี้เป็นกฎที่ถูกคิดขึ้นมาโดยคุณ John Dutton Conant Little นะเค้าเป็นอาจารย์อยู่ที่มหาลัย MIT สหรัฐอเมริกาโน้นเลย ซึ่งถ้าถามว่าอาจารย์ท่านนี้เค้าเป็นผู้เชี่ยวชาญด้าน Performance test ใช่มั้ย คำตอบคือเปล่าเลย คุณ John คนนี้ท่านเป็นเหมือนอาจารย์/นักวิจัย และเค้าก็วิจัยคิดค้นทฤษฎีขึ้นมาเพื่อไป support งานทางด้าน operation / marketing ต่างๆ อาจารย์ท่านไม่น่าจะรู้จัก Jmeter / K6 / Load runner อะไรที่พวกเราใช้กันนะ แต่เจ้าสูตร Little’s law นี้มันสามารถถูกเอาไปประยุกต์ใช้ได้กว้างขวางและหนึ่งในงานที่ประยุกต์ใช้มันได้ก็คือ งาน performance testing ที่พวกเรากำลังพูดถึงกันอยู่นี่แหละ

ผมนี่แหละคิดค้น Little’s law ขึ้นมา

กฎของ Little’s law ค่อนข้างจำได้ง่ายมาก แต่จะเข้าใจง่ายไหมนั่นอีกเรื่อง ฮ่าๆ สูตรมีอยู่แค่ว่า

L = λW (แค่นี้จริงๆ)

ความหมายของมันก็คือว่า

จำนวนงานที่ถูกทำอยู่ในระบบ ณ เวลาใดเวลาหนึ่ง = อัตราการงานที่เสร็จสิ้นจากระบบภายในหนึ่งหน่วยเวลา x ระยะเวลาเฉลี่ยที่งานแต่ละชิ้นต้องใช้

คือให้เราลองสมมติว่า เราจะเปิดร้านไอติมร้านนึง แล้วเราอยากจะรู้ว่า โดยปกติแล้วเนี้ยนะจะมีคนใช้บริการอยู่ในร้านเยอะแค่ไหนนะในช่วงเวลาหนึ่งๆ (L) เราจะได้รู้ว่าเราควรต้องทำพื้นที่ของร้านใหญ่หรือเล็กแค่ไหน

สมมติเราเริ่มเก็บข้อมูลมาว่า จากการสังเกต
1. ในหนึ่งชั่วโมง ดูเหมือนเราจะให้บริการคนได้ประมาณ 30 คนนะ (λ)
2. แต่ละคนที่มาซื้อไอติมเค้าจะใช้เวลาประมาณ 6 นาที (0.1 ชั่วโมง) ในการซื้อแล้วออกไปจากร้าน (W) (รวมทุกสิ่งอย่าง ตั้งแต่เปิดประตูร้านเข้ามา เลือกไอติม ชิมไอติม คุยกับเพื่อน เอารสไหนดีแก มีโปรโมชั่นอะไรมั่งนะ ต่างๆ นาๆ จนกระทั่งได้ไอติมแล้วเดินออกจากร้านไป)

L = λW = 30 x 0.1 = 3 คน

พูดง่ายๆ ว่าจำนวนคนที่ใช้บริการในร้านไอติมเรา ใน ชั่วขณะใดขณะหนึ่งมันก็จะอยู่ที่ประมาณ 3 คน เราก็จะรู้ว่าเราต้องทำพื้นที่ใหญ่หรือเล็กแค่ไหน

แล้วไงต่อนะ ยังไม่เห็นจะเกี่ยวกับ performance test ตรงไหน?

ใจเย็นๆ ก่อน ทีนี้ถ้าเราลองเอามันมาพลิกแพลงแบบเบื้องต้นซะหน่อย เอาแบบยังไม่ต้องไปยุ่งกับ performance testing ใดๆ แต่สมมติ เราบอกว่าเปลี่ยนใหม่คือ เรามีร้านขายน้ำปั่นอยู่ร้านนึง ปกติแล้วร้านนี้เค้าสามารถให้บริการน้ำปั่นได้ 600 คนต่อชั่วโมง (สมมติว่า หนึ่งคนซื้อหนึ่งแก้วเสมอนะ) และ จำนวนคนที่เข้ามาอยู่ในร้านน้ำปั่นเพื่อมาใช้บริการโดยเฉลี่ยเท่าที่สังเกตอยู่ประมาณ 20 คน (คือเอาง่ายๆ เหมือนเดินผ่านร้านนี้ทีไรก็เห็นคนอยู่ในร้านประมาณ 20 คน) แล้วเราสงสัยว่า สมมติเราจะเข้าไปซื้อน้ำปั่นสักแก้วในร้านนี้ เราต้องรอนานไหมนะ ถ้าเราลองเอาสูตร Little’s law มาใช้ ก็จะแทนค่าได้ดังนี้

L = λW

20 = 600 * W

W = 20 / 600 = 0.033 ชั่วโมง = 1.98 นาที หรือประมาณ 2 นาที

จะเห็นว่า เจ้ากฎของ little’s law นี้มันก็จะมีตัวแปรอยู่แค่ สามตัว สลับกันไปมาถ้าเรากำลังจะหาตัวไหน เราก็ต้องรู้ค่าของ อีกสองตัว เพื่อแก้สมการ

จะเข้าเรื่อง performance test ได้ยังครับ ?

ครับพี่ๆ กำลังจะเข้าแล้วครับ ถ้าเราลองดูตัวอย่างพวกร้านไอติม กับร้านน้ำปั่นข้างบน แล้วมาเทียบกับโลกของการทำ performance test เราจะรู้สึกว่า มันมีความคล้ายๆกันอยู่ ลองดูตารางข้างล่างเปรียบเทียบละกันนะครับ

ปล. ยังไม่ต้องสนใจเครื่องหมาย ** สีแดงนั่นนะ ไว้จะมาอธิบายทีหลังจ้า

เพราะฉะนั้นจากตารางด้านบน ถ้าเราลองมาคิดในแบบของ performance testing กันบ้าง สมมติ เรามี API server อยู่ตัวนึงที่เราต้องการจะทำ performance testing สมมติเป็น API Login ก็ได้ครับ จะได้เข้าใจง่ายๆ โดยเรากำหนดเป้าหมายในการทำ performance test ไว้ว่า

  1. ระบบควรจะสามารถ รองรับคนใช้งานพร้อมๆกันในช่วงเวลาหนึ่งๆ ได้ประมาณ 200 คน (L)
  2. Response time ของ APIเราควรจะต่ำกว่า 3 วินาที (W)

คำถามคือ เราต้องยิงโหลดเข้าไปหา Server ด้วยโหลดมากน้อยแค่ไหน (λ)

ถ้าเราลองคำนวณดู ก็จะแทนค่าสมการได้ดังนี้

L = λW

200 = λ* 3

W = 200 / 3= 66 request / second

จริงๆสมการข้างบนเหมือนจะถูกต้องนะครับ แต่ถ้าเราลองมาคิดดูจริงๆ เราจะรู้สึกแปลกๆ กับ เลข 3 วินาที (W) เพราะ ถ้าเราลองเทียบกับ process การซื้อไอติมสักแท่งลูกค้าน่าจะต้อง เดินเข้าร้าน > หาว่าสั่งไอติมตรงไหน > ไปเดินคิดๆเลือกๆ ว่าจะสั่งอะไร > สั่งไอติม > รับไอติม > จ่ายเงิน รับเงินทอน > เดินออกจากร้าน

ซึ่งถ้าเราลองเทียบกับ คำว่า User login เข้าสู่ระบบ การที่คนๆนึงจะ Login เข้าสู่ระบบ มันไม่ใช่โผล่มาถึง เค้าก็ยิง POST API เข้าไปหา server ตูม แล้วจบ process ถ้าเราลองจำลองตัวเองเป็นคนใช้งานจริงๆ เค้าจะ

  • เปิดหน้า web ขึ้นมา
  • มองหาว่าต้องกดปุ่ม Sign in ตรงไหนนะ — อาจจะเสียเวลาไป 3 seconds
  • มองๆหาๆ ว่า กล่องใส่ username , password อยู่ตรงไหนนะ — สมมติ 3 seconds
  • พิมพ์ username — ดูเป็นสิ่งที่พิมพ์ไม่ยาก สมมติ 5 seconds
  • พิมพ์ password — ปกติมักจะยาก บางทีจำไม่ได้อีก ยาวเกิน สมมติ 10 seconds
  • กดปุ่ม Login แล้วรอหน้าจอ redirect ไปหน้า Home — สมมติ 3 seconds

จะเห็นว่า ที่เราแทนค่าสูตรกันข้างบน เราแทบจะไม่สนใจอย่างอื่นเลยนอกจาก Bullet สุดท้าย ทำให้จำนวน load ที่เราคำนวณได้ จะค่อนข้างสูงเกินจำเป็นไปเยอะ พูดเป็นภาษาชาวบ้านคือ การจำลองพฤติกรรมของคน 200 คน concurrent มันไม่ได้ต้องโหดขนาดใช้ 66 request / second และนี่เป็นที่มาของ ** สองตัวที่อยู่ในตารางด้านบน, เวลาพูดถึง W ใน context ของ Little’s law นั้น ให้มองถึง the whole journey time ของ scenario ที่เรากำลังจะเทสด้วย ไม่ใช่แค่เฉพาะส่วน response time ที่ api ตอบกลับหา ​requestor ทีนี้เราลองมาคำนวณกันใหม่อีกรอบ โดยใช้เวลาของทั้ง process จริงๆ จะได้ว่า

L = λW

200 = λ* (3+3+5+10+3) = λ * 24

λ = 8.3 requests / second

ซึ่งแปลได้ว่า ถ้าเรายิงโหลดเข้าไปประมาณ 8.3 request / second และ Server ตอบกลับมาได้ด้วย response time ประมาณ 3 second ก็จะเทียบได้กับการที่มี User ใช้งานวนเวียนอยู่ในระบบเราโดยเฉลี่ยอยู่ที่ 200 คน นั่นเอง

เห็นไหมครับว่า การที่เรารู้ Little’s law นั้นจะสามารถทำให้เราทำสิ่งที่เรียกว่า Workload modeling ได้ ซึ่งถามว่าจะมีความแม่นยำขนาดไหน ก็ขึ้นกับว่า Input ที่เรากำหนดลงไปในสูตรนั้นมีความแม่นยำมากหรือน้อย เพื่อให้เราสามารถจำลองพฤติกรรมของ User ได้แม่นยำที่สุด โดยสิ่งที่จะช่วยเราได้มากขึ้นว่า User มีพฤติกรรมยังไง เราก็สามารถนำพวก Analytic framework ต่างๆ เช่น Google analytic framework มาช่วยในการหา Input ที่เราจะคำนวณ ซึ่งเราคงไม่ได้มาพูดถึงกันในบทความนี้ เพราะจะยาวเกินไป ก็หวังว่า บทความนี้คงพอทำให้ทุกคนรู้ว่า little’s law คืออะไรและอาจจะสามารถนำไปประยุกต์ใช้กับงานของเพื่อนๆ ได้ไม่มากก็น้อย สำหรับ วันนี้ ลาไปก่อน สวัสดีจร้าาาาาา

--

--