👶 DevOps พื้นฐาน

🤔 สงสัยกันไหมว่าการทำซอฟต์แวร์สมัยนี้เขาทำกันยังไงนะ ?

เดี๋ยวนี้ไปที่ไหนเราก็จะได้ยินคำว่า DevOps กันหนาหูเลยว่าบริษัทนู้นนั้นนี้เขาใช้กัน ดังนั้นวันนี้เรามาดูกันหน่อยละกันว่าจริงๆ DevOps มันคืออะไร แล้วทำไมมันถึงนิยมกันนักนะ

สำหรับแมวน้ำท่านไหนสนใจอยากจะกระโดดไปลองเล่น DevOps เลยก็สามารถเข้าไปดูคอร์ส 👶 Azure DevOps เพื่อลองลงมือเล่น DevOps ได้เบยนะ (ไม่จำเป็นต้องรู้อะไรเลยก็ทำตามได้)

🤔 DevOps คือไรหว่า ?

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

ดังนั้นจากที่ว่ามา DevOps คือการรวมทุกอย่างที่จำเป็นในการทำซอฟต์แวร์เข้ามาทำงานด้วยกัน โดยชื่อของมันเกิดจากการเอาของ 2 อย่างมารวมกันคือ Software Development (Dev) มารวมกับ Information-Technology Operations (Ops) นั่นเอง และการทำ DevOps นั้นจะต้องรวมถึงเรื่องการทำ Agile planning, Continuous Integration (CI), Continuous Delivery (CD) และ Monitoring application ของเราได้ด้วย

🤔 เป้าหมายของ DevOps คือไร ?

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

Feedback Loop คือช่วงเวลาที่ทีมจะมาดูผลตอบรับของงานในรอบที่ผ่านมาว่ามันมีอะไรที่ทีมควรจะนำมาปรับปรุงให้ดียิ่งขึ้นไปได้อีก และอะไรที่ควรจะทำกันต่อไป เพราะอย่าลืมว่าการสร้างซอฟต์แวร์มันเป็นงาน Research and Development (R&D) แม้กระทั่งคนสร้างและผู้ว่าจ้าง ก็ไม่รู้หรอกว่าของที่ทำมันดีหรือเปล่า ดังนั้นเราจะต้องมีช่วง Feedback ให้กับทีม และ ผู้ว่าจ้างให้เร็ว เพื่อที่ทีมและผู้ว่าจ้างจะได้นำไปปรับปรุงให้เหมาะสมกับสิ่งที่ตัวโปรแกรมมันควรจะเป็นยังไงล่ะ

🤔 จะทำ DevOps ต้องรู้ไรบ้าง ?

ในตัว DevOps ในส่วนของการทำงานนั้นเน้นไปในรูปแบบของ Agile ดังนั้นไปศึกษาเรื่อง Agile กันเอาต่อเองนะจ๊ะ ส่วนเรื่องอื่นๆที่จำเป็นต้องมีเพื่อให้ Feedback Loop ของเรามันทำได้ไวนั้น ทีมจะต้องมีของพวกนี้เอาไว้เป็นอย่างน้อย

แนะนำให้อ่าน การทำงานในรูปแบบของ Agile เป็นยังไงไปศึกษาเพิ่มเติมได้จากคอร์สนี้เด้อ 👦 Agile Methodology

🔥 Version Control

แทบจะเรียกได้ว่า 100% ของ developer ต้องใช้เจ้านี้เลย (ใครไม่รู้จักแนะนำให้รีบไปศึกษามันโดยด่วนไม่งั้นอนาคตตายแน่นอนฟันธง) เพราะมันทำให้ชีวิต developer อย่างเราๆลดงานหลายๆอย่างในการจัดการ source code ลงไปได้เยอะเลย ส่วนจะใช้อะไรนั้นก็แล้วแต่บริษัทจะเลือกใช้เลย ส่วนที่ทั่วโลกนิยมใช้กันคือ GitHub นั่นเอง

🔥 Build pipeline

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

Continuous Integration (CI)

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

โดยปรกติเราจะสั่งให้มันทำ CI ทุกครั้งที่มีการ push งานขึ้นมาบน repository ยังไงล่ะ

Continuous Delivery (CD)

เป็นตัวช่วยเอางานของเราไปขึ้น Environments ต่างๆที่เรากำหนดไว้ เช่นเมื่อไหร่ก็ตามที่งานมันพร้อมใช้งานแล้ว เราก็จะให้มันเอางานขึ้นไปที่ Production Environment ได้เลยนั่นเอง

โดยปรกติเราจะตั้ง CD นี้ต่อจากการทำ CI เสร็จ เพื่อเวลาที่ developer ส่งงานขึ้นมา ระบบก็จะตรวจสอบโค้ดที่พึ่งเอาขึ้นมาผ่าน CI แล้วเมื่อตรวจเสร็จ มันก็จะเอางานไปขึ้นที่ Test Environment เพื่อเตรียมเอาไปทำการทดสอบ User Experience ต่อ

🔥 Agile Planning

เนื่องจากงานมันต้องรีบทำ Feedback Loop นั่นก็แสดงว่า เราต้องมีการวางแผนการทำงานที่ชัดเจนด้วย ไม่งั้นเร่งรอบกะจะเอาแต่ Feedback อย่างเดียวก็ไม่ดี เพราะมันต้องสอดคล้องกับลำดับความสำคัญของธุรกิจด้วย ซึ่งตัวจัดการแผนงานของ Agile เรานิยมใช้ Kanban Board ยังไงล่ะ

🔥 Monitoring & Logging

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

🔥 Cloud Computing

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

แนะนำให้อ่าน ถ้าเพื่อนๆสนใจอยากรู้จักว่าคลาว์คืออะไรก็สามารถอ่านได้จากบทความนี้เบย 👶 Cloud พื้นฐาน ส่วนถ้าอยากลองเล่นคลาว์ตัวจริงก็สามารถไปดูในคอร์สด้านล่างนี้ได้เลยว่าจะเริ่มเล่นคลาว์ต้องทำยังไง และมันมีอะไรให้ลองเล่น 👶 Microsoft Azure 101

🔥 Infrastructure as Code (IaC)

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

เกร็ดความรู้ ใน DataCenter ของคลาว์เจ้าใหญ่ๆอย่าง Amazon, Microsoft, Google ไรพวกนี้ เชื่อไหมว่าเขาใช้วิศวะกรในการดูแลแค่ไม่กี่สิบคนเท่านั้นเองในการดูแลเซิฟเวอร์เป็นที่มีพื้นที่ขนาดใหญ่ชนิดที่ว่าเดินทั้งวันก็ไม่ทั่ว ซึ่งวิศวะกรพวกนี้จะไม่สามารถดูแลเซิฟเวอร์ได้เลยถ้าไม่ได้ทำ IaC

🔥 Microservices Architecture

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

แนะนำให้อ่าน ถ้าเพื่อนๆสนใจอยากศึกษาเรื่อง Microservices Architecture แล้วล่ะก็ สามารถอานได้จากคอร์สนี้เบย 👶 Microservices พื้นฐาน หรือถ้าอยากสร้าง Microservices บนคลาว์ก็สามารถเริ่มศึกษาได้จากลิงค์ด้านล่างนี้เบย 👶 Azure Service Fabric

🔥 Docker Containers

เพื่อช่วยให้งานของคนในทีมมี environments ที่เหมือนกันกับใน production หรืออะไรก็ตามแต่ ตัว Docker container เป็นสิ่งที่ขาดไม่ได้เลย

แนะนำให้อ่าน ถ้าเพื่อนๆสนใจอยากศึกษาเรื่อง Docker Container ก็สามารถอ่านได้จากคอร์สตัวนี้เบย 👶 Docker ขั้นพื้นฐาน

😱 แม้เจ้าใช้ความรู้เยอะจุง

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

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

Credit บทความทั้งหมดในรอบนี้นำความรู้และรู้ภาพมาจาก Microsoft DevOps ถ้าใครอยากศึกษาเพิ่มเติมก็ไปดูได้จากลิงค์นี้เลยครัช Microsoft Learn DevOps