Saya telah mendengar desas-desus tentang hal-hal buruk yang terjadi pada basis data dan server surat jika Anda mengubah waktu sistem saat sedang berjalan. Namun, saya kesulitan menemukan informasi konkret tentang risiko aktual.
Saya memiliki server Postgres 9.3 produksi yang berjalan pada host Debian Wheezy dan waktu dimatikan oleh 367 detik. Bisakah saya menjalankan ntpdate
atau memulai openntp saat Postgres berjalan, atau apakah itu akan menyebabkan masalah? Jika demikian, apa metode yang lebih aman untuk mengoreksi waktu?
Apakah ada layanan lain yang lebih sensitif terhadap perubahan waktu sistem? Mungkin mail server (exim, sendmail, dll) atau antrian pesan (activemq, rabbitmq, zeromq, dll)?
sumber
now()
. Bisakah Anda menambahkan metode aman untuk mengubah waktu ke jawaban Anda?Biasanya bukan server database yang rentan terhadap kesalahan ketika lompatan waktu instan terjadi: itu adalah aplikasi yang menggunakan waktu itu.
Biasanya ada dua cara untuk melacak waktu: memiliki waktu pelacakan atau membandingkan waktu sistem. Keduanya memiliki beberapa tradeoff positif dan negatif.
Pelacakan waktu sendiri
Saya melihat ini digunakan dalam beberapa pemrograman dan sistem tertanam di mana waktu yang tepat tidak begitu penting. Dalam loop aplikasi utama cara melacak 'centang' diurus. Ini bisa berupa alarm yang diberikan oleh kernel, sleep atau select yang memberikan indikasi jumlah waktu yang berlalu. Ketika Anda tahu waktu berlalu, Anda tahu Anda bisa menambah atau mengurangi waktu ini ke penghitung. Penghitung ini yang membuat aplikasi pengaturan waktu Anda terjadi. Misalnya, jika penghitung lebih tinggi dari 10 detik Anda dapat membuang sesuatu, atau Anda perlu melakukan sesuatu.
Jika aplikasi tidak melacak waktu, penghitung tidak akan berubah. Ini bisa diinginkan tergantung pada desain aplikasi Anda. Misalnya, melacak berapa lama proses berjalan lama mengambil sesuatu ditangani lebih mudah dengan penghitung daripada daftar cap waktu mulai / berhenti.
Pro:
Menipu:
Membandingkan waktu sistem
Ini adalah sistem yang lebih sering digunakan: menyimpan stempel waktu dan membandingkannya dengan stempel waktu menggunakan panggilan waktu sistem. Kemiringan besar dalam waktu sistem dapat mengancam integritas aplikasi Anda, tugas beberapa detik dapat memakan waktu berjam-jam atau berakhir segera tergantung pada arah jam.
Pro:
Menipu:
Sistem yang terpengaruh
Sebagian besar aplikasi akan menggunakan timestamp dibandingkan dengan menjadwalkan tugas. Untuk sistem basis data yang bisa menjadi pembersihan cache.
Semua aplikasi yang menggunakan fungsi basis data dan waktu panggilan dalam bahasa permintaan akan dipengaruhi oleh kemiringan jika aplikasi tidak mendeteksi dan menangani sesuai. Aplikasi tidak pernah dapat berhenti berjalan atau mengizinkan periode login tidak terbatas tergantung pada tujuannya.
Sistem surat akan menggunakan stempel waktu dan / atau batas waktu untuk menangani surat yang sudah basi atau tidak terkirim. Kemiringan jam bisa memengaruhi itu tetapi dengan dampak yang jauh lebih kecil. Penghitung waktu mundur terkait penyambungan kembali ke server dapat terlewat sehingga menghasilkan penalti pada server penghubung.
Saya tidak berpikir (belum meneliti) bahwa alarm kernel akan berbunyi ketika mengubah waktu sistem. Sistem yang menggunakan ini bisa aman.
Solusi
Pindahkan waktu dengan lembut. Ini dapat ditemukan dalam dokumentasi solusi waktu favorit Anda.
sumber