From 393b436d4c9bef65855461e3316d6ad576e05c62 Mon Sep 17 00:00:00 2001 From: Sean Kearney Date: Tue, 7 Jan 2025 17:08:54 -0500 Subject: [PATCH] post: Conflict Resolution in My DJ Cloud Using Timestamps --- .../hybrid-logical-clock.png | Bin 0 -> 73791 bytes .../index.md | 73 ++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 content/post/2025-01-07-hybrid-logical-clocks-and-conflict-resolution/hybrid-logical-clock.png create mode 100644 content/post/2025-01-07-hybrid-logical-clocks-and-conflict-resolution/index.md diff --git a/content/post/2025-01-07-hybrid-logical-clocks-and-conflict-resolution/hybrid-logical-clock.png b/content/post/2025-01-07-hybrid-logical-clocks-and-conflict-resolution/hybrid-logical-clock.png new file mode 100644 index 0000000000000000000000000000000000000000..e441cf0202d8eb61423817db1ca48f14746fa04e GIT binary patch literal 73791 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

Hg~t?h(?O%P`>q=}AT(-c_&UA|-}3UHK(J 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 literal 0 HcmV?d00001 diff --git a/content/post/2025-01-07-hybrid-logical-clocks-and-conflict-resolution/index.md b/content/post/2025-01-07-hybrid-logical-clocks-and-conflict-resolution/index.md new file mode 100644 index 0000000..db03ce0 --- /dev/null +++ b/content/post/2025-01-07-hybrid-logical-clocks-and-conflict-resolution/index.md @@ -0,0 +1,73 @@ ++++ +date = 2025-01-07 +title = "Conflict Resolution in My DJ Cloud Using Timestamps" +description = "Discover how My DJ Cloud ensures data consistency and integrity with Hybrid Logical Clocks (HLC). Learn about timestamp generation, conflict resolution, and handling concurrent updates across devices." + +[taxonomies] +tags = ["Sync"] ++++ + +At My DJ Cloud, one of the earlier problems we needed to solve when building our file synchronization engine was ensuring data consistency and integrity. With multiple machines modifying the same file simultaneously, the Cloud needs to understand how to handle it. We decided to leverage a Hybrid Logical Clock (HLC) to generate our timestamps when handling conflicts and maintain the latest version of files across devices. This post will provide an introduction into how we utilize HLC for conflict resolution and how our cloud-side system determines which version should be used. + + + +## Understanding the Role of Timestamps + +Timestamps are unique markers that indicate the time at which an event or operation occurred. In My DJ Cloud, as in message-based systems, they serve as a reliable means to order events and resolve conflicts. By associating each operation with a timestamp, we can easily determine the sequence of events and manage concurrent updates. + +## Hybrid Logical Clocks (HLC) + +Our Hybrid Logical Clock (HLC) is an advanced mechanism that combines physical time (wall clock time), a logical counter, and a unique machine identifier. Unlike simple timestamps, which only represent the physical time, HLCs provide additional information to maintain a causal relationship between events. This helps in resolving conflicts more effectively by capturing the order of events even in distributed environments where system clocks might not be perfectly synchronized. The logical counter ensures that events occurring at the same physical time are ordered correctly, while the machine identifier helps track which device generated the timestamp. + +1. **Wall Clock Time**: The time reported from the operating system (with any adjustments—see clock skew below). +2. **Logical Counter**: Used to handle events that occur within the same "wall clock time." It ensures that events are ordered correctly even if they happen simultaneously or within very short intervals. The logical counter increments whenever multiple events occur at the same physical time, providing a unique sequence number for each event. +3. **Unique Machine Identifier**: Identifies a specific machine for a user. + +## Implementing Hybrid Logical Clocks for Conflict Resolution + +### 1. Assigning Timestamps + +Each device generates timestamps for its operations using a Hybrid Logical Clock (HLC). Our HLC combines physical time, a logical counter, and a machine identifier, providing a robust way to order events. Moreover, we are able to identify which of the users' machines the event originated from. + +``` +function generateTimestamp(currentTime, lastWallClockTime, logicalCounter, machineId): + if currentTime > lastWallClockTime: + lastWallClockTime = currentTime + logicalCounter = 0 + else: + logicalCounter += 1 + return (lastWallClockTime, logicalCounter, machineId) +``` + +### 2. Formatting Timestamps + +Our HLC has three parts, which can make using them a bit cumbersome. We use these timestamps everywhere and ideally they'd be in a format that can be easily stored, transmitted, and deconstructed later. When comparing things, nothing is easier than comparing two numbers to determine which is greater! We ultimately landed on storing our timestamps in a 64-bit number. + +Example `607259396950458369`: +- Clock: `2024-09-24 15:13:24.4681608` +- Counter: `0` +- Device: `1` + +### 3. Comparing Timestamps + +When conflicts arise due to concurrent updates from multiple machines, HLC plays a crucial role in determining the most recent operation. The general principle is to retain the operation with the latest timestamp, as it represents the most up-to-date information. This process is rather straightforward with our timestamps—the largest timestamp wins every time. + +### 4. Handling Clock Skew + +One challenge in using timestamps is managing clock skew/drift, where the system clocks of different devices may not be perfectly synchronized. Generally speaking, modern operating systems will automatically manage the system clock. However, we go a step further to mitigate this issue; we internally leverage NTP (Network Time Protocol) to manage our own clock to prevent any data issues. + +## Practical Applications in My DJ Cloud + +### File Synchronization Services + +At My DJ Cloud, we utilize HLC to handle concurrent updates from multiple devices. By comparing HLC values, our system ensures that the most recent changes are synchronized across all devices, avoiding data loss or corruption. This mirrors the approach used in message-based systems, where timestamps help in ordering messages and resolving conflicts. + +### Server-Side Version Determination + +Our server-side system plays a pivotal role in determining which version of a file should be used when conflicts arise. When multiple machines change the same file at the same time, the server compares the HLC values of the conflicting versions. The version with the latest HLC is retained as it represents the most recent update. This ensures that the latest changes are always preserved and synchronized across all devices. + +![Hybrid Logical Clock Diagram](hybrid-logical-clock.png) + +## Conclusion + +Hybrid Logical Clocks are a powerful tool for conflict resolution in file synchronization services like My DJ Cloud. By providing a reliable means to order events and determine the most recent operations, HLC helps maintain data consistency and integrity. Leveraging HLC allows us to enhance our conflict resolution strategy and ensure that our users always have access to the most up-to-date files. \ No newline at end of file