root / docs / design / flows.rst @ 3c3fe96e
History | View | Annotate | Download (3.7 kB)
1 |
Ο ορισμός για τα flows είναι πιο μακρυά από εκείνον των network traffic flows |
---|---|
2 |
[1] : |
3 |
|
4 |
"Traffic flow, packet flow or network flow is a sequence of packets from a |
5 |
source computer to a destination, which may be another host, a multicast group, |
6 |
or a broadcast domain". |
7 |
|
8 |
αλλά είναι αρκετά κοντά στον "ορισμό" των flows από το openflow [2]: |
9 |
|
10 |
"flows are broadly defined, and are limited only by the capabilities of the |
11 |
particular implementation of the Flow Table. For example, a flow could be a TCP |
12 |
connection, or all packets from a particular MAC address or IP address, or all |
13 |
packets with the same VLAN tag, or all packets from the same switch port. For |
14 |
experiments involving non-IPv4 packets, a flow could be defined as all packets |
15 |
matching a specific (but non-standard) header". |
16 |
|
17 |
To IO flow ακολουθεί ένα διαφορετικό approach, αρκετά περιοριστικό (και ποιο |
18 |
IaaS-cloudικο) κατά τη γνώμη μου [3]: |
19 |
"Flows are named using a four-tuple comprising human-friendly high-level |
20 |
identifiers: { VMs, operations, files, shares }. " |
21 |
. |
22 |
[1] http://en.wikipedia.org/wiki/Traffic_flow_%28computer_networking%29 |
23 |
[2] OpenFlow: Enabling Innovation in Campus Networks |
24 |
http://ccr.sigcomm.org/online/files/p69-v38n2n-mckeown.pdf |
25 |
[3] IOFlow: A Software-Defined Storage Architecture |
26 |
http://research.microsoft.com/pubs/198941/ioflow-sosp13.pdf |
27 |
|
28 |
----------------------------------- |
29 |
|
30 |
Archipelago is consisted of peers. North bound endpoints create requests that |
31 |
are passed between the peers in a specific way in order to meet the south bound |
32 |
endpoints, essentially forming flows following a path. This path is not |
33 |
necessarily the same for all requests, but can be altered dynamically by |
34 |
applying policies on the requests. |
35 |
|
36 |
What is a flow and why we need them |
37 |
----------------------------------- |
38 |
|
39 |
In general we can define a flow as a set of requests that are related in some |
40 |
way. In Archipelago we are interested in identifying the requests that form |
41 |
flows based on relations we desire. Some of the relations can be extracted by |
42 |
the inherent attributes of the requests (such as type of operation, length of |
43 |
the request), while for others we need a way to tag the requests and later |
44 |
identify the requests we are interested in. |
45 |
|
46 |
Example of relations based on inherent attributes: All the READ requests, all |
47 |
the 4K I/O requests, all the 4k READ requests, etc. |
48 |
|
49 |
But we would like to categorize requests and identify flows in other ways too. |
50 |
We identify four basic relations we would like to categorize requests: |
51 |
|
52 |
# The resource on which the requests operate. |
53 |
# The endpoint that originated from. |
54 |
# The peer that created the request. |
55 |
# The action that triggered a specific request (e.g. snapshot). |
56 |
|
57 |
In order to identify the above we propose tagging each request on creation with |
58 |
the following ids: |
59 |
|
60 |
- **Resource id** : which is unique for every resource. This can be a |
61 |
monotonically increased 64-bit integer, assigned on resource creation. |
62 |
- **Peer id** : which is unique for every peer type supported by Archipelago. |
63 |
- **Flow id** : Extra tag to group requests in an arbitrary way. |
64 |
|
65 |
Having each request tagged with the above ids, we can identify flows by more |
66 |
complex relations such as: All the requests that belong on the same resource, |
67 |
all the requests originated from the same endpoint, all the requests specially |
68 |
tagged, all the requests the mapper created for a specific resource, all the I/O |
69 |
requests of a specific resource, etc. |
70 |
|
71 |
By having a way to identify these relationships, we can later get traces on the |
72 |
parts we are interested, apply policies on certain flows (on certain requests |
73 |
matching our criteria) and in general change dynamically the path of a request. |