เจาะลึกการทำงาน @Blendata EP.1 – EP นี้ จะพาทุกคนไปทำความรู้จักกับทีม Product หรือทีม Developer ของ Blendata พร้อมเปิดเทคโนโลยีเบื้องหลังการพัฒนา Big Data Platform ที่ทำให้ Developer ได้พัฒนาสกิลแบบจัดเต็ม เทคโนโลยีที่ Blendata ใช้พัฒนา Product จะมีความน่าสนใจแค่ไหน ไปลุยกันเลย!

What are we doing here?

       Blendata เริ่มจากความเชื่อ 2 ข้อ

  1. เราเชื่อว่า Big data & Analytics จะกลายเป็น The next foundation ที่สำคัญขององค์กรทุกที่ เราเชื่อว่าทุกๆ แห่งจะนำข้อมูลขนาดใหญ่จากภายในและภายนอกองค์กรเข้ามาร่วมวิเคราะห์และใช้งานเป็นมาตรฐานในการตัดสินใจและขับเคลื่อนภาคธุรกิจ
  2. เราเชื่อว่า Big data technologies ที่เป็นแกนหลักของทุกองค์กรนั้นสามารถสร้างขึ้นจากฝีมือของผู้พัฒนาไทย ซึ่งเป็นสัญชาติของผู้ร่วมก่อตั้งเบลนเดต้าได้ เราเชื่อว่าหากผู้ให้บริการเทคโนโลยี (โดยเฉพาะในไทย) ยังคงหยิบยืม ซื้อซอฟต์แวร์สำเร็จรูป หรือเป็นเพียงผู้ใช้งาน ไม่ใช่ผู้สร้าง เราจะไม่สามารถก้าวผ่านข้อจำกัดของการเป็นประเทศที่เป็นผู้ตาม ในยามที่ประเทศนั้นแข่งขันกันด้วยธุรกิจและเทคโนโลยีได้

       นั่นเป็นเหตุผลสองข้อโดยคร่าว ที่เป็นจุดเริ่มต้นของบริษัทแห่งนี้ ซึ่งสิ่งที่เราทำนั้น เราทำให้องค์กรขนาดใหญ่ในไทยไม่ว่าจะเป็นกลุ่มธนาคาร กลุ่มโทรคมนาคม หรืออุตสาหกรรมอื่น ๆ ก็ตาม สามารถใช้เทคโนโลยีของเราเพื่อประยุกต์ใช้ข้อมูลขนาดใหญ่ในองค์กรได้อย่างมีประสิทธิภาพ และประสบความสำเร็จในการนำข้อมูลมาขับเคลื่อนองค์กร (Data-driven) ตลอด 7 ปีที่ผ่านมา นับตั้งแต่อยู่ภายใต้บริษัทจีเอเบิลในฐานะทีมหนึ่ง จนกลายเป็น Tech spin-off company ในช่วงปี 2021


เทคโนโลยีที่ทำให้ Big data เป็นเรื่องง่ายสำหรับทุกองค์กร

       การประมวลผลข้อมูลขนาดใหญ่หรือ Big data นั้น แน่นอนว่ามีหลากหลายทางในปัจจุบันให้เลือกใช้งาน ตั้งแต่ Open-source ที่สามารถนำมาใช้งานได้ฟรี หรือซอฟต์แวร์ทางการค้าสำเร็จรูปจากหลากหลายผู้ให้บริการ เทคโนโลยีฐานที่สำคัญของโปรดักส์เหล่านี้มักประกอบไปด้วยชุดของเทคโนโลยีในหลาย ๆ ด้าน เพื่อทำให้เราสามารถจัดเก็บและประมวลผลข้อมูลขนาดใหญ่ได้มีประสิทธิภาพ อาทิเช่นเทคโนโลยีการจัดเก็บข้อมูลแบบกระจาย (Distribute file system), การประมวลผลแบบคู่ขนาด (Parallel computing) หรือวิธีการ Optimize การ Query ข้อมูลขนาดใหญ่ (Query optimizer) เป็นต้น

       ปัญหาสำคัญของการนำเทคโนโลยีหรือซอฟต์แวร์เหล่านี้มาใช้ คือความยากในการประยุกต์ใช้งาน องค์กรจำเป็นต้องมีผู้เชี่ยวชาญจำนวนมากที่ต้องคอยติดตั้ง พัฒนา และดูแลรักษาระบบเหล่านี้ เริ่มตั้งแต่ Data platform engineer ที่จะต้องเชี่ยวชาญชุดเทคโนโลยีต่าง ๆ อาทิเช่น Hive, HDFS สำหรับ Hadoop ecosystem หนึ่งใน Open-source ด้าน Big data ที่ได้รับความนิยมในช่วงปี 201x ที่ผ่านมา หรือ Cloud-native data stack ของ Public cloud หลาย ๆ เจ้า ที่หลากหลายองค์กรเริ่มประยุกต์ใช้ในช่วงหลังมานี้ ที่ก็อาจใช้ชุดเทคโนโลยีเดียวกัน หรือแตกต่างกัน ทำให้ต้องมีผู้เชี่ยวชาญอีกชุดนึงมา ยังไม่นับรวมผู้เชี่ยวชาญด้านการจัดการข้อมูลอย่าง Data engineer ที่คอยสร้าง Pipeline ให้ข้อมูลพร้อมใช้ หรือ Data team อื่น ๆ อีกหลายตำแหน่ง โดยหากองค์กรไม่มีผู้เชี่ยวชาญเหล่านี้ ก็จำเป็นที่จะต้องจ้างผู้ให้บริการ หรืออาจไม่สามารถนำ Big data analytics มาใช้ในทุกการประยุกต์ใช้ข้อมูลในองค์กร ซึ่งส่งผลให้องค์กรหลาย ๆ แห่ง ไม่สามารถประสบความสำเร็จในการใช้งานข้อมูลขนาดใหญ่ได้

       ด้วยเหตุนี้ เบลนเดต้าจึงได้สร้าง Software Blendata Enterprise แพลตฟอร์มซอฟต์แวร์ที่ทำให้ทุกองค์กรสามารถเข้าถึง วิเคราะห์ บริหารจัดการและใช้งานข้อมูลขนาดใหญ่เหล่านี้ได้อย่างรวดเร็ว โดยไม่ต้องเขียนโค้ด ไม่จำเป็นต้องมีผู้เชี่ยวชาญจำนวนมากเพื่อใช้ Big data analytics solution เป็นแพลตฟอร์มที่เข้ามาอยู่ระหว่างข้อมูล และผู้ใช้งานในองค์กรได้อย่างมีประสิทธิภาพ ซึ่งภายใต้หน้าจอ No/Low-code ของแพลตฟอร์มนี้ก็คือชุดของเทคโนโลยีที่หลากหลาย ตั้งแต่ Data integration, Data management, Data processing & Analytics, และ Data utilization & application ที่ผนวกเข้ามาในที่เดียว


เทคโนโลยีที่สร้างขึ้นมาเพื่อประมวลผลข้อมูลมหาศาล

       Engine เบื้องหลังตัวหลักของ Blendata Enterprise คือเทคโนโลยีที่ได้รับความนิยมในปัจจุบันอย่าง Apache Spark ซึ่งเป็นชุด Open source library สำหรับการประมวลผลข้อมูลขนาดใหญ่ หากแต่ไม่ได้เพียงนำมาใช้งาน แต่เราได้ Fork ออกมาเป็นเวอร์ชันของเราเอง โดยได้เพิ่มฟีเจอร์ ฟังก์ชัน รวมถึงประสิทธิภาพที่มากขึ้นอย่างมาก ซึ่งเราได้นำ Apache Spark ที่เป็นเพียง Library นั้น ทำให้กลายเป็น Interactive server ที่คอยรับคำสั่งการเล่นกับข้อมูลขนาดใหญ่ของ Users ที่ใช้งานระบบผ่านหน้าจอแอพพลิเคชัน ซึ่งถึงเป็นการแก้ปัญหาทีมงาน Data ที่เมื่อก่อนนั้นหากต้องการใช้ Spark จะต้องเขียนโค้ดเสมอ (Python, Scala, R) ทำให้การเล่นข้อมูลขนาดใหญ่ด้วย Spark อาจไม่สะดวกนักนั่นเอง

       ส่วนเครื่องมือบนแพลตฟอร์มที่อยู่บน Engine Spark ตั้งแต่ Integration, Automation & Scheduling, Data & Notebook management, Visualization & Dashboard หรือฟีเจอร์อื่น ๆ นั้น ล้วนแต่เป็นสิ่งที่ทางเบลนเดต้าเป็นผู้พัฒนา จากประสบการณ์การให้บริการโซลูชันด้าน Big data & Analytics แก่องค์กรขนาดใหญ่มาอย่างยาวนาน จึงทำให้เราสามารถมอบประสบการณ์ (User experience) ให้แก่ทีมผู้ใช้งานได้อย่างแม่นยำ


ชุดเทคโนโลยี (Technology stack) ที่ประกอบมาเป็นแพลตฟอร์ม Enterprise

       เนื่องด้วยเป็นซอฟต์แวร์ที่จะต้องพบกับ Workloads ของการประมวลผลข้อมูลขนาดใหญ่, การบริหารจัดการงาน (Jobs) ที่มีตั้งค่าเอาไว้, การใช้งานและเล่นกับข้อมูลในรูปแบบที่แตกต่างกันตั้งแต่ No-code ไปจนถึง Coding จนไปถึงการบริหารจัดการ Tools ของตนเอง (Management) เราจึงวางสถาปัตยกรรมและเทคโนโลยี stack ดังต่อไปนี้


Architecture: Microservices แบบ Hybrid

  • ยุคปัจจุบันเราอาจได้ยินสถาปัตยกรรมแบบ Microservices อยู่บ่อยครั้ง บางแห่งอาจบอกจนถึงว่าหากที่ไหนยังคงใช้สถาปัตยกรรมแบบ Monolith อยู่ = เป็นซอฟต์แวร์ที่ล้าหลัง เป็นต้น จากประสบการณ์การสร้าง Enterprise software มายาวนาน ทำให้เราเชื่อในการเลือกเทคนิค รูปแบบ หรือสถาปัตยกรรม ที่ไม่ใช่การเลือกเพราะเป็นเทรนด์ แต่เป็นการเลือกเพราะรูปแบบการใช้งานที่เหมาะสม 
  • ข้อดีของ Microservice คือความยืดหยุ่นและรวดเร็วในการพัฒนา บริหารจัดการ แก้ไข ทำให้เราสามารถเพิ่มหรือลดฟีเจอร์ฟังก์ชันได้อย่างอิสระ แต่ก็แลกกับ Overhead ในการคุยกันระหว่าง Services รวมไปถึง Reliabilty ของข้อมูลที่จะต้องมี Methods ในการตรวจสอบความถูกต้องอยู่เสมอ
  • ในมุมกลับกัน ข้อดีของ Monolith ก็คือความเชื่อถือของข้อมูลและการจัดการที่อยู่ภายในตนเอง ทำให้โอกาสที่ข้อมูลอาจจะสูญหายหรือไม่ถูกต้องมีลดน้อยลง ซึ่งนั่นก็แลกมากับความยืดหยุ่นที่อาจจะแก้ไขฟีเจอร์หรือฟังก์ชันไม่ได้ง่ายนัก
  • สิ่งที่เราเลือกทำ คือการใช้ดีไซน์ของสถาปัตยกรรมแบบ Microservice เป็นหลัก เพื่อให้ง่ายและยืดหยุ่นต่อการเปลี่ยนแปลง หรือปรับเพิ่มฟีเจอร์ รวมถึงทำให้สามารถเลือกเทคโนโลยีที่เหมาะสมต่อการทำงานในแต่ละส่วนได้ด้วย หากแต่เราไม่ได้แบ่ง Service ออกมาเป็นหน่วยย่อยจนถึงระดับฟีเจอร์ แต่แบ่งตามหน้าที่การทำงานหลักของโมดูลนั้น ๆ แทน ซึ่งทำให้เรายังคงสามารถปรับเปลี่ยนฟีเจอร์ได้ยืดหยุ่นเพียงพอ โดยยังไม่เสียความสามารถ (รวมถึงเสียเวลา)​ ในการบริหารจัดการและตรวจสอบความถูกต้องของการทำงานและข้อมูลมากนัก และยังเป็นสิ่งที่เหมาะสมมากกว่าสำหรับการจัดการกับข้อมูลขนาดใหญ่


Technology stack: Back-end modules

  • เทคโนโลยีแต่ละชนิดย่อมมีจุดประสงค์ รวมถึงข้อดีที่แตกต่างกัน เราเลือกใช้ภาษา Scala รวมถึง Framework อย่าง Akka ในโมดูลที่มีการแตะข้อมูลขนาดใหญ่โดยตรง การเลือกใช้ภาษาอย่าง Scala นั้นมีข้อดีคือเป็น Functional programming language ที่ทำให้ Footprint และ Cost การเล่นกับข้อมูลลดลง และประมวลผลได้ไวขึ้น โดยยังสามารถหา Programmer มาพัฒนาและดูแลต่อได้ง่ายกว่าภาษาใหม่ ๆ ที่มีประสิทธิภาพสูงอย่าง Go, Rust หรือภาษาความเร็วสูงอื่น ๆ ส่วน Akka เป็น Parallel & Distribute programming framework บนพื้นฐานของ Actor model ที่ทำให้การประมวลผลข้อมูลและการกระจายตัวกันทำงานทำได้มีประสิทธิภาพและบริหารจัดการได้ง่ายกว่าเดิม
  • ในอีกมุมหนึ่ง เราเลือกใช้ Java และ Spring framework กับโมดูลด้าน Application, Services รวมถึงโมดูลอื่น ๆ ที่ไม่ได้เล่นกับข้อมูลขนาดใหญ่โดยตรง จุดประสงค์เพื่อให้สามารถหา Programmer ที่คุ้นเคยกับ Enterprise software มาพัฒนาต่อได้ง่าย รวมถึงยังได้ข้อดีของความแข็งแรงเชิงโครงสร้างของ Java ที่ทำให้สามารถควบคุมการพัฒนาของทีมงานได้อย่างเป็นระเบียบ รวมถึง Re-use ส่วนต่าง ๆ ได้โดยง่าย
  • สำหรับฐานข้อมูล (เพื่อใช้ในการจัดเก็บข้อมูลอื่นๆที่ไม่ใช่ข้อมูลขนาดใหญ่ อาทิเช่น Metadata, Configuration, State) เราเลือกใช้ RDBMS อย่าง MySQL และ Postgres (สำหรับโปรดักส์เวอร์ชันหลัง ๆ ของเบลนเดต้า) เพื่อเก็บข้อมูลจำพวกนี้ ด้วยข้อดีที่สามารถควบคุม Transaction และความถูกต้องได้ครบถ้วน และการจัดเก็บข้อมูลที่เหมาะกับฐานข้อมูลแบบ Relation สำหรับการเก็บข้อมูลที่ไม่ได้ใช้ความสัมพันธ์ อาทิเช่น State ของระบบเพื่อรองรับการทำ High availability เราเลือกใช้ In-memory KV store อย่าง Redis ที่มีประสิทธิภาพสูง และใช้ทรัพยากรต่ำ


Technology stack: Front-end modules

  • สำหรับ Front end framework นั้นเราเลือกใช้ Angular ด้วยเหตุผลที่ต้องการให้โปรดักส์มีแพทเทิร์นการพัฒนาที่ค่อนข้างแข็งแรง ไม่เปลี่ยนไปตามผู้พัฒนาโดยง่าย แต่ยังคงสามารถเลือกใช้คอมโพเน้นท์หรือไลบราลีที่หลากหลาย ตามที่มีอยู่ในท้องตลาดปัจจุบัน


Environment ที่ใช้ในการพัฒนา และการ deployment

  • ด้วยระบบที่ต้องการ Performance ค่อนข้างสูง รวมถึง Library หลายตัวที่เราเลือกใช้ (อย่าง Apache Spark ที่เป็น Engine หลัก) พื้นฐานในการ Deploy จะอยู่บน Environment ที่เป็น Linux-based ซึ่งเราเลือกใช้ค่าย CentOS (หรือ RHEL สำหรับ Production) เป็นหลัก
  • เราเลือกใช้ Gitlab ในลักษณะ Self-hosted ซึ่งเป็นที่เก็บ Source code และ Version control เรายังเลือกใช้ (ลุง) Jenkins สำหรับ CI/CD ใน Development environment ของเราเอง ซึ่งทั้งหมดตั้งอยู่ใน Cloud หลากหลายผู้ให้บริการ ทั้ง Public และ Local cloud

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

       
        ที่ Blendata นี้ ยังมีอีกหลายทีม หลายสิ่งที่ยังไม่ได้มาเขียนเล่าสู่กันฟัง ในโอกาสหน้า Blendata จะมาเล่าเพิ่มเติมถึงทีม Data ซึ่งเป็นอีกหนึ่งทีมที่สร้างโครงสร้างพื้นฐานของข้อมูล และนำข้อมูลของลูกค้ามาเปลี่ยนเป็นมูลค่าผ่านเครื่องมือและเทคโนโลยีที่หลากหลาย รอติดตามกันได้เลยครับ!

Share