{"id":2608,"date":"2025-06-07T10:51:08","date_gmt":"2025-06-07T10:51:08","guid":{"rendered":"https:\/\/diznr.com\/?p=2608"},"modified":"2025-06-07T10:51:08","modified_gmt":"2025-06-07T10:51:08","slug":"logical-clock-in-distributed-system-happened-before-clock-clock-sync-vector-clock","status":"publish","type":"post","link":"https:\/\/www.reilsolar.com\/pdf\/logical-clock-in-distributed-system-happened-before-clock-clock-sync-vector-clock\/","title":{"rendered":"LOGICAL CLOCK IN DISTRIBUTED SYSTEM HAPPENED BEFORE CLOCK CLOCK SYNC CLOCK VECTOR"},"content":{"rendered":"<p>LOGICAL CLOCK IN DISTRIBUTED SYSTEM HAPPENED BEFORE CLOCK CLOCK SYNC CLOCK VECTOR.<\/p>\n<p><span style=\"color: #ffffff\">Distributed Systems Physical Clocks Logical Clocks Vector Clocks Synchronize Physical Clocks Logical Time Happened Before Clocks Linear Time Distributed Systems Physical Clocks Logical Clocks Vector Clocks.<\/span><\/p>\n<p>[fvplayer id=&#8221;81&#8243;]<\/p>\n<p><span style=\"color: #ffffff\">Synchronize Physical Clocks Logical Time Happened Before Linear Time Time Ordering Module Vector Clock Vs Lamport Clock Logical Clock In Distributed System What Is Global Clock In Distributed System. Vector Clock In Distributed System Types Of Clocks In Distributed System Physical Clocks Logical Clocks Vector Clocks Synchronize Physical Clocks Logical Time Happened Before Linear Time Time Ordering Module Vector Clock Vs Lamport Clock. Logical Clock in Distributed System. What Is Global Clock In Distributed System Vector Clock In Distributed System Types Of Clocks In Distributed System Time Ordering Module. Vector Clock Vs Lamport Clock Logical Clock In Distributed System What Is Global Clock In Distributed System Vector Clock In Distributed System Types Of Clocks In Distributed System.<\/span><\/p>\n<p class=\"\" data-start=\"0\" data-end=\"206\">Here&#8217;s a clear and concise explanation of <strong data-start=\"42\" data-end=\"60\">Logical Clocks<\/strong> in Distributed Systems, including concepts like <strong data-start=\"109\" data-end=\"137\">Happened-Before Relation<\/strong>, <strong data-start=\"139\" data-end=\"156\">Lamport Clock<\/strong>, <strong data-start=\"158\" data-end=\"174\">Vector Clock<\/strong>, and <strong data-start=\"180\" data-end=\"205\">Clock Synchronization<\/strong>.<\/p>\n<hr class=\"\" data-start=\"208\" data-end=\"211\" \/>\n<h2 class=\"\" data-start=\"213\" data-end=\"255\">\ud83d\udd52 LOGICAL CLOCK IN DISTRIBUTED SYSTEMS<\/h2>\n<p class=\"\" data-start=\"257\" data-end=\"400\">In distributed systems, there\u2019s <strong data-start=\"289\" data-end=\"308\">no global clock<\/strong>. So, we use <strong data-start=\"321\" data-end=\"339\">logical clocks<\/strong> to order events correctly across multiple processes (nodes).<\/p>\n<hr class=\"\" data-start=\"402\" data-end=\"405\" \/>\n<h3 class=\"\" data-start=\"407\" data-end=\"471\">\ud83d\udd04 1. <strong data-start=\"417\" data-end=\"449\">Happened-Before Relation (\u2192)<\/strong> \u2013 <em data-start=\"452\" data-end=\"471\">by Leslie Lamport<\/em><\/h3>\n<p class=\"\" data-start=\"473\" data-end=\"516\">This defines a <strong data-start=\"488\" data-end=\"505\">partial order<\/strong> of events.<\/p>\n<p class=\"\" data-start=\"518\" data-end=\"536\">\ud83d\udccc <strong data-start=\"521\" data-end=\"536\">Definition:<\/strong><\/p>\n<ul data-start=\"537\" data-end=\"745\">\n<li class=\"\" data-start=\"537\" data-end=\"616\">\n<p class=\"\" data-start=\"539\" data-end=\"616\">If <strong data-start=\"542\" data-end=\"564\">A and B are events<\/strong> in the same process and A occurs before B \u2192 <code data-start=\"609\" data-end=\"616\">A \u2192 B<\/code><\/p>\n<\/li>\n<li class=\"\" data-start=\"617\" data-end=\"690\">\n<p class=\"\" data-start=\"619\" data-end=\"690\">If A is <strong data-start=\"627\" data-end=\"648\">sending a message<\/strong> and B is <strong data-start=\"658\" data-end=\"680\">receiving the same<\/strong> \u2192 <code data-start=\"683\" data-end=\"690\">A \u2192 B<\/code><\/p>\n<\/li>\n<li class=\"\" data-start=\"691\" data-end=\"745\">\n<p class=\"\" data-start=\"693\" data-end=\"745\">If <code data-start=\"696\" data-end=\"703\">A \u2192 B<\/code> and <code data-start=\"708\" data-end=\"715\">B \u2192 C<\/code> \u2192 then <code data-start=\"723\" data-end=\"730\">A \u2192 C<\/code> (transitivity)<\/p>\n<\/li>\n<\/ul>\n<p class=\"\" data-start=\"747\" data-end=\"836\"><strong data-start=\"747\" data-end=\"759\">Purpose:<\/strong> Establish a cause-effect relationship between events in different processes.<\/p>\n<hr class=\"\" data-start=\"838\" data-end=\"841\" \/>\n<h3 class=\"\" data-start=\"843\" data-end=\"895\">\u23f1\ufe0f 2. <strong data-start=\"853\" data-end=\"895\">Lamport\u2019s Logical Clock (Scalar Clock)<\/strong><\/h3>\n<p class=\"\" data-start=\"897\" data-end=\"994\"><strong data-start=\"897\" data-end=\"906\">Goal:<\/strong> Assign numbers (timestamps) to events to maintain <code data-start=\"957\" data-end=\"994\">A \u2192 B \u21d2 timestamp(A) &lt; timestamp(B)<\/code><\/p>\n<p class=\"\" data-start=\"996\" data-end=\"1009\">\ud83d\udccc <strong data-start=\"999\" data-end=\"1009\">Rules:<\/strong><\/p>\n<ol data-start=\"1010\" data-end=\"1257\">\n<li class=\"\" data-start=\"1010\" data-end=\"1064\">\n<p class=\"\" data-start=\"1013\" data-end=\"1064\">Each process maintains a local clock (initially 0).<\/p>\n<\/li>\n<li class=\"\" data-start=\"1065\" data-end=\"1129\">\n<p class=\"\" data-start=\"1068\" data-end=\"1129\">Before executing any event, increment the clock: <code data-start=\"1117\" data-end=\"1129\">C := C + 1<\/code><\/p>\n<\/li>\n<li class=\"\" data-start=\"1130\" data-end=\"1180\">\n<p class=\"\" data-start=\"1133\" data-end=\"1180\">When sending a message, send timestamp with it.<\/p>\n<\/li>\n<li class=\"\" data-start=\"1181\" data-end=\"1257\">\n<p class=\"\" data-start=\"1184\" data-end=\"1257\">On receiving a message with timestamp <code data-start=\"1222\" data-end=\"1225\">T<\/code>, set:<br data-start=\"1231\" data-end=\"1234\" \/><code data-start=\"1237\" data-end=\"1257\">C := max(C, T) + 1<\/code><\/p>\n<\/li>\n<\/ol>\n<p class=\"\" data-start=\"1259\" data-end=\"1276\"><strong data-start=\"1259\" data-end=\"1274\">Limitation:<\/strong><\/p>\n<ul data-start=\"1277\" data-end=\"1365\">\n<li class=\"\" data-start=\"1277\" data-end=\"1365\">\n<p class=\"\" data-start=\"1279\" data-end=\"1365\">It can say one event happened before another but <strong data-start=\"1328\" data-end=\"1364\">not if two events are concurrent<\/strong>.<\/p>\n<\/li>\n<\/ul>\n<hr class=\"\" data-start=\"1367\" data-end=\"1370\" \/>\n<h3 class=\"\" data-start=\"1372\" data-end=\"1399\">\ud83e\udded 3. <strong data-start=\"1382\" data-end=\"1399\">Vector Clocks<\/strong><\/h3>\n<p class=\"\" data-start=\"1401\" data-end=\"1480\"><strong data-start=\"1401\" data-end=\"1410\">Goal:<\/strong> Detect <strong data-start=\"1418\" data-end=\"1442\">causal relationships<\/strong> and <strong data-start=\"1447\" data-end=\"1468\">concurrent events<\/strong> accurately.<\/p>\n<p class=\"\" data-start=\"1482\" data-end=\"1502\">\ud83d\udccc <strong data-start=\"1485\" data-end=\"1502\">How it works:<\/strong><\/p>\n<ul data-start=\"1503\" data-end=\"1756\">\n<li class=\"\" data-start=\"1503\" data-end=\"1574\">\n<p class=\"\" data-start=\"1505\" data-end=\"1574\">Each process keeps a vector <code data-start=\"1533\" data-end=\"1539\">V[i]<\/code> of size <code data-start=\"1548\" data-end=\"1551\">n<\/code> (number of processes).<\/p>\n<\/li>\n<li class=\"\" data-start=\"1575\" data-end=\"1609\">\n<p class=\"\" data-start=\"1577\" data-end=\"1609\">Before event: <code data-start=\"1591\" data-end=\"1609\">V[i] := V[i] + 1<\/code><\/p>\n<\/li>\n<li class=\"\" data-start=\"1610\" data-end=\"1644\">\n<p class=\"\" data-start=\"1612\" data-end=\"1644\">On sending message, send vector.<\/p>\n<\/li>\n<li class=\"\" data-start=\"1645\" data-end=\"1756\">\n<p class=\"\" data-start=\"1647\" data-end=\"1685\">On receiving message with vector <code data-start=\"1680\" data-end=\"1684\">V'<\/code>:<\/p>\n<ul data-start=\"1688\" data-end=\"1756\">\n<li class=\"\" data-start=\"1688\" data-end=\"1708\">\n<p class=\"\" data-start=\"1690\" data-end=\"1708\"><code data-start=\"1690\" data-end=\"1708\">V[i] := V[i] + 1<\/code><\/p>\n<\/li>\n<li class=\"\" data-start=\"1711\" data-end=\"1756\">\n<p class=\"\" data-start=\"1713\" data-end=\"1756\">For all <code data-start=\"1721\" data-end=\"1728\">j \u2260 i<\/code>, <code data-start=\"1730\" data-end=\"1756\">V[j] := max(V[j], V'[j])<\/code><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p class=\"\" data-start=\"1758\" data-end=\"1776\">\ud83d\udd0d <strong data-start=\"1761\" data-end=\"1776\">Comparison:<\/strong><\/p>\n<ul data-start=\"1777\" data-end=\"1906\">\n<li class=\"\" data-start=\"1777\" data-end=\"1839\">\n<p class=\"\" data-start=\"1779\" data-end=\"1839\">Event A <strong data-start=\"1787\" data-end=\"1806\">happened before<\/strong> B \u21e8 <code data-start=\"1811\" data-end=\"1824\">V(A) &lt; V(B)<\/code> (element-wise)<\/p>\n<\/li>\n<li class=\"\" data-start=\"1840\" data-end=\"1906\">\n<p class=\"\" data-start=\"1842\" data-end=\"1906\">Events <strong data-start=\"1849\" data-end=\"1863\">concurrent<\/strong> \u21e8 <code data-start=\"1866\" data-end=\"1872\">V(A)<\/code> and <code data-start=\"1877\" data-end=\"1883\">V(B)<\/code> are <strong data-start=\"1888\" data-end=\"1906\">not comparable<\/strong><\/p>\n<\/li>\n<\/ul>\n<hr class=\"\" data-start=\"1908\" data-end=\"1911\" \/>\n<h3 class=\"\" data-start=\"1913\" data-end=\"1949\">\ud83d\udd70\ufe0f 4. <strong data-start=\"1924\" data-end=\"1949\">Clock Synchronization<\/strong><\/h3>\n<p class=\"\" data-start=\"1951\" data-end=\"1981\">Since there&#8217;s no common clock:<\/p>\n<ul data-start=\"1982\" data-end=\"2163\">\n<li class=\"\" data-start=\"1982\" data-end=\"2044\">\n<p class=\"\" data-start=\"1984\" data-end=\"2044\"><strong data-start=\"1984\" data-end=\"2016\">NTP (Network Time Protocol):<\/strong> Sync real clocks (physical)<\/p>\n<\/li>\n<li class=\"\" data-start=\"2045\" data-end=\"2110\">\n<p class=\"\" data-start=\"2047\" data-end=\"2110\"><strong data-start=\"2047\" data-end=\"2072\">Cristian\u2019s Algorithm:<\/strong> Get time from time server (1 request)<\/p>\n<\/li>\n<li class=\"\" data-start=\"2111\" data-end=\"2163\">\n<p class=\"\" data-start=\"2113\" data-end=\"2163\"><strong data-start=\"2113\" data-end=\"2136\">Berkeley Algorithm:<\/strong> Average times across nodes<\/p>\n<\/li>\n<\/ul>\n<p class=\"\" data-start=\"2165\" data-end=\"2259\">These aim to reduce <strong data-start=\"2185\" data-end=\"2200\">clock drift<\/strong> and <strong data-start=\"2205\" data-end=\"2238\">keep system-wide time in sync<\/strong>, though not perfect.<\/p>\n<hr class=\"\" data-start=\"2261\" data-end=\"2264\" \/>\n<h3 class=\"\" data-start=\"2266\" data-end=\"2286\">\ud83d\udcca Summary Table<\/h3>\n<div class=\"_tableContainer_16hzy_1\">\n<div class=\"_tableWrapper_16hzy_14 group flex w-fit flex-col-reverse\">\n<table class=\"w-fit min-w-(--thread-content-width)\" data-start=\"2288\" data-end=\"2862\">\n<thead data-start=\"2288\" data-end=\"2382\">\n<tr data-start=\"2288\" data-end=\"2382\">\n<th data-start=\"2288\" data-end=\"2311\" data-col-size=\"sm\">Concept<\/th>\n<th data-start=\"2311\" data-end=\"2342\" data-col-size=\"sm\">Purpose<\/th>\n<th data-start=\"2342\" data-end=\"2368\" data-col-size=\"sm\">Can Detect Concurrency?<\/th>\n<th data-start=\"2368\" data-end=\"2382\" data-col-size=\"sm\">Type<\/th>\n<\/tr>\n<\/thead>\n<tbody data-start=\"2479\" data-end=\"2862\">\n<tr data-start=\"2479\" data-end=\"2574\">\n<td data-start=\"2479\" data-end=\"2502\" data-col-size=\"sm\">Happened-Before<\/td>\n<td data-col-size=\"sm\" data-start=\"2502\" data-end=\"2533\">Partial ordering of events<\/td>\n<td data-col-size=\"sm\" data-start=\"2533\" data-end=\"2560\">Yes<\/td>\n<td data-col-size=\"sm\" data-start=\"2560\" data-end=\"2574\">Theory<\/td>\n<\/tr>\n<tr data-start=\"2575\" data-end=\"2670\">\n<td data-start=\"2575\" data-end=\"2598\" data-col-size=\"sm\">Lamport Clock<\/td>\n<td data-start=\"2598\" data-end=\"2629\" data-col-size=\"sm\">Order events logically<\/td>\n<td data-col-size=\"sm\" data-start=\"2629\" data-end=\"2656\">No<\/td>\n<td data-col-size=\"sm\" data-start=\"2656\" data-end=\"2670\">Scalar<\/td>\n<\/tr>\n<tr data-start=\"2671\" data-end=\"2766\">\n<td data-start=\"2671\" data-end=\"2694\" data-col-size=\"sm\">Vector Clock<\/td>\n<td data-col-size=\"sm\" data-start=\"2694\" data-end=\"2725\">Track causality + concurrency<\/td>\n<td data-col-size=\"sm\" data-start=\"2725\" data-end=\"2752\">Yes<\/td>\n<td data-col-size=\"sm\" data-start=\"2752\" data-end=\"2766\">Vector<\/td>\n<\/tr>\n<tr data-start=\"2767\" data-end=\"2862\">\n<td data-start=\"2767\" data-end=\"2790\" data-col-size=\"sm\">Clock Sync (NTP)<\/td>\n<td data-col-size=\"sm\" data-start=\"2790\" data-end=\"2821\">Sync real-time clocks<\/td>\n<td data-col-size=\"sm\" data-start=\"2821\" data-end=\"2848\">Not logical ordering<\/td>\n<td data-col-size=\"sm\" data-start=\"2848\" data-end=\"2862\">Physical<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div class=\"sticky end-(--thread-content-margin) h-0 self-end select-none\">\n<div class=\"absolute end-0 flex items-end\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<hr class=\"\" data-start=\"2864\" data-end=\"2867\" \/>\n<h3 class=\"\" data-start=\"2869\" data-end=\"2889\">\u2705 Real-World Use<\/h3>\n<ul data-start=\"2890\" data-end=\"3092\">\n<li class=\"\" data-start=\"2890\" data-end=\"2977\">\n<p class=\"\" data-start=\"2892\" data-end=\"2977\"><strong data-start=\"2892\" data-end=\"2932\">Databases (like Cassandra, DynamoDB)<\/strong> \u2192 use vector clocks for conflict resolution.<\/p>\n<\/li>\n<li class=\"\" data-start=\"2978\" data-end=\"3032\">\n<p class=\"\" data-start=\"2980\" data-end=\"3032\"><strong data-start=\"2980\" data-end=\"3008\">Distributed logs (Kafka)<\/strong> \u2192 maintain event order.<\/p>\n<\/li>\n<li class=\"\" data-start=\"3033\" data-end=\"3092\">\n<p class=\"\" data-start=\"3035\" data-end=\"3092\"><strong data-start=\"3035\" data-end=\"3068\">Debugging distributed systems<\/strong> \u2192 to trace event flows.<\/p>\n<\/li>\n<\/ul>\n<hr class=\"\" data-start=\"3094\" data-end=\"3097\" \/>\n<p class=\"\" data-start=\"3099\" data-end=\"3114\">Would you like:<\/p>\n<ul data-start=\"3115\" data-end=\"3254\">\n<li class=\"\" data-start=\"3115\" data-end=\"3157\">\n<p class=\"\" data-start=\"3117\" data-end=\"3157\">A <strong data-start=\"3119\" data-end=\"3156\">diagram of these clocks in action<\/strong>?<\/p>\n<\/li>\n<li class=\"\" data-start=\"3158\" data-end=\"3211\">\n<p class=\"\" data-start=\"3160\" data-end=\"3211\">Sample <strong data-start=\"3167\" data-end=\"3193\">code in Python or Java<\/strong> to simulate this?<\/p>\n<\/li>\n<li class=\"\" data-start=\"3212\" data-end=\"3254\">\n<p class=\"\" data-start=\"3214\" data-end=\"3254\">Or a <strong data-start=\"3219\" data-end=\"3240\">PDF summary sheet<\/strong> for revision?<\/p>\n<\/li>\n<\/ul>\n<p class=\"\" data-start=\"3256\" data-end=\"3268\">Let me know!<\/p>\n<h3 data-start=\"3256\" data-end=\"3268\"><a href=\"https:\/\/www.cs.uic.edu\/~ajayk\/Chapter3.pdf\" target=\"_blank\" rel=\"noopener\">LOGICAL CLOCK IN DISTRIBUTED SYSTEM HAPPENED BEFORE CLOCK CLOCK SYNC CLOCK VECTOR<\/a><\/h3>\n<h3 class=\"LC20lb MBeuO DKV0Md\"><a href=\"https:\/\/profile.iiita.ac.in\/bibhas.ghoshal\/lecture_slides\/distributed\/Clock.pdf\" target=\"_blank\" rel=\"noopener\">Clocks in Distributed System<\/a><\/h3>\n","protected":false},"excerpt":{"rendered":"<p>Logical Clock in Distributed System Happened Before Clock Clock Sync Clock Vector.Distributed Systems Physical Clocks Logical Clocks Vector Clocks Synchronize Physical Clocks Logical Time Happened Before Clocks Linear Time Distributed Systems Physical Clocks Logical Clocks Vector Clocks.<\/p>\n","protected":false},"author":64,"featured_media":2609,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[84],"tags":[1301,2041,2042,1597,2043,1637,2044,2045,2046,2047,2048,2049,2050,2051],"class_list":["post-2608","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-distributed-computing","tag-distributed-systems","tag-happened-before","tag-linear-time","tag-logical-clock-in-distributed-system","tag-logical-clocks","tag-logical-time","tag-physical-clocks","tag-synchronize-physical-clocks","tag-time-ordering-module","tag-types-of-clocks-in-distributed-system","tag-vector-clock-in-distributed-system","tag-vector-clock-vs-lamport-clock","tag-vector-clocks","tag-what-is-global-clock-in-distributed-system"],"_links":{"self":[{"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/posts\/2608","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/users\/64"}],"replies":[{"embeddable":true,"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/comments?post=2608"}],"version-history":[{"count":0,"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/posts\/2608\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/media\/2609"}],"wp:attachment":[{"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/media?parent=2608"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/categories?post=2608"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/tags?post=2608"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}