Skip to content

Distributed Rx #978

@WorldMaker

Description

@WorldMaker

More of a fun aside/rabbit hole than a comment, but in the recent Song Recommendations with C# Reactive Extensions:

This system has no persistence, and I while I'm no expert in this field, I don't think it easily expands to a distributed system.

In C# there actually is an interesting little known answer to this and it is called IQbservable<T> (yes, that's a Q to replace the O; yes, it's a weird name). It's the IQueryable<T> to IObservable<T>'s IEnumerable<T> as an Rx primitive.

Conceptually it is extremely cool: write an Observable pipeline in one central place but introspect and distribute parts of the pipeline to agents to run them. (Similar to how IQueryable<T> might be used to build a query plan for a database.)

It's still just a primitive (monad) though, you still need to add a persistence engine and other tools, but the neat thing is an C# Rx-provided primitive so there are multiple implementations of distributed engines that support IQbservable<T> and are somewhat interoperable in your most basic use cases.

Reaqtor is the open source engine in this space that I've seen get the most hype. There's some smaller open source ones and I've heard of ad hoc/semi-proprietary implementations on top of both Orleans and Dapr. Also it is said that most Bing internal microservices make heavy use of IQbservable<T> but all of that is obviously heavily proprietary.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions