> On 29 October 2013 02:08, David T. Lewis <le...@mail.msen.com> wrote:
>
>> I have some experience with this, not related to Smalltalk but maybe
>> still relevant. I have worked with systems that were designed around
>> networked message passing, implemented on platforms like MS-DOS with
>> time
>> slicing kernels, Series I, OS/2, etc. These systems were designed to
>> operate
>> with asynchronous message passing protocols. The asynchronous designs
>> were
>> intended to support primitive OS environments, including MS-DOS with
>> software interrupts for multitasking.
>>
>> These are production-critical manufacturing applications, and in the
>> course
>> of modernizing them I have reimplemented the network protocols in Java
>> and
>> moved them to new computing platforms. Along the way I have found that
>> the
>> asynchronous designs could always be replaced by bidirectional
>> send-receive
>> transactions running in the context of a thread or process. Even the
>> systems
>> that appeared to be most complex have turned out to work perfectly well
>> when modeled as synchronous send-receive transactions on a bidirectional
>> communication channel. The software is much simpler to understand and
>> debug
>> when structured in this manner.
>>
>> My conclusion is that designing around asynchronous, loosely coupled
>> channels sounds like a good idea, but in practice it leads to
>> unnecessary
>> complexity, and to systems that are difficult to debug and support.
>>
>> $0.02
>>
>> Dave
>>
>
> Example from my life: real-time voice over IP project.
>>From very starting, it was designed as a bidirectional connection between
> two peers.
> Even though, that outgoing/incoming traffic was handled separately, the
> model was still there
> and treated as 'single conversation channel'.
>
> Later we wanted to introduce many-peer conversation and found that the
> above bi-directional model simply
> does not fits.. everything falls apart.
> Simple example: you have 3 peers A, B , C.
> So, you can represent is in this way:
>   A<->B , A<->C , B<->C,
> or this:
>   A -> (B,C)
>   B -> (A, C)
>   C -> (A,B)
>
> The bidirectional model implies that you have symmetry in number of
> outgoing and incoming channels (hence <->)..
> and if you send data over one of them, only single node will receive it.
> Logically, that leads to sending same data to two different channels. So,
> at very beginning you nailing down
> how the traffic is going to flow.
>
> With unidirectional model, as illustrated when you sending data over one
> channel,
> it will be delivered to all participants, and you don't have to do it
> yourself - the transport layer handles it for you.
>
> The thing is, that the way how data gets to receivers is heavily depends
> on
> network topology:
> imagine that two peers, B, C belong to same subnet, and latency between
> them is miniscule comparing
> to latency between A and one of them. The logical choice then should be to
> route the signal from A
> to either B or C and then broadcast from middle point to the listener
> which
> is left.
> Not possible with bidirectional model, because A insists on having direct
> socket connection with both B and C.
>
> Same goes for proxies: imagine that node A is connected via proxy..
> and not directly to nodes B and C.. that means that to deliver its voice
> traffic to both of them it should
> just send a single packet to proxy, and then proxy will broadcast it to
> listeners.
> Not going to happen with bidirectional model, A will still send two very
> same packets to same proxy.. but with different destination
> address.
>
> Or even, it could be, that receiving traffic from A to C goes faster via
> B,
> while sending traffic from C to A is faster to do directly..
> So try to fit that into bidirectional model of communication and see where
> it goes.
>
> Yes, i agree it is easier to put everything into sequential bidirectional
> model which makes everything so simple.
> If it fits. But if its not, you should not even try to fit it..
>
> My point is, that IP is inherently asynchronous and unidirectional.
>

You give an excellent counter example, and I agree with what you are
saying. I am reminded of the quote attributed to Einstein, saying that
things should be "as simple as possible but no simpler". For the examples
that I gave, simple was good enough. But that is not the case for all such
problems ;-)

Dave



Reply via email to