
Fluid framework, for building distributed, real-time collaborative web apps - gokhan
https://fluidframework.com/
======
alfonsodev
> The application you are trying to visit is currently throttled due to
> unusually high usage. Please try again later.

edit: there is web archive version:

[https://web.archive.org/web/20200909053211/https://fluidfram...](https://web.archive.org/web/20200909053211/https://fluidframework.com/)

~~~
tmikaeld
One would think that Microsoft, if any, would be able to handle a traffic
spike...

And to block a marketing site from more traffic feels like a complete fail.

There's some info on the Github:
[https://github.com/microsoft/FluidFramework](https://github.com/microsoft/FluidFramework)

Still doesn't say how it "works", like, do we need servers? How is it
distributed? Is there a database-layer?..

~~~
johnnyfaehell
Honestly, I just assumed it was someone using Azure's basic services without
being ready for a massive traffic spike. I was a bit miffed but understanding.
But Microsoft not being able to scale on their own cloud service seems like a
massive failure.

------
panic
From the FAQ:

 _> Does Fluid use operational transforms?_

 _> Fluid does not use Operational Transforms, but we learned a tremendous
amount from the literature on OT. While OT uses operations that can be applied
out of order by transforming operations to account for recent changes, Fluid
relies on a Total Order Broadcast to guarantee that all operations are applied
in a specific order._

 _> Does Fluid use CRDT?_

 _> Fluid does not use Conflict-Free Replicated Data Types (CRDTs), but our
model is more similar to CRDT than OT. The Fluid Framework relies on update-
based operations that are ordered using our Total Order Broadcast to prevent
conflicts. This allows us to have non-commutative operations because their is
an explicit ordering._

Their model sounds a lot like how Croquet
([https://en.wikipedia.org/wiki/Croquet_Project](https://en.wikipedia.org/wiki/Croquet_Project))
used to work, where every operation is given a globally-ordered timestamp as
it passes through a shared message router.

------
ricardobeat
This looks like Java or .Net spilling into JS:
[https://github.com/microsoft/FluidHelloWorld/blob/main/src/c...](https://github.com/microsoft/FluidHelloWorld/blob/main/src/containerCode.ts)

------
narrationbox
Looks like a CRDT/Operational Transform server/pubsub as a service. There are
also some open source frameworks on GitHub which doesn't depend on Azure.

[https://github.com/automerge/automerge](https://github.com/automerge/automerge)
[https://github.com/share/sharedb](https://github.com/share/sharedb)

~~~
sbazerque
Yeah, many more in [https://CRDT.tech](https://CRDT.tech)

Incidentally, Microsoft is probably the only big tech co that could perhaps
profit from dweb-style tech.

------
mattetti
Adding more context: Fluid uses a mix of CRDT + OT to maintain state across
multiple clients. I wrote a quick high level explanation of how Fluid uses
eventual consistency and why it matters for real time collaboration:
[https://matt.aimonetti.net/posts/2020-09-solving-real-
time-c...](https://matt.aimonetti.net/posts/2020-09-solving-real-time-
collaboration-using-eventual-consistency/)

------
catchmeifyoucan
> With Fluid Framework, developers can easily add multi-user interactivity to
> their apps — powered by the same code that drives collaboration in Microsoft
> 365 experiences for millions of users.

[https://developer.microsoft.com/en-us/office/blogs/fluid-
fra...](https://developer.microsoft.com/en-us/office/blogs/fluid-framework-is-
now-open-source/)

------
bestest
The example repos shed some light on how it's due to be used:

[https://github.com/microsoft/FluidHelloWorld](https://github.com/microsoft/FluidHelloWorld)

[https://github.com/microsoft/FluidExamples](https://github.com/microsoft/FluidExamples)

~~~
ciconia
OMG It looks just like OLE:

[https://github.com/microsoft/FluidHelloWorld/blob/main/src/d...](https://github.com/microsoft/FluidHelloWorld/blob/main/src/dataObject.ts)

------
kreetx
Has anyone used this, what's the experience? Is this a functional reactive
style front-end framework?

