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:
- Tidak tergantung pada jam sistem
- Tidak akan merusak kemiringan waktu besar
- Tidak ada panggilan sistem yang mahal
- Penghitung kecil akan memakan biaya lebih sedikit memori daripada cap waktu penuh
Menipu:
- Waktu tidak terlalu akurat
- Perubahan waktu sistem dapat menjadikannya lebih tidak akurat
- Pengaturan waktu relatif untuk menjalankan aplikasi, tidak bertahan lama
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:
- Perbandingan waktu yang akurat
- Tetap bertahan selama restart dan pemadaman yang lama
Menipu:
- Mengambil panggilan sistem untuk mendapatkan cap waktu baru untuk dibandingkan dengan cap waktu lain
- Aplikasi harus mewaspadai kemiringan atau bisa pecah
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.
now()
. Bisakah Anda menambahkan metode aman untuk mengubah waktu ke jawaban Anda?