D-Class: Unboxing Site Reliability Engineer
สวัสดีครับ เมื่อไม่นานมานี้ผมได้มีโอกาสรู้จักกับตำแหน่ง Site Reliability Engineer อาชีพสุดฮอตในสายงาน IT เนื่องจากได้มีโอกาศเข้าคลาส D-Class: Unboxing Site Reliability Engineer ที่บรรยายโดย พี่วิท SRE แห่ง WEDO นั่นเอง หลายคนคงสงสัยว่า ‘SRE’ คืออะไรและมีหน้าที่สำคัญอย่างไรในองค์กร วันนี้ผมจะพาเพื่อน ๆ พี่ ๆ มาหาคำตอบให้กับทุกข้อสงสัย ถ้าพร้อมแล้วตามมาอ่านกันเลย
ความหมายและหน้าที่ของ Site Reliability Engineer (SRE) คืออะไร
ก่อนอื่นเลยขออธิบายความหมายของ SRE ที่ค่อนข้างตรงตัวกันก่อนซึ่งก็คือ การสร้างความหน้าเชื่อถือให้กับระบบเพื่อให้สามารถใช้งานได้ตลอดเวลา นอกจากนั้นยังรวมไปถึงเรื่องของ Availability, Maintainability และ Safety อีกด้วย ดังนั้นหน้าที่หลักของ SRE ก็คือการอยู่ตรงกลางระหว่าง Software Engineer กับ IT Operation ให้สามารถทำงานได้ราบรื่นมากยิ่งขึ้น นอกจากนั้นแล้วเมื่อเกิด issue หรือ incident ภายในระบบ SRE จะต้องรีบเข้ามาช่วยลงมือแก้ไขอย่างรวดเร็ว เรียกได้ว่าเป็นหน้าที่ที่พร้อมจะเผชิญหน้าทุกอุปสรรคนั่นเองครับ
ด้านล่างนี้เป็นตัวอย่างของขอบเขตที่ SRE ต้องสนใจเป็นพิเศษ เพื่อจะสามารถทำงานและแก้ไขปัญหาได้อย่างรวดเร็ว
- Automation
- Monitoring and Logging
- Scalability
- Operation
- Environment
- Infrastructure
ถ้าพูดในเชิงเทคนิคของ SRE อาจจะเห็นภาพได้ยาก จึงขอยกตัวอย่างในชีวิตประจำวันอย่าง ‘การขับรถ’ ซึึ่งประกอบด้วย คน รถ เส้นทาง สภาพแวดล้อม และกฏจราจร การที่จะทำให้การขับรถของเรา reliability มากที่สุด สามารถแบ่งได้ 2 ส่วน ดังนี้
- ส่วน operator มีการ monitoring เพื่อให้เห็นการทำงานของรถ มีการศึกษาเส้นทางไว้ล่วงหน้า
- ส่วนของ system มี alert เพื่อแจ้งเตือนอันตรายต่าง ๆ มีการใช้แผนที่เพื่อเพิ่ม visibility และมี automation เพื่อให้สามารถขับรถได้สะดวก
กระบวนการทั้งหมดนี้ก็เพื่อให้เราสามารถขับรถได้อย่างมีประสิทธิภาพและปลอดภัยที่สุด ซึ่งเปรียบเหมือนกับหน้าที่หลักของ SRE นั่นเอง
ปัญหาที่เกิดขึ้นในการพัฒนาซอฟต์แวร์และ SRE จะสามารถเข้ามาแก้ไขปัญหาที่เกิดขึ้นได้อย่างไร
ปัญหาในการพัฒนาซอฟต์แวรคงหนีไม่พ้นการทำ manual เมื่อเราเจอปัญหาทุกวัน ก็ต้องรับมือและแก้ไขปัญหานั้นอยู่ทุกวัน นอกจากนั้นยังมีโอกาสที่จะสามารถเกิดข้อผิดพลาดขึ้นได้อีก จะดีกว่าไหมถ้าเราลดเวลาที่ใช้แก้ไขปัญหาและโอกาสที่จะเกิดข้อผิดพลาดที่ต้องเจอด้วยการทำ Automation โดยใช้ SRE มาช่วยเราแก้ไขปัญหา ยกตัวอย่างเช่น การทำ Infrastructure as a code การทำ Pipeline การ Deployment การทำ CI/CD นอกจากนั้นก็ยังมี Operation as a code แล้วถ้าถามว่าทำไมเราต้องทำ Automation ด้วย คำตอบก็คือเพื่อลดปัญหาที่กล่าวมาข้างต้นนั่นเอง เพราะเมื่อเรามีการแก้ไข พัฒนา หรือ อัปเดตในแต่ละครั้ง การทำ Automation ก็สามารถช่วยให้แก้ไขได้เหมือนกันทุกครั้ง
ทักษะที่สำคัญสำหรับ SRE
ดูเหมือนว่า SRE จะต้องรู้รอบด้าน เยอะแยะมากมาย ซึ่งพี่วิทได้มีการสรุปทักษะที่สำคัญสำหรับ SRE ไว้ดังนี้
- Coding Proficiency — เพื่อทราบกระบวนการทำงานของ software และสิ่งที่ Developer กำลังลงมือทำอยู่
- Love of Change — เนื่องจาก software มีการพัฒนาอยู่ทุกวันดังนั้นจึงต้องมีการนำโปรแกรมต่าง ๆ เข้ามาใช้งานอยู่ตลอด
- Detective Skill — อันนี้ค่อนข้างสำคัญเลยสำหรับ SRE คือการเป็นนักสืบเพื่อที่จะดูว่าปัญหานั้นเกิดจากอะไร และควรแก้ตรงไหน
- Automation Mastery — พยายามเปลี่ยน mindset ให้เป็น Automation มากขึ้นเพื่อที่จะได้ทำงานอย่างราบรื่น
- Analytical Mindset — มีการรวมข้อมูลในการพัฒนา Software ทุกอย่างมา เพื่อที่จะแก้ไขปัญหาที่อาจเกิดขึ้นได้ในอนาคต
- Comprehensive Tech Skill — ควรมีความรู้ที่ครอบคลุมในด้าน technology เพื่อที่จะได้เข้าไปช่วยทีมต่าง ๆ ในการแก้ปัญหา
ซึ่งจริง ๆ แล้วการใช้ SRE ไม่คาดหวังว่าจะทำให้ระบบของเรามีความ Reliability ถึง 100% แต่จะจำกัดข้อผิดพลาดโดยการวางแผนว่าจะเกิดข้อผิดพลาดประมาณไหนและควรมีการแกไขอย่างไรมากกว่า
องค์กรที่มี SRE กับไม่มี SRE ต่างกันอย่างไร
การทำงานในองค์กรเราจะสังเกต SRE เมื่อมีซอฟต์แวร์หรือโปรแกรมที่พัฒนาเกิดปัญหาขึ้น ปัญหานั้นอาจถูกส่งไม้ต่อไปเรื่อย ๆ เช่น ทีม Developer เจอปัญหา อาจส่งต่อให้ทีม Infra จากนั้นก็ส่งต่อให้ทีม Security อีกไปเรื่อย ๆ จนกระทั้ง ถึงระดับ CEO หรือลูกค้า ที่จะต้องลงมาแก้ไขปัญหานั้นเอง ซึ่งมันจะไม่ค่อยดีสักเท่าไหร่และใช้เวลานาน การเข้ามาของ SRE จึงแก้ไขในจุดนี้ และช่วยให้สามารถแก้ไขปัญหาได้อย่างรวดเร็ว
ขอยกตัวอย่างอีกซักตัวอย่างนึงการเข้ามาของ SRE นอกจากจะเข้ามาทำ automation และ investigate ปัญหาแล้ว ยังมีเรื่องของการ Optimized Cost ในส่วนของ Infrastructure ค่าใช้จ่ายที่อาจจะเกิดขึ้นในส่วนนี้ก็สามารถลดลงได้อีกด้วย
แล้ว SRE จะเข้ามาอยู่ในทีมอย่างไร
ทีม SRE จะทำหน้าที่ตั้งแต่การรวบรวม request ต่าง ๆ ในกรณีที่ต้องการพนักงานลาออกไปก็ไม่ต้องไปตามหาอะไรยุ่งยาก สามารถขอที่ทีม SRE ได้เลย นอกจากนั้นยังมีการเข้ามาช่วยสร้างมาตรฐานร่วมกับทีม Solution Architect จนกลายมาเป็น SRE Platform ที่จะสามารถช่วยทีมต่าง ๆ โดยการนำ Best-Practice ที่คิดขึ้นเข้ามาใช้ในองค์กร
โดย WEDO มี SRE Platform ที่เป็นการทำ centralize ใน service ต่าง ๆ เพื่อให้มีการจัดการ service ได้ง่ายขี้น เช่น การขอใช้งานบริการด้านต่าง ๆ ไม่ว่าจะเป็นด้าน infrastructure ด้าน security หรือ issues ต่าง ๆ ก็สามารถขอความช่วยเหลือได้จาก SRE Platform ได้เลย ซึ่ง SRE Platform มีให้บริการ ดังนี้
- Service Management — ดูแลในส่วนของการทำ Service Request, Change Request, Incident Request
- Financial Management — ทำให้เห็น cost ที่ใช้ไปแล้ว และส่วนของการทำ cost optimization
- Automation — นอกจากจะทำตั้งแต่ Cloud Infrastructure as Code ตามที่กล่าวไปข้างต้น ทาง SRE ยังทำ On-click Deploy เพื่อลดระยะเวลาในการ deploy อีกด้วย
- Security — ทำการสแกน code และ environment และทำ Automation เพื่อช่วยเหลือทีม security
- Governance — มีการทำ monitoring และเก็บ logging ต่าง ๆ
สำหรับ SRE จะเข้ามามีส่วนร่วมในการพัฒนา software ตั้งแต่ขั้นตอนการ
- Ideate — ดูปัญหาตั้งแต่เริ่มต้น
- Plan — ช่วยวางแผนและทำ Architecture Review
- Design — ช่วยในการ logging monitoring และช่วย scan ระบบ
- Build — นำ DevOps เข้ามาช่วยโดยการทำ Automation Build และ Automation Deploy ผ่านการ validate code
- Test — ช่วยให้ Dev กับ QA ทำงานร่วมกันได้ดีขึ้น
- Release — ทำ Automated Change และ Automated Deploy ให้ reliable และ stable
- Maintain — ทำ Automated Alert และ Service Restore
สุดท้ายนี้ สิ่งที่พี่วิท ฝากไว้เลยคือ SRE สามารถทำได้ทุกอย่างก็จริงแต่ไม่สามารถจบงานได้ด้วยตัวคนเดียว ดังนั้นสิ่งทีเราควรมีคือ Reliability Mindset ทำการออกแบบระบบให้มีความยั่งยืนตั้งแต่เริ่มต้น ให้เวลากับการวางแผนมากขึ้น แล้วจะสบายกับการทำงานในระยะยาว ทั้งนี้ก็ขึ้นอยู่กับโปรเจกต์ที่เราเจอด้วย
บทความโดย กาโต้ Solution Architect Trainee, YTP2021, WEDO