This commit is contained in:
Oliver Kennedy 2021-03-16 01:25:32 -04:00
parent d53f634a16
commit e3a2e1905f
Signed by: okennedy
GPG key ID: 3E5F9B3ABD3FDB60
19 changed files with 9331 additions and 17 deletions

View file

@ -27,15 +27,54 @@ textbook: Ch. 20.1, 20.3, 20.4
</section>
<section>
<img src="2021-03-18/node_resources.svg" height="500px">
<img src="2021-03-18/node_resources.svg" height="500px" />
</section>
<section>
<h3>Communication Models</h3>
<img src="2021-03-18/communication_base.svg" />
</section>
<section>
<h3>Splitting Work</h3>
<h3>Shared Memory</h3>
<img src="2021-03-18/communication_sharedmem.svg" />
</section>
<section>
<h3>Non-Uniform Memory Access</h3>
<img src="2021-03-18/communication_numa.svg" />
</section>
<section>
<h3>Shared Nothing / Message Passing</h3>
<img src="2021-03-18/communication_sharednothing.svg" />
</section>
<section>
<dl>
<dt class="fragment highlight-grey" data-fragment-index=1>Shared Memory</dt>
<dd class="fragment highlight-grey" data-fragment-index=1>HDFS, S3, RAM+Modern OSes</dd>
<dt class="fragment highlight-grey" data-fragment-index=1>NUMA</dt>
<dd class="fragment highlight-grey" data-fragment-index=1>AMD CPUs</dd>
<dt>Shared Nothing</dt>
<dd>MPP, Actor Model</dd>
<p class="fragment" data-fragment-index=1>Today we want to clearly see the communications.</p>
</dl>
</section>
</section>
<section>
<section>
<h3>The Basic Model</h3>
<svg data-src="2021-03-18/single_worker.svg" />
</section>
<section>
<h3>Putting Workers Together</h3>
<svg data-src="2021-03-18/assembly_line.svg" height="500px"/>
@ -43,7 +82,39 @@ textbook: Ch. 20.1, 20.3, 20.4
</section>
<section>
<svg data-src="2021-03-18/bottlenecks.svg" />
</section>
</section>
<section>
<section>
<h3>No Parallelism</h3>
<img src="2021-03-18/query.svg">
<attribution>freesvg.org</attribution>
</section>
<section>
<h3>"Pipeline" Parallelism</h3>
<img src="2021-03-18/query_pipeline.svg">
<attribution>freesvg.org</attribution>
</section>
<section>
<h3>"Pipeline" Parallelism</h3>
<img src="2021-03-18/query_partition.svg">
<attribution>freesvg.org</attribution>
</section>
<section>
<h3>Together</h3>
<img src="2021-03-18/query_full.svg">
<attribution>freesvg.org</attribution>
</section>
</section>
<section>
<section>
<svg data-src="2021-03-18/partition_challenge.svg" />
</section>
<section>
@ -51,17 +122,400 @@ textbook: Ch. 20.1, 20.3, 20.4
<table>
<tr>
<th>Replication</th>
<th class="fragment highlight-grey" data-fragment-index=3>Replication</th>
<td style="width: 20px"></td>
<th>Partitioning (Sharding)</th>
</tr>
<tr>
<td><img class="fragment" src="2021-03-18/replication.svg" /></td>
<td><img class="fragment" data-fragment-index=1 src="2021-03-18/replication.svg" /></td>
<td></td>
<td><img class="fragment" src="2021-03-18/partitioning.svg" /></td>
<td><img class="fragment" data-fragment-index=2 src="2021-03-18/partitioning.svg" /></td>
</tr>
</table>
</section>
<section>
<h3>How to Partition Data?</h3>
<ul>
<li>Arbitrarily</li>
<li class="fragment highlight-grey" data-fragment-index="2">Range</li>
<li class="fragment highlight-grey" data-fragment-index="2">Hash</li>
</ul>
<p class="fragment" data-fragment-index="1" style="font-size: 70%">look familiar?</p>
</section>
<section>
<p>Can we run each worker on one partition?</p>
</section>
<section>
<h3>Filter</h3>
<h2 class="fragment">Yes</h2>
<p class="fragment">$N$ partitions in, $N$ partitions out</p>
</section>
<section>
<h3>Project</h3>
<h2 class="fragment">Yes</h2>
<p class="fragment">$N$ partitions in, $N$ partitions out</p>
</section>
<section>
<h3>Union</h3>
<h2 class="fragment">Yes</h2>
<p class="fragment">Trick question, just combines partitions!</p>
</section>
<section>
<h3>(Single-row) Aggregate</h3>
<h2 class="fragment">No</h2>
<p class="fragment">$N$ partitions in, $1$ partition out</p>
</section>
</section>
<section>
<section>
<svg data-src="2021-03-18/query_aggregate.svg" />
</section>
<section>
<h3>Partial Aggregation</h3>
<dl>
<dt>Algebraic Aggregates (Count, Sum, Avg, Min, Max)</dt>
<dd>Bounded-size intermediate state</dd>
<dt class="fragment highlight-grey" data-fragment-index=1>Holistic Aggregates (Median, Mode, Count-Distinct)</dt>
<dd class="fragment highlight-grey" data-fragment-index=1><b>Un</b>bounded-size intermediate state</dd>
</dl>
</section>
<section>
<div>
$$\Sigma_{SUM} (R_1 \uplus R_2 \uplus \ldots \uplus R_N)$$
</div>
<p class="fragment">Aggregate needs to process $N$ <b>partitions</b>.</p>
<div class="fragment" style="margin-top: 100px">
$$\Sigma_{SUM} (\Sigma_{SUM}(R_1) \uplus \Sigma_{SUM}(R_2) \uplus \ldots \uplus \Sigma_{SUM}(R_N))$$
</div>
<p class="fragment">Final aggregate only needs to process $N$ <b>tuples</b>.</p>
</section>
<section>
<div>
$$\Sigma_{AVG} (R_1 \uplus R_2 \uplus \ldots \uplus R_N)$$
</div>
<p>↓↓↓↓↓</p>
<div>
$$\Sigma_{\frac{SUM(A)}{SUM(B)}} (\Sigma_{A \leftarrow SUM,\; B \leftarrow COUNT}(R_1) \ldots \Sigma_{A \leftarrow SUM,\; B \leftarrow COUNT}(R_N))$$
</div>
</section>
<section>
<h3>Basic Aggregate Pattern</h3>
<dl>
<dt>Init</dt>
<dd>Define a starting value for the accumulator</dd>
<dt>Fold(Accum, New)</dt>
<dd>Merge a new value into the accumulator</dd>
<dt>Finalize(Accum)</dt>
<dd>Extract the aggregate from the accumulator.</dd>
<dt class="fragment" data-fragment-index=1>Merge(Accum, Accum)</dt>
<dd class="fragment" data-fragment-index=1>Merge two accumulators together.</dd>
</dl>
</section>
<section>
<img src="2021-03-18/query_aggregate_merge.svg" />
</section>
</section>
<section>
<section>
<h3>Joins</h3>
<h2 class="fragment">No</h2>
<p class="fragment">Every partition from one table needs to pair <br/>with every partition from the other.</p>
</section>
<section>
$$(R_1 \uplus \ldots \uplus R_N) \bowtie (S_1 \uplus \ldots \uplus S_K)$$
<p style="margin-bottom: 50px; margin-top: 50px;">↓↓↓↓↓↓</p>
$$(R_1 \bowtie S_1) \uplus \ldots \uplus (R_1 \bowtie S_K)$$
$$\ldots\uplus \ldots \uplus \ldots$$
$$(R_N \bowtie S_1) \uplus \ldots \uplus (R_N \bowtie S_K)$$
</section>
<section>
<table>
<tr>
<td></td>
<% (1..4).each do |j| %><td>$S_<%= j %>$</td><%end%>
</tr>
<% (1..4).each do |i| %>
<tr>
<td>$R_<%=i%>$</td>
<% (1..4).each do |j| %><td>$R_<%=i%>\bowtie S_<%=j%>$</td><%end%>
</tr>
<% end %>
</table>
<p class="fragment">$N$ workers gets us $\sqrt{N}$ scaling</p>
</section>
<section>
<h3>How to Partition Data?</h3>
<ul>
<li class="fragment highlight-current-blue" data-fragment-index=1>Arbitrarily</li>
<li class="fragment highlight-current-blue" data-fragment-index=2>Range</li>
<li class="fragment highlight-current-blue" data-fragment-index=2>Hash</li>
</ul>
</section>
<section>
$$R \bowtie_{A} S$$
$$R_i = \sigma_{\texttt{hash}(A) = i}(R)$$
$$S_i = \sigma_{\texttt{hash}(A) = i}(S)$$
</section>
<section>
<table>
<tr>
<td></td>
<% (1..4).each do |j| %><td>$S_<%= j %>$</td><%end%>
</tr>
<% (1..4).each do |i| %>
<tr>
<td>$R_<%=i%>$</td>
<% (1..4).each do |j| %>
<% if i == j %>
<td>$R_<%=i%>\bowtie S_<%=j%>$</td>
<% else %>
<td class="fragment highlight-grey" data-fragment-index=1>$R_<%=i%>\bowtie S_<%=j%>$</td>
<% end %>
<% end %>
</tr>
<% end %>
</table>
<p class="fragment">Back to $N$ scaling for $N$ workers</p>
</section>
<section>
<p>What if the partitions aren't aligned so nicely?</p>
</section>
<section>
<svg data-src="2021-03-18/reshuffle.svg" />
</section>
</section>
<section>
<section>
<p>Can we do better?</p>
<p class="fragment">Focus on $R_1 \bowtie_B S_1$</p>
<p style="margin-top: 100px" class="fragment"><b>Problem: </b> All tuples in $R_1$ and $S_1$ need to be<br/> sent to the same worker.</p>
</section>
<section>
<h3>Data Transfer</h3>
<ul>
<li>Limited IO/<span class="fragment highlight-blue">Network</span> bandwidth</li>
<li>Compute needed to receive data</li>
</ul>
</section>
<section>
<p><b>Idea 1</b>: Put the worker on the node that has the data!</p>
<p class="fragment" style="margin-top: 100px"><b>Problem:</b> What if the data is on 2 different nodes?</p>
<p class="fragment" style="margin-top: 100px"><b>Idea 1.b:</b> Put the worker on one of the nodes with data.</p>
</section>
<section>
<p>Can we reduce network use more?</p>
</section>
<section>
<svg data-src="2021-03-18/semijoin_naive.svg" />
</section>
<section>
<svg data-src="2021-03-18/semijoin_actual.svg" />
</section>
<section>
<svg data-src="2021-03-18/semijoin_example.svg" />
</section>
</section>
<section>
<section>
<p><b>Problem: </b> Worker 2 is still sending a lot of data.</p>
<p class="fragment" style="margin-top: 50px;"><b>Idea:</b> Compress $\pi_B(S_1)$</p>
</section>
<section>
<h3>Lossy Compression</h3>
<p>(not all errors are equal)</p>
<dl>
<dt class="fragment">False Positives</dt>
<dd class="fragment">($b \in \pi_B(S_1)$ when it isn't)</dd>
<dd class="fragment">not ideal, but ok</dd>
<dt class="fragment">False Negatives</dt>
<dd class="fragment">($b \not\in \pi_B(S_1)$ when it is)</dd>
<dd class="fragment">bad, wrong answer!</dd>
</dl>
</section>
<section>
<h3>Bloom Filters</h3>
$$filter \leftarrow \texttt{Bloom}(\textbf{Alice}, \textbf{Bob}, \textbf{Carol}, \textbf{Dave})$$
<table style="margin-top: 100px;">
<tr>
<td class="fragment"><b>User</b>: Is Alice part of the set?</td>
<td class="fragment">$filter$: Yes</td>
</tr>
<tr>
<td class="fragment"><b>User</b>: Is Eve part of the set?</td>
<td class="fragment">$filter$: No</td>
</tr>
<tr>
<td class="fragment"><b>User</b>: Is Fred part of the set?</td>
<td class="fragment">$filter$: Yes</td>
</tr>
</table>
</section>
<section>
<h3>Bloom Filter</h3>
<p style="margin-top: 50px;">Test <b>always</b> returns Yes if the element is in the set.</p>
<p style="margin-top: 50px;">Test <b>usually</b> returns No if the element is not in the set.</p>
</section>
<section>
<h3>Bloom Filters</h3>
<p style="margin-top: 50px;">A bloom filter is an array of bits.</p>
<p style="margin-top: 50px;">$M$: Number of bits in the array.</p>
<p style="margin-top: 50px;">$K$: Number of hash functions.</p>
</section>
<section>
<h3>For one record/key</h3>
<ol>
<li class="fragment">$\forall i \in [M] : filter[i] = 0$</li>
<li class="fragment">$\forall j \in [K] : filter[\texttt{hash}_j(key)] = 1$</li>
</ol>
<p class="fragment">Each bit vector has $\sim K$ bits set.</p>
</section>
<section>
<table>
<tr>
<td>$Key_1$</td>
<td>00101010</td>
</tr>
<tr>
<td>$Key_2$</td>
<td>01010110</td>
</tr>
<tr>
<td>$Key_3$</td>
<td>10000110</td>
</tr>
<tr>
<td>$Key_4$</td>
<td>01001100</td>
</tr>
</table>
<div class="fragment">
<h4 style="margin-top: 30px;">Filters are combined by Bitwise-OR</h4>
$$Key_1 \;|\; Key_2 = 01111110$$
</div>
<div class="fragment">
<h4 style="margin-top: 30px;">Test for inclusion by checking for bits</h4>
$$Key_i \;\&\; filter = Key_i$$
</div>
</section>
<section>
<table>
<tr>
<td>$Key_1$</td>
<td>00101010</td>
</tr>
<tr>
<td>$Key_2$</td>
<td>01010110</td>
</tr>
<tr>
<td>$Key_3$</td>
<td>10000110</td>
</tr>
<tr>
<td>$Key_4$</td>
<td>01001100</td>
</tr>
</table>
<div style="margin-top: 50px">
$$Key_1 \;|\; Key_2 = 01111110$$
</div>
<table style="margin-top: 50px">
<tr>
<td class="fragment">$Key_1 \;\&\; 01111110$</td>
<td class="fragment">00101010</td>
<td class="fragment">✅</td>
</tr>
<tr>
<td class="fragment">$Key_3 \;\&\; 01111110$</td>
<td class="fragment"><span class="fragment highlight-blue">0</span>0101010</td>
<td class="fragment">❌</td>
</tr>
<tr>
<td class="fragment">$Key_4 \;\&\; 01111110$</td>
<td class="fragment">01001100</td>
<td class="fragment">✅</td>
</tr>
</table>
<p class="fragment">(False positive)</p>
</section>
<section>
<svg data-src="2021-03-18/semijoin_bloom.svg" />
</section>
</section>
<section>
<b>Next time:</b> Online Aggregation/AQP
</section>

View file

@ -0,0 +1,260 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="171.68761mm"
height="87.875458mm"
viewBox="0 0 171.68761 87.875457"
version="1.1"
id="svg8"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
sodipodi:docname="bottlenecks.svg">
<defs
id="defs2">
<marker
style="overflow:visible"
id="marker1165"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Send"
inkscape:isstock="true">
<path
transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1163" />
</marker>
<marker
style="overflow:visible"
id="Arrow1Send"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Send"
inkscape:isstock="true"
inkscape:collect="always">
<path
transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path874" />
</marker>
<marker
style="overflow:visible"
id="Arrow1Lend"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:isstock="true">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path862" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="279.46815"
inkscape:cy="226.86306"
inkscape:document-units="mm"
inkscape:current-layer="g1628"
inkscape:document-rotation="0"
showgrid="false"
showguides="false"
inkscape:window-width="1920"
inkscape:window-height="1053"
inkscape:window-x="960"
inkscape:window-y="398"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-13.436605,-9.5141266)">
<rect
style="opacity:1;fill:#f2f2f2;stroke:#666666;stroke-width:0.765;stroke-linecap:round;stroke-linejoin:round"
id="rect837"
width="32.54221"
height="27.25053"
x="96.097656"
y="38.458027" />
<g
id="g1243"
transform="translate(-2.1166667)">
<path
style="fill:#b7c8b7;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 21.263086,49.360465 c -0.267094,-0.50955 2.120303,1.04783 2.120303,1.04783 0.275309,0.87331 -4.678209,3.86992 -4.203639,4.57355 0.08806,0.13057 0.298849,0.13171 0.456112,0.12324 1.958039,-0.10548 1.643695,-0.51018 0.924552,2.07107 -0.759335,2.72552 -2.631408,7.04601 -0.727315,9.72643 1.431419,2.01503 8.156855,0.49263 10.50295,1.34368 2.80526,1.01761 -0.23087,5.51466 1.861436,6.47197 2.107555,0.96427 4.968264,-5.44646 7.026622,-5.84327 1.578464,-0.3043 4.253698,2.3967 6.903342,2.02175 2.49412,-0.35295 2.9383,-2.77104 3.15582,-4.78312 0.0566,-0.52371 -0.3789,-1.82506 0.0863,-1.57793 1.32556,0.70421 1.33757,2.81312 3.40236,2.44088 4.02909,-0.72637 4.79448,-7.66811 5.11588,-10.72498 0.18535,-1.76289 0.19262,-2.07744 -0.4931,-3.57499 -0.13908,-0.30376 -0.29385,-0.61436 -0.53008,-0.85059 -0.13585,-0.13585 -0.55728,0.52731 -0.43146,0.38213 0.63225,-0.72949 0.8041,-3.3544 0.80129,-3.55031 -0.0423,-2.94821 -0.97864,-6.30729 -4.37624,-6.68153 -1.32381,-0.14582 -2.42337,0.5059 -2.45315,0.43145 -0.64682,-1.61711 1.7164,-4.09357 0.57939,-6.76781 -2.40689,-5.66099 -6.48811,-0.36794 -7.384116,-0.45614 -1.403738,-0.13818 -1.366869,-4.63302 -2.194274,-5.43641 -3.322669,-3.2262 -6.641729,4.88229 -8.518236,6.26236 -0.796171,0.58553 -4.668523,-3.48922 -7.470413,-3.0449 -1.360363,0.21573 -1.691002,1.86261 -1.738161,2.89697 -0.120227,2.63701 1.600118,3.05995 0.714991,3.10654 -2.053582,0.1081 -5.822659,-1.48935 -7.445753,0.20957 -3.199069,3.34851 0.207446,10.02054 4.314589,10.18256"
id="path833"
sodipodi:nodetypes="csssssssssssssssssssssssssssc" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Send)"
d="M 59.174498,52.062708 H 72.224251"
id="path857" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="29.074074"
y="53.967762"
id="text1217"><tspan
sodipodi:role="line"
id="tspan1215"
x="29.074074"
y="53.967762"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583">Input</tspan></text>
</g>
<g
id="g1473">
<rect
style="opacity:0.61;fill:#f2f2f2;stroke:#000000;stroke-width:0.3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
id="rect1287"
width="23.579447"
height="9.7594995"
x="72.518211"
y="47.203541" />
<rect
style="opacity:0.61;fill:#ac9393;stroke:#000000;stroke-width:0.3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
id="rect1331"
width="6.2962499"
height="8.4129181"
x="73.576538"
y="47.876831" />
<rect
style="opacity:0.61;fill:#deaa87;stroke:#000000;stroke-width:0.3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
id="rect1348"
width="6.2962499"
height="8.4129181"
x="80.984871"
y="47.876831" />
<rect
style="opacity:0.61;fill:#b7bec8;stroke:#000000;stroke-width:0.3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
id="rect1350"
width="6.2962499"
height="8.4129181"
x="88.393196"
y="47.876831" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93889px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="76.251434"
y="60.455574"
id="text1465"><tspan
sodipodi:role="line"
id="tspan1463"
x="76.251434"
y="60.455574"
style="font-size:4.93889px;stroke-width:0.264583">queue</tspan></text>
</g>
<g
id="g1267"
transform="translate(21.166667)">
<path
style="fill:#c8b7be;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 127.09644,49.360465 c -0.26709,-0.50955 2.1203,1.04783 2.1203,1.04783 0.27531,0.87331 -4.67821,3.86992 -4.20364,4.57355 0.0881,0.13057 0.29885,0.13171 0.45611,0.12324 1.95805,-0.10548 1.6437,-0.51018 0.92456,2.07107 -0.75934,2.72552 -2.63141,7.04601 -0.72732,9.72643 1.43142,2.01503 8.15686,0.49263 10.50296,1.34368 2.80526,1.01761 -0.23087,5.51466 1.86144,6.47197 2.10755,0.96427 4.96826,-5.44646 7.02662,-5.84327 1.57846,-0.3043 4.2537,2.3967 6.90335,2.02175 2.49412,-0.35295 2.9383,-2.77104 3.15582,-4.78312 0.0566,-0.52371 -0.3789,-1.82506 0.0863,-1.57793 1.32556,0.70421 1.33757,2.81312 3.40236,2.44088 4.02909,-0.72637 4.79448,-7.66811 5.11588,-10.72498 0.18535,-1.76289 0.19262,-2.07744 -0.4931,-3.57499 -0.13908,-0.30376 -0.29385,-0.61436 -0.53008,-0.85059 -0.13585,-0.13585 -0.55728,0.52731 -0.43146,0.38213 0.63225,-0.72949 0.8041,-3.3544 0.80129,-3.55031 -0.0423,-2.94821 -0.97864,-6.30729 -4.37624,-6.68153 -1.32381,-0.14582 -2.42337,0.5059 -2.45315,0.43145 -0.64682,-1.61711 1.7164,-4.09357 0.57939,-6.76781 -2.40689,-5.66099 -6.48811,-0.36794 -7.38412,-0.45614 -1.40374,-0.13818 -1.36687,-4.63302 -2.19428,-5.43641 -3.32267,-3.2262 -6.64173,4.88229 -8.51824,6.26236 -0.79617,0.58553 -4.66852,-3.48922 -7.47042,-3.0449 -1.36036,0.21573 -1.691,1.86261 -1.73816,2.89697 -0.12022,2.63701 1.60012,3.05995 0.71499,3.10654 -2.05358,0.1081 -5.82266,-1.48935 -7.44575,0.20957 -3.19907,3.34851 0.20744,10.02054 4.31459,10.18256"
id="path835"
sodipodi:nodetypes="csssssssssssssssssssssssssssc" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1165)"
d="m 110.50369,52.062708 h 13.04976"
id="path1161" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="131.8241"
y="53.967762"
id="text1221"><tspan
sodipodi:role="line"
id="tspan1219"
x="131.8241"
y="53.967762"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583">Output</tspan></text>
</g>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="99.939186"
y="53.967762"
id="text1225"><tspan
sodipodi:role="line"
id="tspan1223"
x="99.939186"
y="53.967762"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583">Worker</tspan></text>
<g
id="g1628"
class="fragment"
transform="translate(-0.0686789,8.9547067)">
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="30.771627"
y="5.919992"
id="text1570"><tspan
sodipodi:role="line"
id="tspan1568"
x="30.771627"
y="5.919992"
style="font-size:7.05556px;stroke-width:0.264583">Data doesn't</tspan><tspan
sodipodi:role="line"
x="30.771627"
y="14.739442"
style="font-size:7.05556px;stroke-width:0.264583"
id="tspan1572">arrive fast enough</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 55.120706,16.017924 9.320191,25.751104"
id="path1574"
sodipodi:nodetypes="cc" />
</g>
<g
id="g1634"
class="fragment">
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 112.90783,61.428105 -9.86475,22.179882"
id="path1576"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="30.300447"
y="88.47023"
id="text1580"><tspan
sodipodi:role="line"
x="30.300447"
y="88.47023"
style="font-size:7.05556px;stroke-width:0.264583"
id="tspan1588">Worker processes data </tspan><tspan
sodipodi:role="line"
x="30.300447"
y="97.28968"
style="font-size:7.05556px;stroke-width:0.264583"
id="tspan1592">slower than it arrives</tspan></text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 15 KiB

View file

@ -13,7 +13,7 @@
viewBox="0 0 261.96362 119.64035"
version="1.1"
id="svg78"
inkscape:version="1.0.2 (e86c870879, 2021-01-15)"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
sodipodi:docname="communication_base.svg">
<defs
id="defs72">
@ -251,10 +251,10 @@
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="false"
inkscape:window-width="2048"
inkscape:window-height="1152"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-width="1920"
inkscape:window-height="1053"
inkscape:window-x="960"
inkscape:window-y="398"
inkscape:window-maximized="1" />
<metadata
id="metadata75">
@ -264,7 +264,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
@ -427,7 +427,7 @@
id="image163" />
</g>
<path
style="fill:none;stroke:#000000;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Lend);marker-start:url(#Arrow1Lstart)"
style="fill:none;stroke:#000000;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Arrow1Lstart);marker-end:url(#Arrow1Lend)"
d="M 100.44746,91.834535 V 101.96247"
id="path167" />
<path

Before

Width:  |  Height:  |  Size: 404 KiB

After

Width:  |  Height:  |  Size: 404 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 413 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 198 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 408 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 157 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 96 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 30 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 34 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 177 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 241 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 166 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 32 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 172 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 62 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 62 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 125 KiB

View file

@ -0,0 +1,295 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="171.84918mm"
height="65.214546mm"
viewBox="0 0 171.84919 65.214546"
version="1.1"
id="svg8"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
sodipodi:docname="single_worker.svg">
<defs
id="defs2">
<marker
style="overflow:visible"
id="marker1165"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Send"
inkscape:isstock="true">
<path
transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1163" />
</marker>
<marker
style="overflow:visible"
id="Arrow1Send"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Send"
inkscape:isstock="true"
inkscape:collect="always">
<path
transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path874" />
</marker>
<marker
style="overflow:visible"
id="Arrow1Lend"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:isstock="true">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path862" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="279.46815"
inkscape:cy="125.14743"
inkscape:document-units="mm"
inkscape:current-layer="g1548"
inkscape:document-rotation="0"
showgrid="false"
showguides="false"
inkscape:window-width="1920"
inkscape:window-height="1053"
inkscape:window-x="960"
inkscape:window-y="398"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-13.436605,-28.866865)">
<rect
style="opacity:1;fill:#f2f2f2;stroke:#666666;stroke-width:0.765;stroke-linecap:round;stroke-linejoin:round"
id="rect837"
width="32.54221"
height="27.25053"
x="96.097656"
y="38.458027" />
<g
id="g1243"
transform="translate(-2.1166667)"
class="fragment">
<path
style="fill:#b7c8b7;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 21.263086,49.360465 c -0.267094,-0.50955 2.120303,1.04783 2.120303,1.04783 0.275309,0.87331 -4.678209,3.86992 -4.203639,4.57355 0.08806,0.13057 0.298849,0.13171 0.456112,0.12324 1.958039,-0.10548 1.643695,-0.51018 0.924552,2.07107 -0.759335,2.72552 -2.631408,7.04601 -0.727315,9.72643 1.431419,2.01503 8.156855,0.49263 10.50295,1.34368 2.80526,1.01761 -0.23087,5.51466 1.861436,6.47197 2.107555,0.96427 4.968264,-5.44646 7.026622,-5.84327 1.578464,-0.3043 4.253698,2.3967 6.903342,2.02175 2.49412,-0.35295 2.9383,-2.77104 3.15582,-4.78312 0.0566,-0.52371 -0.3789,-1.82506 0.0863,-1.57793 1.32556,0.70421 1.33757,2.81312 3.40236,2.44088 4.02909,-0.72637 4.79448,-7.66811 5.11588,-10.72498 0.18535,-1.76289 0.19262,-2.07744 -0.4931,-3.57499 -0.13908,-0.30376 -0.29385,-0.61436 -0.53008,-0.85059 -0.13585,-0.13585 -0.55728,0.52731 -0.43146,0.38213 0.63225,-0.72949 0.8041,-3.3544 0.80129,-3.55031 -0.0423,-2.94821 -0.97864,-6.30729 -4.37624,-6.68153 -1.32381,-0.14582 -2.42337,0.5059 -2.45315,0.43145 -0.64682,-1.61711 1.7164,-4.09357 0.57939,-6.76781 -2.40689,-5.66099 -6.48811,-0.36794 -7.384116,-0.45614 -1.403738,-0.13818 -1.366869,-4.63302 -2.194274,-5.43641 -3.322669,-3.2262 -6.641729,4.88229 -8.518236,6.26236 -0.796171,0.58553 -4.668523,-3.48922 -7.470413,-3.0449 -1.360363,0.21573 -1.691002,1.86261 -1.738161,2.89697 -0.120227,2.63701 1.600118,3.05995 0.714991,3.10654 -2.053582,0.1081 -5.822659,-1.48935 -7.445753,0.20957 -3.199069,3.34851 0.207446,10.02054 4.314589,10.18256"
id="path833"
sodipodi:nodetypes="csssssssssssssssssssssssssssc" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Send)"
d="M 59.174498,52.062708 H 72.224251"
id="path857" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="29.074074"
y="53.967762"
id="text1217"><tspan
sodipodi:role="line"
id="tspan1215"
x="29.074074"
y="53.967762"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583">Input</tspan></text>
</g>
<g
id="g1473"
class="fragment">
<rect
style="opacity:0.61;fill:#f2f2f2;stroke:#000000;stroke-width:0.3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
id="rect1287"
width="23.579447"
height="9.7594995"
x="72.518211"
y="47.203541" />
<rect
style="opacity:0.61;fill:#ac9393;stroke:#000000;stroke-width:0.3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
id="rect1331"
width="6.2962499"
height="8.4129181"
x="73.576538"
y="47.876831" />
<rect
style="opacity:0.61;fill:#deaa87;stroke:#000000;stroke-width:0.3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
id="rect1348"
width="6.2962499"
height="8.4129181"
x="80.984871"
y="47.876831" />
<rect
style="opacity:0.61;fill:#b7bec8;stroke:#000000;stroke-width:0.3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
id="rect1350"
width="6.2962499"
height="8.4129181"
x="88.393196"
y="47.876831" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93889px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="76.251434"
y="60.455574"
id="text1465"><tspan
sodipodi:role="line"
id="tspan1463"
x="76.251434"
y="60.455574"
style="font-size:4.93889px;stroke-width:0.264583">queue</tspan></text>
</g>
<g
id="g1267"
transform="translate(21.166667)"
class="fragment">
<path
style="fill:#c8b7be;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 127.09644,49.360465 c -0.26709,-0.50955 2.1203,1.04783 2.1203,1.04783 0.27531,0.87331 -4.67821,3.86992 -4.20364,4.57355 0.0881,0.13057 0.29885,0.13171 0.45611,0.12324 1.95805,-0.10548 1.6437,-0.51018 0.92456,2.07107 -0.75934,2.72552 -2.63141,7.04601 -0.72732,9.72643 1.43142,2.01503 8.15686,0.49263 10.50296,1.34368 2.80526,1.01761 -0.23087,5.51466 1.86144,6.47197 2.10755,0.96427 4.96826,-5.44646 7.02662,-5.84327 1.57846,-0.3043 4.2537,2.3967 6.90335,2.02175 2.49412,-0.35295 2.9383,-2.77104 3.15582,-4.78312 0.0566,-0.52371 -0.3789,-1.82506 0.0863,-1.57793 1.32556,0.70421 1.33757,2.81312 3.40236,2.44088 4.02909,-0.72637 4.79448,-7.66811 5.11588,-10.72498 0.18535,-1.76289 0.19262,-2.07744 -0.4931,-3.57499 -0.13908,-0.30376 -0.29385,-0.61436 -0.53008,-0.85059 -0.13585,-0.13585 -0.55728,0.52731 -0.43146,0.38213 0.63225,-0.72949 0.8041,-3.3544 0.80129,-3.55031 -0.0423,-2.94821 -0.97864,-6.30729 -4.37624,-6.68153 -1.32381,-0.14582 -2.42337,0.5059 -2.45315,0.43145 -0.64682,-1.61711 1.7164,-4.09357 0.57939,-6.76781 -2.40689,-5.66099 -6.48811,-0.36794 -7.38412,-0.45614 -1.40374,-0.13818 -1.36687,-4.63302 -2.19428,-5.43641 -3.32267,-3.2262 -6.64173,4.88229 -8.51824,6.26236 -0.79617,0.58553 -4.66852,-3.48922 -7.47042,-3.0449 -1.36036,0.21573 -1.691,1.86261 -1.73816,2.89697 -0.12022,2.63701 1.60012,3.05995 0.71499,3.10654 -2.05358,0.1081 -5.82266,-1.48935 -7.44575,0.20957 -3.19907,3.34851 0.20744,10.02054 4.31459,10.18256"
id="path835"
sodipodi:nodetypes="csssssssssssssssssssssssssssc" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1165)"
d="m 110.50369,52.062708 h 13.04976"
id="path1161" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="131.8241"
y="53.967762"
id="text1221"><tspan
sodipodi:role="line"
id="tspan1219"
x="131.8241"
y="53.967762"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583">Output</tspan></text>
</g>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="99.939186"
y="53.967762"
id="text1225"><tspan
sodipodi:role="line"
id="tspan1223"
x="99.939186"
y="53.967762"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583">Worker</tspan></text>
<g
id="g1539"
class="fragment">
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="14.75823"
y="84.088089"
id="text1503"><tspan
sodipodi:role="line"
id="tspan1501"
x="14.75823"
y="84.088089"
style="font-size:7.05556px;stroke-width:0.264583">Raw</tspan><tspan
sodipodi:role="line"
x="14.75823"
y="92.907539"
style="font-size:7.05556px;stroke-width:0.264583"
id="tspan1505">Data</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="46.071609"
y="85.162056"
id="text1509"><tspan
sodipodi:role="line"
id="tspan1507"
x="46.071609"
y="85.162056"
style="font-size:7.05556px;stroke-width:0.264583">Another</tspan><tspan
sodipodi:role="line"
x="46.071609"
y="93.981506"
style="font-size:7.05556px;stroke-width:0.264583"
id="tspan1511">Worker</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 19.667352,77.54475 26.10379,61.538088"
id="path1523" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 53.943199,78.561459 43.529845,61.223914"
id="path1525" />
</g>
<g
id="g1548"
class="fragment">
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="122.35214"
y="83.883438"
id="text1515"><tspan
sodipodi:role="line"
id="tspan1513"
x="122.35214"
y="83.883438"
style="font-size:7.05556px;stroke-width:0.264583">Another</tspan><tspan
sodipodi:role="line"
x="122.35214"
y="92.702888"
style="font-size:7.05556px;stroke-width:0.264583"
id="tspan1517">Worker</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="157.65266"
y="83.883438"
id="text1521"><tspan
sodipodi:role="line"
id="tspan1519"
x="157.65266"
y="83.883438"
style="font-size:7.05556px;stroke-width:0.264583">Console</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 137.94379,76.102239 157.4274,60.200363"
id="path1527" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 171.74163,77.087598 166.83712,60.972983"
id="path1529" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 17 KiB