อะไรทำให้แอพพลิเคชั่นปรับขนาดได้


37

ฉันเห็นในโพสต์งานที่ผู้สมัครจะต้องมีประสบการณ์ในการเขียนใบสมัคร "ปรับขนาดได้" อะไรทำให้แอพพลิเคชั่นปรับขนาดได้และฉันจะรู้ได้อย่างไรว่าโค้ดของฉันสามารถปรับขนาดเป็นผู้ใช้หลายล้านคน


ฉันเดาวิธีที่ดีกว่าในการใช้ถ้อยคำคำถามนี้คือฉันจะเขียนโค้ดของฉันด้วยความสามารถในการปรับขนาดได้อย่างไร เพื่อให้รหัสสามารถปรับขนาดได้จากการได้รับไปเมื่อเทียบกับภายหลัง มีวิธีการออกแบบบางอย่างหรือไม่? หรือมันเป็นเพียงเรื่องของการเลือกอัลกอริทึมที่ถูกต้องสำหรับงาน?

คำตอบ:


24

การขยายขีดความสามารถมีสองทิศทาง:

  • แนวตั้ง (aka การปรับขนาด): CPU เร็วขึ้น RAM มากขึ้นพื้นที่ว่างในดิสก์มากขึ้น
  • แนวนอน (aka scaling out): แกนเพิ่มเติมในซีพียู, ซีพียูมากขึ้น, เซิร์ฟเวอร์มากขึ้น;

สำหรับคนแรกคุณแค่ต้องระวังว่าคุณไม่มีข้อ จำกัด ใด ๆ สิ่งเหล่านี้อาจเป็นเพราะจำนวนเต็มขนาดเล็กเกินไปหรือโครงสร้างความยาวคงที่ / จำกัด โครงสร้างเหล่านี้อาจเกี่ยวข้องกับระบบปฏิบัติการพื้นฐาน ตัวอย่างเช่นหากคุณพยายามที่จะขยายขนาดโดยใช้เธรดหรือกระบวนการเพิ่มเติมในบางจุดคุณจะไปถึงขีด จำกัด ของระบบปฏิบัติการ นั่นเป็นสาเหตุที่ทำให้เซิร์ฟเวอร์ในปัจจุบันมีความยืดหยุ่นสูงกำลังทำงานพร้อมกันโดยขึ้นอยู่กับเหตุการณ์แบบอะซิงโครนัส ปัญหานี้จะอธิบายไว้ในที่มีชื่อเสียงC10Kเอกสาร

อันที่สองนั้นยากกว่า มันต้องการการเขียนโปรแกรมโดยคำนึงถึงสองสิ่ง: ข้อมูลจะถูกประมวลผลแบบขนานและข้อมูลอาจถูกเผยแพร่ทางกายภาพ การสื่อสารระหว่างโหนดควรถูก จำกัด ในทางปฏิบัติที่มักจะหมายถึงการเสียสละบางส่วนของกรด (มันพิสูจน์แล้วว่าคุณไม่สามารถมีกรดเต็มและความสามารถในการไต่ออกในเวลาเดียวกัน) โซลูชันที่เป็นที่รู้จักมากที่สุดสำหรับการจัดเก็บข้อมูลในกระบวนทัศน์นั้นคือโซลูชันNoSQL พวกเขามีตั้งแต่ร้านค้าคีย์ - ค่าที่ง่ายมากไปจนถึงระบบที่คล้ายกับ RDBMS ซึ่งมีเพียงความสามารถในการรวม ร้านค้าที่สำคัญที่มีมูลค่าเป็นพิเศษสามารถปรับขนาดได้ แต่ที่มาเป็นราคา โดยทั่วไปคุณสามารถสืบค้นเฉพาะคีย์หลักเท่านั้น อย่างไรก็ตามมีวิธีแก้ปัญหาสำหรับแผนที่ลดลง. มันอาจดูไม่ดีนักถ้าคุณมองไปที่มุมมองของความซับซ้อนที่สะสม แต่คุณต้องจำไว้ว่ามันขนานกันอย่างหนาแน่น

หากคุณต้องการอ่านข้อมูลเพิ่มเติมเกี่ยวกับการปรับขยายตัวอย่างชีวิตจริงตรวจสอบHighScalability.comบล็อก


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

14

ความสามารถในการปรับขนาดนั้นวัดได้ในแง่ของปริมาณงานโดยขึ้นอยู่กับตัวแปรบางตัว ตัวอย่างเช่นจำนวนคำขอ / วินาทีกับผู้ใช้X วิธีที่ง่ายที่สุดในการอธิบายความยืดหยุ่นคือ:

การวัดประสิทธิภาพเมื่อโหลดเพิ่มขึ้น

สิ่งแรกที่คุณต้องเข้าใจในการออกแบบเพื่อความยืดหยุ่นคือการวัดใดที่สำคัญที่สุดสำหรับการใช้งานของคุณ มีหลายวิธีในการวัดประสิทธิภาพซึ่งเป็นองค์ประกอบสำคัญของความยืดหยุ่น:

  • คำขอพร้อมกันต่อวินาที
  • เวลาตอบสนองโดยเฉลี่ยต่อคำขอ
  • จำนวนเร็กคอร์ดที่ประมวลผลต่อวินาที / นาที

มีการวัดประสิทธิภาพเพิ่มเติมที่สามารถใช้ได้ แต่สิ่งเหล่านี้เป็นเรื่องปกติสำหรับระบบที่ทำงานบนเว็บหรือระบบประมวลผลแบบกลุ่ม

ความสามารถในการปรับขนาดได้ถัดไปคือการวัดว่าเกิดอะไรขึ้นกับประสิทธิภาพของคุณเมื่อมีการเพิ่มโหลด วิธีทั่วไปสำหรับการโหลดเพื่อเพิ่มคือ:

  • ผู้ใช้จำนวนมากกดปุ่มเซิร์ฟเวอร์ (เช่นการเข้าชมเว็บมากขึ้น)
  • ข้อมูลเพิ่มเติมในฐานข้อมูล (เช่นคิวรีใช้เวลานานขึ้นหรือการประมวลผลจะใช้เวลานานกว่า)
  • ความล้มเหลวของฮาร์ดไดรฟ์ใน RAID (ประสิทธิภาพการจัดเก็บ / ความน่าเชื่อถือได้รับผลกระทบ)
  • ความอิ่มตัวของเครือข่าย

เป้าหมายสำหรับแอปพลิเคชันที่ปรับขนาดได้คือการบำรุงรักษาหรือปรับปรุงประสิทธิภาพตามที่เราจัดการกับปัญหาโหลด กล่าวโดยย่อหากเวลาตอบสนองใช้เวลานานเกินไปเราสามารถเพิ่มเซิร์ฟเวอร์อื่นเพื่อกระจายโหลดอย่างสม่ำเสมอได้หรือไม่ วิธีนี้จะช่วยลดปริมาณงานที่เซิร์ฟเวอร์หนึ่งต้องทำและทำให้เซิร์ฟเวอร์ทำงานใน "จุดที่น่าสนใจ" นั้นเพื่อประสิทธิภาพ

แอปพลิเคชันของคุณจะต้องได้รับการออกแบบมาโดยเฉพาะเพื่อปรับขนาด นั่นหมายความว่าคุณต้องระวังข้อมูลเซสชันการขอเส้นทางไปยังเซิร์ฟเวอร์ที่ถูกต้องลดปัญหาคอขวดที่จำกัดความสามารถของแอปพลิเคชันในการขยาย


5

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

โดยทั่วไปคุณจะดูที่สคีมาฐานข้อมูลอัลกอริทึมของคุณและกระบวนการพัฒนาซอฟต์แวร์ของคุณและพยายามทำนายปัญหาในอนาคต คุณต้องการตั้งค่าการตรวจสอบประสิทธิภาพเพื่อระบุปัญหาเมื่อพวกเขาเริ่มสร้าง

ฉันเลือกเคล็ดลับเหล่านี้เมื่อฉันอ่านการสร้างเว็บไซต์ที่ปรับขนาดได้ (ลิงก์ไปที่อเมซอน)

หวังว่านี่จะช่วยได้!


3

วิธีเดียวที่แอปพลิเคชันสามารถปรับขนาดได้อย่างแท้จริงคือโดยไม่มีข้อ จำกัด ใด ๆ ที่ไม่สามารถส่งผ่านได้ (หรือมีราคาแพงมากเท่านั้น)

ตัวอย่างทั่วไปเกิดอะไรขึ้นเมื่อคุณหมด cpu-cycles ที่มีอยู่ หากโปรแกรมของคุณมีหลายเธรดคุณสามารถรันบนกล่องที่มีหลายคอร์ แต่จะเกิดอะไรขึ้นเมื่อคุณไม่สามารถซื้อกล่องที่ใหญ่กว่าอีกต่อไป ใบสมัครของคุณไม่สามารถเติบโตได้อีกต่อไปดังนั้นจึงไม่สามารถปรับขนาดได้

แอปพลิเคชันที่ปรับขนาดได้อย่างแท้จริงใด ๆ จะต้องสามารถแพร่กระจายไปยังคอมพิวเตอร์หลาย ๆ เครื่องได้อย่างโปร่งใสและทำได้โดยไม่สะดุดอย่างเห็นได้ชัด นี่ไม่ใช่เรื่องง่ายและเป็นหนึ่งในสาเหตุที่ทำให้ Google ประสบความสำเร็จ


1

มีปัญหาเฉพาะที่มาพร้อมกับการรองรับแอปพลิเคชันขนาดใหญ่ การโพสต์งานกำลังมองหาผู้สมัครที่ทำงานในสภาพแวดล้อมนั้นและต้องแก้ปัญหาดังกล่าว

จากแอปพลิเคชันระดับสูงสามารถปรับขนาดได้โดยการถามคำถามอย่างสม่ำเสมอว่าจะเกิดอะไรขึ้นหากมีการขอให้เรียกใช้โค้ดนี้เป็นพัน ๆ ครั้งในช่วงเวลาสั้น ๆ ซึ่งหมายถึงการจัดการรอยเท้าหน่วยความจำของคุณใช้ประโยชน์จากการแคชผลรวมและข้อมูลโดยใช้แหล่งข้อมูลที่สามารถปรับขนาดได้เองเป็นต้น


1

หากคุณกำลังสร้างคุณลักษณะการค้นหาที่ทำงานได้ดีเมื่อมี 100 แถวในฐานข้อมูลเพื่อค้นหาและผู้ใช้ 10 คนใช้งานพร้อมกัน มันจะทำงานได้ดีแค่ไหนเมื่อมีผู้ใช้ 100 คนในเวลาเดียวกันและมีแถว 100K ที่ต้องค้นหา

ถ้ามันทำแบบเดียวกันไม่ว่ามันจะดีแค่ไหนก็ตาม มันหากดำเนินการตามสัดส่วนกับปริมาณของผู้ใช้ / ข้อมูล (หมายถึงข้อมูลอีก 10 เท่า == 10 เท่าในการประมวลผลอีกต่อไป) ที่ดี หากประสิทธิภาพลดลงข้อมูลก็จะยิ่งมีมากขึ้นเท่านั้น (ข้อมูลโหมด 10x == 10x ^ 10 ในการประมวลผลอีกต่อไป) จากนั้นจะไม่ปรับขนาดได้ดี

ตัวอย่างของฉันควรแสดงใน Big O สัญกรณ์ แต่ตอนนี้ฉันยังไม่รู้ดีพอที่จะเขียนตัวอย่างใน Big O

คุณสามารถจำลองข้อมูลได้มากขึ้นโดยการทิ้งดัมข้อมูลลงในฐานข้อมูลของคุณและมีเครื่องมือในการจำลองผู้ใช้มากขึ้นเช่น Apache AB

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.