ARGON
Check-in [6ad45702f4]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Expounded on Iodine Object Push, and wondered about special support for it within MERCURY.
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1:6ad45702f4674576ff01b1cdfb8ceef68770f40e
User & Date: alaric 2017-06-02 21:57:55
Context
2017-07-11
20:59
Updated CHROME, with thoughts from reading Design Concepts in Programming Languages and reading about Idris. check-in: 971887d31c user: alaric tags: trunk
2017-06-02
21:57
Expounded on Iodine Object Push, and wondered about special support for it within MERCURY. check-in: 6ad45702f4 user: alaric tags: trunk
2017-03-16
18:19
Laid down the framework for "ARGON devops": ARGON code lives in CARBON stuff published by entities, so I laid out a framework for a "document entity" that publishes something with distributed workflow, ticketing, change control, etc. check-in: 4423936034 user: alaric tags: trunk
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to intro/iodine.wiki.

30
31
32
33
34
35
36




































37
38
39
40
41
42
43
also the logical interface to use for printing; object push something
to the printer. A CARBON directory might accept an Object Push (from
somebody with sufficient rights) by creating a directed link if an
entity ID is pushed. Entities containing user-editable information
might accept general bundle pushes containing no explicit object (eg,
no statements about the object at the default namespace prefix), but
full of metadata about other objects, too.





































<h1><tt>/argon/iodine/directory</tt>: CARBON directory</h1>

A user-manageable CARBON directory node, as opposed to one that
generates the directory links programmatically.

Link to entity. Edit list of linked entities and their local metadata.







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
also the logical interface to use for printing; object push something
to the printer. A CARBON directory might accept an Object Push (from
somebody with sufficient rights) by creating a directed link if an
entity ID is pushed. Entities containing user-editable information
might accept general bundle pushes containing no explicit object (eg,
no statements about the object at the default namespace prefix), but
full of metadata about other objects, too.

This is the standard way to send an asynchronous notification of
anything in ARGON - so although object push is a MERCURY interface to
directly invoke the target entity, perhaps object push needs elevating
to a special status in MERCURY so that persistent queues can be used
under the hood. This is the situation where Apache Kafka or RabbitMQ
and friends might be used in a legacy system. A lot of the power of a
standard MoM system is already provided by ARGON; incoming MERCURY
requests will <i>already</i> be distributed reliably across the
cluster, but asynchronous queueing is something extra. We can have an
"asynchronous send" operation in MERCURY which Object Push is
implemented in terms of, but that would also be available to other
protocols - but should they not just be standard object pushes as
well? I feel that an entity should have a single push endpoint that
dispatches on the type of the pushed object, rather than lots of
different kinds of push. Maybe having other push endpoints would be
acceptable for cases like sending out updates to a watched value, or
streaming media frames, over a MERCURY connection rather than the main
public interface of an entity...

One interesting issue is that of message coalescing in the MERCURY
implementation itself (eg, within queues). This can consist of
bringing together messages that all affect the same bit of final data
(based on a bucketing function supplied by the endpoint) so they can
be processed more efficiently in terms of their load on the storage
system, and of allowing messages that supercede others to cause the
superceded message to be deleted in transit (based on a second
bucketing function to define the equivalence classes, plus an ordering
function between messages).

As both involve bucketing functions, they could be implemented within
the target cluster when it queues incoming messages for execution;
performing coalescing when messages are queued in the origin cluster
is possible, but requires the origin cluster to run arbitrary
bucketing functions supplied by the destination as part of MERCURY
sending, which might be a bit of a cheeky request.

<h1><tt>/argon/iodine/directory</tt>: CARBON directory</h1>

A user-manageable CARBON directory node, as opposed to one that
generates the directory links programmatically.

Link to entity. Edit list of linked entities and their local metadata.