ชุมชนเทคโนโลยีกำลังถกเถียงกันอย่างคึกคักเกี่ยวกับ Rivet Actors ระบบใหม่ที่นำการเขียนโปรแกรมแบบ actor-model มาสู่นักพัฒนากระแสหลัก โดยเฉพาะการเปรียบเทียบกับ Durable Objects ของ Cloudflare และระบบ actor แบบดั้งเดิมอย่าง Erlang
สถาปัตยกรรมและการจัดการสถานะ
Rivet Actors ใช้ระบบจัดการสถานะที่ซับซ้อนโดยใช้ FoundationDB เป็นฐาน ซึ่งมีการบันทึกสถานะโดยอัตโนมัติหลังการเรียก RPC ระบบนี้ให้นักพัฒนาจัดการสถานะได้ง่ายผ่านคุณสมบัติ _state
ทำให้สามารถใช้งาน JavaScript ได้โดยตรงโดยไม่ต้องเขียนโค้ดจัดการสถานะแยก การพัฒนานี้นำไปสู่การอภิปรายเกี่ยวกับการรับประกันความสอดคล้องและการจัดการธุรกรรมระหว่างการสื่อสารของ actor
หากคุณใช้ KV API โดยตรง สิ่งนี้ถูกต้อง Actors ยังมีคุณสมบัติ this._state ซึ่งจะถูกเขียนลงใน FDB โดยอัตโนมัติหลังการเรียก RPC แต่ละครั้งหากมีการแก้ไข ช่วยให้นักพัฒนาสามารถสร้างต้นแบบได้อย่างรวดเร็วด้วยการเขียนโค้ด JavaScript ธรรมดา เช่น this._state.count += 1 โดยไม่ต้องกังวลเรื่องการเขียนสถานะและกรณีพิเศษที่เกี่ยวข้อง
เทคโนโลยีหลัก:
- รันไทม์: V8 และ Deno
- การจัดเก็บสถานะ: FoundationDB
- ระบบประมวลผลธุรกรรมออนไลน์: CockroachDB
- การตรวจสอบและติดตาม: ClickHouse
- ระบบแคช: Valkey
- ระบบส่งข้อความ: NATS
- ระบบสมดุลโหลด: Traefik
กรณีการใช้งานและประสิทธิภาพ
สมาชิกในชุมชนได้เน้นย้ำถึงการใช้งานที่เป็นประโยชน์หลายประการสำหรับ Rivet Actors โดยเฉพาะในสถานการณ์ที่ต้องการความสอดคล้องสูงและความแม่นยำ เช่น การแก้ไขเอกสารแบบทำงานร่วมกัน แอปพลิเคชันแบบ local-first ที่ซิงค์ด้วย CRDT เกมหลายผู้เล่นแบบมีสถานะ และระบบแชท จุดเด่นที่น่าสนใจคือความสามารถในการปรับขนาดลงเป็นศูนย์โดยอัตโนมัติเมื่อไม่มีการใช้งาน ซึ่งแก้ปัญหาเรื่องต้นทุนการดำเนินงานที่เคยเป็นปัญหาในระบบคล้ายกันอย่าง metaverse backend ของ Improbable
กรณีการใช้งานที่สำคัญ:
- แอปพลิเคชันแบบทำงานร่วมกัน
- แอปพลิเคชันแบบประมวลผลในเครื่อง
- ระบบตัวแทน AI
- เซิร์ฟเวอร์เกม
- แอปพลิเคชันแชท
- การซิงค์และจัดเก็บข้อมูลแบบ CRDT
- การจำกัดอัตราการใช้งาน
- ระบบการจัดตารางเวลา
การแสดงที่เก็บโค้ดของ Rivet Actors บน GitHub สะท้อนให้เห็นความสามารถในการทำงานร่วมกันสำหรับแอปพลิเคชันแบบเรียลไทม์ |
ประสบการณ์นักพัฒนาและการรองรับภาษา
ประเด็นสำคัญในการอภิปรายคือวิธีการที่ Rivet ทำให้การเขียนโปรแกรมแบบ actor-model เข้าถึงได้ง่ายสำหรับนักพัฒนากระแสหลัก แม้ว่าสมาชิกบางคนจะชี้ว่าฟังก์ชันคล้ายกันนี้มีอยู่แล้วใน Erlang/Elixir แต่หลายคนชื่นชมที่ Rivet มุ่งเน้นการรองรับภาษากระแสหลักอย่าง TypeScript ซึ่งนำไปสู่การพูดคุยกว้างขวางเกี่ยวกับข้อดีข้อเสียระหว่างระบบ actor แบบดั้งเดิมและการพัฒนาแบบสมัยใหม่
วิวัฒนาการทางเทคนิค
นับตั้งแต่การอภิปรายครั้งก่อนบน Hacker News ในปี 2023 Rivet ได้มีการเปลี่ยนแปลงที่สำคัญหลายอย่าง รวมถึงการเขียนระบบ orchestration ใหม่ทั้งหมด การเปิดตัว isolate runtime และการปรับปรุงความสามารถในการ self-hosting ชุมชนแสดงความสนใจเป็นพิเศษในการพัฒนาเหล่านี้ โดยเฉพาะการแทนที่เครื่องมือ orchestration แบบดั้งเดิมอย่าง Nomad ด้วยระบบ workflow engine ที่พัฒนาขึ้นเอง
การอภิปรายแสดงให้เห็นถึงความสนใจที่เพิ่มขึ้นในระบบ actor-model ที่สามารถเชื่อมช่องว่างระหว่างรูปแบบการประมวลผลแบบกระจายแบบดั้งเดิมกับความต้องการในการพัฒนาสมัยใหม่ ในขณะที่ยังคงรักษาต้นทุนการดำเนินงานที่สมเหตุสมผลและความสะดวกในการพัฒนา
อ้างอิง: Rivet: Run and scale real-time applications with Rivet Actors