เครือข่ายภายในมักใช้การเชื่อมต่อ 1 Gbps หรือเร็วกว่า การเชื่อมต่อใยแก้วนำแสงหรือการเชื่อมต่อช่วยให้แบนด์วิดธ์ที่สูงขึ้นระหว่างเซิร์ฟเวอร์ ตอนนี้ลองนึกภาพขนาดเฉลี่ยของการตอบสนอง JSON จาก API วิธีการตอบสนองดังกล่าวสามารถส่งผ่านการเชื่อมต่อ 1 Gbps ในหนึ่งวินาที?
ลองทำคณิตศาสตร์กันดีกว่า 1 Gbps คือ 131 072 KB ต่อวินาที หากการตอบสนอง JSON โดยเฉลี่ยคือ 5 KB (ซึ่งค่อนข้างมาก!) คุณสามารถส่งการตอบสนอง 264 214 วินาทีต่อวินาทีผ่านทางสายสัญญาณด้วยเครื่องเพียงคู่เดียว ไม่เลวเลยใช่ไหม
นี่คือเหตุผลที่การเชื่อมต่อเครือข่ายมักจะไม่ใช่คอขวด
อีกแง่มุมหนึ่งของการบริการขนาดเล็กคือคุณสามารถปรับขนาดได้อย่างง่ายดาย ลองนึกภาพเซิร์ฟเวอร์สองเครื่องอันหนึ่งโฮสต์ API อีกอันหนึ่งใช้งานมัน หากการเชื่อมต่อกลายเป็นคอขวดเพียงเพิ่มเซิร์ฟเวอร์อื่นสองเครื่องและคุณสามารถเพิ่มประสิทธิภาพเป็นสองเท่า
นี่คือเมื่อการตอบกลับ 264 ครั้งต่อ 26 ก่อนหน้าของเราต่อวินาทีนั้นเล็กเกินไปสำหรับขนาดของแอป คุณเพิ่มอีกเก้าคู่และตอนนี้คุณสามารถตอบสนอง 262 140 คำตอบได้แล้ว
แต่กลับมาที่เซิร์ฟเวอร์คู่ของเราแล้วเปรียบเทียบกัน
หากการสืบค้นที่ไม่แคชเฉลี่ยไปยังฐานข้อมูลใช้เวลา 10 มิลลิวินาทีคุณจะถูก จำกัด 100 การค้นหาต่อวินาที 100 ข้อความค้นหา 26 214 คำตอบ การได้รับความเร็วของการตอบสนอง 26 214 ต่อวินาทีนั้นจำเป็นต้องใช้แคชจำนวนมากและการเพิ่มประสิทธิภาพ (ถ้าการตอบสนองต้องการทำสิ่งที่มีประโยชน์เช่นการสืบค้นฐานข้อมูลการตอบสนองสไตล์ "Hello World" นั้นไม่มีคุณสมบัติ)
ในคอมพิวเตอร์ของฉันตอนนี้ DOMContentLoaded สำหรับหน้าแรกของ Google เกิดขึ้น 394 ms หลังจากที่ส่งคำขอ นั่นน้อยกว่า 3 คำขอต่อวินาที สำหรับหน้าแรกของ Programmers.SE มันเกิดขึ้น 603 ms หลังจากที่ส่งคำขอ นั่นไม่ใช่แม้แต่คำขอ 2 ครั้งต่อวินาที โดยวิธีการที่ฉันมีการเชื่อมต่ออินเทอร์เน็ต 100 Mbps และคอมพิวเตอร์ที่รวดเร็ว: ผู้ใช้หลายคนจะรออีกต่อไป
หากคอขวดคือความเร็วเครือข่ายระหว่างเซิร์ฟเวอร์ทั้งสองไซต์นั้นสามารถทำการเรียกหลายพันครั้งไปยัง API ที่แตกต่างกันในขณะที่ให้บริการหน้าเว็บ
ทั้งสองกรณีที่แสดงให้เห็นว่าเครือข่ายอาจจะไม่คอขวดของคุณในทางทฤษฎี (ในทางปฏิบัติที่คุณควรทำมาตรฐานที่เกิดขึ้นจริงและโปรไฟล์เพื่อตรวจสอบตำแหน่งที่แน่นอนของคอขวดของคุณระบบโดยเฉพาะโฮสต์บนฮาร์ดแวร์โดยเฉพาะ) เวลาที่ใช้ในการทำงานจริง (มันจะเป็นแบบสอบถาม SQL, การบีบอัด, อะไรก็ตาม) และการส่งผลลัพธ์ไปยังผู้ใช้ปลายทางนั้นมีความสำคัญมากกว่า
คิดเกี่ยวกับฐานข้อมูล
โดยปกติแล้วฐานข้อมูลจะโฮสต์แยกจากเว็บแอปพลิเคชันที่ใช้ สิ่งนี้อาจทำให้เกิดข้อกังวล: ความเร็วในการเชื่อมต่อระหว่างเซิร์ฟเวอร์ที่โฮสต์แอพพลิเคชันและเซิร์ฟเวอร์ที่โฮสต์ฐานข้อมูลเป็นอย่างไร
ดูเหมือนว่ามีหลายกรณีที่ความเร็วในการเชื่อมต่อเป็นปัญหานั่นคือเมื่อคุณเก็บข้อมูลจำนวนมากซึ่งไม่จำเป็นต้องถูกประมวลผลโดยฐานข้อมูลเองและควรพร้อมใช้งานในขณะนี้ (นั่นคือไฟล์ไบนารีขนาดใหญ่) แต่สถานการณ์ดังกล่าวไม่ค่อยเกิดขึ้น: ในกรณีส่วนใหญ่ความเร็วในการถ่ายโอนนั้นไม่ใหญ่มากเมื่อเทียบกับความเร็วในการประมวลผลข้อความค้นหาเอง
เมื่อความเร็วในการถ่ายโอนมีความสำคัญคือเมื่อ บริษัท กำลังโฮสต์ชุดข้อมูลขนาดใหญ่บน NAS และการเข้าถึง NAS โดยลูกค้าหลายรายในเวลาเดียวกัน นี่คือที่ SAN สามารถแก้ไขปัญหาได้ สิ่งนี้ถูกกล่าวว่านี่ไม่ใช่ทางออกเดียว สายเคเบิล Cat 6 สามารถรองรับความเร็วสูงถึง 10 Gbps พันธะสามารถใช้เพื่อเพิ่มความเร็วโดยไม่ต้องเปลี่ยนสายเคเบิลหรืออะแดปเตอร์เครือข่าย มีโซลูชันอื่น ๆ ที่เกี่ยวข้องกับการจำลองข้อมูลข้าม NAS หลายตัว
ลืมเรื่องความเร็ว คิดเกี่ยวกับความยืดหยุ่น
จุดสำคัญของแอปพลิเคชันเว็บคือการสามารถปรับขนาด ในขณะที่ประสิทธิภาพที่แท้จริงนั้นสำคัญ (เพราะไม่มีใครต้องการจ่ายสำหรับเซิร์ฟเวอร์ที่ทรงพลังกว่า) ความสามารถในการปรับขยายนั้นมีความสำคัญมากกว่านั้นเพราะมันช่วยให้คุณสามารถโยนฮาร์ดแวร์เพิ่มเติมได้เมื่อจำเป็น
ในทำนองเดียวกันเครื่องเสมือนถูกมองว่าเป็นเรื่องของประสิทธิภาพเป็นอย่างมากเมื่อทศวรรษที่แล้ว แท้จริงแล้วการโฮสต์แอปพลิเคชันบนเซิร์ฟเวอร์กับการโฮสต์บนเครื่องเสมือนมีผลกระทบต่อประสิทธิภาพการทำงานที่สำคัญ ในขณะที่ช่องว่างเล็กลงในทุกวันนี้มันยังคงมีอยู่
แม้จะมีการสูญเสียประสิทธิภาพ แต่สภาพแวดล้อมเสมือนจริงก็ได้รับความนิยมอย่างมากเนื่องจากความยืดหยุ่นที่ได้รับ
เช่นเดียวกับความเร็วของเครือข่ายคุณอาจพบว่า VM เป็นคอขวดจริงและด้วยขนาดที่แท้จริงของคุณคุณจะประหยัดเงินได้หลายพันล้านดอลลาร์ด้วยการโฮสต์แอปของคุณโดยตรงโดยไม่ต้องใช้ VM แต่นี่ไม่ใช่สิ่งที่เกิดขึ้นกับ 99.9% ของแอป: คอขวดของพวกเขาอยู่ที่อื่นและข้อเสียของการสูญเสียสักสองสามไมโครวินาทีเนื่องจาก VM ได้รับการชดเชยอย่างง่ายดายโดยประโยชน์ของฮาร์ดแวร์ที่เป็นนามธรรมและความยืดหยุ่น