ประกาศเปิดตัว S2
(s2.dev)- S2 คือพรีวิวของ Stream Store แบบ serverless ที่มุ่งทำให้การจัดการสตรีมแบบเรียลไทม์ที่คงทน เรียบง่ายเหมือน object storage โดยต้องการยกระดับ log และ stream ให้เป็นองค์ประกอบพื้นฐานของ cloud storage
- เรคคอร์ดจะถูก append ไปที่ tail ของ stream และแม้มี writer หลายตัวเขียนพร้อมกัน S2 จะรับหน้าที่ จัดลำดับอย่างคงทน พร้อมรองรับทั้งการอ่านย้อนหลังและการ tail แบบเรียลไทม์
- basin ของ S2 ทำหน้าที่เป็น namespace ของ stream คล้าย bucket ทำหน้าที่กับ object ทำให้สามารถทำโมเดลอย่าง stream ต่อผู้ใช้ได้โดยไม่จำกัดจำนวน stream และระยะเวลาเก็บรักษา
- storage class เริ่มต้นด้วย
StandardและExpressโดยตั้งเป้า latency p99 ต่ำกว่า 500ms และ ต่ำกว่า 50ms ตามลำดับ เพื่อแยกตัวเลือกด้าน latency และต้นทุน - ปัจจุบันมี gRPC API, Rust SDK และ CLI และวาง REST API, ความเข้ากันได้กับโปรโตคอล Kafka, multi-region basins และ latency ต่ำกว่า 5ms เป็นขั้นถัดไป
โมเดล stream storage ที่ S2 เสนอ
- S2 มุ่งเป็น serverless Stream Store สำหรับข้อมูล streaming ในยุคคลาวด์
- แนวคิดหลักคือ log หรือ stream ก็สามารถเป็นองค์ประกอบพื้นฐานของ cloud storage ได้เช่นเดียวกับ object
- Object storage มุ่งเน้น
PUT/GET/DELETEสำหรับ object ที่มีชื่อ รวมถึง blob และ byte range และเหมาะกับข้อมูลที่หยุดนิ่ง - stream storage ของ S2 ให้
APPEND/READ/TRIMสำหรับStreamที่มีชื่อ และใช้ record กับ sequence number เป็นหน่วยพื้นฐาน - การเขียนจะ append ไปที่ stream tail และแม้มี writer หลายตัวบันทึกพร้อมกัน S2 จะ จัดลำดับ record ทั้งหมดและรับประกันความคงทน
- การอ่านสามารถเริ่มได้ตั้งแต่ seconds ago ไปจนถึง years และยังทำ real-time tailing ซึ่งทำได้ยากด้วย S3 blob ได้ด้วย
- basin ทำหน้าที่เป็น namespace ของ stream เหมือนที่ bucket ทำหน้าที่เป็น namespace ของ object
- สามารถใช้ basin และ stream ได้โดยไม่จำกัดจำนวน
- ไม่มีข้อจำกัดด้านระยะเวลาเก็บรักษาข้อมูล
- สามารถทำโมเดล stream ต่อผู้ใช้ได้ และไม่ต้องจัดการข้อจำกัดของ cluster หรือการจูน infrastructure แบบ Kafka
- รองรับทั้งการตรวจสอบ stream tail ด้วย strong consistency และ concurrency control ตอนเขียน
- ใช้วิธีแบบ pessimistic ด้วย fencing token ได้
- ใช้วิธีแบบ optimistic โดยระบุ expected sequence number ได้
- การออกแบบนี้มุ่งไปที่ durable offloading และการแยก compute กับ storage ซึ่งฐานข้อมูลอย่าง MemoryDB และ Neon ใช้งานอยู่
ประสิทธิภาพ ราคา ฟีเจอร์ที่มีในปัจจุบัน และ roadmap
- S2 ให้ serverless API ในรูปแบบบริการ multi-tenant โดยอิง scalability และ durability ของ object storage
- ถือว่าความคงทนเป็นสิ่งที่ไม่ประนีประนอม และปรับตัวเลือกระหว่าง latency กับต้นทุนด้วย storage class ราย stream
Standard: อิง AWS S3 Standard และมองว่าผู้ให้บริการ public cloud ทุกรายมีผลิตภัณฑ์เทียบเคียง จึงสามารถให้บริการได้ในทุก cloud region เมื่อเติบโตขึ้นExpress: อิง quorum ของ bucket AWS S3 Express One Zone จำนวน 3 ชุด โดย Azure มี regional counterpart และมองว่า GCP ก็มีความเป็นไปได้
- เป้าหมายประสิทธิภาพและข้อจำกัดเริ่มต้นมีดังนี้
Standardให้ end-to-end p99 latency ต่ำกว่า 500msExpressคาดหวัง latency ต่ำกว่า 50ms ได้- write ทั้งหมดจะถูกเก็บอย่างปลอดภัยใน S3 ด้วย regional durability ก่อน acknowledgement
- throughput รองรับระดับ หลายร้อย MB ต่อวินาที ต่อ stream
- การอ่านข้อมูลที่เพิ่งเขียนมี overhead ต่ำด้วย in-memory caching
- reader ที่ล่าช้าจะถูกให้บริการโดยตรงจาก object storage และไม่มี cap
- ในช่วงแรกจำกัด write ไว้ที่ 125 MiBps ต่อ stream และ read สำหรับ write ล่าสุดไว้ที่ 500 MiBps ต่อ stream
- ในช่วงพรีวิวให้ใช้ฟรี และเปิดเผย intended pricing โดยตั้งเป้าราคาที่ถูกกว่าระดับทั่วไปของระบบ cloud streaming อย่างมีนัยสำคัญ
- ไม่มี ต้นทุนคงที่ อย่าง instance หรือ cluster unit
- developer interface ที่มีในปัจจุบันมีดังนี้
- ระบบอยู่บน cloud infrastructure ที่ผ่านการพิสูจน์แล้ว และ codebase ภาษา Rust ผ่าน deterministic simulation testing
- ระบบยังใหม่ จึงอาจมีปัญหาได้
- กำลังทำให้ mature ขึ้นเพื่อไปสู่ general availability และ SLA ที่เชื่อถือได้ในการใช้งาน production
- roadmap ถัดไปสรุปได้เป็นสามแกน
- Kafka protocol compatibility: จะให้เป็นเลเยอร์ open source และฟีเจอร์บางส่วน เช่น key-based compaction จะผนวกเข้ากับ S2 โดยตรง
- Multi-region basins: หลังขยายไปยัง cloud region มากขึ้น จะพิจารณาความเป็นไปได้ของ basin ที่ข้าม region และ cloud
- Under 5 millisecond latencies: มองว่าความยืดหยุ่นเชิงโครงสร้างของ storage class ทำให้ปรับปรุงเพิ่มได้อีก 10 เท่าเมื่อเทียบกับ
Express
- หากใช้งาน API “low-level” ของ Kafka หรือ Kinesis เป็นหลัก S2 มุ่งตอบโจทย์โดยตรง เช่น ไม่จำกัดจำนวน stream, ordered throughput สูงขึ้น 10-100 เท่า และ concurrency control
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
ผมไม่ใช่นักกฎหมาย แต่การตั้งชื่อผลิตภัณฑ์ว่า S2 แล้วบอกในบทนำว่าเป็นเทคโนโลยีที่ปรับปรุง AWS S3 ดูมีแนวโน้มสูงที่จะเรียก ข้อเรียกร้องเรื่องเครื่องหมายการค้า/ลิขสิทธิ์ จาก Amazon
อยู่ในสาขาเดียวกัน จึงน่าจะเกิดความสับสนในหมู่ผู้บริโภคได้ชัดเจน แน่นอนว่าคงตรวจสอบเรื่องการจดทะเบียนเครื่องหมายการค้าแล้ว: https://tsdr.uspto.gov/#caseNumber=98324800&caseSearchType=U...
แค่ EC2 กับ S3 ก็แยกด้วยหูยากอยู่แล้ว นี่เท่ากับเพิ่มเข้ามาอีกหนึ่งชื่อ
เป็นการตั้งชื่อสไตล์ IBM เทียบกับ HAL หรือแบบเรื่อง 『2001: A Space Odyssey』
ผมเพิ่งเริ่มกระบวนการยื่นเครื่องหมายการค้าเมื่อไม่นานมานี้ และถ้าอิงจากเว็บไซต์ผู้รับจดทะเบียนโดเมน ค่าใช้จ่ายก็พอ ๆ กับการซื้อโดเมนอย่าง
s4.devการรีแบรนด์หลังเปิดตัวเจ็บปวดกว่าการเปลี่ยนก่อนเปิดตัวมากบางทีอาจยื่นข้อเสนอซื้อกิจการด้วยซ้ำ และดูแล้วโอกาสที่จะถึงขั้นฟ้องร้องต่ำมาก
ไอเดียดีมากและ API ก็สวยงาม ผมอยากใช้กับโปรเจกต์ของตัวเอง แต่ไม่มีความมั่นใจเลยว่าสตาร์ทอัพนี้จะอยู่รอดได้นานในรูปแบบปัจจุบัน
ถ้าประสบความสำเร็จ AWS ก็จะสร้างเวอร์ชันภายในที่ดีกว่าและถูกกว่า ส่วนในทางกลับกัน ก็มีโอกาสสูงที่จะไม่ได้ traction ในตลาด ถ้าออกมาเป็นผลิตภัณฑ์สำหรับผู้ใช้ปลายทางที่มีแดชบอร์ดแบบ Papertrail มากกว่าจะเป็น API “องค์ประกอบพื้นฐานของคลาวด์” ที่ผูกติดกับ AWS อย่างใกล้ชิด มันน่าจะสมเหตุสมผลกว่ามาก และถ้าสามารถนำ แบ็กเอนด์ที่เข้ากันได้กับ S3 อย่าง Digital Ocean Spaces มาใช้เองได้ ก็จะกลายเป็นผลิตภัณฑ์ที่เป็นกลางต่อคลาวด์ ยอดเยี่ยม และอยู่ได้นาน
สถาปัตยกรรมภายในไม่ได้ผูกกับ AWS และเป็นโครงสร้างอินเทอร์เฟซที่สามารถนำไป implement สำหรับระบบคลาวด์อื่นได้
มีสตาร์ทอัพไม่จบไม่สิ้นที่เอาซอฟต์แวร์โอเพนซอร์สเดิมมาห่อเป็นบริการ แล้วทำการตลาดว่าถูกกว่าผลิตภัณฑ์ของ AWS ทั้งที่ตัวเองก็รันอยู่บน AWS
ดังนั้นผมคิดว่าไม่จำเป็นต้องหยุดเพราะ Beezus
“Amazon S3 now supports the ability to append data to an object” ประกาศเมื่อ 30 วันก่อน และ Azure ก็มีฟังก์ชันเดียวกันผ่าน append blob มานานแล้ว ตอนนี้ยังดิบกว่า S2 และไม่มีแนวคิด record แต่ขั้นที่ผู้ให้บริการคลาวด์จะให้บริการสิ่งนี้แบบเนทีฟนั้นเล็กมาก หากใส่แนวคิด record เข้าไป ก็แทบจะใกล้เคียงกับ message queue ซึ่งพื้นที่การแข่งขันนั้นก็ใหญ่เช่นกัน และฝั่งโซลูชันจัดเก็บ log ก็คล้ายกัน
อยากทำความเข้าใจให้ชัด ถ้าสร้างบน AWS แล้ว AWS คิดค่า egress ไปอินเทอร์เน็ต $0.09 ต่อ GB แต่ที่นี่คิดค่า egress ไปอินเทอร์เน็ต $0.05 ต่อ GB อย่างนั้นหรือ?
ฟังดูเหมือนกำลังอุดหนุนค่า egress ของ AWS อยู่ หรือว่าใช้เรต egress ที่ไม่เปิดเผยได้?
เมื่อถึงขนาดที่มีนัยสำคัญ พวกเขาจะจัดการเรื่องนี้ และแน่นอนว่ามีสมมติฐานบางอย่างอยู่ในนั้น
แบบนั้นที่ 50TB จะขาดทุนสูงสุดเดือนละ $300 และหลังจากนั้นก็เริ่มทำเงินได้
โดยพื้นฐานแล้วนี่คือ WarpStream แต่เป็นรูปแบบที่ไม่ได้ไปทาง Kafka compatibility ทันที และให้ API ระดับต่ำกว่านั้นหรือเปล่า?
ถ้าได้รับการใช้งานในระยะยาว API พื้นฐานระดับ S3 สำหรับสตรีมมิงก็ดูมีคุณค่ามากจริง ๆ
แต่แนวทางสถาปัตยกรรมต่างจาก WarpStream และด้วยเหตุนี้จึงให้ latency ที่ต่ำกว่ามากได้ ระบบนี้ไม่มีดิสก์ด้วย
คนเหล่านี้เท่ากับเลือกอย่างมีสติว่าจะต้องอธิบายตลอดอาชีพต่อจากนี้ว่า “จริง ๆ แล้วเราไม่ใช่ S3”
เรื่องนั้นไม่ใช่เรื่องตลก
โดยส่วนตัวผมคิดว่าเป็นข้อกล่าวอ้างที่ถูกต้อง และในบทความก็แสดงให้เห็นค่อนข้างโปร่งใส
ดูดีนะ แต่ไม่มี Java SDK เหรอ?
โดยส่วนตัวแล้ว บริษัทที่ผมเคยทำงานด้วย 90% พึ่งพา Spring หรือไคลเอนต์พื้นฐานอย่างมากสำหรับการผลิต/บริโภค Kafka แบบนี้แม้แต่การพิสูจน์แนวคิดแบบเบา ๆ ก็แทบถูกปิดทาง
ตอนนี้มี Rust SDK และ CLI (https://s2.dev/docs/quickstart) อยู่ บริการหลักก็เขียนด้วย Rust เลยรู้สึกว่า Rust เป็นจุดเริ่มต้นที่ดี
ชอบอันนี้นะ สิ่งถัดไปที่อยากให้ใครสักคนสร้างต่อบนสิ่งนี้ คือส่วนที่นำ “เหตุการณ์” ของสตรีมไปใช้เป็น ตัวแทนที่ query ได้ ณ ช่วงเวลาหนึ่ง ๆ
โดยพื้นฐานแล้วนี่คืออีกครึ่งหนึ่งของการทำให้คล้าย Datomic มากกว่า database เฉพาะตัว คงจะดีกว่าถ้ามีแพตเทิร์นหรือเฟรมเวิร์กสำหรับสร้างข้อมูล in-memory ที่ query ได้อย่างเป็นรูปธรรม เช่น นำไปใช้กับ Sqlite ในเครื่อง, ใช้กับอินสแตนซ์ query ในเครื่องโดยอิงจาก MySQL binlog แล้ว rewind ไปยังจุดเวลาเฉพาะ, หรือใช้เหตุการณ์ apply/undo ของแต่ละแอปพลิเคชันกับสถานะในเครื่อง ก็ทำได้หลายแบบ
เริ่มทำ Gazette เมื่อราว 10 ปีก่อน [0]
Gazette อยู่กึ่งกลางทางสถาปัตยกรรมระหว่าง Kafka กับ WarpStream/S2 มันให้บริการสตรีม log แบบ byte-oriented ที่ไร้ขีดจำกัดโดยมี S3 เป็นแบ็กเอนด์ แต่ broker ใช้ scratch disk ในเครื่องเพื่อการรับประกัน replication/durability ช่วงต้น และลด latency ของ append/read ดังนั้น p99 จึงต่ำกว่า 5ms ไม่ใช่เกิน 500ms และยังรับประกันว่าไฟล์ทั้งหมดจะไปถึง S3 พร้อมฟีเจอร์อำนวยความสะดวกอย่างขนาดเป้าหมาย/การบีบอัด/ขีดจำกัด latency ที่กำหนดค่าได้ ไคลเอนต์ที่อ่านข้อมูลในอดีตจะดึงคอนเทนต์จาก S3 โดยตรง แล้วหลังจากนั้นจะสลับไปเป็น live tailing ของ append ที่ใหม่มาก ๆ
Gazette เริ่มจากเครื่องมือภายในของสตาร์ทอัพก่อนหน้า และตอนสร้างบริษัทปัจจุบันก็เคยพิจารณาอย่างสั้น ๆ ว่าจะให้บริการเป็น raw service [1] ก่อนจะเปลี่ยนทิศไปเป็นแพลตฟอร์มเคลื่อนย้ายข้อมูลแบบครบถ้วน [2] ที่ใช้ Gazette เป็นรายละเอียดการติดตั้งใช้งานภายใน การวางตำแหน่งในตลาด ของบริการแบบนี้แคบมาก ๆ ต้องทำให้ API เข้ากันได้กับสิ่งที่ลูกค้าเป้าหมายใช้อยู่แล้ว เพื่อลดต้นทุนการทดลองให้เหลือ 0 (WarpStream ทำเรื่องนี้ได้ดี) หรือไม่ก็ต้องขยับขึ้นไปบน application stack ให้สูงขึ้น เพื่อแก้ปัญหาที่ลูกค้าต้องการแก้จริง ๆ ได้โดยตรงมากขึ้น
[0]: https://gazette.readthedocs.io/en/latest/
[1]: https://news.ycombinator.com/item?id=21464300
[2]: https://estuary.dev
คุณไม่ใช่คนแรกที่บอกว่าตลาดนี้ไม่มีอยู่หรือเล็กมาก แต่ตอนที่คุณเองมาขอการตรวจสอบบน HN คุณก็คงคิดว่ามีอะไรบางอย่างอยู่ S2 อาจให้สิ่งอย่างความเข้ากันได้กับ Kafka ได้มากกว่านี้มาก แต่ building block พื้นฐานหลักนั้นสำคัญ โดยส่วนตัวผมก็อยากได้ และเคยเห็นมันถูกสร้างซ้ำในบริบทสารพัด แล้วถูกนำกลับมาใช้ใหม่อย่างไม่มีประสิทธิภาพในรูปของระบบที่สูญเสียลักษณะดั้งเดิมไป ความมั่นใจเพียงเท่านั้นก็พอที่จะทำให้เป็นผู้ก่อตั้งได้แล้ว ผมเข้าใจบริบทของคำแนะนำและรู้ถึงความยากลำบากข้างหน้า ขอบคุณสำหรับคำแนะนำครับ
เป็นโมเดลบริการที่มีประโยชน์มาก แต่ถ้าทุก write ถูก ทำให้คงอยู่ถาวรใน S3 ก่อนส่ง acknowledgement ข้อเสนอคุณค่าก็ดูสับสน
ผู้เขียนอาจ batch กลุ่ม record ก่อนเขียนเป็น blob ที่ใหญ่ขึ้น และให้กระบวนการเบื้องหลังทำ compaction ได้ แต่ก็ยังเป็นบริการสตรีมมิงที่ใช้ object storage เป็นฐานอยู่ดีไม่ใช่หรือ? AWS แสดงให้เห็นโดยทั่วไปแล้วว่ามีความตั้งใจจะทำบริการที่เข้ากันได้ในระดับโปรโตคอล อย่างที่ไปจาก RDS สู่ Aurora และดูเหมือนว่าจะทำแบบเดียวกันกับการนำ Kafka ไปใช้ใหม่ได้
ถ้าออกแบบ chunk ที่เขียนลง object storage ก่อน acknowledgement ของ write ให้เป็นแบบ multi-tenant และให้บรรจุ record จากหลายสตรีมร่วมกัน ก็จะสามารถเขียนได้บ่อย ขณะเดียวกันก็มุ่งเป้าไปที่ขนาด blob ที่เหมาะสมด้านราคา/ประสิทธิภาพสำหรับทั้ง S3 standard และ express PUT
เทคโนโลยีดูเจ๋งมากจริง ๆ แค่เสียดายที่ไม่ใช่ source-available
อาจเป็นความเห็นส่วนน้อย แต่ถ้าเทคโนโลยีหลักถูกเปิดเผยภายใต้ไลเซนส์อย่าง FSL และรองรับการ self-host ได้เต็มที่ ผมก็พร้อมพิจารณาบริการเชิงพาณิชย์อย่างจริงจัง ไม่อย่างนั้นก็ยากที่จะให้เหตุผลกับการถูก lock-in เมื่อเทียบกับอะไรอย่าง Kafka
กำลังพิจารณา in-memory emulator ที่จะเปิดเป็นโอเพนซอร์สเองด้วย ตัว API เองไม่ได้ซับซ้อนมากนัก ถ้าต้องการคง Kafka API ไว้ พร้อมได้ฟีเจอร์อย่าง storage class ของ S2, topic/partition จำนวนมากมหาศาล และ throughput ต่อ partition สูง ก็กำลังวางแผนเลเยอร์ที่เข้ากันได้กับ Kafka แบบโอเพนซอร์สที่ self-host ได้อยู่ จะใส่ฟีเจอร์อย่างการเข้ารหัสฝั่งไคลเอนต์ด้วย เพื่อให้สบายใจมากขึ้น