Archived

This forum has been archived. Please start a new discussion on GitHub.

Freeze and C#

I read Chapter 40 and reviewed the C++ and Java examples. Is Freeze only available to these languages, or are there bindings for C# as well?

In fact , are there any higher level features of the ICE framework that are not available in C#?

Thanks,
Ryan

Comments

  • bernard
    bernard Jupiter, FL
    Hi Ryan,

    The Freeze service is only available for C++ and Java. Other services (IceGrid, IceStorm etc.) are available in all language mappings.

    Freeze is special because it's a library: there is no separate database server process. Freeze uses Berkeley DB for storage, and while Berkeley DB supports many programming languages, C# is not one of them.

    Best regards,
    Bernard
  • Thanks for the quickly reply. I have several related followup questions:

    So Freeze is the only high level component not available to C#?

    This may not be an issue for us, as we wanted to have remote, asynchronous persistence. Our solution leverages the utility computing model and we'll have an IceGrid cluster. However, all nodes share a common data repository, that has to be HA (high availability). So in theory the grid servers could still be C#, and they communicate through IceStorm to the central data storage server that is written in C++ and uses Freeze. Since the data store layer is inherently less scalable horizonatally, it makes more sense to do it in C++ anyway to squeeze out every possible cycle.

    Does Freeze support clustering or HA, so that if one datastore server goes down, the other can continue? If so does it do this through replication, or sharing remote data files?

    If necessary, I am thinking that by using IceStorm as the messaging / queueing component between the grid server sand the datastore server, I can simply have two independent datastore servers as subscribers. If one goes down temporarily, in theory when it comes back up it can get the items that were never delivered to it from IceStorm, and then get back "in sync" asap.

    Of course, this means that IceStorm itself needs to be HA configurable, and I assume under the covers IceStorm is using Freeze to store received messages? If so, how does one achieve no single points of failure with IceStorm?
  • Hmm...just read chapter 45 on Ice Storm, guess it doesn't do quite as much as I first thought. In order to do true message queueing, it would need a layer built on top of it.

    Has there been any thought about building a high throughput message queue on top of ICE core? I know MSMQ / Indigo is there, as well as the queue stuff for Java, but having language-specific bindings at the method level which automatically use a message queue under the covers would be extremely powerful. Nothing has this level of integration that is cross-platform.

    It wouldn't have to support out params, return values, or exceptions; just simple store and forward. If "synchronous" messages were necessary, the app could built it with reverse queues.

    I know this wouldn't be tremendously complex to build on top of Ice, and we'll do it if we need to. I just want to make sure we don't work on something that's already on the road map...

    One the other hand, if it's absolutely known that this won't be offered any time soon (it has been actively discussed and discounted), that info would be useful as well.

    Thanks,
    Ryan
  • bernard
    bernard Jupiter, FL
    Hi Ryan,

    IceStorm is a publish-subscribe service, and does not provide message persistence. So far Ice does not include a store-and-forward service.

    Regarding persistence, Freeze is just one option; Freeze stores its data in a Berkeley DB database. You can of course use Ice with your favorite database system instead (MySQL, Oracle, SQL Server...) and store your data in a replicated / HA database server if you like. The Ice distribution includes a few demos for Oracle (in C++) and MySQL (in Java).

    Best regards,
    Bernard
  • Related question on Ice Storm HA: there is a mention in the documentation of the underlying data replication between the replicas that make up the HA cluster. I assume this (Ice Storm) is all using Berkley DB as well for topics, subscriptions, etc. (please confirm), and if so are you using Berkeley DBs replication features to keep the replicas synchronized, or is this something you rolled yourself within IceStorm, using standard ICE core features?

    The reason I'm curious is I'm sure you guys looked at all options, and if Berkeley's replication was good enough for Ice Storm, it will (hopefully) be good enough for our MQ implementation. This if of course assume the underlying replication capabiltieis of Berkeley DB are available at the Freeze level.

    We will definately be using a RDBMS for our main storage of the system, but for semi-transient data such as a short-lifetime message store needed by a MQ, I think Berkeley DB would be perfect. So I'm thinking we could potentially build our own MQ's on top of Freeze.

    Thanks,
    Ryan
  • matthew
    matthew NL, Canada
    Related question on Ice Storm HA: there is a mention in the documentation of the underlying data replication between the replicas that make up the HA cluster. I assume this (Ice Storm) is all using Berkley DB as well for topics, subscriptions, etc. (please confirm), and if so are you using Berkeley DBs replication features to keep the replicas synchronized, or is this something you rolled yourself within IceStorm, using standard ICE core features?
    ...

    IceStorm uses BerkeleyDB for its datastore, however, for replication we did not use Berkeley DB replication. Some details on the algorithm used are in the Ice manual, or you could look at the source code yourself.
  • I read Chapter 40 and reviewed the C++ and Java examples. Is Freeze only available to these languages, or are there bindings for C# as well?

    In fact , are there any higher level features of the ICE framework that are not available in C#?

    Thanks,
    Ryan

    *sigh* I wish the documentation in the Freeze section clearly noted that C++ and Java were the only supported languages. Other sections show examples from just a few of the language choices, leading to some confusion over Freeze.

    I guess I'll just have to rewrite everything in C++