OSS .Net Tool that Helps with Distributed and Occasionally Connected Application Dev


#1

Hi there,

I’ve been working on a project that helps with distributed application development and performance. I personally think the opportunities are vast however I know not everyone will agree.

As this is the premier OSS community for .Net I’d really like to present my project to you and ask for your thoughts. Even if you totally hate the idea I’d love to hear so I can understand your concerns. Also if you’re interested in helping with the project please let me know, I’ve only very limited time and there’s a lot to be done :smile:

Things are covered in some detail here: https://github.com/tony-dinucci/Ovule.Nomad and also on the Wiki available via that link.

This project is some way away from completion but is at a stage just now where you should be able to get a reasonably good idea of how it works and the potential. A link follows:

As I said I very much value all feedback. If you don’t like it but can tell me why it will actually be very valuable!

Thanks


#2

Hi again,

Due to feedback I’ve recevied (obviously not in this thread :smile:) there have been quite a lot of changes to this project (it’s no longer a tool but a framework). The GitHub page and Wiki have been greatly improved so I won’t repeat anything here but once again I’m looking for feedback and checking if anyone feels they would be interested in helping work on it.

https://github.com/tony-dinucci/Ovule.Nomad

All the best

P.S. Sorry if you perceice this as spam, it’s not meant as such. I’m genuinely looking for educated feedback to help me move this project in the right direction. This is the last time I’ll post about this topic here - obviously unless someone replies to this thread.


#3

The MapReduce example looks great! I’m going to test it locally and I will post some feedback here.


#4

Great, thanks wind. Any issues just let me know.


#5

Oh my God, I’m so excited!! tony_dinucci I tested your code, and IT WORKS!! :smile:

First I followed Hello World example, and it worked. So I tested MapReduce (I was very interested in it), and it also worked flawlessly.

So I tested the Load Distribution example. I tought it wouldn’t work, because I tested many ways of sharing memory across processes in Mono, and all of them failed. But… Load Distribution using your Nomad compilation WORKED!!

Indeed it is a GREAT framework!


#6

Thanks very much for taking the time to look at this :slight_smile: This is a great help and I’m VERY glad to hear it’s working well for you!


#7

The #1 issue in distributed systems is concurrency and the old remoting model failed in a number of large sites at scale due to not being able to manage dlls / types cross team. Which is why remoting moved to XML contracts in its later days which led to SOA when the services became more loosely coupled. This was to cover the failings of the earlier designs. RPC style comms has serious issues in most real world distributed systems. Chatty = BAD for maintenance , managability and performance once you leave the server room.

WCF allows many things not just simple comms/data , you can do interop via http rest to java and other parties , you can use compressed binarytcp for slow comms links and you can use broadcast udp / discovery say over 802.11 where everything is broadcast anyway…

For concurrency once you have hour long gaps between data transfer due to lack of communications you only have 2 choices is most cases field instead of records based storage / transmission or event sourcing,


#8

Thanks for your feedback Bernie. I’ve just looked back at my original post in this thread and see how it’s misleading (I’m going to edit it), the project has moved on a lot from then - it’s no longer a tool (is now a framework) and is more focused on solving problems with performance and concurrency than making development super easy.

One of the big things it offers is the ability for you to develop chatty service interfaces (good for flexibility, bad for performance) which can be consumed in a chunky fashion (meaning better performance). You can develop your software however you want to develop it, if you want to use my framework for all network comms you can but you are perfectly free to use anything else, e.g. WCF. If however you find you have client side methods that are making multiple calls through to the server then you simply pass these methods through my framework and it’ll move the execution of those methods from the client to the server for you, meaning there’s only one network transaction.

I’m actually using a version of this framework in a large system which uses WCF for comms. Methods that are calling through to the server multiple times are being passed through this framework and being passed to the server for execution. When they execute on the server WCF is still being used however rather than making remote calls everything is going through localhost which is obviously much faster.

There are also features of the framework that allow for high concurrency by splitting load across multiple servers.

All these things are covered in some detail here: https://github.com/tony-dinucci/Ovule.Nomad and also on the Wiki available via that link.

If you already know this stuff and I’ve missed your point please let me know.


.NET Foundation Website | Blog | Projects | Code of Conduct