Tag Archives: well

What is Well-Architected structure ?

เดือนที่แล้วไม่ได้มาเขียนอ่ะ เพราะงานยุ่งกว่าจะนึกได้ก็เดือนใหม่ซะแล้ว ฮ่าๆ รอบนี้ก็หนีไม่พ้นไปแปลงานภาษาอังกฤษมาให้ฟังอีกแหละ เข้าเรื่องเลยดีกว่าเนาะในหลายโพสที่ผ่านมาได้มีการแนะนำ Google App Engine ซึ่งเป็นแบบเอาโค้ดเราขึ้นไป Deploy บนคลาวด์ของ Google ได้นั่นเอง รอบนี้มีของอีกเจ้าหนึ่งที่ก็ดังไม่แพ้กัน นั่นคือ AWS ซึ่งอยู่ในเครือ Amazon โดยอันนี้มีให้เลือกเยอะกว่า GAE หน่อย มีทั้งสามารถสร้าง Infrastructure ได้เอง และแบบคล้ายคลึงกับ GAE คือส่งแค่โค้ดขึ้นไป Deploy บนระบบของ AWS บอกเลยว่าผู้เขียนไม่ได้รับค่าโฆษณาใดๆ ทั้งสิ้นนะ

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

ในบทความกล่าวถึง การวางระบบบนคลาวด์ AWS พื้นฐานควรทำอย่างไรบ้าง

  • เลิกเดาว่าจะมีคนใช้ระบบกี่คน ในระบบแบบที่เราเป็นคนตั้งเองจำเป็นต้องคำนึงถึงผู้ใช้เพราะไม่งั้นระบบจะล่มเอาได้ง่ายๆ หากเรามัวแต่คิดว่าต้องตั้ง Server กี่ตัว ตั้งมาแล้วไม่ได้ใช้ ตั้งมาแล้วใช้ไม่พอ แบบนี้คงเหนื่อย แต่บน AWS เราไม่จำเป็นต้องเดาอะไรให้มากมายเพราะทุกอย่างเป็นคลาวด์สามารถเพิ่มลดได้ตามความต้องการ
  • สามารถเทสได้บนระบบจริง การเทสถ้าไปเทสกับของจริงเกิดมันล่ม จะทำให้เกิดหายนะ แต่จะสร้างระบบจำลองที่เหมือนของจริงก็ใช้เงินมากทีเดียว เช่น จะต้องนำระบบไป Deploy บนเครื่อง Mainframe ของบริษัท จะให้ทดลองโดยการซื้อ Mainframe อีกเครื่องมาตั้งไว้แค่เทสก็ไม่ไหว แต่บนคลาวด์ทุกอย่างเป็นการแชร์กับคนอื่นอยู่แล้ว สามารถสร้างระบบจำลองอีกทั้งระบบเพื่อใช้แค่วันเดียวในการเทสก็ทำได้
  • ลดความเสี่ยงที่เกิดจาก infrastructure บอกเลยว่าการนำระบบไป Deploy ให้ลูกค้า เครื่องที่ลูกค้านำมาให้ใช้ในการ Deploy เนี่ยไม่รู้ว่าเวอร์ชันตรงกับที่เราพัฒนามารึเปล่าก็ไม่ทราบ แต่การที่ทุกอย่างอยู่บนคลาวด์เราสามารถสร้าง Infrastructure แบบที่เราต้องการได้ ไม่ต้องเสี่ยงกับ infrastructure ที่ไม่พร้อมให้เราทำการ Deploy (ข้อนี้จริงๆ ระบบสามารถอยู่บนแค่ Virtual System ไม่จำเป็นต้องคลาวด์ก็ได้นะ)
  • สามารถทำเวอร์ชันของ infrastructure ได้ ในชีวิตจริงแล้วเนี่ย หากเราต้องเทสระบบแล้วต้องไปลงโปรแกรมบนเครื่องเทสเนี่ย ส่วนมากจะเกิดอาการงงว่าเราลงอะไรไปแล้วบ้างพอระบบมีปัญหาก็ Format แล้วลงโปรแกรมใหม่ แต่นั่นคือถ้ามีเครื่องเพียงเครื่องเดียวชีวิตก็สวยงามดีแหละ หากถ้าเครื่องคำนวณแยกเครื่องกับ Database และแยกกับ Firewall เนี่ยการไปไล่ Format ทั้งหมดคงลำบากมากนะบอกเลย จะดีกว่ามั้ยถ้าเรามีระบบเวอร์ชันให้กับทุกเครื่องที่เกี่ยวข้องกับการเทสของเรา บน AWS สามารถทำเวอร์ชันให้กับเครื่องของเราได้และสามารถเปรียบเทียบความแตกต่างของเวอร์ชันต่างๆได้อีกด้วย (ข้อนี้ผู้เขียนก็คิดเหมือนข้อที่แล้วนะ ถ้าอยู่บน Virtual System อะไรก็ทำเวอร์ชันได้แหละแต่เหนื่อยหน่อยเท่านั้นเอง เพราะ AWS มีระบบเวอร์ชันให้อยู่แล้วเนี่ยแหละเลยง่ายกว่า)
  • รองรับการเปลี่ยนแปลงแบบพลิกฝ่ามือได้ ผู้เขียนแปลออกมาซะยิ่งใหญ่เชียว เพราะคิดว่าอันนี้เป็นข้อดีของระบบ AWS ที่สุดละ อันอื่นอาจจะมีทางแก้ในแนวทางอื่นๆได้ แต่ข้อนี้อาจจะทำไม่ได้ในระบบแบบเก่า โดยในข้อนี้พูดถึงการอยากจะเปลี่ยนแปลงระบบทั้งหมดเช่น เมื่อก่อนเป็น Centralize อยากเปลี่ยนเป็นแบบ Distribution โหไหนจะซื้อเครื่องมาเพิ่มใหม่ ไหนจะเอาเครื่องเก่าไปทำอย่างอื่นอีก โหเหนื่อย แต่ถ้าเป็นคลาวด์ทุกอย่างสามารถหายวับไปกับตาแล้วแทนที่ด้วยสิ่งใหม่เพียงไม่กี่คลิกได้นับว่าเป็นข้อดีอย่างที่สุดของ AWS แล้วสามารถเพิ่มลดทุกอย่างได้ดั่งใจ

นอกจากการออกแบบ infrastructure จะคิดถึงปัจจัยข้างบนแล้ว เวลาออกแบบระบบใดๆก็ตามควรจะคิดถึง 4 ปัจจัยนี้เป็นหลัก คือ ความปลอดภัย (Security) , ความน่าไว้วางใจ (Reliability) , ประสิทธิภาพการใช้งาน (Performance Efficiency) และ การลดค่าใช้จ่าย (Cost Optimization)

Security ในระบบทุกระบบจำเป็นที่เราจะต้องมีการคำนึงถึงความปลอดภัย ซึ่งประกอบด้วย 4 หัวข้อใหญ่ คือ การป้องกันดาต้า (Data protection) , การควบคุมการเข้าถึง (Privilege management) , การป้องกันโครงสร้าง (Infrastructure protection) เช่น การป้องกันการเข้าถึง router และ ระบบควบคุมการตรวจสอบ (Detective controls) เช่น ตั้งให้ระบบมีการตรวจจับการโจมตีอัตโนมัติ

Reliability ระบบจะมีความน่าไว้วางใจเมื่อระบบมีการรองรับความผิดพลาดที่ดี เช่นระบบไม่มี Downtime ในการขึ้นระบบใหม่ ระบบมีการทำ Change management เมื่อระบบที่ขึ้นใหม่มีการเปลี่ยนแปลงจากระบบเก่า และสุดท้ายเมื่อระบบพบกับความผิดพลาดสามารถซ่อมแซมได้ง่ายไม่ใช่ต้องใช้เวลานานในการซ่อมแซม

Performance Efficiency ระบบที่ดีควรมีการจัดสรรทรัพยากรที่ดี เช่นเครื่องที่ทำงานต้องไม่ว่างจนเกินไป นอกจากนั้นทั้งเนื้อที่ความจุและ Database ก็ควรมีประสิทธิภาพเช่นกัน เช่นเราควรเลือก Database และ Storage ให้เหมาะสมกับระบบที่เราจะทำงานด้วย นอกนั้นยังมีเรื่องที่น่าสนใจอีกเรื่องคือการทำแคชเพราะการทำแคชจะเป็นการทำ Space-time trade-off หรือหากเราต้องการความเร็วเพิ่มขึ้นเราสามารถเพิ่มพื้นที่ให้ระบบเร็วขึ้นได้ แต่เราจะสามารถทำแคชได้ง่ายหรือไม่ขึ้นอยู่กับการออกแบบนี่แหละ

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

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