เอิร์ลแลง(Erlang) ตอนที่ 2

posted on 03 Dec 2009 09:46 by roofimon in Erlang
High-Level Constructs
เอิร์ลแลงเป็นภาษาเชิงบอกเล่า(declarative) โดยที่ลักษณะเด่นของภาษาแบบนี้คือตัวมันเองจะอธิบายว่าอะไรควรจะถูกคำนวณ ไม่ใช่ว่าค่าที่ได้มานี้ถูกคำนวณมาอย่างไร(โคตรงง) ในเอิร์ลแลงการประกาศฟังก์ชั่นจะใช้กระบวนการเปรียบเทียบแพทเทิร์น(Pattern Matching) เพื่อเลือกว่าฟังก์ชั่นใดควรทำงาน นอกจากนี้เรายังใช้กระบวนการนี้เข้ามาช่วยในการดึงเอาข้อมูลอะไรบางอย่างออกมาจากโครงสร้างข้อมูลที่ซับซ้อน ดังนั้นการทำการเปรียบเทียบแพทเทิร์นนั้นจะมองแล้วเหมือนชุดของสมการทางคณิตศาสตร์เช่น

area({square, Side}) -> Side * Side ;
area({circle, Radius}) -> math:pi() * Radius * Radius.

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

decode(<< SourcePort:16, DestinationPort:16,
SequenceNumber:32,
AckNumber:32,
DataOffset:4, _Reserved:4, Flags:8, WindowSize:16,
Checksum:16, UrgentPointer:16,
Payload/binary>>) when DataOffset>4 ...

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

qsort([]) -> [];
qsort([X|Xs]) ->
qsort([Y || Y<-Xs, Y =< X]) ++ [X] ++ qsort([Y || Y<-Xs, Y > X]).

Concurrent Processes and Message Passing
การทำงานของโพรเซสพร้อมๆกันในเอิร์ลแลงเป็นความสามารถพื้นฐานของมันอยู่แล้วและสำหรับเอิร์ลแลงแล้ว
มันจะทำการสร้างโพรเซสที่มีรีซอร์สเป็นของตัวเองออกมาทุกครั้งแทนที่จะสร้างเทรดที่ใช้รีซอร์สร่วมกันเนื่องจากมันต้องการป้องกันปัญหาในเรื่องของการรบกวนกันของเทรด ซึ่งอาจจะนำมาซึ่งปัญหาเรื่องของเดดล๊อคได้

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

Scalable, Safe, and Efficient Concurrency
การทำงานแบบพร้อมกันของโพรเซสในเอิร์ลแลงนั้น เร็ว และขยายออกไปได้ง่ายมากเนื่องจาก โพรเซสต่างๆที่เกิดขึ้นจะถูก สร้าง จัดตาราง และจัดการทำงานอยู่ภายใต้ เอิร์ลแลงวีเอ็มซึ่งจะเป็นอิสระจากระบบปฏิบัติการที่อยู่ในระดับต่ำลงไปกว่า ทำให้ช่วงเวลาที่ใช้ในการสร้างโพรเซสอยู่ในระดับไมโครวินาที และไม่ขึ้นกับจำนวนโพรเซสที่ถูกสร้างไว้ก่อนหน้านี้แล้ว ซึ่งเมื่อเราเปรียบเทียบสิ่งนี้กับ Java หรือ C# แล้วจะเห็นว่าทั้งสองภาษานั้นจะสร้างโพรเซสภายใต้ระบบปฎิบัตการโดยตรงทำให้เราต้องไปแข่งขันกับระบบอื่นอย่างยากลำบากเพื่อขอใช้รีซอร์ส นอกจากนี้เอิร์ลแลงยังสื่อสารกันระหว่างโพรเซสด้วยการส่งเมสเสจและกระบวนการส่งก็เป็นเพียงแค่การคัดลอกข้อมูลจากเมมโมรี่สเปซหนึ่งไปยังอีกที่หนึ่งเท่านั้น
ทำให้กระบวนการส่งเมสเสจเป็นไปได้อย่างรวดเร็ว 

Soft Real-Time Properties
ถึงแม้ว่าเอิร์ลแลงจะเป็นภาษาระดับสูงแต่มันเองก็สามารถถูกใช้สำหรับงานประเภทซอฟท์เรียลไทม์ได้เนื่องจากหลายปัจจัยเช่นการจัดการการใช้รีซอร์สทำผ่านกระบวนการการ์เบจคอลเลคชั่นในด้วยโพรเซสเองเลยทำให้มันทำงานได้เร็วมากนั่นแปลว่ามันทำการรับโหลดได้สูงมากโดยที่ผลตอบสนองไม่ตกแม้กระทั่งในช่วงเวลาที่โหลดสูงกมาก็ตาม

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

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

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

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

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

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

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

Integration and Openness
เนื่องจากในชีวิตจริง เราต้องทำงานกับแพลทฟอร์มและภาษาต่างๆที่หลากหลายมาก ตัวเอิร์ลแลงเองก็สามารถทำงานกับภาษาต่างๆหลายภาษาได้เช่น C, Java,Ruby, Python, Perl, LIPS และอื่นๆด้วยไลบรารี่ระดับสูงในเอิร์ลแลง ทำให้เราสามารถมองโหนดอื่นๆที่มีแอพพลิเคชั่นที่ถูกเขียนด้วยภาษาอื่นเช่น Java, C ให้เป็นเอิร์ลแลงโหนดได้และนอกจากนีเราสามารถเชื่มภาษาเหล่านั้นเข้ากับเอิร์แลงได้อย่างแนบแน่นด้วยการใช้ไดร์เวอร์เพื่อเชื่อมเข้ากับเอิร์แลงวีเอ็ม ทำให้เรามองมันเป็นเหมือนอุปกรณ์ชนิดหนึ่งที่เราสามารถเปิดซ๊อกเก็ทเพื่อสื่อสารกันได้ โดยการสื่อสารสามารถทำป่านโปรโตคอลยอดนิยมอย่าง HTTP, SNMP และ IIOP

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

edit @ 3 Dec 2009 15:01:02 by cyber-climber

Comment

Comment:

Tweet

It is practicable to receive the issue associated with buying essays or just about this post in up to date world. But before people buy the pre written essays, they must detect the experienced essay writing service.

#5 By buy essay papers (193.105.210.41) on 2011-11-24 23:19

The dissertation writing services are presently searching for your good topic related to this good topic for the dissertation reference creating.

#4 By AmparoWebb20 (91.212.226.143) on 2011-11-20 09:08

Robustness พิมพ์ผิดครับ

#3 By pop k (180.183.251.117) on 2010-02-21 23:01

หลายๆฟีเจอร์ยังงงๆอยู่ครับ เอาไว้เจอตัวอย่างชัดๆแล้วจะกลับมาอ่านอีกที

#2 By iporsut (58.9.58.165) on 2009-12-05 11:08

ตอนนี้ผมต้องอ่านอย่างต่ำ 2 รอบ

#1 By somkiat on 2009-12-03 23:13