ถึงแม้ว่า ภาษา Go นั้นจะเป็นภาษา Programming ที่เพิ่งมาใหม่ได้ไม่นาน (เมื่อเทียบกับภาษาอื่นๆ อย่าง Java หรือ C++ ที่มีประวัติมายาวนานกว่า) แต่ว่ามีบริษัทต่างๆ จำนวนมากที่ใช้งานภาษา Go ในการสร้าง Software ต่างๆ บน Production จริง โดยเฉพาะกับงานที่ต้องมีประสิทธิภาพการทำงานและการประมวลผลที่สูง
.
และวันนี้ทาง Skooldio จะมาแนะนำให้รู้จักกับการใช้งานภาษา Go ในการสร้าง Software ของบริษัท Tech ระดับโลกชื่อดัง ที่ไม่น่ามีใครที่ไม่รู้จักในยุคนี้ ถ้าพร้อมแล้วเราไปดูกันเลย!
.
1. Google
https://en.wikipedia.org/wiki/Google_logo#/media/File:Google_2015_logo.svg
แน่นอนว่าที่บริษัท Google นั้นต้องมีการใช้ภาษา Go อย่างแน่นอน เพราะเป็นบริษัทที่ให้กำเนิดภาษานี้ขึ้นมา (และสำหรับผู้ที่สนใจว่าทำไม Google ถึงสร้างภาษา Go ขึ้นมา สามารถอ่านได้ที่นี่ https://to.skooldio.com/go-google-content)
.
ซึ่งการใช้งานภาษา Go ที่ Google นั้นมีความหลากหลายมาก และถูกใช้งานในรูปแบบที่แตกต่างกันมากมาย ซึ่งมีตัวอย่างโปรเจกต์ที่เด่นๆ มาดังนี้
.
1. Google Search Engine
ถ้าพูดถึง Google แน่นอนว่าทุกคนก็จะนึกถึงหน้าเว็บ Search สำหรับค้นหาของ Google เป็นอันดับแรกๆ อย่างแน่นอน ซึ่ง Google เองนั้น ก็ใช้ภาษา Go ในการทำ Page Indexing เพื่อเพิ่มประสิทธิภาพในการค้นหา Keyword ต่างๆ ในการค้นหาสิ่งที่เราต้องการหากันใน Google ทุกวันนี้
.
2. Youtube
อีกหนึ่ง Product ที่ดังไม่แพ้กัน เมื่อพูดถึงบริษัท Google นั้นก็คือแพลตฟอร์มวีดีโอที่ชื่อ Youtube นั่นเอง ซึ่งทีม Youtube นั้น พบเจอปัญหาในเรื่องของการ Scaling ฐานข้อมูล MySQL เพื่อรองรับ Load Traffic จำนวนมหาศาลของแพลตฟอร์ม Youtube ซึ่งทีม Youtube จึงสร้าง Open Source Solution ขึ้นมาที่ชื่อว่า Vitess โดยเลือกใช้ภาษา Go ในการพัฒนาเช่นเดียวกัน
.
3. Firebase
สำหรับชาว Developer โดยเฉพาะสาย Web Development นั้น คงไม่มีใครที่จะไม่รู้จัก Cloud Service ชื่อดังอย่าง Firebase ที่เป็นหนึ่งตัวเลือกที่ Web Developer หลายคนชื่นชอบ ซึ่งแต่ก่อนนั้นระบบ Backend ของ Firebase นั้นถูกพัฒนาด้วย Node.js เป็นหลัก แต่ว่าในภายหลัง Firebase ได้ทำการเปลี่ยน Codebase หลังบ้านเป็นภาษา Go แทนทั้งหมด 100% เนื่องจากความง่ายในการจัดการเรื่อง Concurrency และความเรียบง่ายที่ช่วยเพิ่ม Productivity ให้กับนักพัฒนาที่ใช้ภาษา Go
.
4. Kubernetes
หนึ่งใน Technology ที่ทรงอิทธิพลที่สุดอันหนึ่งในการจัดการ Software ในปัจจุบัน สำหรับชาว DevOps หรือ Software Engineer ที่ต้องทำงานสร้างระบบใน Scale ใหญ่นั้น แทบจะเรียกได้ว่าไม่มีใครไม่รู้จักกับ Kubernetes อย่างแน่นอน Kubernetes เป็นเทคโนโลยีที่เข้ามาจัดการเรื่องของ Docker Container ให้สามารถทำงานประสานกันได้อย่างมีประสิทธิภาพ ซึ่งทั้งเทคโนโลยี Kubernetes และ Docker นั้น ทั้งคู่ก็ถูกพัฒนาด้วยภาษา Go เป็นหลักด้วยเช่นกัน
.
ซึ่งการใช้งานภาษา Go ที่ Google นั้นมีความหลากหลายมาก และถูกใช้งานในรูปแบบที่แตกต่างกันมากมาย ซึ่งมีตัวอย่างโปรเจกต์ที่เด่นๆ มาดังนี้
.
1. Google Search Engine
ถ้าพูดถึง Google แน่นอนว่าทุกคนก็จะนึกถึงหน้าเว็บ Search สำหรับค้นหาของ Google เป็นอันดับแรกๆ อย่างแน่นอน ซึ่ง Google เองนั้น ก็ใช้ภาษา Go ในการทำ Page Indexing เพื่อเพิ่มประสิทธิภาพในการค้นหา Keyword ต่างๆ ในการค้นหาสิ่งที่เราต้องการหากันใน Google ทุกวันนี้
.
2. Youtube
อีกหนึ่ง Product ที่ดังไม่แพ้กัน เมื่อพูดถึงบริษัท Google นั้นก็คือแพลตฟอร์มวีดีโอที่ชื่อ Youtube นั่นเอง ซึ่งทีม Youtube นั้น พบเจอปัญหาในเรื่องของการ Scaling ฐานข้อมูล MySQL เพื่อรองรับ Load Traffic จำนวนมหาศาลของแพลตฟอร์ม Youtube ซึ่งทีม Youtube จึงสร้าง Open Source Solution ขึ้นมาที่ชื่อว่า Vitess โดยเลือกใช้ภาษา Go ในการพัฒนาเช่นเดียวกัน
.
3. Firebase
สำหรับชาว Developer โดยเฉพาะสาย Web Development นั้น คงไม่มีใครที่จะไม่รู้จัก Cloud Service ชื่อดังอย่าง Firebase ที่เป็นหนึ่งตัวเลือกที่ Web Developer หลายคนชื่นชอบ ซึ่งแต่ก่อนนั้นระบบ Backend ของ Firebase นั้นถูกพัฒนาด้วย Node.js เป็นหลัก แต่ว่าในภายหลัง Firebase ได้ทำการเปลี่ยน Codebase หลังบ้านเป็นภาษา Go แทนทั้งหมด 100% เนื่องจากความง่ายในการจัดการเรื่อง Concurrency และความเรียบง่ายที่ช่วยเพิ่ม Productivity ให้กับนักพัฒนาที่ใช้ภาษา Go
.
4. Kubernetes
หนึ่งใน Technology ที่ทรงอิทธิพลที่สุดอันหนึ่งในการจัดการ Software ในปัจจุบัน สำหรับชาว DevOps หรือ Software Engineer ที่ต้องทำงานสร้างระบบใน Scale ใหญ่นั้น แทบจะเรียกได้ว่าไม่มีใครไม่รู้จักกับ Kubernetes อย่างแน่นอน Kubernetes เป็นเทคโนโลยีที่เข้ามาจัดการเรื่องของ Docker Container ให้สามารถทำงานประสานกันได้อย่างมีประสิทธิภาพ ซึ่งทั้งเทคโนโลยี Kubernetes และ Docker นั้น ทั้งคู่ก็ถูกพัฒนาด้วยภาษา Go เป็นหลักด้วยเช่นกัน
2. Netflix
https://commons.wikimedia.org/wiki/File:Netflix_2015_logo.svg
อีกหนึ่งบริษัท Tech ยักษ์ใหญ่ ที่เอ่ยชื่อมา แทบไม่มีใครไม่รู้จัก นั่นก็คือบริษัท Netflix ที่ให้บริการ Video Streaming ให้เราทุกคนได้รับความบันเทิงกับคอนเทนต์ต่างๆ มากมายทั้งในรูปแบบที่เป็นหนัง ซีรีส์ และในรูปแบบอื่นๆ ให้เราได้ชมอย่างจุใจ
.
หนึ่งในจุดแข็งของ Netflix นั้นก็คือการทำระบบ Personalization ในการแนะนำคอนเทนต์ไม่ว่าจะเป็นหนังหรือซีรีส์ใหม่ๆ ให้กับเราอยู่อย่างต่อเนื่อง จนในบางครั้งเราอาจรู้สึกว่า Netflix รู้ดีกว่าตัวเราเองด้วยซ้ำว่าเราชอบหนังหรือซีรีส์แบบไหน
.
ซึ่งระดับ Scale ของระบบ Personalization ที่ Netflix นั้น ไม่ธรรมดาแน่นอน เพราะต้องรองรับผู้ใช้งานมากกว่า 200 ล้านคนทั่วโลก ดังนั้นระบบในการทำ Caching ที่เป็นเทคนิคในการเอาข้อมูลมาเก็บไว้ ให้สามารถเข้าถึงข้อมูลเหล่านั้นได้อย่างรวดเร็ว จึงเป็นสิ่งที่สำคัญมาก ซึ่ง Netflix ก็ได้ทำการสร้างระบบที่ชื่อว่า EVCache ขึ้นมาเพื่อทำการ Replicate ตัว Personalized Data ของผู้ใช้งานแต่ละคนในระบบของ Netflix
.
สำหรับระบบ EVCache นั้น จำเป็นต้องพึ่งพา Proxy Server ตัวหนึ่งที่ชื่อว่า Rend ที่พัฒนาด้วยภาษา Go ซึ่งสาเหตุที่ใช้ภาษา Go นั้นก็เพราะต้องการ Latency ที่ต่ำ แต่ก็อยากที่จะมี Productivity ในการพัฒนาที่สูงกว่าภาษา C ทั้งยังสามารถเชื่อมต่อ Client Connection จำนวนมากและจัดการ Concurrency ได้อย่างดี จึงไม่แปลกใจว่าทำไม Go ถึงเป็นภาษาที่ตอบโจทย์สำหรับ Service ตัวนี้
.
หนึ่งในจุดแข็งของ Netflix นั้นก็คือการทำระบบ Personalization ในการแนะนำคอนเทนต์ไม่ว่าจะเป็นหนังหรือซีรีส์ใหม่ๆ ให้กับเราอยู่อย่างต่อเนื่อง จนในบางครั้งเราอาจรู้สึกว่า Netflix รู้ดีกว่าตัวเราเองด้วยซ้ำว่าเราชอบหนังหรือซีรีส์แบบไหน
.
ซึ่งระดับ Scale ของระบบ Personalization ที่ Netflix นั้น ไม่ธรรมดาแน่นอน เพราะต้องรองรับผู้ใช้งานมากกว่า 200 ล้านคนทั่วโลก ดังนั้นระบบในการทำ Caching ที่เป็นเทคนิคในการเอาข้อมูลมาเก็บไว้ ให้สามารถเข้าถึงข้อมูลเหล่านั้นได้อย่างรวดเร็ว จึงเป็นสิ่งที่สำคัญมาก ซึ่ง Netflix ก็ได้ทำการสร้างระบบที่ชื่อว่า EVCache ขึ้นมาเพื่อทำการ Replicate ตัว Personalized Data ของผู้ใช้งานแต่ละคนในระบบของ Netflix
.
สำหรับระบบ EVCache นั้น จำเป็นต้องพึ่งพา Proxy Server ตัวหนึ่งที่ชื่อว่า Rend ที่พัฒนาด้วยภาษา Go ซึ่งสาเหตุที่ใช้ภาษา Go นั้นก็เพราะต้องการ Latency ที่ต่ำ แต่ก็อยากที่จะมี Productivity ในการพัฒนาที่สูงกว่าภาษา C ทั้งยังสามารถเชื่อมต่อ Client Connection จำนวนมากและจัดการ Concurrency ได้อย่างดี จึงไม่แปลกใจว่าทำไม Go ถึงเป็นภาษาที่ตอบโจทย์สำหรับ Service ตัวนี้
3. Twitter
https://sco.wikipedia.org/wiki/File:Twitter_bird_logo_2012.svg
หนึ่งใน Social Media ระดับโลก ที่เป็นแหล่งร่วมข่าวสำคัญ และเป็นที่สำหรับติดตามประเด็นสุดฮอตต่างๆ ในยุคนี้ นั่นก็คือบริษัท Twitter นั่นเอง
.
แต่ว่า Twitter เองนั้น ไม่ได้มีแค่เรื่องของด้าน Social Media เพียงอย่างเดียว เพราะ Twitter เองก็ได้มีการทำ Software Service ต่างๆ ให้สำหรับชาวสาย Tech ได้มาใช้งานกัน ซึ่งหนึ่งในนั้นก็คือ Analytics Service ที่ชื่อว่า Answers.io ซึ่งเป็น Engine อยู่เบื้องหลังของ Fabric.io ที่เป็น Platform ที่ช่วยชาว Developer ในการสร้าง Mobile Application (ปัจจุบันทั้ง Answers.io และ Fabric.io ถูก Acquire โดย Google รวมเข้ากับ Firebase Service)
.
ซึ่งตัว Answers.io นั้นต้องรองรับ Sessions จำนวนมหาศาลถึง 5,000 ล้าน Sessions ต่อวัน และต้องทำการประมวลผลมากกว่า 1 ล้าน Analytics Events ต่อวินาที แบบ Real-time ซึ่งในระบบที่เป็น Endpoint ในการรองรับ Request จาก Device ต่างๆ ทั่วโลกนั้น ก็ถูกพัฒนาขึ้นด้วยภาษา Go ด้วยเหตุผลที่ว่า ต้องการให้ตัว Service นั้นมีความ Simple นั่นเอง
.
แต่ว่า Twitter เองนั้น ไม่ได้มีแค่เรื่องของด้าน Social Media เพียงอย่างเดียว เพราะ Twitter เองก็ได้มีการทำ Software Service ต่างๆ ให้สำหรับชาวสาย Tech ได้มาใช้งานกัน ซึ่งหนึ่งในนั้นก็คือ Analytics Service ที่ชื่อว่า Answers.io ซึ่งเป็น Engine อยู่เบื้องหลังของ Fabric.io ที่เป็น Platform ที่ช่วยชาว Developer ในการสร้าง Mobile Application (ปัจจุบันทั้ง Answers.io และ Fabric.io ถูก Acquire โดย Google รวมเข้ากับ Firebase Service)
.
ซึ่งตัว Answers.io นั้นต้องรองรับ Sessions จำนวนมหาศาลถึง 5,000 ล้าน Sessions ต่อวัน และต้องทำการประมวลผลมากกว่า 1 ล้าน Analytics Events ต่อวินาที แบบ Real-time ซึ่งในระบบที่เป็น Endpoint ในการรองรับ Request จาก Device ต่างๆ ทั่วโลกนั้น ก็ถูกพัฒนาขึ้นด้วยภาษา Go ด้วยเหตุผลที่ว่า ต้องการให้ตัว Service นั้นมีความ Simple นั่นเอง
4. Twitch
https://commons.wikimedia.org/wiki/File:Twitch_logo.svg
สำหรับผู้ที่ชื่นชอบการเล่นเกม ดูคอนเทนต์เกี่ยวกับเกม หรือเป็นสาย Gaming ก็คงไม่มีใครที่ไม่รู้จักกับ แพลตฟอร์มที่ชื่อ Twitch แพลตฟอร์ม LIVE Streaming ชื่อดังที่มีผู้ใช้งานกว่า 140 ล้านคนทั่วโลก
.
ซึ่งที่ Twitch เองก็มีการใช้งานภาษา Go ในหลากหลายระบบ โดยเฉพาะระบบที่จำต้องเป็นรองรับ Load การทำงานที่เยอะๆ เช่นในระบบ Chat หรือช่องแชทใน Twitch ที่ต้องรองรับการประมวลผล Text Message แบบ Real-time โดยทีม Twitch เองก็ได้พึ่งพาความสามารถของ Feature จุดขายของภาษา Go อย่าง Goroutine ในการที่ต้องจัดการกับ Concurrent Users จำนวนมากในเวลาเดียวกัน (ซึ่งเปลี่ยนจากแต่ก่อนที่ใช้ภาษา Python มาเป็นภาษา Go แทน)
.
อีกหนึ่งการใช้งาน Go ที่ Twitch นั่นก็คือการใช้ Go พัฒนา Backend Microservices ต่างๆ และเมื่อเราพูดถึงเรื่องของการทำ Microservices แล้ว ก็คงจะไม่พูดถึงเรื่องการ Communicate ระหว่าง Services ต่างๆ ไปไม่ได้
.
โดยปกติแล้ว สำหรับการทำ Communication ระหว่าง Microservices นั้นมีหลากหลายวิธีและเครื่องมือ เช่นการใช้ REST API หรือการใช้ gRPC (Remote Procedure Call ของ Google)
.
แต่ว่าที่ Twitch นั้น มีความแตกต่าง เพราะ Twitch เองนั้นอยากใช้งาน RPC หรือ Remote Procedure Call ที่มีความเรียบง่าย เพื่อทำให้การพัฒนา Microservices นั้นสามารถทำได้ง่ายและมีความ Productive ทีม Twitch จึงตัดสินใจสร้าง RPC Framework ของตัวเองขึ้นมาด้วยภาษา Go ที่ชื่อว่า Twirp ซึ่งจะเน้นในเรื่องของความ Simple มากกว่าการที่มี Feature จำนวนมาก
.
เรียกได้ว่าที่ Twitch นั้นนอกจากจะเป็นผู้ใช้งานภาษา Go เพียงอย่างเดียวแล้ว Twitch ก็ยังสร้าง RPC Framework ของตัวเองด้วยภาษา Go ให้คนอื่นมาใช้งานได้อีกด้วย
.
ซึ่งที่ Twitch เองก็มีการใช้งานภาษา Go ในหลากหลายระบบ โดยเฉพาะระบบที่จำต้องเป็นรองรับ Load การทำงานที่เยอะๆ เช่นในระบบ Chat หรือช่องแชทใน Twitch ที่ต้องรองรับการประมวลผล Text Message แบบ Real-time โดยทีม Twitch เองก็ได้พึ่งพาความสามารถของ Feature จุดขายของภาษา Go อย่าง Goroutine ในการที่ต้องจัดการกับ Concurrent Users จำนวนมากในเวลาเดียวกัน (ซึ่งเปลี่ยนจากแต่ก่อนที่ใช้ภาษา Python มาเป็นภาษา Go แทน)
.
อีกหนึ่งการใช้งาน Go ที่ Twitch นั่นก็คือการใช้ Go พัฒนา Backend Microservices ต่างๆ และเมื่อเราพูดถึงเรื่องของการทำ Microservices แล้ว ก็คงจะไม่พูดถึงเรื่องการ Communicate ระหว่าง Services ต่างๆ ไปไม่ได้
.
โดยปกติแล้ว สำหรับการทำ Communication ระหว่าง Microservices นั้นมีหลากหลายวิธีและเครื่องมือ เช่นการใช้ REST API หรือการใช้ gRPC (Remote Procedure Call ของ Google)
.
แต่ว่าที่ Twitch นั้น มีความแตกต่าง เพราะ Twitch เองนั้นอยากใช้งาน RPC หรือ Remote Procedure Call ที่มีความเรียบง่าย เพื่อทำให้การพัฒนา Microservices นั้นสามารถทำได้ง่ายและมีความ Productive ทีม Twitch จึงตัดสินใจสร้าง RPC Framework ของตัวเองขึ้นมาด้วยภาษา Go ที่ชื่อว่า Twirp ซึ่งจะเน้นในเรื่องของความ Simple มากกว่าการที่มี Feature จำนวนมาก
.
เรียกได้ว่าที่ Twitch นั้นนอกจากจะเป็นผู้ใช้งานภาษา Go เพียงอย่างเดียวแล้ว Twitch ก็ยังสร้าง RPC Framework ของตัวเองด้วยภาษา Go ให้คนอื่นมาใช้งานได้อีกด้วย
เรียนรู้เกี่ยวกับภาษา Go เพิ่มเติม
สำหรับผู้ที่อยากฝึกเขียน Go หรืออยากเป็น Go Developer มืออาชีพ ตอนนี้ทาง Skooldio ได้มีคอร์สซีรีส์ Golang Course Series ที่จะสอนตั้งแต่เริ่มต้นการใช้ภาษา Go ไปจนถึงระดับ Advanced และสามารถสร้าง Project จริงของตัวเองออกมาได้ด้วยภาษา Go สมัครเรียนในราคาพิเศษ ได้ที่นี่