[{"data":1,"prerenderedAt":349},["ShallowReactive",2],{"nav-stories":3,"footer-stories":61,"project-hyper-replica":74},[4,16,25,34,43,52],{"id":5,"color":6,"extension":7,"image":8,"label":9,"link":10,"meta":11,"order":12,"stem":13,"text":14,"__hash__":15},"stories\u002Fstories\u002F01-data-center.yml",null,"yml","https:\u002F\u002Fimages.unsplash.com\u002Fphoto-1558494949-ef010cbdcc31?w=1080","DATA_CENTER","https:\u002F\u002Fx.com\u002Fabbeytetteh_",{},1,"stories\u002F01-data-center","Racking new servers. 40gbit backbone online.","0QUZQbaANhdO8WemZxkDdO7vbVopfnynHtH9FxBZb_w",{"id":17,"color":6,"extension":7,"image":18,"label":19,"link":6,"meta":20,"order":21,"stem":22,"text":23,"__hash__":24},"stories\u002Fstories\u002F02-thoughts.yml","https:\u002F\u002Fimages.unsplash.com\u002Fphoto-1498050108023-c5249f4df085?w=1080","THOUGHTS",{},2,"stories\u002F02-thoughts","Late night bug hunting. Found the memory leak.","Gd1am954aasY6HRHD7hCtOuessXb6zYZ8iizS501ICg",{"id":26,"color":27,"extension":7,"image":6,"label":28,"link":6,"meta":29,"order":30,"stem":31,"text":32,"__hash__":33},"stories\u002Fstories\u002F03-coding.yml","#3b82f6","CODING",{},3,"stories\u002F03-coding","Just thinking about how much easier life is with Swarm.","vLAyiGUPtlXB2SHa5KM_U2AaK4QkG3Og85UEUE7qzgM",{"id":35,"color":6,"extension":7,"image":36,"label":37,"link":6,"meta":38,"order":39,"stem":40,"text":41,"__hash__":42},"stories\u002Fstories\u002F04-update.yml","https:\u002F\u002Fimages.unsplash.com\u002Fphoto-1591799264318-7e6ef8ddb7ea?w=1080","UPDATE",{},4,"stories\u002F04-update","New cluster nodes arrived. Prepping for installation.","kyT60N5C6Re_jMonZbgNy0PbQhzXmUWxDbD0D_v43ts",{"id":44,"color":45,"extension":7,"image":6,"label":46,"link":6,"meta":47,"order":48,"stem":49,"text":50,"__hash__":51},"stories\u002Fstories\u002F05-setup.yml","#86868b","SETUP",{},5,"stories\u002F05-setup","Optimizing the telemetry pipeline for 1M req\u002Fs.","cPOBkzoyXsCmPgRO2d80Hj3vm4MP-6nAejtlQ5iuSzw",{"id":53,"color":6,"extension":7,"image":54,"label":55,"link":6,"meta":56,"order":57,"stem":58,"text":59,"__hash__":60},"stories\u002Fstories\u002F06-travel.yml","https:\u002F\u002Fimages.unsplash.com\u002Fphoto-1560969184-10fe8719e047?w=1080","TRAVEL",{},6,"stories\u002F06-travel","Travel log — system architecture workshop in Berlin.","jnOxerdF6usAIHdR35Z-opx0LJAy9kZluXnZhtz62Z0",[62,64,66,68,70,72],{"id":5,"color":6,"extension":7,"image":8,"label":9,"link":10,"meta":63,"order":12,"stem":13,"text":14,"__hash__":15},{},{"id":17,"color":6,"extension":7,"image":18,"label":19,"link":6,"meta":65,"order":21,"stem":22,"text":23,"__hash__":24},{},{"id":26,"color":27,"extension":7,"image":6,"label":28,"link":6,"meta":67,"order":30,"stem":31,"text":32,"__hash__":33},{},{"id":35,"color":6,"extension":7,"image":36,"label":37,"link":6,"meta":69,"order":39,"stem":40,"text":41,"__hash__":42},{},{"id":44,"color":45,"extension":7,"image":6,"label":46,"link":6,"meta":71,"order":48,"stem":49,"text":50,"__hash__":51},{},{"id":53,"color":6,"extension":7,"image":54,"label":55,"link":6,"meta":73,"order":57,"stem":58,"text":59,"__hash__":60},{},{"id":75,"title":76,"body":77,"description":339,"extension":340,"hash":341,"liveUrl":6,"meta":342,"navigation":142,"order":57,"path":343,"rackBay":6,"rackStatus":6,"region":344,"seo":345,"stem":346,"thumbnail":347,"vault":142,"__hash__":348},"projects\u002Fprojects\u002Fhyper-replica.md","Hyper Replica",{"type":78,"value":79,"toc":333},"minimark",[80,84,89,92,96,99,315,319,322,326,329],[81,82,83],"p",{},"Hyper Replica solves a specific problem: keeping dataset copies in sync across geographically distributed edge nodes where the WAN link is unreliable and latency-sensitive.",[85,86,88],"h2",{"id":87},"the-core-problem","The Core Problem",[81,90,91],{},"Traditional replication approaches assume a stable, high-bandwidth connection. Edge environments don't have that. A replication protocol that works perfectly in a data centre will stall, buffer, and eventually corrupt when the underlying transport is a flaky 4G link with 200ms RTT spikes.",[85,93,95],{"id":94},"the-protocol","The Protocol",[81,97,98],{},"Hyper Replica uses a delta-based sync protocol over a persistent WebSocket connection. Each edge node maintains a vector clock. On reconnect after a partition, the nodes exchange vector clocks and compute the minimal changeset required to reach convergence — no full resync needed.",[100,101,106],"pre",{"className":102,"code":103,"language":104,"meta":105,"style":105},"language-go shiki shiki-themes vitesse-light","type VectorClock map[NodeID]uint64\n\nfunc (local VectorClock) Delta(remote VectorClock) []Event {\n    var missing []Event\n    for nodeID, remoteSeq := range remote {\n        if local[nodeID] \u003C remoteSeq {\n            missing = append(missing, eventLog.Since(nodeID, local[nodeID]))\n        }\n    }\n    return missing\n}\n","go","",[107,108,109,138,144,185,198,223,245,288,294,300,309],"code",{"__ignoreMap":105},[110,111,113,117,121,124,128,131,134],"span",{"class":112,"line":12},"line",[110,114,116],{"class":115},"sbBg2","type",[110,118,120],{"class":119},"sUxyF"," VectorClock",[110,122,123],{"class":115}," map",[110,125,127],{"class":126},"sYZai","[",[110,129,130],{"class":119},"NodeID",[110,132,133],{"class":126},"]",[110,135,137],{"class":136},"si04Y","uint64\n",[110,139,140],{"class":112,"line":21},[110,141,143],{"emptyLinePlaceholder":142},true,"\n",[110,145,146,149,152,156,159,162,166,169,172,174,176,179,182],{"class":112,"line":30},[110,147,148],{"class":115},"func",[110,150,151],{"class":126}," (",[110,153,155],{"class":154},"svycV","local ",[110,157,158],{"class":119},"VectorClock",[110,160,161],{"class":126},")",[110,163,165],{"class":164},"sySUi"," Delta",[110,167,168],{"class":126},"(",[110,170,171],{"class":154},"remote",[110,173,120],{"class":119},[110,175,161],{"class":126},[110,177,178],{"class":126}," []",[110,180,181],{"class":119},"Event",[110,183,184],{"class":126}," {\n",[110,186,187,190,193,195],{"class":112,"line":39},[110,188,189],{"class":115},"    var",[110,191,192],{"class":154}," missing",[110,194,178],{"class":126},[110,196,197],{"class":119},"Event\n",[110,199,200,203,206,209,212,215,218,221],{"class":112,"line":48},[110,201,202],{"class":115},"    for",[110,204,205],{"class":154}," nodeID",[110,207,208],{"class":126},",",[110,210,211],{"class":154}," remoteSeq",[110,213,214],{"class":126}," :=",[110,216,217],{"class":115}," range",[110,219,220],{"class":154}," remote",[110,222,184],{"class":126},[110,224,225,228,231,233,236,238,241,243],{"class":112,"line":57},[110,226,227],{"class":115},"        if",[110,229,230],{"class":154}," local",[110,232,127],{"class":126},[110,234,235],{"class":154},"nodeID",[110,237,133],{"class":126},[110,239,240],{"class":136}," \u003C",[110,242,211],{"class":154},[110,244,184],{"class":126},[110,246,248,251,254,257,259,262,264,267,270,273,275,277,279,281,283,285],{"class":112,"line":247},7,[110,249,250],{"class":154},"            missing",[110,252,253],{"class":126}," =",[110,255,256],{"class":164}," append",[110,258,168],{"class":126},[110,260,261],{"class":154},"missing",[110,263,208],{"class":126},[110,265,266],{"class":154}," eventLog",[110,268,269],{"class":126},".",[110,271,272],{"class":164},"Since",[110,274,168],{"class":126},[110,276,235],{"class":154},[110,278,208],{"class":126},[110,280,230],{"class":154},[110,282,127],{"class":126},[110,284,235],{"class":154},[110,286,287],{"class":126},"]))\n",[110,289,291],{"class":112,"line":290},8,[110,292,293],{"class":126},"        }\n",[110,295,297],{"class":112,"line":296},9,[110,298,299],{"class":126},"    }\n",[110,301,303,306],{"class":112,"line":302},10,[110,304,305],{"class":115},"    return",[110,307,308],{"class":154}," missing\n",[110,310,312],{"class":112,"line":311},11,[110,313,314],{"class":126},"}\n",[85,316,318],{"id":317},"results","Results",[81,320,321],{},"In a 3-node test across regions (London, São Paulo, Singapore), 95th-percentile replication latency was 38ms under normal conditions. After a simulated 10-minute partition, full convergence was achieved in under 2 seconds.",[85,323,325],{"id":324},"status","Status",[81,327,328],{},"In active development. The core protocol is stable; the backplane management UI and operational tooling are ongoing work.",[330,331,332],"style",{},"html pre.shiki code .sbBg2, html code.shiki .sbBg2{--shiki-default:#1E754F}html pre.shiki code .sUxyF, html code.shiki .sUxyF{--shiki-default:#2E8F82}html pre.shiki code .sYZai, html code.shiki .sYZai{--shiki-default:#999999}html pre.shiki code .si04Y, html code.shiki .si04Y{--shiki-default:#AB5959}html pre.shiki code .svycV, html code.shiki .svycV{--shiki-default:#B07D48}html pre.shiki code .sySUi, html code.shiki .sySUi{--shiki-default:#59873A}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":105,"searchDepth":21,"depth":21,"links":334},[335,336,337,338],{"id":87,"depth":21,"text":88},{"id":94,"depth":21,"text":95},{"id":317,"depth":21,"text":318},{"id":324,"depth":21,"text":325},"Low-latency data replication across edge nodes using WebSockets and dedicated backplanes, targeting sub-50ms propagation.","md","P6Q7R8",{},"\u002Fprojects\u002Fhyper-replica","US-EAST-1",{"title":76,"description":339},"projects\u002Fhyper-replica","\u002Fimages\u002Fthumbnails\u002Fhyper-replica.png","l9Oex6_CqDWkefhwIgtTC2ZxSH5gSCnVHceG0vgeuBc",1779361989364]