ผมทำงานที่ Ascend มา 5 เดือนละ วันนี้เลยอยากมาเล่าให้ฟังว่า ตลอดเวลา 5 เดือนที่ทำงานที่นี่เป็นไงบ้าง ได้อะไรบ้าง

ผมเข้ามาทำงานในตำแหน่ง Senior Software Engineer ในสังกัด BU ชื่อว่า Ascend Travel ครับ โดยบริษัทเราเป็นแพลตฟอร์มเกี่ยวกับ Travel Agency เน้น B2B เป็นหลัก ลองไปดูเว็บกันได้ๆ => Ascend Travel - ระบบการจองที่พักสำหรับองค์กร

Tech Stack ที่เราใช้

Angular

ในส่วนของ Frontend เราใช้ Angular ในการพัฒนาระบบเป็นหลัก แน่นอนว่าเราใช้ Typescript, RxJS แบบจริงจังมาก มาที่นี่คุณจะได้ประสบการณ์การใช้ RxJS แบบเต็มๆจริงๆ

Spring Boot

ในส่วนของ Backend เราใช้ Java SpringBoot ในการพัฒนาระบบเป็นหลักครับ โดยออกแบบโดยใช้สถาปัตยกรรม Microservice ครับ โดย deploy อยู่บน Amazon ECS

Apache Kafka

เนื่องจากเราใช้สถาปัตยกรรม Microservice เป็นหลัก การรับส่งข้อมูลระหว่าง Service บางส่วนนั้นเป็นแบบ Asynchronous โดยต้องส่งข้อมูลไปประมวลผลแต่ละ Service เพื่อให้ได้ผลลัพธ์บางอย่าง โดยเราใช้ Apache Kafka เป็น message broker ในการส่ง Message ไปในแต่ละ Service

MS-SQL (RDS)

ในส่วนของ Database เราใช้ MSSQL เป็นฐานข้อมูลหลักในการเก็บข้อมูลของแต่ละ Service โดยเราใช้ Managed Database Service ของ AWS ชื่อ RDS

Elasticsearch

เนื่องจากระบบของเราในหน้าแรกเน้นการค้นหาข้อมูลของโรงแรม โดยอาศัยการค้นหาแบบ Full Text-Search แบบหลายๆ Field พร้อมๆกัน และข้อมูลโรงแรมของเราค่อนข้างเยอะมากหลาย gigabyte ทำให้เราต้องค้นหาข้อมูลจำนวนมาก และต้องใช้เวลาในการค้นหาที่รวดเร็ว โดยเราเลือกใช้ Elasticsearch ในการจัดการในส่วนของการค้นหานี้

Redis

ในส่วนของการจัดการระบบ merchant ที่ใช้ในการ cache ข้อมูลการจองของระบบ เราเลือกใช้ in-memory database ที่ชื่อ redis เป็นหลักในการจัดการครับ

AWS S3

ส่วนการเก็บข้อมูลประเภท static ต่างๆ เราเลือกใช้ Service ของ AWS ชื่อ S3 เป็นตัวจัดเก็บข้อมูลต่างๆ รวมถึง maven repository ภายในที่เราใช้งานอยู่

AWS API Gateway

เพื่อให้ Frontend และ Partner ของเราสามารถเข้าถึง Microservice ของเราได้ เราใช้บริการของ AWS ชื่อ AWS API Gateway ในการจัดการ traffic ต่างๆที่เข้ามายัง Service ของเรา

Jenkins

เราเลือกใช้ Jenkins เป็นเครื่องมือ CI หลักของเรา โดยเรา Implement Jenkins Library เป็นของตัวเอง เพื่อให้ง่ายต่อการจัดการส่วนของ CI/CD ต่างๆครับ

Terraform

แน่นอนว่าระบบทั้งหมดทำงานอยู่บน Cloud provider ของ AWS ครับ โดย Infrastructure ทั้งหมดของเรา ทำเป็น Infrastructure as a code โดยเราใช้ Tools ที่ชื่อว่า Terraform ในการจัดการ

Keycloak

นอกจากเราจะมีส่วนของ B2B แล้ว เราก็มีช่วงที่เปิดให้บริการในแบบ B2C ผ่านโครงการเราเที่ยวด้วยกันและการจองโรงแรมแบบ ASQ/ALQ ด้วย โดยเราใช้ Keycloak ในการจัดการในส่วนของ Authentication และ Social Login ต่างๆ ของ Site B2C


เราทำงานกันยังไง

ใน Ascend Travel เราแบ่งทีม Tech ที่ดูแลระบบออกทั้งหมด 3 ทีม โดยแต่ละทีมหลักๆ จะมี Lead Engineer 1 คน, Engineer 4 คน, QA 2 คน โดยเราทำงานในรูปแบบ Agile ครับ โดยแบ่งงานออกเป็น Sprint โดยกำหนดระยะเวลา Sprint ละ 2 อาทิตย์ครับ

โดยวันก่อนจะเริ่ม Sprint เราก็จะมาทำ Feature Grooming กัน เพื่อดูว่ามีงานอะไรที่เราต้องทำใน Sprint นี้บ้าง Plan คร่าวๆว่าเราจะทำไปในทางไหนและทำการ Estimate เวลาในการทำแต่ละ Task กัน

โดยหลังจากที่คนในทีมทำ Task แต่ละอันเสร็จ ก็จะมีการส่ง Pull Request เพื่อให้คนในทีมทำการ Review Code ที่จะขึ้นไปก่อน ว่ามีส่วนไหนสามารถปรับปรุงหรือทำให้ดีกว่านี้ได้หรือไม่

ที่นี่เราจริงจังมากกับการเขียน Test ครับ ในส่วนของ Engineer เราจะได้เขียน Unit Test ทุกส่วน ทั้งส่วน Domain ที่เป็น Business Logic ทำงานถูกหรือไม่และส่วนที่เป็น Rest Controller ว่าส่งค่าออกไปให้  Frontend ถูกหรือไม่ ถ้า Payload ที่รับเข้ามาไม่ถูกต้อง ต้อง Return แบบใดบ้าง

โดยพอใกล้วัน deploy เราก็จะมี Demo day เพื่อ Demo สิ่งที่เราทำไปใน Sprint ให้ลูกค้าดู ว่าเราได้ทำอะไรไปบ้าง และใช้งานยังไง

หลังจากจบ Sprint เราก็จะมาทำ Retrospective กัน เพื่อ feedback ทีมกัน ว่าเราผ่านอะไรมาบ้าง มีอะไรที่เราทำได้ดี มีอะไรที่เราต้องปรับปรุง แล้วจะปรับปรุงยังไงให้ดีขึ้นใน Sprint หน้า


ปกติแล้ว Engineer ที่นี่ทำงานกันแบบ Full-stack ครับ โดยสามารถทำได้ทั้ง frontend และ backend ครับ โดยการเป็น Engineer ที่นี่ เราจะได้สัมผัสทุกส่วนของ project ครับ ตั้งแต่การเขียน code ทั้ง frontend/backend การเขียน terraform เพื่อสร้างของบน AWS การ config pipeline บน Jenkins และอีกมากมายที่เราจะได้เรียนรู้

ส่วน QA Engineer ที่นี่ต้องบอกเลยว่า ใครบอกเป็น QA แล้วไม่ต้องเขียน Code นี่คิดผิดเลยนะ QA ที่นี่จะเป็น QA ที่ทำพวก Automation ทั้งหมดครับ โดยทำตั้งแต่เขียน Testcase, เขียน SQL Script, Run terraform และอีกมากมายครับ


Tools ที่เรากำลังมีแผนจะเริ่มใช้ในอนาคต

Sentry

เราเริ่มเอา Sentry เข้ามาใช้ในการ Tracking error ในส่วนของ Frontend เป็นหลัก เพราะบางครั้งหน้า Frontend ชอบพังไปแบบดื้อๆ พอจะ Simulate สิ่งที่เกิดขึ้นก็ไม่เกิด Case นี้อีกแล้ว เราเลยวางแผนจะเอา Sentry เข้ามาช่วย Tracking error ต่างๆได้ดีและละเอียดขึ้น

Jaeger

การทำ Microservice การ Tracing ถือเป็นหัวใจสำคัญมากๆครับ เพราะหากเกิดปัญหาขึ้น จะทำให้เราเห็นภาพการคุยกันระหว่าง Service ไม่ว่าจะเป็น Response time, Response Result แต่ละ hope ที่เกิดขึ้น เราจึงหยิบเอา Jaeger เข้ามาช่วยแก้ปัญหานี้


ต้องบอกว่าการทำงานที่นี่ค่อนข้างได้สัมผัสครบครับ ทั้ง Backend,Frontend และ Infra ทำให้คนที่เข้ามาทำงานที่นี่จะได้ประสบการณ์ค่อนข้างครบนะ หากใครมีไอเดียอะไรใหม่ๆ ที่เข้ามาช่วยแก้ปัญหาได้ ก็สามารถเสนอความเห็นกันได้เลยครับ