ไขข้อข้องใจ ทำไม LINE ล็อกอินหลายเครื่องพร้อมกันไม่ได้ คำตอบจากวิศวกร LINE สำนักงานใหญ่

by mk
26 November 2019 - 09:37

ประเด็นสำคัญที่ผู้ใช้ LINE คาใจกันมานานคือ "ทำไมไม่สามารถล็อกอินพร้อมกันในสมาร์ทโฟน 2 เครื่องได้" และ "ทำไมไม่เซฟรูปหรือแชททั้งหมดไว้ให้" ซึ่งที่ผ่านมาก็ไม่เคยมีคำตอบจริงๆ จังๆ จาก LINE ในเรื่องนี้เช่นกัน

ผมมีโอกาสเข้าร่วมงาน LINE Developer Day 2019 และได้สัมภาษณ์วิศวกรของ LINE ประเทศญี่ปุ่นคือคุณ Shunsuke Nakamura และคุณ Masakuni Oishi ในเรื่องนี้พอดี และได้คำตอบมาฝากผู้ใช้ LINE ในไทยกันครับ (คำตอบสั้นๆ เป็นภาษาเทคนิคคือ technical debt)

คุณ Shunsuke Nakamura มีหัวข้อที่พูดในงานสัมมนาเกี่ยวกับสถาปัตยกรรมของ LINE พอดี โดยใช้หัวข้อว่า LINT (LINE Improvement for Next Ten years)

ประเด็นสำคัญคือ LINE เริ่มพัฒนาขึ้นในปี 2011 ในยุคที่ผู้ใช้ยังน้อย (เพียง 1 ล้านคน) ทุกอย่างยังเพิ่งเริ่มต้น สถาปัตยกรรมของ LINE จึงออกแบบมาสำหรับผู้ใช้ 1 คน 1 อุปกรณ์ (1 user 1 device 1 session) และงานฝั่งเซิร์ฟเวอร์รันอยู่บนคลัสเตอร์ของ LINE เองที่มีประมาณ 10 ตัวเท่านั้น

ตลอดเวลา 8 ปีที่ผ่านมา LINE มีผู้ใช้เติบโตขึ้นสูงมาก (ประมาณ 200 ล้านคน) มีบริการจำนวนมากที่พัฒนาขึ้นบนสถาปัตยกรรมเดิมของ LINE เช่น เกม เพลง วิดีโอ ฯลฯ ในขณะเดียวกัน ก็มีอุปกรณ์ชนิดใหม่ๆ เกิดขึ้นมากมาย เช่น แท็บเล็ตหรือนาฬิกาอัจฉริยะ

การที่จำนวนผู้ใช้เติบโตอย่างรวดเร็ว โฟกัสของทีมงาน LINE จึงต้องสนใจเรื่องเสถียรภาพ (reliability) เป็นหลัก เพราะเคยเจอปัญหาเรื่องเสถียรภาพช่วงราวปี 2013 ทำให้เกิดภาวะส่งข้อความไม่ไป/ไปไม่ถึงผู้รับ เมื่อโฟกัสหลักของทีมวิศวกรอยู่ที่เสถียรภาพ จึงไม่เคยมีโอกาสได้มาปรับปรุงตัวสถาปัตยกรรมที่ออกแบบไว้ตั้งแต่ราวปี 2011 เลย

LINE จึงเกิดภาวะ technical debt หรือการเป็น "หนี้" เชิงเทคนิค ที่สถาปัตยกรรมในอดีตมีปัญหาบางจุด แต่ตอนนั้นไม่ได้แก้ และตามหลอกหลอนมายังปัจจุบัน

ทีมวิศวกรของ LINE บอกว่ารับทราบปัญหาเหล่านี้เป็นอย่างดี แต่ตลอดหลายปีที่ผ่านมาไม่เคยมีความพยายามตั้งใจแก้ปัญหานี้กันอย่างจริงจัง ทำให้ปี 2019 นี้ LINE จึงตั้งทีม LINT (Line Improvement for Next Ten years) มาทำหน้าที่นี้

เนื่องจากปัญหาทางสถาปัตยกรรมมีจำนวนมาก ทีม LINT จึงโฟกัสแก้ไขเฉพาะบางปัญหาก่อน ที่แก้ไปแล้วในปี 2019 มีด้วยกัน 4 อย่างคือ

  1. เปลี่ยนระบบการส่งข้อความมายังไคลเอนต์ จากเดิมที่พัฒนาบนสเปก SPDY ที่ไม่เป็นมาตรฐาน หาไลบรารียาก เปลี่ยนมาเป็น HTTP/2 แทน และเปลี่ยนจากการเปิดคอนเนคชั่นแบบ long polling มาเป็น push
  2. เปลี่ยนระบบดึง (fetch) ข้อความสำหรับเครื่องที่ไม่ได้ล็อกอินนานๆ ที่เปิดมาแล้วต้องซิงก์ข้อความนานมาก มาใช้ระบบใหม่ที่ทำงานรวดเร็วและประหยัดการประมวลผล-สตอเรจฝั่งเซิร์ฟเวอร์มากขึ้น
  3. ปรับเรื่องการออก token ยืนยันตัวตนใหม่ (ไม่ได้พูดในงาน)
  4. ปรับการตั้งค่าสตอเรจทั้งไคลเอนต์/เซิร์ฟเวอร์ (ไม่ได้พูดในงาน)

หมายเหตุ: รายละเอียดในสไลด์ของคุณ Nakamura มีเรื่องสถาปัตยกรรมทางเทคนิคแบบลงลึก (มากๆ) จึงไม่ขอเขียนถึงในที่นี้ แต่ผู้สนใจสามารถดาวน์โหลดสไลด์ กันได้

ถึงแม้โครงการ LINT ของปี 2019 ไม่ได้แก้เรื่องการล็อกอินหลายเครื่องพร้อมกัน แต่ผมเห็นในแผนการของ LINT ในอนาคตมีระบุเรื่องนี้ไว้ชัดเจน (3 อันบนในภาพ) ผมจึงได้สอบถามทั้งคุณ Nakamura และ Oishi เพื่อขอขยายความในประเด็นนี้

คำตอบที่ได้เป็นเหมือนในสไลด์แรกคือ สถาปัตยกรรมของ LINE วางไว้ตอนแรก มองแค่ 1 user 1 device 1 session จึงไม่รองรับการล็อกอินหลายเครื่องพร้อมกัน ถ้าจะทำให้รองรับได้ (เช่น กรณีของ iPhone + iPad หรือกรณีของมือถือ+พีซี) ต้องใช้ท่าแฮ็กเป็นกรณีพิเศษ ต้องทำการ migrate ข้อมูลระหว่างฐานข้อมูลไปมา ซึ่งเปลืองทรัพยากรมาก ตรงนี้ LINE จึงเปิดให้ใช้หลายเครื่องเป็นกรณีๆ ไป และจำกัดเฉพาะอุปกรณ์เป็นชนิดเท่านั้น นี่จึงอธิบายได้ว่าทำไมเราไม่สามารถล็อกอินใน LINE บนสมาร์ทโฟนหลายเครื่องได้พร้อมกัน

คุณ Oishi บอกว่าทีมงานตั้งใจรองรับการใช้งานหลายอุปกรณ์ให้ดีกว่านี้ เพราะคิดว่าโลกในปัจจุบัน พฤติกรรมของผู้ใช้เปลี่ยนไป ผู้ใช้มีหลายเครื่องหลายบัญชีกว่าเดิม และส่งข้อมูลเป็นปริมาณต่อคนเยอะขึ้น ทำให้ระบบเซิร์ฟเวอร์หลังบ้านของ LINE เองก็ต้องก้าวตามให้ทันด้วย

ส่วนประเด็นเรื่องสตอเรจว่าทำไมไม่เก็บข้อมูลแชทหรือรูปภาพให้ตลอดไป คำตอบก็ตรงไปตรงมาว่าเป็นเรื่องของต้นทุนฝั่งเซิร์ฟเวอร์นั่นเอง (LINE ใช้ระบบคลาวด์ภายในของตัวเองชื่อ Verda ที่พัฒนาบน OpenStack แต่ก็มีส่วนที่เขียนเองอยู่เยอะ) ด้วยต้นทุนการเก็บข้อมูลที่สูงมาก ทำให้ LINE ไม่สามารถรองรับข้อมูลทั้งหมดได้ และต้องปล่อยให้ข้อมูลแชทที่เก่าเกินไปนั้นหมดอายุและถูกลบทิ้งไป

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

คุณ Shunsuke Nakamura (ซ้าย) และคุณ Masakuni Oishi (ขวา)

Blognone Jobs Premium