![](http://www.somkiat.cc/wp-content/uploads/2020/11/image-4-1024x587.png)
จากบทความเรื่อง Delivering social change with Elixir at Change.org นั้น
อธิบายการย้ายระบบ messaging จากใช้ software อื่น ๆ
เปลี่ยนมาเป็นระบบที่พัฒนาด้วยตนเอง โดยใช้ภาษา Elixir
มีเป้าหมายเพื่อลดค่าใช้จ่ายและความยืดหยุ่น
เพื่อรองรับความต้องการของระบบที่หลายหลายมากขึ้น
โดยในบทความจะอธิบายถึงปัญหาที่พบเจอ
เหตุผลว่าทำไมถึงเลือก Elixir ?
วิธีรองรับ email มากกว่า 1,000 ล้าน email ต่อเดือนกันอย่างไร ?
จาก requirement และการทำงานของระบบ Change นั้น
จะได้รับ event ต่าง ๆ จากการใช้งานในระบบมากมาย เช่น
- Event ของ campain ต่าง ๆ
- Event ของการร้องเรียน ต่าง ๆ
- มีการส่ง email ไปยังส่วนต่าง ๆ ที่เกี่ยวข้องหรือสนใจ
ทีมพัฒนามองหาระบบที่สนับสนุนพวก Event-driven มาจัดการ
ต้องรองรับการใช้งานพร้อม ๆ กันจำนวนมาก
รวมทั้งเรื่องของ fault-tollerance อีกด้วย
ก่อนที่จะเลือกก็ต้องทำ PoC (Proof of Concept) ก่อน
โดยมี 4 ตัวเลือกที่นำมาทดลอง ประกอบไปด้วย
- JRuby
- Akka Stream
- Node.js
- Elixir
เป้าหมายของการทดลองเพื่อ
ดูเรื่องของ performance ของการทำงาน ว่าไหวไหม
ประสบการณ์ในการพัฒนา ว่าเป็นอย่างไร
ดูเรื่องของ community ว่า
สามารถสนับสนุนหรือตอบโจทย์ใน use case ต่าง ๆ ที่เจอหรือไม่
รวมทั้งเรื่องของการแก้ไขปัญหาต่าง ๆ
โดยที่ทุก ๆ ทางเลือกต้องทำการประมวลผลข้อมูลประมาณ 100K message
เพื่อนำมาเปรียบเทียบกัน
เป็นวิธีการเลือกที่ดีมาก ๆ แต่หลาย ๆ บริษัทมักจะไม่ทำกัน !!
โดยหลังจากที่ผ่านการทดลองมาแล้วได้เลือก Elixir นั่นเอง
ที่น่าสนใจคือ ทีมพัฒนามีจำนวนเพียง 3 คน
มีเวลา 18 เดือนในการพัฒนาและนำมาแทนที่ของเดิม
แนวทางในการเรียนรู้ Elixir ของทีม
ทีมที่มีอยู่นั้นไม่มีความรู้หรือประสบการณ์กับ Elixir เลย
ยกเว้นคนใหม่ที่เข้ามาที่เคยพัฒนามา
แต่ทีมก็ได้ความช่วยเหลือต่าง ๆ จาก community ของ Elixir
รวมทั้งมีหนังสือออกมาที่ช่วยได้มาก เช่น Adopting Elixir
ส่วนการ migrate นั้น ก็จะค่อย ๆ ทำไปในแต่ละส่วนงาน
ค่อย ๆ ย้ายมาในแต่ละ use case
เพื่อทำให้มั่นใจว่า สามารถทำงานได้ถูกต้องและมีประสิทธิภาพ เช่น
- ระบบจัดการ email
- ระบบ analytic
โดยการ migrate ระบบต่าง ๆ มายังระบบใหม่นั้น ใช้เวลาประมาณ 1 ปี
ส่วนการรองรับผู้ใช้งานจำนวนมาก ๆ
พบว่าสามารถรองรับได้มาก โดยที่ใช้จำนวนเครื่องลดลง
จาก 8-10 เครื่อง เหลือเพียง 2 เครื่องเท่านั้น
![](http://www.somkiat.cc/wp-content/uploads/2020/11/image-5.png)
Library ที่ใช้งาน ประกอบไปด้วย
- GenStage
- Calliope คือ Haml Parser
- I18n ด้วย Linguist
- Exq สำหรับ job processing
- Broadway สำหรับจัดการ data pipeline
ตัวอย่างของ service ที่พัฒนา
![](http://www.somkiat.cc/wp-content/uploads/2020/11/image-6-1024x666.png)
ในตอนนี้ Elixir คือ
ภาษาโปรแกรมหลักของการพัฒนาระบบ backend ของ Change
โดยปัจจุบันมีมากกว่า 20 project ที่พัฒนาไปแล้ว