สรุปเนื้อหาจากงาน Thailand Developer Day
สถานที่: Microsoft Thailand Office
สวัสดีผู้อ่านทุกท่านนะครับ เมื่อวันเสาร์ที่ 25 ก.พ. 66 ผมและทีมงานมีโอกาสได้ไปร่วมงาน Thailand Developer Day
ที่ Microsoft Thailand Office
ครับผม
โดย Thailand Developer Day
เป็นงานประชุมที่รวบรวมบรรดานักพัฒนา ผู้ประกอบการหน้าใหม่ และนักศึกษา มาร่วมแบ่งปันประสบการณ์ สัมผัสการเรียนรู้จากนักพัฒนาด้วยกัน ซึ่งจัดขึ้นเป็นประจำทุกไตรมาสในปีนี้ โดย Microsoft, GitHub, Communities และ Partners ต่าง ๆครับผม
เนื่องจากผมไปร่วมงานทั้งในฐานะ Speaker และผู้เข้าร่วมงานด้วยครับ เลยแอบจดเนื้อหามาฝากผู้อ่านในบทความนี้ครับผม
แอบสปอยเนื้อหาที่น่าจะทดลองเรียนและลงมือทำตามครับ
ลอง Github Copilot
ใน VS Code และ VS Studio
ลอง Getting Started Azure OpenAl Service for Developer
ลอง Azure OpenAI Workshop
เริ่มต้นการเดินทาง
เนื่องจากทีมงานส่วนใหญ่อยู่ขอนแก่น เราจึงตัดสินใจเดินทางด้วยรถไฟจาก ขอนแก่น คืนวันศุกร์ ออกเดินทาง 21.49 น. ถึง กทม 06.00 น. แล้วก็ต่อไปร่วมงานตอน 08.30 น. ตอนเย็นก็ขึ้นรถไฟกลับมาขอนแก่นเลย เหนื่อยแต่ก็สนุกมากๆเลยครับ
Accelerate innovation with the world’s most complete cloud developer platform
Develope faster than ever before
ปัจจุบันแนวทางการพัฒนาโปรแกมจะไปใน Concept Code to Cloud
เพื่อให้เกิดเกิดระบบที่ถึงมือผู้ใช้ได้เร็วที่สุดครับ ซึ่งกระบวนการ CI/CD เป็นสิ่งสำคัญในการ Deploy ระบบได้อย่างต่อเนื่อง
โดยระบบที่ว่านั้น อาจจะอยู่บน Cloud, On-premises หรือว่าบนอุปกรณ์ขนาดเล็ก เช่น Edge Server ต่างๆที่อยู่ใกล้กับการใช้งานของผู้ใช้ที่สุดครับ
และเป็นเรื่องดีที่ในปัจจุบันนี้ Developer มีโอกาสที่จะพัฒนาระบบได้รวดเร็วขึ้นโดยใช้กำลังคนน้อยลงครับ เพราะว่ามี Tools ใหม่ๆเกิดขึ้นมาช่วยในงานเฉพาะทางหลายอย่าง ทำให้สะดวกต่อการ Implement / Build / Deploy
OpenAI x Microsoft
ด้วยความร่วมมือของ OpenAI + Microsoft
ทำให้เกิด Generative AI Model เจ๋งๆขึ้นมา 3 ตัวที่ช่วยให้การทำงานสะดวกขึ้นมากๆครับผม
GPT-3
หรือก็คือเบื้องหลังการทำงานของ ChatGPT ที่กำลังโด่งดังอยู่ตอนนี้ครับCodex
ใช้ในที่เกี่ยวกับการสร้าง Code ในภาษาโปรแกรมต่างๆDALL.E
ใช้ในการสร้างภาพสวยๆ
Generative AI คือ AI ที่มีความสามารถในการสร้างสรรผลงานออกมาได้จาก Input ที่ได้รับครับ
Codex
DALL.E ไปใช้ในการรังสรรภาพสวยๆตามจินตนาการครับ
Microsoft ยังได้พัฒนา Applied AI Service ที่เอา AI Model มาปรับแต่งให้ใช้งานง่ายขึ้น เหมาะในการนำไปประยุกต์ใช้กับงานได้หลากหลายครับ
ตัวอย่างนึงที่ผมชอบมากคือการที่เราสามารถใช้ Feature Text-To-Speech เพื่อทำให้ Video ของเรามีเสียงบรรยายประกอบได้โดยที่ไม่ต้องจ้างคนพากย์เสียงเลยครับ รองรับภาษาไทยด้วยเด้อๆๆๆ
Azure Cognitive Services — Text to speech
- ใช้ฟรีเดือนละ 500K ตัวอักษร
- ส่วนเกิน $16 / 1 ล้านตัวอักษร
- https://azure.microsoft.com/en-us/pricing/details/cognitive-services/speech-services/
- ตัวอย่าง https://watch.wave.video/qYBxLmbggf7rdt9W
ตัวอย่าง Azure OpenAI
ที่เราระบุความต้องการ (prompt)
เพื่อให้ AI ช่วยสรุปข้อมูลออกมา
ตัวอย่างการนำ Azure OpenAI ไปใช้ใน Code Python ครับ
เจอบทความแนะนำเพิ่มเติมครับ
Enterprise Architecture for OpenAI
Enterprise ต้องระวังเรื่อง Security นะ ทีม Dev กับ Security ควรออกแบบเพื่อใช้งาน OpenAI ร่วมกัน เช่นการออกแบบการใช้ Network ภายในองค์กรให้ปลอดภัย
Modern Software Development
เราต้องพยายาม Modernize ระบบเพื่อให้รองรับความต้องการใหม่ๆและสามารถเชื่อมต่อกับระบบใหม่ๆเพื่อสร้างนวัตกรรมได้รวดเร็วขึ้นนะครับ
Cloud Native เป็นอีก 1 แนวในการพัฒนาระบบที่ได้รับความนิยมในปัจจุบันมากครับเพราะช่วยให้รองรับจำนวนผู้ใช้งานได้หลากหลาย ต่อเติมได้สะดวก แต่ก็มาพร้อมกับความซับซ้อนของระบบที่เพิ่มมากขึ้น
มาลองดูนิยามจาก Microsoft กัน
เทคโนโลยี Cloud-native ช่วยให้องค์กรสามารถสร้างและเรียกใช้แอปพลิเคชันขนาดใหญ่ในสภาพแวดล้อมที่เปลี่ยนแปลงได้ อย่างเช่น public, private, และ hybrid clouds โดยใช้เทคโนโลยี Containers, service meshes, microservices, immutable infrastructure และ declarative APIs ซึ่งเป็นเทคโนโลยีที่ช่วยเพิ่มประสิทธิภาพและความยืดหยุ่นในการพัฒนาแอปพลิเคชันให้กับองค์กร
อ้างอิง: https://learn.microsoft.com/en-us/dotnet/architecture/cloud-native/definition
ตัวอย่าง Cloud-native บน Azure ก็จะตามภาพข้างล่างเลยนะครับสังเกตุว่ามีบริการที่เกี่ยวข้องเยอะมาก หลักๆก็เรื่อง
- Container เช่น AKS, Container App
- ในส่วน API ก็มี Azure API Management เป็น API Gateway
- ในส่วนของ Data ก็หลากหลายเลย เช่น SQL ด้วย Azure PostgreSQL หรือ NoSQL ด้วย Azure CosmosDB
- นอกจากนั้นก็ใช้ Azure Fucntion ในการทำ Serverless
- และใช้ Azure Arc เพื่อให้เราสามารถรัน Azure ที่ไหนก็ได้
Innovate with Microsoft Azure and OpenAI
ประวัติศาสตร์ AI
เปิดด้วยเรื่องของประวัติศาสตร์ AI
ในปี 1956 -> Machine Learning
ในปี 1997 -> Deep Learning
ในปี 2017
จนกระทั่งมาถึงยุคปัจจุบันที่ AI สามารถสร้างสรรค์ผลงานออกมาได้หลากหลายรูปแบบ หรือที่เรียกว่า Generative AI
ตัวอย่างเช่น การเขียนบทความ/ภาพ/เสียง จาก Input ที่ได้รับมา
ช่วงแรกๆที่เราเห็นใช้กันบ่อยๆคือ GitHub Copilot
ที่เป็นผู้ช่วยให้เราเขียน Code ได้ง่ายขึ้นมากๆ โดยเฉพาะการที่เราสามารถระบุความต้องการใน Comment ภาษาไทย แล้วระบบสร้าง Code ออกมาให้เลย ประหยัดเวลา Dev ไปมากโขเลยครับ
หลังจากนั้นคนเริ่มพูดถึงการใช้ Generative AI ในการสร้างสรรค์รูปภาพขึ้นมา โดยตัวที่นิยมมากๆคือ Midjourney Bot
ที่อยู่ใน Discord ครับ เราระบุรายละเอียดที่ต้องการ แล้วจะได้ภาพออกมาให้ครับ เทพมาก
Open AI x Microsoft
ช่วยให้นักพัฒนามีบริการใช้งาน AI ได้สะดวกมากขึ้น มั่นใจเรื่องของความปลอดภัยและการจัดเก็บข้อมูลให้เราเมื่อต้องใช้งานในระดับ Enterprise Grade
Azure OpenAI
บริการที่เกิดมาจาก Open AI x Microsoft นั้นเองครับผม ซึ่งช่วยให้เราสามารถนำ Generative AI Model มาปรับปต่งให้เหมาะกับงานของเราได้ครับ
สิ่งที่เปลี่ยนไปจากแต่ก่อนคือ Dev ต้องเรียนรู้วิธีป้อนข้อมูลเพื่อให้ได้ผลลัพธ์ที่ต้องการ เช่นการเอาข่าวหลายๆอันมารวมกัน แล้วให้ AI ช่วยสรุปรวมเหลือสั้นๆ หรือการ Input Prompt ไปและคอยประเมินคำตอบที่คาดหวังไว้เพื่อให้ตัว Model เข้ากับสิ่งที่เราต้องการมากขึ้น โดยดูตัวอย่างได้จากในภาพเลยนะครับ
Demo
ชอบช่วงเวลา Demo ที่สุดลเยครับ ได้เห็นตัวอย่างการใช้งานโดยเริ่มตั้งแต่
- สร้าง Open AI ใน Azure
- เสร็จแล้วเปิด Open AI Studio
- สร้าง Deploy Model
- ในตัวอย่างนี้เลือก text-davinci-002 (คือขุมพลังของ Chat-GPT)
- ใช้ text-curie ก็ได้นะ ทำงานส่วนง่ายๆเร็วกว่า
- เสร็จแล้วไปต่อที่ Playground
- ใช้เพื่อทดลอง Model ก่อนว่าทำงานได้ตามที่เราต้องการไหมนะครับ โดยเราลองพิมพ์คำว่า
Hello
เสร็จแล้ว AI Gen ที่เหลือมาให้ ให้เรากด Undo เพื่อสมมติว่าเราไม่ได้ต้องการผลลัพธ์ที่ออกมานะ แล้ว AI จะสร้างข้อความใหม่ให้เราไปเรื่อนๆจนกว่าจะพอใจ และจดจำผลลัพธ์ให้เรา ทำให้เมื่อเรานำไปใช้งานจริง ก็จะคาดหวังว่า AI จะสร้างข้อความตอบลูกค้าของเราตามที่เราคาดหวังครับ
- ทดลอง Prompt จากตัวอย่างที่ Microsoft เตรียมไว้ เพื่อช่วยคุยกับเขา ครับ โดยทำการ Classify Text
- เราจะพบว่ามีตัวอย่างข้อความขึ้นมาให้ทดลองดูผล แต่ด้วยความเมพ เราเลยลองใช้เป็นภาษาไทยดู ได้ผลลัพธ์ว่า บทความที่เราเขียนน่าจะเกี่ยวกับการเมือง โครตเจ๋งงงงงง ช่วยสรุปสบายเลย เพื่อไปเอาระบบจัดเก็บหมวดหมู่บทความอัฒโนมัติ
ความดีงามในการต่อยอดคือ สามารถเชื่อมต่อด้วย Python Lib หรือ RESTful API ก็ได้ครับ สบายเลย
ข้อคิดที่ได้
Prompt Engineer
กลายเป็นเครื่องมือนึงของ Dev แน่นอน- คนใช้ AI เป็นจะแย่งงานคนที่ไม่ใช้ AI
AI for Developers: ChatGPT & GitHub Copilot
มนุษย์พยายาที่จะพัฒนาภาษาและเครื่องมือให้มันดีขึ้นเรื่อยๆอยู่ตลอดครับ ซึ่งอนาคตของ Developer ตอนนี้คือคือ GitHub Copilot และ ChatGPT ด้วยเหตุผลที่ว่า
เราสามารถลดขั้นตอนการทำงานเดิมๆ ด้วยระบบอัฒโนมัติจาก Generative AI
Features ที่น่าสนใจใน GitHub Copilot
- พิมพ์รายละเอียดของ Code ที่ต้องการทั้ง Thai/English เสร็จแล้ว Copilot จะแปลงเป็น Code ให้อย่างสวยงามตามท้องเรื่อง
2. สร้าง Dictionaries ให้อย่างรวดเร็ว
3. สร้าง Validation Rule สะดวกเวอร์ๆ
GitHub Copilot Lab
อีก 1 ตัวช่วยที่เพิ่มความสามารถเจ๋งๆของ GitHub Copilot ให้เราต้องอ้าปากค้างครับ เช่น
- แปลง Code จากภาษานึง เป็นอีกภาษา ด้วย
2. อ่าน Code และอธิบายว่า Code ทำงานยังไง อย่างเท่
3. ช่วยเรื่องทำ Document ได้ด้วยน้า
ChatGPT
เอาจริงๆ ChatGPT ทำงานได้ค้ลายกับ GitHub Copilot เลยครับ แต่จะเป็นในเชิงใช้งานทั่วไปมากกว่า GitHub Copilot จะเน้นเจาะจงเรื่อง Coding โดยเฉพาะและมี Extension อยู่ตาม Editor Tools อยู่แล้ว ทำให้เราทำงานได้สะดวกโดยที่ไม่ต้องสลับไปมาครับ
ทางผู้สอนแนะนำว่าซื้อใช้ทั้งสองตัวเลยครับ ของเขาดีย์ !!!
Modernize .NET enterprise applications with Microsoft Azure
ในหัวข้อนี้ผมเป็นคนบรรยายครับ โดยนำประสบการณ์การย้ายระบบ .NET ตัวเก่าที่รันอยู่บน On-Premise ขึ้นไปอยู่บน Cloud เพื่อความสามารถหลายๆอย่างในการตอบโจทย์การทำงานที่ทาง Enterprise ต้องการครับผม
อะไรคือ Legacy Systems
ในความเห็นของผม Legacy System คือระบบที่ใช้เทคโนโลยีเก่าแก่ที่อยู่มานาน ผ่านการซ่อมแซม ดูแลรักษาจนระบบมีความซับซ้อนสูงมาก ทำให้การพยายามแก้ไขอะไรแต่ละครั้งจะยากมากขึ้นและใช้เวลานานขึ้นเรื่อยๆ คนในทีมที่มีความสามารถในเทคโนโลยีนี้จะลดน้อยลงเรื่อยๆ ทำให้ขาดแคลนคนและมีค่าใช้จ่ายที่สูงขึ้นในการตามหาคนที่ยังดูแลระบบได้ครับ
คำถามคือแล้วทำไมในองค์กรยังคงจำเป็นต้องใช้ระบบเหล่านี้ละ
คำตอบคือเพราะระบบมีความสำคัญมาก เก็บรักษาดูแลข้อมูลของลูกค้าที่เป็นธุรกิจหลักขององค์กร ทำให้ต้องพิจารณาระหว่างการพัฒนาขึ้นใหม่ กับการยังคงรูปแบบ Legacy System ไว้แล้วค่อยๆย้ายระบบทีละส่วน
ไหนๆก็มา Theme AI แล้ว เลยลองใช้ ChatGPT Plus ลองช่วยหาคำตอบเทียบกับที่ผมคิดหน่อยซึ่งผลลัพธ์ที่ได้ออกมาก็คล้ายๆกันเลยครับ เย้
มีภาพนึงที่ชอบมากๆแต่ไม่ทราบว่าต้นทางจริงๆมาจากไหน ต้องขอโทษที่ไม่ได้ใส่ Credit ด้วยนะครับ
โดยเป็นภาพที่ทั้งองค์กรภยายามช่วยกันกำราบมังกรยักษ์ (Legacy Software) ให้อยู่ในสถานะที่ควบคุม ดูแลต่อได้ครับ สังเกตุว่า PM นอนเกลื่อนระนาวเลย น่าเอ็นดูมากๆครับ ฮาาาาา
ชีวิตก่อนรู้จัก Cloud Computing
และนี้คือชีวิตของผมก่อนจะรู้จักโลกของ Cloud Computing ครับ เน้นเขียนแต่โปรแกรมอย่างเดียวจนลืมมองอีกหลายๆด้านหลังจากที่เราส่งมอบงานให้ลูกค้าใช่แล้ว
SLA
= คืออะไรหรือ ไม่รู้จัก ที่นี้เราไม่ทำกันแบบนี้Scalability
= ไม่จำเป็น VPS เครื่องเดียวที่ผมเช่าก็เอาอยู่ครับSecurity Compliance
= เราพัฒนาเอง มาตราฐานไม่ต้องObservability
= เราเชื่อใจระบบมากครับ ไม่ต้องมีของแบบนี้ก็ได้High Availability
= เราสวดมนต์ขอพรให้สิ่งศักดิ์สิทธิ์ช่วยคุ้มครองระบบ
การพัฒนาระบบมันไม่ได้มีแค่การเขียนโปรแกรมครับ เราจำเป็นต้องพึงระลึกถึงเรื่องการดูแลรักษาระบบด้วยครับ โดยเฉพาะเมื่อเราต้องส่งมอบ Software ให้กับองค์กรระดับใหญ่ (Enterprise)
เผื่อท่านใดสนใจลองศึกษาเนื้อหาได้นะครับ
Cloud Computing คืออะไร
คือบริการให้เช่าทรัพยากรบนคอมพิวเตอร์โดยที่เราจ่ายเงินค่าบริการเท่าที่ใช้ตามจริงเท่านั้น ตัวอย่างบริการก็เช่น
- Compute Power เช่น Linux Servers และ Web Applications
- Storage เช่น ไฟล์, ฐานข้อมูล
- Networking เช่น การเชื่อมต่ออย่างปลอดภัยระหว่าง Cloud Provider และผู้ใช้
- Analytics เช่น Visualizing Telemetry และ Performance Data
ประโยชน์ของ Cloud Computing
- คุ้มค่าต่อการลงทุน (Cost-Effective)
- สามารถปรับขนาดได้ (Scalable)
- มีความยืดหยุ่นสูง (Elastic)
- เราดูแลเฉพาะพัฒนาระบบเพียงอย่างเดียว อย่างอื่นให้ Cloud Provide ช่วยดูแลให้ (Current)
- น่าเชื่อถือ (Reliable)
- มีบริการครอบคลุมทั่วโลก (Global)
- มีความปลอดภัยสูง (Secure)
Cloud Service Models
คือรูปแบบการให้บริการบน Cloud Computing โดยจะขอพูดถึงเฉพาะรูปแบบที่ได้รับความนิยม 3 ประเภทน่ะครับ คือ IaaS, PaaS และ SaaS
On-Premise
เราจะต้องดูแลทุกอย่างเองทั้งหมด ทั้ง Hardware และ Software เช่น จะตั้งค่า Network ยังไง จะ Patch OS เมื่อไหร่ ติดตั้งโปรแกรมอะไรบ้าง ไฟดับ เน็ทหลุด harddisk เสีย ต่างๆ ซึ่งปัญหาพวกนี้เราต้องดูแลเองทั้งหมดเลย
Infrastructure as a Service (IaaS)
เป็นรูปแบบการให้บริการพื้นฐานบน Cloud Cumputing เหมาะสำหรับสถานะการณ์ที่เราอยากจะได้เครื่องเซิฟเวอร์ไปใช้งาน แต่ให้ Cloud Provider เป็นผู้ดูแล Physical Infrastructure โดยเราจะเน้นไปที่ความยืดหยุ่นในการใช้งานที่มากที่สุด เช่นเราสามารถจัดการได้ว่าจะ Patch OS เมื่อไหร่ จะติดตั้งโปรแกรม หรือลง Antivirus โดย
เป็นรูปแบบที่ย้ายจาก On-Premises มาง่ายที่สุด (“Lift & Shift”)
ตัวอย่างบริการ: Container Service, Virtual Machines, Azure Storage Accounts
Platform as a Service (PaaS)
เป็นบริการมุ่งเน้นไปที่การอำนวยความสะดวกให้ผู้ใช้บริการสามารถสร้างแอปพลิเคชันได้อย่างรวดเร็ว โดยไม่ต้องกังวลกับ Infrastructure เพราะเราเน้นดูแค่ โปรแกรมและข้อมูลที่ใช้ ส่วนอื่นๆทาง Azure จะเป็นคนดูแลให้ครับ เช่น Windows เราก็ไม่ต้องคอย update หรือ จัดการกับความปลอดภัยต่างๆด้วยตัวเราเอง
ตัวอย่างบริการ: Azure App Service, Azure SQL Database, Azure Functions
Software as a Service (SaaS)
เป็นบริการที่มีไว้เพื่อเน้นให้ End Customer ใช้งานโปรแกรมที่อยู่บนคลาว์อย่างเดียวเท่านั้น ดังนั้นในระดับนี้เราจะไม่ต้องไปยุ่งอะไรกับการตั้งค่าเลย
ตัวอย่างบริการ: Dynamics 365, Outlook, Office 365
ทำให้ระบบทันสมัยขึ้นด้วย Cloud Computing
ในขั้นตอนแรกผมใช้เทคนิค Lift & Shift
ในการย้ายระบบของผม (Web Server/ DB Server/ File Server) ที่อยู่ใน VM เพียงเครื่องเดียว ขึ้นไปอยู่บน Azure IaaS ที่ชื่อ Azure VM ก่อนครับ
เหตุผลที่เลือกวิธีนี้ในตอนแรกเพราะไม่คุ้นเคยการใช้ Cloud เลยอยากปรับแก้ไข Code ให้น้อยที่สุด และนำขึ้น Cloud ไปก่อน เพื่อให้ Microsoft ดูแลในเรื่องของ Physical Servers ให้ครับ เลือก Data Center ที่อยู่ USA เพื่อให้ใกล้กับลูกค้ามากที่สุด
รวมถึงยังได้ความสามารถเรื่องของการรักษาความปลอดภัยผ่าน Azure Policy ต่างๆและมี Monitoring Tools ที่ช่วยให้เราตรวจสอบทรัพยากรบนระบบได้ครับ นอกจากนั้นก็ Scale Up ระบบให้ใหญ่ขึ้นได้ถ้ามีจำนวนผู้ใช้ที่มากขึ้นครับ
หลังจากพอระบบเริ่มนิ่งและมี Budget พอที่จะแก้ไขเพิ่มเติมได้ ทางผมได้ทำการศึกษาการใช้ Azure PaaS ต่างๆ ดังนี้
Azure App Service
: Web Server ที่มี Runtime ภาษาต่างๆอยู่Azure Application Insight
: Monitoring Tool สำหรับตรวจสอบการทำงานของAzure App Service
Azure SQL
: MSSQL DatabaseAzure Blob Storage
: File Server
หลังจากมั่นใจระดับนึงในการใช้งานแล้วจึงเริ่มแก้ไข Code เพื่อทำการแยกส่วน Code ที่ตอนแรกไม่ได้ออกแบบมาให้มันทำงานแยก Server กัน (เช่น Load File จาก Local) ให้แยกออกจากกัน และปรับแก้ไขบางส่วนให้ไปใช้ SDK ของ Azure ครับ
พอย้ายระบบจาก IaaS ไป PaaS ได้แล้วพบความดีงามว่า ค่าใช้จ่ายถูกลงมากกก ไม่ต้องดูแลรักษา OS เองแล้ว เน้นการ Dev เป็นหลักเลย เรื่อง Infra ให้ Azure ดูแลครับ
มีภาพสรุปข้างล่างนะครับแต่ผมไม่ได้อธิบายถึง CloudNative เพราะผมยังไปไม่ถึงจุดนั้นครับ มีเริ่มใช้บางอย่างแล้ว เช่น Serverless, CI/CD, Monitoring Tool แต่ก็ยังไม่เพียงพอเพราะขาดเรื่อง Container ครับ เลยขอเก็บไว้เขียนในบทความในอนาคตแทนนะครับ
วิธีการเลือก Computation บน Azure
Azure App Service
เป็น Cloud Service Model ของ Azure แบบ PaaS ที่ช่วยให้เราสามารถนำ Code หรือ Container ของเราไปรันเป็น Web App, RESTful API, Background Jobs ของเราได้โดยที่ไม่ต้องกังวลในเรื่องของ Infrastructure เลย การทำ CI/CD ก็ทำได้สะดวกมากเพราะมีวิธีที่รองรับหลากหลายรูปแบบ
รวมไปถึงยังมี Runtime ที่เตรียมมาให้พร้อมใช้งานทั้งใน Windows/Linux ในหลายภาษา เช่น Python, Node.js, PHP, ASP.Net/ASP.Net Core, Java เราแค่นำ Code หรือ Container ในภาษาเหล่านี้มาติดตั้งที่ App Service ก็พร้อมทำงานเลยครับ
และยังสามารถรัน Container โดยเป็นการนำ Docker Image มาทำงานอยู่บน App Service ครับ ถ้าเราเลือก App Service Plan Windows จะเป็นการทำงานบน Windows Container น่ะครับ ส่วนถ้าเลือกเป็น App Service Plan Linux จะเป็นการทำงานบน Linux Container
Scale Up and Scale Out
- Scale Up จะเป็นการจัดการกับทรัพยากรบน คอมพิวเตอร์เพียง 1 เครื่อง เพื่อทำให้มีประสิทธิภาพในการประมวลผลที่มากขึ้น ใช้สำหรับการรองรับการทำงานที่มีผู้ใช้มากขึ้นนะครับ เช่น การเพิ่มขนาดของ CPU, RAM
- Scale Out จะเป็นการนำคอมพิวเตอร์หลายๆเครื่องที่มี Runtime เหมือนกันมาช่วยกันประมวลให้รองรับการทำงานที่มากกว่าแบบ Scale Up ที่จะติดข้อจำกัดของเพิ่มทรัพยากรในคอมพิวเตอร์แค่ 1 เครื่องครับ
ข้อพึงระวังคือ Scale Out เหมาะสำหรับ Web Application แบบ Stateless ที่ไม่มี State ผูกอยู่กับเครื่องใดเครื่องนึงเท่านั้นนะครับ เพื่อให้ระบบทำงานได้อย่างถูกต้องเมื่อมีหลายๆ Instances จริงๆมีทางแก้คือใช้ Sticky Session แต่ก็จะทำให้มีปัญหาอื่นๆตามมาอีกครับ แนะนำให้ทำ Web เป็น Stateless เลยจะดีที่สุดครับผม
Auto Scale Out
คือการที่เราสร้างเงื่อนไขในการ Scale Out แบบอัฒโนมัติครับ ตัวอย่างเช่น
- เพิ่ม Instance (Scale Out) เมื่อค่าเฉลี่ยการทำงานของ CPU มีค่ามากกว่า 80% เป็นระยะเวลา 10 นาที
- ลด Instance (Scale In) เมื่อค่าเฉลี่ยการทำงานของ CPU มีค่าน้อยกว่า 50% เป็นระยะเวลา 10 นาที
Monitoring Tools
ตัวอย่างการใช้งาน Application Insight ซึ่งเป็นเหมือนคู่หูกับ Azure App Service เลยครับ ถ้าเราพัฒนาระบบด้วย .NET ผมขอแสดงความยินดีด้วยครับ คุณไม่ต้องแก้ไข Code เพิ่มเติมก็สามารถใช้งาน Application Insight ได้ด้วยการปรับแต่ง Config ใน Azure App Service เพียงนิดเดียวเท่านั้นครับ
ข้อดีของการที่เราเห็นภาพรวมของระบบก็ทำให้เราทราบได้ว่าระบบเรามีคนใช้เยอะประมาณเท่าไหร่ เผื่อต้อง Scale เพิ่มไหม, ระบบมี Failed ตรงไหนให้ต้องแก้ไขบ้าง, ระบบใช้งาน Backing Services อื่นๆที่ไหนบ้าง และใช้ถี่เท่าไหร่ (Application Map)
ตัวอย่างระบบในปัจจุบัน
แท่มแท้มมม และนี้คือตัวอย่างของระบบในปัจจุบันของผมนะครับ โดยมีบริการที่ใช้เพิ่มขึ้นมาคือ
Azure Redis Cache
: ใช้เก็บ Cache ในระบบAzure Service Bus
: ใช้ส่ง Message Queue เพื่อ Async CommunicationAzure Function
: ใช้เป็น Background Worker Process ต่างๆ
DevOps
- DevOps = Development + Operations
- เราทำ DevOps เพื่อตอบสนองต่อความต้องการของลูกค้าที่ทำให้เราต้องมีการเปลี่ยนแปลงและปรับปรุงระบบครับ
- ยิ่งส่งมอบงานถึงมือลูกค้าได้ไว ใช้งานได้จริง ยิ่งได้รับ Feedback จากลูกค้าในการพัฒนาให้ระบบดียิ่งขึ้นเรื่อยๆครับผม
TT Software DevOps
นี้คือภาพของกระบวนการ DevOps ที่บริษัทผมใช้อยู่ตอนนี้ครับผม โดยนอกจากที่เราจะนำ Source Code ไปติดตั้งบน Server แล้ว เรายังสามารถสร้าง Servers .ใหม่ขึ้นมาในแต่ละครั้งที่มีการสร้าง Pull Request ด้วยครับผม
ตรงส่วนนี้ต้องขอบคุณทีมงานและ Tools GitHub Action + Terraform ที่ช่วยให้เราออกแบบ GitOps ได้ครับซึ่งเป็นแนวคิดหลักในการเก็บ Infrastructure as Code (IaC) อันได้แก่ Infrastructure, Environment, Automation process ที่จำเป็นต่อการสร้างระบบไว้ใน Git Repository เลย
ตัวอย่างผลลัพธ์เมื่อสร้าง Pull Request ครับผม จะเห็นว่า GitHub Action สร้าง Server กันรัวๆๆๆๆ แถมยิง Notify ไปหา Dev ด้วยถ้างานเสร็จแล้ว
ตัวอย่าง Servers ที่ถูกสร้างขึ้นมาใหม่ๆสำหรับ Developer 1 คน ต่อ 1 Pull Request ครับ สร้างด้วยมือนี้บอกเลยว่า ตายแน่นวลลลล
สรา้งเสร็จได้ Dynamic URL ไว้ส่งต่อให้ทีม Test ลุยได้เลย แถม Code ไม่ปนเปื้อนของคนอื่นมาด้วยครับ Clean สุดยอดดดด
Modern Workstation
4 Tools ที่ช่วยให้ชีวิตการเป็น Software Developer บน Windows ดี้ดีครับ
Windows Terminal
: แล้วชีวิตการใช้ Command Line จะเปลี่ยนไปWindows Subsystem for Linux (WSL 2
): ใช้งาน Linux บน WindowsVS Code Remote Extension
: เปิด VS Code: ส่วนเสริมที่ช่วยให้การใช้งาน Linux CLI บน VS Code สะดวกขึ้นDocker Desktop
: ช่วยให้เราจัดการ รัน Docker บน WSL2 ได้อย่างสะดวกรวดเร็ว
สนใจติดตั้งและทดลองทำตามได้จากบทความนี้นะครับ
ขออนุญาติแถม Source Code ใน Lab นะครับเป็นแนวทางการพัฒนา Clean Architecture ด้วย .NET 6 เพื่อให้เราออกแบบระบบได้ยืดหยุ่น ดูแลรักษาง่ายครับ