The Stack Overflow podcast is back! Listen to an interview with our new CEO.
12

Some considerations: Choice of database: relational databases such as Mysql or Postgres are not necessarily harder to scale than MongoDB and such. In many cases it's quite the opposite. Here is a great comparison of different storage technologies: http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis "Event-driven" architecture: You have a lot of ...


12

Actor Model The actor model is computer science strategy for building applications that handle lots of concurrent computation and stateful processing. It's not the only strategy but it's a very well tested, simple, and reliable approach that moves computation into actors, which communicate through messages that they process one-at-a-time and in order. Akka ...


11

They don't mean reactive as in functional reactive programming, they mean reactive as in the reactive manifesto, which is a more generic term for a movement to build software that is event-driven, scalable, and resilient. It's a relative recent movement and the term hasn't really caught on.


9

Most of the scenarios are supported through bindings in WCF. For the official source you may look at WCF Feature Details, and good intro to Basic WCF Programming, and very detailed Introduction to Windows Communication Foundation is also availiable in MSDN. Regarding books, the top rated book on this subject matter can be found here - Programming WCF ...


7

I'm assuming that an "external message" is something that's coming over a network protocol, e.g. RPC, SOAP, Protocol Buffers, etc. In that case, it's absolutely a good thing to maintain two separate models. One for messaging, one for domain. It's not unusual to have yet another model for presentation and another model for data. It seems awfully repetitive, ...


7

Unfortunately there is no such thing as "the standard solution", so you have to figure out what your requirements are and from that choose the option that fits best. Here are few options. For a network application integration perspective SOAP over http might be the best(laborious but transparent) way to find a means to create the integration. The windows ...


6

From the point of view of how you actually design systems with them, they are in some sense mathematical duals, as this adage by Joe Armstrong, one of the original designers of Erlang, nicely demonstrates: With shared memory, you communicate by sharing data, with messaging, you share data by communicating.


6

The quick summary: Shared memory parallelism (e.g., OpenMP) is strictly more powerful than message passing (e.g., MPI) as you can simulate message passing with a shared memory system but not vice versa. However, it's also much more difficult to scale up the shared memory model (it needs very elaborate and expensive hardware once you go to more than one ...


6

There is no way to guarantee that no data is ever lost. There are ways to diminish the chance, and there are ways to detect when the data is lost -- and this is the best you can do. Given this premise, a TCP connection is actually pretty good in this regard, as it guarantees delivery of a message or a failure. The question then boils down to: what do you ...


6

The infrastructure for the event sourcing is an event store which saves the events as documents inside a MongoDB collection and then publish a corresponding message to a service bus, so that with a classic pub-sub pattern all the interested projections are able to subscribe the message and do the proper work in response to it. (Emphasis added) This ...


5

Since you are a startup I would say it depends on two things. Do you have any time constraints on this? Will building your own messaging system give you an advantage? I don't know what kind of business your startup is in but in general its best to focus on great user experience in the beginning. The code running in the back may be awful but the user will ...


5

An Event message is something that has just happened. You are notifying of the event that has just happened. A Command message is a message that expects something to be done. It may or may not expect a response. When to use what comes down to coupling and the difference will only emerge over time as the systems evolve. Favoring events over commands ...


5

You may be interested in Comet, a programming model that allows the server to push data to a client. There are implementations for JSF, look at this blog post about Richfaces integration for an example. HTML 5 specifies WebSockets that can be used for server push, but not all browsers support it. The simple alternative is to simply poll the server at ...


5

You already got the right answer yourself. Store it in a Database and consume it as you need it. As for the approach of database, you also got the best answer yourself: using Redis for performance and storing in a relational database data for auditing. It seems you got a plan and you did your research.


4

If you can afford it, BizTalk is directly targeted at this kind of problem. It has a consistent programming model, so if you can create a BizTalk adapter for each of your isolated systems, you can create BizTalk orchestrations to control the flow of information between all of those systems. It's also quite performant in my experience.


3

I would advocate a third option for your architectural design. You have a collection of services (analysis, notification, data transformations, data collection, etc.) that each take their input from an abstract source in a particular format (that can differ between the services) and produce output to an abstract destination, with a potentially different ...


3

I think in the context of the tutorial he is speaking in terms of broadcaster and listener objects. He is trying to explain that there is a logging object that broadcasts (or emits) messages and that is all it does. Those messages don't go to a file. The tutorial continues to explain that a listener has to attach to the logger to receive the messages. You ...


3

I'm having a lot of fun with Erlang right now. It's a great language in and of itself. The real fun is in the framework and runtime it sits on. The Erlang Runtime is designed for distributed, concurrent applications (it was born at Ericsson for their network infrastructure). For integration with other systems, there is RabbitMQ which is built in Erlang and ...


3

The key to Alan Kay's view is the reason why a message is sent. When an object of class A sends a message to an object of class B because A wants B to do something specific, that isn't OO (according to Kay's vision.) If A is sending the message to inform B that something has happened (rather than telling it to do something,) that is OO. A good example of ...


3

I'd suggest to define criteria of what "dead" means, then periodically poll for the "dead" condition and perform the swing over. Perhaps "dead" gets defined as "hasn't sent any messages to any of the nodes in X seconds". Whatever decision tree a human currently follows to ascertain whether or not to flip service. It may be 1 condition, 10, or dozens. How ...


3

According to your explanations, the user interacts with a postman to send and receive messages, which are stored on a server. That's a good start. But I'm not sure that the class diagram fully reflects your explanations; It also raises some questions: the user would be "composed" of several clients ?? I thought that the user user would register to a ...


3

I always think of it as: The port is an address on the incoming packet The operating system has been told to put any messages coming into the computer with that port address to a particular place in memory The program knows to look at that memory address to find its messages The bindings are a series of processes in your program telling the operating ...


3

I don't think nservicebus has the support right now for what you are looking for. Using the azure servicebus broker would be just as unreliable as your network connection, so that is no solution. What you would need is a locally stored outbox (not to be confused with nsb's current outbox feature) + some kind of failure proof pump that pushes the messages ...


3

You are most likely to see analogous examples if you search for "process manager" or "saga". Speaking broadly, what you are describing is a protocol, with at least three participants; the command source, the order details database, and the email service itself. The responsibility of the protocol is to keep track; it is doing the book keeping, which is to ...


3

Have C give m a unique identifier. That way when A and B tell X they are done with m12 X won't get confused and match A.m12 with B.m11. Then you just need to be sure that X knows A and B are all you're expecting to hear from. If C makes it's unique identifier sequential you can even put these ms back into their original order. But that means you can only ...


2

You could try using ZeroMQ, a modern, open source library for networked communications that has bindings for C++, .NET, Java and most languages you can think of. From the ZeroMQ landing page: The socket library that acts as a concurrency framework.  Ø  Faster than TCP, for clustered products and supercomputing.  Ø  Carries messages across inproc, IPC, TCP, ...


2

This question can be restated more generally as "when do I denormalize data to improve performance." And the answer is "when the cost of performing a normalized query exceeds your performance threshold, and the cost of maintaining duplicate data is justified." Let's start with a traditional relational design for a bank. How do you compute the current ...


2

What probably happens right now is that some messages are processed by server A, and never delivered to B, and some are processed by B, but A never receives them. This is because you haven't specified the exchange: the default one is the direct exchange, meaning that messages are sent to one of the queues at a time, using round robin. In order for multiple ...


2

HTTP is time-tested for inter-process communication, it's recilient, etc. SMS are subject to carrier fees, carries arrangement, international inter-carrier agreement There's usually more latency in SMS Many SMS never get delivered or get delivered late HTTP is based on TCP/IP, the foundation on which modern internet communication relies. SMS in intrinsically ...


Only top voted, non community-wiki answers of a minimum length are eligible