Erlang เหมาะสำหรับแอปพลิเคชันระบบคลาวด์อย่างไร


9

เรากำลังเริ่มโครงการใหม่และนำไปใช้กับอินสแตนซ์ของ บริษัท openstack cloud (ดูhttp://www.openstack.org/ ) โครงการนี้เป็นเครื่องมือรักษาความปลอดภัยให้กับ บริษัท ของเรา ขณะนี้เราใช้เซิร์ฟเวอร์เฉพาะหลายร้อยเครื่องสำหรับเครื่องมือรักษาความปลอดภัยและย้ายพวกเขาไปยัง บริษัท ของเราในการเริ่มต้น openstack

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

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


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

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

ฉันแก้ไขคำถามเพื่อหวังให้ดีขึ้นและลบข้อกังวล 'การตลาด' ปัญหาของฉันคือการเลือกเครื่องมือที่ดีที่สุดสำหรับงาน ฉันเป็นมือใหม่ที่ stackexchange ดังนั้นจึงไม่ค่อยมีปัญหา
ดันแคน

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

"คำว่า" คลาวด์ "นั้นคลุมเครือ" - ดีมาก! มันหมายถึงสิ่งที่เสมือนจริงและคุณควรระบุว่า "บางสิ่ง" เป็นซอฟต์แวร์ระบบปฏิบัติการเครื่องเดียวเครื่องหลายเครื่องและเครือข่ายหรืออย่างอื่น
GlenPeterson

คำตอบ:


8

นอกเหนือจากข้อเท็จจริงที่ว่า Erlang ได้รับการพัฒนาเป็นพิเศษเพื่อให้ทำงานในสถานการณ์ที่เกิดขึ้นพร้อมกัน / ขนาน / กระจายทั้งสองเทคนิคหลักที่ใช้ในการทำให้เป็นไปได้คือ:

ไม่มีผลข้างเคียง:

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

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

X = 1.
X = 2. // This is not a valid operation

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

โมเดลนักแสดง:

นี่เป็นวิธีการเฉพาะในการสร้างแบบจำลองที่แสดงให้เห็นว่าการใช้งานและการจัดการการประมวลผลพร้อมกันนั้นง่ายมากสำหรับนักพัฒนา ส่งตรงจากวิกิพีเดีย (http://en.wikipedia.org/wiki/Actor_model):

โมเดลนักแสดงนำปรัชญาที่ว่าทุกอย่างเป็นนักแสดง สิ่งนี้คล้ายกับทุกสิ่งที่เป็นปรัชญาวัตถุที่ใช้โดยภาษาการเขียนโปรแกรมเชิงวัตถุบางอย่าง แต่ความแตกต่างในซอฟต์แวร์เชิงวัตถุนั้นจะถูกดำเนินการตามลำดับโดยทั่วไป นักแสดงเป็นหน่วยงานการคำนวณที่ตอบสนองต่อข้อความที่ได้รับสามารถพร้อมกัน: ส่งข้อความจำนวน จำกัด ไปยังนักแสดงคนอื่น ๆ ; สร้างนักแสดงหน้าใหม่จำนวน จำกัด กำหนดพฤติกรรมที่จะใช้สำหรับข้อความถัดไปที่ได้รับ ไม่มีลำดับการสันนิษฐานสำหรับการกระทำข้างต้นและสามารถดำเนินการคู่ขนาน การแยก Decoupling ผู้ส่งจากการสื่อสารที่ส่งเป็นความก้าวหน้าขั้นพื้นฐานของรุ่นนักแสดงที่เปิดใช้งานการสื่อสารแบบอะซิงโครนัสและโครงสร้างการควบคุมเป็นรูปแบบของการส่งข้อความ


เกี่ยวกับ "ไม่มีผลข้างเคียง" ที่คุณพูดว่า "นี่เป็นพฤติกรรมที่ผิดปกติอย่างมากระหว่างภาษาซอฟต์แวร์" - ฉันรู้สึกประหลาดใจเล็กน้อยกับสิ่งนี้ วันนี้ Java และ C # ไม่สามารถทำได้หรือ ภาษาใดที่คุณรู้ว่าจะต้องมีผลข้างเคียงเมื่อเรียกใช้ฟังก์ชั่น?
NoChance

3
@EmmadKareem ไม่ใช่คำถามว่าคุณสามารถเขียนโปรแกรมโดยไม่มีผลข้างเคียงหรือไม่; ตามที่คุณบันทึกไว้คุณสามารถทำได้ใน Java หรือ C # มันเป็นว่าเริ่มต้นเป็นผลข้างเคียงฟรีและไม่ว่าจะมีการสนับสนุนคอมไพเลอร์นี้ ยกตัวอย่างเช่นใน Java คุณไม่สามารถบอกคอมไพเลอร์ "วิธีนี้ไม่มีผลข้างเคียง" สิ่งนี้หมายความว่าคอมไพเลอร์ไม่สามารถเตือนคุณเมื่อคุณทำผิดกฎ!
Andres F.

@EmmadKareem ฉันไม่ได้บอกว่ามันเป็นไปไม่ได้ที่จะเขียน C # หรือ Java โดยไม่มีผลข้างเคียง (แม้ว่าจะหายากมาก) แต่ฉันพูดว่าภาษาการเขียนโปรแกรมน้อยมากมีนโยบายที่เข้มงวดซึ่งสร้างขึ้นในภาษาที่แยกหน้าที่
จิมมี่ฮอฟฟา

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

Jimmy Hoffa และ @AndresF. ขอบคุณสำหรับคำชี้แจงของคุณ
NoChance

9

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

ที่เหลือเป็นเพียงการตลาดพูด


7
Erlang ได้รับการออกแบบสำหรับการคำนวณข้อผิดพลาดที่ยอมรับได้ มันเป็นแค่ที่จำหน่ายคอมพิวเตอร์เป็น prerequesite สำหรับที่ (วิธีที่คุณสามารถเชื่อถือได้กลับผลถ้ามีคนตั้งใจรั่วไหลกาแฟมากกว่าเครื่องเดียวของคุณคุณต้องอย่างน้อยสองเครื่อง) และขนานและคอมพิวเตอร์พร้อมกันเป็นกรณีพิเศษเพียงกระจายการคำนวณเพื่อ Erlang ยังเกิดขึ้นกับสิ่งที่ดีที่ แต่นั่นไม่ใช่สิ่งที่มันถูกออกแบบมาสำหรับ
Jörg W Mittag

1
@ JörgWMittagตราบใดที่เราแยกขน ... ใช่มันมีวัตถุประสงค์เพื่อให้ได้ความผิดพลาด มันประสบความสำเร็จผ่านการขนาน มันถูกออกแบบมาเพื่อใช้สิ่งนี้ในสวิตช์โทรศัพท์แบบดิจิตอลของ AX ซึ่งมีท่อคำนวณคู่ขนานที่แยกได้สองชุดโดยที่หนึ่งทำงานเป็นฮอตสแตน
pap

1
ใช่ขอโทษฉันควรมีความชัดเจนมากขึ้น: การประมวลผลแบบคลาวด์มีการกระจายตัวค่อนข้างมากตามคำจำกัดความและมักจะถูกนำไปใช้โดยกลุ่มของเครื่องจักรราคาไม่แพงและไม่น่าเชื่อถือที่สำคัญกว่าแต่ออกแบบมาเพื่อมอบบริการที่เชื่อถือได้ นั่นคือสิ่งที่ทำให้แอร์ลังเป็นแบบที่ดี
Jörg W Mittag

3

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

โดยเฉพาะอย่างยิ่งหากคุณกำลังสร้างระบบของคุณโดยใช้เฟรมเวิร์ก OTP (Open Telecom PLatform) ของ erlang ซึ่งมีทั้งโครงสร้างและกลไก (ต้นไม้ผู้ดูแล) เพื่อสนับสนุนการสร้างสิ่งที่ซับซ้อนบางอย่างที่มี effrot น้อยกว่าที่คุณจินตนาการ Erlang จัดการบิตที่ยุ่งยากทั้งหมดเพื่อที่คุณจะได้ไม่ต้อง

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