From d1b9e99a2a7f99ec9e4e9f0c2162b167e300ebcf Mon Sep 17 00:00:00 2001 From: Dan Willhite Date: Tue, 19 Sep 2017 13:35:47 -0700 Subject: [PATCH] Decentralized architecture with Noms intro (#3722) --- doc/decent/architectures.md | 62 ++++++++++++++++++++++++++++++++++++ doc/decent/dist-arch.png | Bin 0 -> 36865 bytes doc/decent/p2p-arch.png | Bin 0 -> 31572 bytes 3 files changed, 62 insertions(+) create mode 100644 doc/decent/dist-arch.png create mode 100644 doc/decent/p2p-arch.png diff --git a/doc/decent/architectures.md b/doc/decent/architectures.md index b832115c3d..b8cadb1fab 100644 --- a/doc/decent/architectures.md +++ b/doc/decent/architectures.md @@ -5,3 +5,65 @@ [![GoDoc](https://godoc.org/github.com/attic-labs/noms?status.svg)](https://godoc.org/github.com/attic-labs/noms) [![Slack](http://slack.noms.io/badge.svg)](http://slack.noms.io) +### Peer-to-Peer Architecture + +Noms can be used to implement apps in a peer-to-peer configuration. Each application maintains a database locally with the data that is relevant to it. When an app creates new data, it commits that data to it's database and broadcasts a message to it's peers that contains the hash of it's lastest commit. + +![P2P Architecture](./p2p-arch.png) + +Peers that are listening for these message can decide if that data is relevent to them. Those that are interested can pull the new data from the publisher. The two clients efficiently communicate so that only data that isn't present in the requesting client is transmitted (much the same way that one git client sends source changes to another). + +Peers can use a flow similar to the following in order to sync changes with one another: + +``` +for { + listen for new message + if new msg is relevant { + if new msg is ancestor of current commit { + // nothing to do + continue + } + pull new data from sender of msg + if current head is ancestor of new msg { + // fast forward to the new commit + set head of dataset to new commit + continue + } + merge new with current head and commit + publish new commit + } +} +``` + +Noms has a default [merge policy](https://github.com/attic-labs/noms/blob/2d0e9e738370d49cc09e8fa6e290ceca1c3e2005/go/merge/three_way.go#L14) that covers many classes of concurrent operations. If the application restricts itself to only operations that are mergeable by this policy, then Noms can automatically merge all concurrent changes. In this case, the entire database is effectively a CRDT. + +If this is not sufficient, then applications can create their own merge policies, implementing whatever merge is appropriate for their use case. + +### Decentralized Chunkstore Architecture + +Another potential architecture for decentralized apps uses a decentralized chunkstore (such as IPFS, Swarm, or Sia) rather than local databases. In this case, rather than each app maintaining a local datastore, Noms chunks are stored in a distributed chunkstore. The underlying chunkstore is reponsible for making chunks available when needed. + +![Distributed Architecture](./dist-arch.png) + +The flow used by peers to sync with one another is similar to the peer-to-peer architecture. The main difference is data is not duplicated on local machines and doesn't have to be pulled during sync. Each app keeps track of it's latest commit in the chunk store. + +``` +for { + listen for new message + if new msg is relevant { + if new msg is ancestor of current commit { + // nothing to do + continue + } + // No pull necessary + if current head is ancestor of new msg { + // fast forward to the new commit + set head of dataset to new commit + continue + } + merge new with current head and commit + publish new commit + } +} +``` +We have a prototype implementation of an IPFS-based chunkstore. If you are interested in pursuing this direction, let us know! diff --git a/doc/decent/dist-arch.png b/doc/decent/dist-arch.png new file mode 100644 index 0000000000000000000000000000000000000000..9827e9b9503961c36d7d06a53eeaa4a6a1c24fdc GIT binary patch literal 36865 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

FH9sk%!~sOYJA*j(yU^g3=IX5?0&Is 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 literal 0 HcmV?d00001 diff --git a/doc/decent/p2p-arch.png b/doc/decent/p2p-arch.png new file mode 100644 index 0000000000000000000000000000000000000000..6155e8af3c36c08962254365ff2a35535d3e539d GIT binary patch literal 31572 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%0AB`QEca*TVI<(k;`7*f z=5ff?fEA+Naad$bP2xmXqptbYZa587r9Isw{-uLoI~beB!TD#o{V6I8Lx^twv0+;?stU#yT@`I`MDqgTbfx7$4o3JLzQ6@_N#UClY}oV!%+VjY_&H z73~$6nfSGVP5&Nr#JMs^=81v}(P*FP%cqq1IQfYi3R4%g1sf424rJd5zL1;^M}=0K$ov7z{!oe z5HGE&W51g%Qnk3qBu`FXc8AtLNRl{DB)${c_H2fC)~IM`BA(hL-d6=}pIrI@&y_E% z=+Q4SfQhevZfcU;zbJz1MctToQ`3{eyQXU9^F(|umb)i|{lmCk!HJR_M`^pX2O?o<)p|j_h_>(gU9P59`3**A!c8}$(Tv(qAOWG%#$U^O~YcnyS-lA)!}%S zSMQ-HRU|HIpIw^4I`eRGB#2%dXs|wJN#h=1D*5GQcJt;<{1>m1xCDTP%~))$!NZH8|t<+2m{x|kR3=f*;a zUgZlHtGmxU;04;qE4M027L2G^lGF37NBIyn7iMoZ1 z0M&GOrO=XfnSO*EDsb>b&-7nRDUpm)LRS0HmQ&NwsaaZkG`U7HX}^;bWw4h^{~08% zSDckLGceIy+E-rBVfmaEMbJ36#gxEg+5Ix5%{DNrAipN#&WX2=7CrHh@)WVl{zq

    N=f&uRYcB?c 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