9 poin oleh GN⁺ 2025-04-30 | 3 komentar | Bagikan ke WhatsApp
  • Situs web eksperimental One Million Chessboards menyediakan satu juta papan catur yang dapat dimanipulasi siapa saja secara bersamaan
  • Saat satu orang menggerakkan bidak, perubahan itu langsung tercermin ke semua pengguna secara real-time, dan pengguna juga bisa berpindah antarpapan dengan bebas tanpa giliran
  • Semua status papan catur disimpan dalam array memori 2 dimensi yang terdiri dari 64 juta uint64, dan servernya hanya satu
  • Ini adalah proyek pertama yang ditulis dalam Go, dan sinkronisasi dilakukan melalui pesan Protobuf terkompresi zstd berbasis WebSocket
  • Proyek ini sangat menantang secara teknis, sampai implementasi logika klien dengan pendekatan optimistik + rollback saja memakan waktu satu minggu

One Million Chessboards

  • One Million Chessboards menyediakan satu juta papan catur, dan siapa saja dapat menggerakkan bidak secara bersamaan
  • Bukan berbasis giliran; ketika satu orang menggerakkan bidak, perubahannya langsung terlihat oleh semua pengguna
  • Perpindahan antarpapan juga bebas dilakukan, memberikan pengalaman yang belum pernah ada sebelumnya

Latar belakang

  • Ini adalah karya eksperimental lanjutan dari proyek One Million Checkboxes yang dibuat sebelumnya, dengan target skala dan tantangan yang lebih besar
  • Pembuatnya telah menginvestasikan banyak waktu ke proyek ini dan berharap orang-orang menikmatinya

Cara implementasi teknis

  • Proyek ini adalah salah satu pekerjaan yang paling menantang secara teknis di antara karya-karya terbarunya
  • Ringkasan teknologi utama:
    • Desain yang mempertimbangkan skalabilitas
    • Berjalan di satu server tunggal
    • Seluruh papan catur dibangun sebagai array uint64 2 dimensi di dalam memori (total 64 juta sel)
    • Backend ditulis dalam Go, proyek Go pertama dari pembuatnya
    • Satu thread writer + banyak thread reader, dengan kontrol akses menggunakan mutex
    • Klien menerapkan update optimistik, lalu melakukan rollback jika menerima update konflik dari server
    • Pesan protobuf terkompresi zstd dikirim ke klien melalui WebSocket
    • Klien dibagi menjadi zona 50x50, dan hanya menerima pergerakan dari zona yang berdekatan
    • Data global (statistik, minimap, dll.) dipolling lewat HTTP GET, memanfaatkan cache Cloudflare

Inti cara kerja klien

  • Pendekatan optimistik + rollback (optimistic update with rollback) terdiri dari sekitar 1.600 baris kode, dan dikembangkan dengan fokus penuh selama 7 hari
    > “Ini adalah masalah yang paling berat saya hadapi belakangan ini”

Respons setelah peluncuran

  • Dalam 8 jam setelah rilis, tercatat lebih dari 1,3 juta perpindahan bidak, dengan sekitar 400 pengguna aktif bersamaan
  • Beban pada server sangat rendah hingga nyaris bisa diabaikan

Statistik saat ini

  • Jumlah pemain online: 199.276
  • Total pergerakan: 5.238.978
  • Jumlah total bidak: 1.490.061.914
  • Jumlah raja: 9.035.389

3 komentar

 
roxie 2025-05-03

Bagaimana kalau ukurannya dibuat sedikit lebih kecil... peluang untuk bertemu seseorang terlalu kecil wkwk T_T

 
ifmkl 2025-04-30

Saya sudah mencobanya, dan menarik bahwa saat ini ada bagian di mana Anda bisa keluar dari meja lalu, dari sudut pandang hitam, berpindah ke papan catur di bawahnya.

 
GN⁺ 2025-04-30
Komentar Hacker News
  • Halo! Saya yang membuat ini. Maaf penjelasan di blog kurang memadai. Kalau ada pertanyaan tentang arsitekturnya, saya dengan senang hati akan menjawab. Saya fokus membuat proyek ini mampu menangani ribuan klien bersamaan dalam satu proses. Golang sangat cocok untuk pekerjaan ini

  • Permainan ini jadi menarik. Misalnya, orang-orang menemukan bahwa satu papan yang diisi di tepi luar sedalam dua petak itu tak terkalahkan. Menyenangkan melihat gameplay emergen. Ini menunjukkan kejeniusannya proyek eieio. Dari luar terlihat sederhana, tetapi pada skala besar membuat orang menemukan kemungkinan yang menarik

  • Seseorang memblokir raja dengan sekitar 40 benteng. Saya masuk dengan kuda, lalu dia langsung menangkap saya dengan raja dan menutup celahnya dengan benteng lain. Seru

  • Bergerak antar papan memungkinkan, tetapi menangkap tidak bisa. Yang aneh, bukan berarti gerakannya tidak diproyeksikan. Misalnya, garis biru ratu menunjuk dengan tepat melewati batas papan, tetapi berhenti di semua bidak di papan lain. Kerja bagus sebagai latihan skala

  • Saya mendapat error. Uncaught TypeError: tidak dapat membaca properti dari null

  • Saya kira setiap papan akan punya "giliran". Saya tidak menyangka bisa memilih papan acak, membebaskan ratu hitam, lalu membereskan semua bidak putih sementara lawan tidak bisa berbuat apa-apa

  • Ada cheater yang bermain dengan warna lain. Saya rasa saya melihatnya kemarin, tapi hari ini saya benar-benar yakin. Sepertinya dipakai untuk balas dendam. Begitu benteng hitam dihancurkan, bidak-bidak di benteng putih terdekat langsung berpindah ke posisi terburuk

  • Saya memprediksi ini akan berkembang menjadi perang bot. Misalnya, ada potongan kode untuk memajukan pion

  • Mengejar orang-orang itu sangat menyenangkan. Bahkan terlepas dari catur pun tetap menyenangkan

  • Berjalan dengan baik di Firefox pada ponsel Android. Kerja bagus