สรุปเนื้อหาจากงาน Thailand Developer Day

สถานที่: Microsoft Thailand Office

Ponggun
T. T. Software Solution
10 min readMar 6, 2023

--

เย้ ขอเอารูปตัวเองขึ้นหน่อยค้าบนานๆที เหะๆ

สวัสดีผู้อ่านทุกท่านนะครับ เมื่อวันเสาร์ที่ 25 ก.พ. 66 ผมและทีมงานมีโอกาสได้ไปร่วมงาน Thailand Developer Day ที่ Microsoft Thailand Office ครับผม

โดย Thailand Developer Day เป็นงานประชุมที่รวบรวมบรรดานักพัฒนา ผู้ประกอบการหน้าใหม่ และนักศึกษา มาร่วมแบ่งปันประสบการณ์ สัมผัสการเรียนรู้จากนักพัฒนาด้วยกัน ซึ่งจัดขึ้นเป็นประจำทุกไตรมาสในปีนี้ โดย Microsoft, GitHub, Communities และ Partners ต่าง ๆครับผม

ฮั่นแหน่ 1 ใน Partners ก็คือบริษัท T.T. Software Solution นั้นเองครับ เย้

เนื่องจากผมไปร่วมงานทั้งในฐานะ Speaker และผู้เข้าร่วมงานด้วยครับ เลยแอบจดเนื้อหามาฝากผู้อ่านในบทความนี้ครับผม

แอบสปอยเนื้อหาที่น่าจะทดลองเรียนและลงมือทำตามครับ

ลอง Github Copilot ใน VS Code และ VS Studio

ลอง Getting Started Azure OpenAl Service for Developer

ลอง Azure OpenAI Workshop

ลอง Azure Static Webapp

มิติใหม่แห่งการอ่านเรียนรู้

เริ่มต้นการเดินทาง

เนื่องจากทีมงานส่วนใหญ่อยู่ขอนแก่น เราจึงตัดสินใจเดินทางด้วยรถไฟจาก ขอนแก่น คืนวันศุกร์ ออกเดินทาง 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

เครื่องมือเพียบเลยครับ ทั้งใช้พัฒนา App เล็กๆจนขึ้ระบบใหญ่ๆบน Cloud เบย

OpenAI x Microsoft

ด้วยความร่วมมือของ OpenAI + Microsoft ทำให้เกิด Generative AI Model เจ๋งๆขึ้นมา 3 ตัวที่ช่วยให้การทำงานสะดวกขึ้นมากๆครับผม

  1. GPT-3 หรือก็คือเบื้องหลังการทำงานของ ChatGPT ที่กำลังโด่งดังอยู่ตอนนี้ครับ
  2. Codex ใช้ในที่เกี่ยวกับการสร้าง Code ในภาษาโปรแกรมต่างๆ
  3. DALL.E ใช้ในการสร้างภาพสวยๆ

Generative AI คือ AI ที่มีความสามารถในการสร้างสรรผลงานออกมาได้จาก Input ที่ได้รับครับ

ตัวอย่าง GitHub Copilot —ที่ใช้ Model Codex
ตัวอย่างการนำ Model DALL.E ไปใช้ในการรังสรรภาพสวยๆตามจินตนาการครับ

Microsoft ยังได้พัฒนา Applied AI Service ที่เอา AI Model มาปรับแต่งให้ใช้งานง่ายขึ้น เหมาะในการนำไปประยุกต์ใช้กับงานได้หลากหลายครับ

มาเป็น Universe เบยยยยย

ตัวอย่างนึงที่ผมชอบมากคือการที่เราสามารถใช้ Feature Text-To-Speech เพื่อทำให้ Video ของเรามีเสียงบรรยายประกอบได้โดยที่ไม่ต้องจ้างคนพากย์เสียงเลยครับ รองรับภาษาไทยด้วยเด้อๆๆๆ

Azure Cognitive Services — Text to speech

ตัวอย่าง Azure OpenAI ที่เราระบุความต้องการ (prompt) เพื่อให้ AI ช่วยสรุปข้อมูลออกมา

ตัวอย่างการนำ Azure OpenAI ไปใช้ใน Code Python ครับ

ลองวน Loop 10 ครั้ง ได้ผลลัพธ์ที่แตกต่างกัน เพิ่มโอกาสในการเลือก Output ให้กับเราครับ

เจอบทความแนะนำเพิ่มเติมครับ

Enterprise Architecture for OpenAI

Enterprise ต้องระวังเรื่อง Security นะ ทีม Dev กับ Security ควรออกแบบเพื่อใช้งาน OpenAI ร่วมกัน เช่นการออกแบบการใช้ Network ภายในองค์กรให้ปลอดภัย

แนวทางการใช้งาน OpenAI อย่างปลอดภัยในองค์กรระดับ Enterprise ครับ

Modern Software Development

เราต้องพยายาม Modernize ระบบเพื่อให้รองรับความต้องการใหม่ๆและสามารถเชื่อมต่อกับระบบใหม่ๆเพื่อสร้างนวัตกรรมได้รวดเร็วขึ้นนะครับ

Cloud Native เป็นอีก 1 แนวในการพัฒนาระบบที่ได้รับความนิยมในปัจจุบันมากครับเพราะช่วยให้รองรับจำนวนผู้ใช้งานได้หลากหลาย ต่อเติมได้สะดวก แต่ก็มาพร้อมกับความซับซ้อนของระบบที่เพิ่มมากขึ้น

มาลองดูนิยามจาก Microsoft กัน

learn.microsoft.com/cloud-native/definition

เทคโนโลยี 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 ในงานครับ

ตัวอย่าง 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 ครับ เราระบุรายละเอียดที่ต้องการ แล้วจะได้ภาพออกมาให้ครับ เทพมาก

ภาพตัวอย่างที่ได้จากการระบุว่าเป็น .NET Developer ทั้งหญิงและชาย

Open AI x Microsoft

ช่วยให้นักพัฒนามีบริการใช้งาน AI ได้สะดวกมากขึ้น มั่นใจเรื่องของความปลอดภัยและการจัดเก็บข้อมูลให้เราเมื่อต้องใช้งานในระดับ Enterprise Grade

มีพูดถึง Generative AI Models ทั้งสามที่อธิบายไปในหัวข้อก่อนหน้านี้แล้วด้วยครับ

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 ก็ได้นะ ทำงานส่วนง่ายๆเร็วกว่า
ขั้นตอนการเลือก Deployment Model แบบไวๆครับ
  • เสร็จแล้วไปต่อที่ Playground
  • ใช้เพื่อทดลอง Model ก่อนว่าทำงานได้ตามที่เราต้องการไหมนะครับ โดยเราลองพิมพ์คำว่า Hello เสร็จแล้ว AI Gen ที่เหลือมาให้ ให้เรากด Undo เพื่อสมมติว่าเราไม่ได้ต้องการผลลัพธ์ที่ออกมานะ แล้ว AI จะสร้างข้อความใหม่ให้เราไปเรื่อนๆจนกว่าจะพอใจ และจดจำผลลัพธ์ให้เรา ทำให้เมื่อเรานำไปใช้งานจริง ก็จะคาดหวังว่า AI จะสร้างข้อความตอบลูกค้าของเราตามที่เราคาดหวังครับ
  • ทดลอง Prompt จากตัวอย่างที่ Microsoft เตรียมไว้ เพื่อช่วยคุยกับเขา ครับ โดยทำการ Classify Text
  • เราจะพบว่ามีตัวอย่างข้อความขึ้นมาให้ทดลองดูผล แต่ด้วยความเมพ เราเลยลองใช้เป็นภาษาไทยดู ได้ผลลัพธ์ว่า บทความที่เราเขียนน่าจะเกี่ยวกับการเมือง โครตเจ๋งงงงงง ช่วยสรุปสบายเลย เพื่อไปเอาระบบจัดเก็บหมวดหมู่บทความอัฒโนมัติ

ความดีงามในการต่อยอดคือ สามารถเชื่อมต่อด้วย Python Lib หรือ RESTful API ก็ได้ครับ สบายเลย

ทดลองเอาบทความการเมืองไปรันใน Python ซะหน่อย อู้วว ได้หมวด Politics สมใจครับ

ข้อคิดที่ได้

  • Prompt Engineer กลายเป็นเครื่องมือนึงของ Dev แน่นอน
  • คนใช้ AI เป็นจะแย่งงานคนที่ไม่ใช้ AI

AI for Developers: ChatGPT & GitHub Copilot

มนุษย์พยายาที่จะพัฒนาภาษาและเครื่องมือให้มันดีขึ้นเรื่อยๆอยู่ตลอดครับ ซึ่งอนาคตของ Developer ตอนนี้คือคือ GitHub Copilot และ ChatGPT ด้วยเหตุผลที่ว่า

เราสามารถลดขั้นตอนการทำงานเดิมๆ ด้วยระบบอัฒโนมัติจาก Generative AI

Features ที่น่าสนใจใน GitHub Copilot

  1. พิมพ์รายละเอียดของ Code ที่ต้องการทั้ง Thai/English เสร็จแล้ว Copilot จะแปลงเป็น Code ให้อย่างสวยงามตามท้องเรื่อง
Typescript
Go

2. สร้าง Dictionaries ให้อย่างรวดเร็ว

3. สร้าง Validation Rule สะดวกเวอร์ๆ

GitHub Copilot Lab

อีก 1 ตัวช่วยที่เพิ่มความสามารถเจ๋งๆของ GitHub Copilot ให้เราต้องอ้าปากค้างครับ เช่น

  1. แปลง 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 ลองช่วยหาคำตอบเทียบกับที่ผมคิดหน่อยซึ่งผลลัพธ์ที่ได้ออกมาก็คล้ายๆกันเลยครับ เย้

Legacy System ในหัวของผมนี้คล้ายๆกับสายไฟพันกันรุงรังในประเทศสมมติแห่งนึงครับ : )

มีภาพนึงที่ชอบมากๆแต่ไม่ทราบว่าต้นทางจริงๆมาจากไหน ต้องขอโทษที่ไม่ได้ใส่ Credit ด้วยนะครับ

โดยเป็นภาพที่ทั้งองค์กรภยายามช่วยกันกำราบมังกรยักษ์ (Legacy Software) ให้อยู่ในสถานะที่ควบคุม ดูแลต่อได้ครับ สังเกตุว่า PM นอนเกลื่อนระนาวเลย น่าเอ็นดูมากๆครับ ฮาาาาา

Legacy Software ช่างร้ายกาจ

ชีวิตก่อนรู้จัก 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

ภาพเปรียบเทียบความรับผิดชอบใน Cloud Service Model แต่ละประเภทและแสดง Data Center ที่มีอยู่ทั่วโลก

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

https://learn.microsoft.com/en-us/dotnet/architecture/modernize-with-azure-containers/

ในขั้นตอนแรกผมใช้เทคนิค 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 Database
  • Azure 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 ครับ เลยขอเก็บไว้เขียนในบทความในอนาคตแทนนะครับ

learn.microsoft.com//modernize-with-azure-containers

วิธีการเลือก Computation บน Azure

learn.microsoft.com/compute-decision-tree

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 เลยจะดีที่สุดครับผม

ตัวอย่าง Scaling Out บน Azure App Service

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 Communication
  • Azure Function: ใช้เป็น Background Worker Process ต่างๆ
อันนี้เป็นภาพตัวอย่างที่ Microsoft แนะนำในการออกแบบระบบที่ High Availability นะครับ ใครสนใจศึกษาได้ที่ learn.microsoft.com/app-service-web-app/multi-region

DevOps

  • DevOps = Development + Operations
  • เราทำ DevOps เพื่อตอบสนองต่อความต้องการของลูกค้าที่ทำให้เราต้องมีการเปลี่ยนแปลงและปรับปรุงระบบครับ
  • ยิ่งส่งมอบงานถึงมือลูกค้าได้ไว ใช้งานได้จริง ยิ่งได้รับ Feedback จากลูกค้าในการพัฒนาให้ระบบดียิ่งขึ้นเรื่อยๆครับผม
เป้าหมายของการส่งมอบคือการได้รับ 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 บน Windows
  • VS Code Remote Extension: เปิด VS Code: ส่วนเสริมที่ช่วยให้การใช้งาน Linux CLI บน VS Code สะดวกขึ้น
  • Docker Desktop: ช่วยให้เราจัดการ รัน Docker บน WSL2 ได้อย่างสะดวกรวดเร็ว

สนใจติดตั้งและทดลองทำตามได้จากบทความนี้นะครับ

ขออนุญาติแถม Source Code ใน Lab นะครับเป็นแนวทางการพัฒนา Clean Architecture ด้วย .NET 6 เพื่อให้เราออกแบบระบบได้ยืดหยุ่น ดูแลรักษาง่ายครับ

สุดท้ายขอฝากรูปทีมงานบริษัท T.T. Software Solution และพี่ๆน้องๆใน Community ด้วยนะครับ

--

--

Ponggun
T. T. Software Solution

Development Manager, Web Developer with ASP.Net, ASP.net Core, Azure and Microsoft Technologies