Skip to content

เมื่อผมเขียน API ด้วย Rust 🦀

Published: at 11:45 AM (2 min read)

เมื่อภาษาหนึ่งโด่งดังจนเป็นกระแสมากแบบเกินต้าน เราจึงจำเป็นต้องเข้าร่วมขบวนการ ภาษานั้นก็คือ Rust 🦀 ครับ ซึ่งผมก็ได้มีโอกาสในการเขียนเล่นให้น้องในทีมได้นำไปแชร์กันในหัวข้อ Vue JS แบบง่ายๆ เลยอยากจะมาเล่าประสบการณ์ให้ฟังในบล็อกนี้

Table of contents

Open Table of contents

Intro

ก่อนอื่นต้องบอกก่อนว่าผมเป็นคือ Beginner Rust ที่เพิ่งเริ่มเขียนและพยายามทำความเข้าใจกับตัวภาษาให้มากขึ้นและคิดที่จะใช้ต่อในอนาคตกับบางงาน

Inspiration

ผมได้มีการคุยกับน้องในทีม เรามีการแชร์ความรู้กันทุกวันศุกร์ ซึ่งน้องที่เป็นคนแชร์บอกว่าอยากให้คนอื่นในทีมได้ลองทำ Todo List ด้วย VueJS (น้องที่เป็นคนแชร์มีประสบการณ์มาก่อน แต่ Stack ที่เราใช้กันจริงคือ React) ผมก็บอกน้องว่าพี่อยากลอง Challenge ตัวเองด้วยการทำ Todo List API ให้ด้วยภาษา Rust ซึ่งถ้าไม่ทันผมมีแผนสำรองที่จะทำ Node ขึ้นไปได้ในระยะเวลาที่น้อยนิด (1-2 วัน)

Framework & Decision

การที่ผมเลือก Axum เพราะมีโครงสร้างหรือหลักการค่อนข้างคล้าย Express JS มากที่สุดจึงทำให้ผมเรียนรู้น้อยสุดในเวลาที่จำกัด และถ้ามีปัญหาเกิดขึ้นผมน่าจะแก้ปัญหาได้ไวสุด ตัวที่มองไว้นอกจาก Axum ก็มี Actix กับ Rocket ครับดูน่าสนใจเหมือนกัน

Database

ในส่วนของ Database เลือกใช้เป็น postgresql เพราะว่ามันไม่มีเรื่อง version มาเกี่ยวข้องครับ ไม่ว่าจะยังไงก็เป็น standard เดียวกันหมด อีกอย่างผมเน้นงานไวเลยใช้ตัวฟรีไปก่อน ตัวที่ผมใช้คือ Neon Postgres

Code & Compiler

การเขียนโค้ดเองไม่ได้ยากมาก แต่มี Learning Curve ระดับนึงตามหลักการทั่วไปของ Low-level ซึ่งผมต้องใช้เวลาในการเรียนรู้ แต่ไม่ได้เป็นปัญหาใหญ่ถ้าเขียนบ่อยๆน่าจะใช้งานได้ดีขึ้นครับ ส่วน Compiler เองก็โหดมากคอยด่าเราสม่ำเสมอ ซึ่งผมมองเป็นข้อดีมากเช่นเดียวกัน ชอบเวลาที่ด่าแล้วบอกด้วยว่าต้องไปอ่านหรือดูอะไรเพิ่ม

Deploy

ในส่วนของการ deploy ได้ใช้ตัว Gihub Actions + Docker เพื่อต่อไปยัง Google Cloud (Artifact Registry + Cloud Run) ตรงนี้มีปัญหาอยู่ค่อนข้างนานเหมือนกัน จนให้พี่ + น้องในทีม Backend มาช่วยดูทุกคนติดคล้ายกัน เพราะตอนแรกเป็น Google Container Registry แล้วก็เปลี่ยนมาเป็น Artifact Registry จนได้มาหาคำตอบเองได้แต่ก็ต้องขอบคุณทางฝั่ง Backend ด้วยที่เข้ามาช่วยดูให้ครับ หลังจากนั้นพอแก้เรื่องนี้ได้ก็ไปติดตรง Cloud Run อีกทีนึงพอแก้ปัญหาได้ auto deploy ก็สมบูรณ์ครับ

ถ้าเขียนปัญหาเป็นข้อดูจะมีรายการดังต่อไปนี้

Performance & CPU

ถ้าพูดถึง Low Level คงหลีกเลี่ยงการบอกเกี่ยวกับ Performance ของ CPU และ Memory ไม่ได้

อันนี้เป็น Spec ของ Cloud ที่ผมใช้

resources:
  limits:
    cpu: 1000m
    memory: 512Mi

Rust cpu and memory utilise

Rust cpu memory specify time

จากภาพจะเห็นได้ว่าเมื่อตอนที่ทีมมีการทำ Work Shop (Team Size 10-15 คน) กัน CPU ยังไปไม่ถึง 5% และ Memory ก็ไปไม่ถึง 10% (1 Core, 512 MB ตามที่ระบุในส่วน resources limits)

Conclusion from writer

ทางผู้เขียนคิดว่า ภาษา Rust เป็นภาษาที่ดีทำให้เรารอบคอบมากก่อนที่จะสร้างของชิ้นหนึ่งออกไป ด้วยตัว Compiler เองที่โหดทำให้ข้อผิดพลาดน้อยมากๆ แต่สำหรับบางคนอาจจะมีช่องว่างการเรียนรู้ที่เยอะขึ้นเช่นเดียวกัน แต่ในแง่ของ Performance เองก็ต้องชื่นชมว่าทำได้ดีมาก ไม่ว่าจะเป็น CPU หรือ Memory ทำให้เราสามารถจ่ายค่า Cloud น้อยลงได้ที่มาจากการกินทรัพยากรน้อยลงหรืออาจจะทำให้ Service คอขวดลดลงด้วยได้อีกเช่นกัน

Example Repository


Previous Post
🦀 Rust Basic
Next Post
Interpreter กับ Compiler ต่างกันยังไง