File: evd-overview.xml

package info (click to toggle)
event-dance 0.1.20-2
  • links: PTS
  • area: main
  • in suites: wheezy
  • size: 5,068 kB
  • sloc: ansic: 25,946; sh: 11,340; makefile: 418; xml: 249; python: 27
file content (123 lines) | stat: -rw-r--r-- 4,370 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
<part id="evd-overview">

  <title>Overview</title>

  <partintro>

    <para>
      EventDance is an open source library for interconnecting heterogeneous
      applications in a simple, secure and scalable fashion. It provides
      a nice API to send and receive data among distributed applications over
      different types of transports. This and other features like cryptography,
      make EventDance a perfect choice for peer-to-peer application
      development.
    </para>

  </partintro>

  <chapter>
    <title>Key design features</title>

    <para>
      This chapter discuss the basic design concepts behind EventDance.
      Not all features are implemented at the moment, but they surely will be at some point.
      Thus, by now some of the items in the following list should be considered a declaration
      of intentions, or goals.
    </para>

    <para>
      EventDance should be:
    </para>

    <itemizedlist>
      <listitem>
        <emphasis>Asynchronous</emphasis>
        <para>
          All activity is driven by a main event loop, which no routine
          should block under any circumstance. If some blocking operation is to be
          performed, a separate thread shall be spawned for it. All network and disk IO is
          expected to be non-blocking, both in the core of EventDance and in programs using it.
        </para>
      </listitem>

      <listitem>
        <emphasis>Secure</emphasis>
        <para>
          Basic API should be provided for peer authentication and data privacy/integrity
          at a cryptographic level.
        </para>
      </listitem>

      <listitem>
        <emphasis>Scalable</emphasis>
        <para>
          All components should scale reasonably well under high-concurrency situations,
          and support graceful service degradation in case of excessive load. Any mechanism
          available in the platform to optimize responsiveness should be used to guarantee
          scalability.
        </para>
      </listitem>

      <listitem>
        <emphasis>Introspection friendly</emphasis>
        <para>
          Libraries are designed to work fine with
          <ulink type="http" url="http://live.gnome.org/GObjectIntrospection">GObject-Introspection</ulink>.
          APIs are well-thought to be used in high level scripting languages like Javascript and Python.
          Thus, it's a design requirement to have introspection friendly and easy to use APIs, and to always
          have updated GIR information.
        </para>
      </listitem>

<!--
      <listitem>
        <emphasis>Hot-plug configurable</emphasis>
        <para>
          Configuration-sensitive components should provide means to change any option
          on-the-fly, without needing to restart the main service. For that, a management interface
          should be provided and all configuration-sensitive objects should
          implement it. Examples of this are adding/removing listening interfaces on network services,
          changing URLs to resources, adjusting limits like number of connections, bandwidth, etc.
        </para>
      </listitem>
-->

      <listitem>
        <emphasis>Extensible</emphasis>
        <para>
          Libraries should be designed so that developers can efficiently modify or
          extend its behavior, reusing as much code as possible. For that, relevant parts of
          libraries' internal logic is published as well. See chapter
          <link linkend="extending">Extending EventDance</link> for more information.
        </para>
      </listitem>

      <listitem>
        <emphasis>Energy efficient</emphasis>
        <para>
          This is relative to how synchronous operations and idle states are managed.
          Routines in the framework or in programs using it should avoid polling continuously
          for a condition change, unnecessarily feeding the event loop at intervals. Instead,
          these operations should be moved to a thread and blocked permanently when possible,
          until a notification of a condition change wakes up the thread.
        </para>
      </listitem>

    </itemizedlist>
  </chapter>

  <chapter>
    <title>Basic concepts</title>
    <para>
      @TODO
    </para>
  </chapter>

  <chapter>
    <title>Architecture</title>
    <para>
      @TODO
    </para>
  </chapter>

</part>