Cara Facebook Meningkatkan Akurasi Waktu di Jutaan Server dengan NTP dan PTP

Disclaimer: Detail dalam tulisan ini berasal dari Facebook/Meta Engineering Blog. Semua kredit untuk detail teknis diberikan kepada tim teknik Facebook. Tautan ke artikel asli ada di bagian referensi di akhir tulisan ini. Kami telah mencoba menganalisis detail dan memberikan masukan kami tentangnya. Jika Anda menemukan ketidakakuratan atau kelalaian, silakan tinggalkan komentar, dan kami akan berusaha memperbaikinya.

Jam yang menunjukkan waktu salah lebih buruk daripada jam yang rusak.

Inilah tantangan yang dihadapi Facebook saat mengoperasikan jutaan server yang terhubung ke Internet dan satu sama lain.

Semua perangkat ini memiliki jam onboard yang diharapkan akurat. Namun, banyak jam onboard mengandung osilator internal yang tidak akurat, yang menyebabkan ketidakakuratan detik per hari dan perlu diperbaiki secara berkala.

Anggap saja osilator internal ini sebagai "detak jantung" jam. Seperti halnya detak jantung yang tidak teratur dapat memengaruhi kesehatan seseorang, osilator yang tidak akurat dapat menyebabkan jam cepat atau lambat.

Waktu yang salah dapat menyebabkan masalah dengan berbagai tingkat dampak. Bisa jadi hanya melewatkan pengingat sederhana atau bahkan kegagalan peluncuran pesawat luar angkasa.

Seiring pertumbuhan infrastruktur Facebook, presisi waktu menjadi sangat penting. Misalnya, mengetahui perbedaan waktu yang akurat antara dua server acak di pusat data sangat penting untuk menjaga urutan transaksi di seluruh server tersebut.

Dalam postingan ini, kita akan belajar bagaimana Facebook mencapai presisi waktu di jutaan servernya dengan NTP dan kemudian dengan PTP.

Network Time Protocol

Facebook memulai dengan Network Time Protocol (NTP) untuk menjaga sinkronisasi perangkat.

NTP adalah cara bagi komputer untuk menyinkronkan jam mereka melalui jaringan. Ini membantu memastikan semua perangkat di jaringan memiliki waktu yang sama dan akurat.

Sinkronisasi jam sangat penting untuk banyak tugas, seperti:

  • Menjadwalkan acara dan pertemuan
  • Mencatat dan melacak aktivitas
  • Memastikan urutan transaksi yang tepat
  • Mengkoordinasikan tindakan antar sistem yang berbeda

NTP menggunakan sistem hierarkis server waktu di mana server yang paling akurat berada di atas. Ada proses 3 langkah bagaimana NTP bekerja:

  1. Komputer di jaringan secara berkala meminta waktu saat ini dari server ini.
  2. Server merespons dengan waktu saat ini mereka dengan mempertimbangkan penundaan jaringan.
  3. Komputer yang meminta menyesuaikan jamnya berdasarkan informasi yang diterima dari server.

Diagram di bawah ini menunjukkan sistem hierarkis server yang digunakan oleh NTP.

sumber: How Facebook Syncs Time Across Millions of Servers (bytebytego.com)

Facebook membangun layanan NTP dalam skala besar. Mereka menggunakan chrony, implementasi server NTP modern. Awalnya mereka menggunakan layanan ntpd, tetapi pengujian menunjukkan bahwa chrony jauh lebih akurat dan skalabel.

Chrony adalah daemon yang relatif baru pada saat itu, tetapi menawarkan kesempatan untuk membawa presisi turun ke nanodetik. Juga, dari perspektif konsumsi sumber daya, chrony mengonsumsi lebih sedikit RAM dibandingkan dengan ntpd.

sumber: How Facebook Syncs Time Across Millions of Servers (bytebytego.com)

Mereka merancang layanan NTP dalam empat lapisan berdasarkan struktur hierarkis NTP.

  • Stratum 0 adalah lapisan satelit dengan jam atom presisi dari sistem satelit navigasi global (GNSS), seperti GPS, GLONASS, atau Galileo.
  • Stratum 1 adalah jam atom Facebook yang menyinkronkan dengan GNSS.
  • Stratum 2 adalah kumpulan server NTP yang menyinkronkan dengan perangkat Stratum 1.
  • Terakhir, Stratum 3 adalah lapisan server yang dikonfigurasi untuk skala yang lebih besar.

sumber: NTP: Building a more accurate time service at Facebook scale (fb.com)

Ada beberapa konsep menarik yang perlu diperhatikan di sini:

  • Leap second
  • Smearing

Rotasi Bumi tidak konsisten dan dapat bervariasi sedikit dari waktu ke waktu. Oleh karena itu, jam disinkronkan dengan rotasi Bumi dengan menambahkan atau menghapus satu detik secara berkala. Ini disebut leap second.

Sementara penambahan atau penghapusan leap second hampir tidak terlihat oleh manusia, ini dapat menyebabkan masalah server. Server mengharapkan waktu bergerak maju terus-menerus, dan perubahan mendadak satu detik dapat menyebabkan mereka melewatkan tugas penting.

Untuk mengurangi dampak leap second pada server, digunakan teknik yang disebut "smearing".

Alih-alih menambahkan atau menghapus satu detik penuh sekaligus, waktu disesuaikan secara bertahap dalam peningkatan kecil selama beberapa jam. Ini mirip dengan menyamarkan penundaan kereta dengan menyebarkan penyesuaian di beberapa stasiun.

Dalam kasus layanan NTP Facebook, smearing leap-second terjadi di Stratum 2. Server Stratum 3 menerima waktu yang sudah disesuaikan dan tidak mengetahui adanya leap second.

Kedatangan Precision Time Protocol

Adopsi NTP cukup berhasil untuk Facebook. Ini membantu mereka meningkatkan akurasi dari 10 milidetik menjadi 100 mikrodetik.

Namun, karena Facebook ingin berkembang ke sistem yang lebih maju dan membangun metaverse, mereka menginginkan tingkat akurasi yang lebih tinggi lagi.

Oleh karena itu, pada akhir 2022, Facebook beralih dari NTP ke Precision Time Protocol (PTP).

Ada beberapa masalah dengan NTP, antara lain:

  • NTP dan Sistem Asinkron: Sistem yang menggunakan NTP bersifat asinkron, artinya mereka bekerja secara independen tanpa jam global bersama. Sistem ini secara berkala memeriksa satu sama lain untuk memastikan sinkronisasi. Namun, seiring pertumbuhan sistem yang lebih besar, diperlukan lebih banyak pemeriksaan yang dapat memperlambat jaringan.
  • NTP dan Metode Penjagaan Waktu: NTP rentan terhadap variasi dan latensi karena metode penjagaan waktunya yang menggunakan jam fisik. Dengan kata lain, NTP seperti jam microwave yang menjaga waktu di perangkat. Jika ada perubahan waktu (misalnya, daylight savings), jam perlu disesuaikan secara manual.

Sebaliknya, PTP bekerja seperti jam smartphone yang memperbarui waktunya secara otomatis. Ketika ada perubahan waktu atau ponsel berpindah ke zona waktu baru, jam memperbarui dirinya dengan merujuk waktu melalui jaringan.

Sementara NTP memberikan sinkronisasi pada tingkat milidetik, jaringan PTP dapat berharap mencapai presisi pada tingkat nanodetik.

Apa yang Membuat PTP Lebih Efektif?

Seperti yang dibahas sebelumnya, komputer khusus yang disebut Stratum bertindak sebagai referensi waktu untuk komputer lain di jaringan. Ketika komputer membutuhkan waktu saat ini, ia mengirim permintaan ke Stratum, yang membalas dengan waktu saat ini. Proses ini dikenal sebagai sync messaging.

Ketika Stratum mengirimkan waktu saat ini ke komputer lain, informasi tersebut bergerak melintasi jaringan, mengakibatkan beberapa latensi. Beberapa faktor dapat meningkatkan latensi ini, seperti:

  • Kecepatan sinyal bergerak melalui kabel serat optik.
  • Waktu yang dibutuhkan perangkat jaringan untuk mengonversi sinyal.
  • Kualitas peralatan jaringan, seperti router dan switch.
  • Waktu yang dibutuhkan perangkat lunak dan driver untuk memproses informasi waktu.

Karena latensi, waktu yang diterima oleh komputer lain tidak lagi akurat ketika tiba di komputer penerima.

Solusi yang jelas adalah mengukur latensi dan menambahkannya ke waktu yang diterima oleh komputer lain untuk mendapatkan waktu yang lebih akurat. Namun, mengukur latensi sulit karena setiap komputer memiliki jamnya sendiri, dan tidak ada jam universal untuk dibandingkan.

Untuk mengukur latensi, dua asumsi tentang konsistensi dan simetri dibuat:

  • Latensi yang dialami paket saat bepergian melintasi jaringan konsisten.
  • Latensi dari Stratum ke komputer lain sama dengan latensi dari komputer lain kembali ke Stratum. Dengan kata lain, jaringan simetris.

Oleh karena itu, akurasi sinkronisasi waktu dapat ditingkatkan dengan memaksimalkan konsistensi dan simetri di jaringan.

PTP adalah solusi yang membantu mencapai hal ini.

PTP menggunakan penandaan waktu perangkat keras untuk meningkatkan konsistensi. Ini berarti bahwa cap waktu ditambahkan ke informasi waktu di tingkat perangkat keras, mengurangi dampak penundaan perangkat lunak dan driver.

PTP juga menggunakan jam transparan, yang merupakan perangkat khusus yang mengukur dan mengompensasi waktu yang dihabiskan informasi saat melewati peralatan jaringan.

Kebutuhan Akan PTP

Mari kita lihat kasus praktis di mana PTP diperlukan.

Bayangkan Anda menggunakan Facebook dan memposting pembaruan status baru. Ketika Anda mencoba melihat postingan Anda, ada kemungkinan bahwa permintaan Anda untuk melihat postingan tersebut ditangani oleh server yang berbeda dari server yang awalnya memproses postingan Anda.

Jika server yang menangani permintaan tampilan Anda tidak memiliki data terbaru, Anda mungkin tidak melihat postingan Anda. Ini menjengkelkan bagi pengguna dan bertentangan dengan janji bahwa berinteraksi dengan sistem terdistribusi seperti Facebook harus bekerja sama dengan berinteraksi dengan satu server yang memiliki semua data.

Dalam solusi lama, Facebook mengirimkan permintaan tampilan Anda ke beberapa server dan menunggu sebagian besar dari mereka setuju pada data sebelum menunjukkannya kepada Anda. Tetapi ini memerlukan sumber daya komputasi tambahan dan menambah penundaan karena komunikasi bolak-balik melalui jaringan.

Dengan menggunakan PTP untuk menjaga sinkronisasi waktu yang tepat di seluruh servernya, mereka dapat membuat permintaan tampilan menunggu hingga server mencapai timestamp dari postingan asli Anda. Tidak perlu beberapa permintaan dan tanggapan.

sumber: How Facebook Syncs Time Across Millions of Servers (bytebytego.com)

Namun, ini hanya bekerja jika semua jam server sangat tersinkronisasi. Juga, perbedaan antara jam server dan waktu referensi perlu diketahui.

PTP menyediakan sinkronisasi ketat ini. Ini dapat menyinkronkan waktu sekitar 100 kali lebih tepat daripada NTP, yang diperlukan untuk kebutuhan Facebook.

Ini hanyalah salah satu contoh. Ada beberapa kasus penggunaan tambahan di mana PTP unggul seperti:

  • Pelacakan peristiwa
  • Invalidasi cache
  • Peningkatan deteksi pelanggaran privasi
  • Kompensasi latensi di metaverse

Arsitektur PTP

Arsitektur PTP Facebook terdiri dari tiga komponen utama:

  • PTP Rack
  • PTP Network
  • PTP Client

sumber: How Precision Time Protocol is being deployed at Meta (fb.com)

Mari kita lihat setiap komponen dan memahami bagaimana mereka bekerja bersama untuk menyediakan penjagaan waktu yang tepat.

PTP Rack

PTP rack menampung perangkat keras dan perangkat lunak yang melayani waktu kepada klien.

Ini terdiri dari komponen penting seperti:

  • Antena GNSS: Di sinilah waktu berasal di Bumi. Antena menerima sinyal waktu dari GPS, Galileo, dan konstelasi satelit lainnya. Facebook menggunakan teknologi GNSS-over-fiber untuk mendistribusikan sinyal, yang lebih andal dan lebih mudah dipasang daripada kabel koaksial tradisional.
  • Time Appliance: Ini adalah jantung dari infrastruktur penjagaan waktu. Ini mendisiplinkan waktu yang diterima dari antena GNSS menggunakan jam atom untuk akurasi dan stabilitas yang lebih baik. Facebook telah mengembangkan peralatan waktu baru yang dapat mendukung hingga 1 juta klien tanpa mengurangi akurasi.
  • Oscillatord: Ini adalah komponen perangkat lunak yang mengonfigurasi dan memantau Time Appliance, termasuk penerima GNSS dan jam atom. Ini mengekspor data yang membantu memutuskan apakah Time Appliance harus melayani klien atau diambil offline.
  • Kartu Jaringan (NIC): Ini adalah antarmuka antara Time Appliance dan jaringan. Ini memberi cap waktu pada paket PTP menggunakan jamnya, yang disinkronkan dengan Time Appliance untuk akurasi tingkat nanodetik.
  • Ptp4u: Ini adalah perangkat lunak server PTP buatan Facebook yang dapat menangani lebih dari 1 juta klien per server, jauh lebih banyak daripada solusi yang ada. Ini berjalan di Time Appliance dan mengirim pesan PTP kepada klien.

sumber: How Precision Time Protocol is being deployed at Meta (fb.com)

PTP Network

Jaringan PTP bertanggung jawab untuk mendistribusikan waktu dari rak PTP ke klien. Facebook menggunakan PTP melalui jaringan IP standar dengan beberapa peningkatan kunci:

  • PTP Unicast: Mereka menggunakan unicast PTP daripada multicast untuk konfigurasi jaringan yang lebih sederhana dan skalabilitas yang lebih baik. Klien meminta waktu dari server, dan server memberikan permintaan dan mengirim pesan PTP.
  • Transparent Clocks: Setiap switch jaringan antara klien dan server bertindak sebagai jam transparan. Ini mengukur waktu yang dihabiskan setiap paket PTP di switch dan mencatatnya di paket. Ini memungkinkan klien untuk memperhitungkan penundaan jaringan secara akurat.
  • Boundary Clock Avoidance: Facebook menghindari penggunaan jam batas, yang bertindak sebagai klien dan server, untuk mengurangi kompleksitas. Mereka hanya mengandalkan jam transparan di switch jaringan.

Alur unicast PTP tipikal terdiri dari langkah-langkah berikut:

  1. Klien Memulai Negosiasi: Klien PTP memulai proses dengan meminta transmisi unicast dari server PTP. Ini mengirim tiga jenis permintaan:
    • Sync Grant Request: Klien meminta server untuk mengirim sejumlah pesan Sync dan Follow-Up per detik, yang berisi waktu saat ini, untuk durasi tertentu. Ini membantu klien menyesuaikan jamnya agar sesuai dengan jam server.
    • Announce Grant Request: Klien meminta server untuk mengirim sejumlah pesan Announce per detik, yang berisi status server, untuk durasi tertentu. Ini membantu klien memastikan bahwa server tidak berhenti atau berperilaku tidak normal.
    • Delay Response Grant Request: Klien memberi tahu server bahwa ia akan mengirim pesan Delay Request, dan meminta server untuk merespons dengan paket Delay Response untuk durasi tertentu. Ini membantu klien memperhitungkan penundaan komunikasi.
  2. Server Memberikan Permintaan: Server PTP perlu memberikan permintaan ini dan mengirimkan respons pemberian yang sesuai kepada klien.
  3. Server Mengirim Pesan PTP: Setelah permintaan diberikan, server mulai mengirim pesan PTP yang diminta.
  4. Klien Mengirim Permintaan Delay: Klien mengirim pesan Delay Request ke server pada interval yang disepakati untuk menentukan penundaan jalur jaringan.
  5. Klien Menyegarkan Pemberian: Klien perlu secara berkala menyegarkan pemberian dengan mengulangi proses negosiasi sebelum pemberian saat ini kedaluwarsa.

sumber: How Facebook Syncs Time Across Millions of Servers (bytebytego.com)

PTP Client

Perangkat lunak klien PTP berjalan di setiap server yang membutuhkan waktu akurat. Facebook menggunakan beberapa komponen berbeda:

  • ptp4I: Klien PTP sumber terbuka yang menerima pesan PTP dari server dan mendisiplinkan jam perangkat keras NIC. Facebook telah membuat beberapa peningkatan pada ptp4I untuk menangani skala dan persyaratan uniknya.
  • fbclock: Ini adalah API kustom Facebook yang menyediakan waktu PTP untuk aplikasi. Alih-alih satu cap waktu, ini memberikan "jendela ketidakpastian" - rentang waktu yang dijamin mengandung waktu yang sebenarnya dengan tingkat kepastian yang tinggi.
  • Kernel Timestamping: Kernel Linux di setiap server memberi cap waktu pada paket PTP masuk dan keluar di perangkat keras untuk akurasi maksimum. Ini bergantung pada dukungan driver NIC dan konfigurasi yang cermat.

Kesimpulan

Sebagai kesimpulan, adopsi Precision Time Protocol (PTP) oleh Facebook di seluruh infrastrukturnya adalah langkah maju yang signifikan dalam memastikan penjagaan waktu yang tepat dan andal dalam skala yang belum pernah terjadi sebelumnya. Dengan merancang ulang dan membangun berbagai komponen, Facebook telah mendorong batasan dari apa yang mungkin dengan PTP.

Juga, sifat open-source dari sebagian besar pekerjaan ini membantu kita belajar dari solusi PTP yang diimplementasikan oleh mereka.

Referensi:

Komentar

Postingan populer dari blog ini

Konflik Lisensi yang Mengubah Arah Apple dari GCC ke Clang/LLVM

Analisis Mendalam di Balik Angka Fenomenal Klaim Margin Teoretis 545% DeepSeek