1 line
22 KiB
XML
1 line
22 KiB
XML
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css" data-diagram-type="DESCRIPTION" height="1154px" preserveAspectRatio="none" style="width:1103px;height:1154px;background:#FFFFFF;" version="1.1" viewBox="0 0 1103 1154" width="1103px" zoomAndPan="magnify"><title>Sistema de Registro de Estudiantes - Diagrama de Despliegue</title><defs/><g><g class="title" data-source-line="6"><text fill="#000000" font-family="Verdana" font-size="22" font-weight="bold" lengthAdjust="spacing" textLength="771.6758" x="161.2492" y="35.4209">Sistema de Registro de Estudiantes - Diagrama de Despliegue</text></g><!--cluster client--><g class="cluster" data-entity="client" data-source-line="8" data-uid="ent0002" id="cluster_client"><polygon fill="#F8F9FA" points="527,67.6094,537,57.6094,784,57.6094,784,248.9094,774,258.9094,527,258.9094,527,67.6094" style="stroke:#495057;stroke-width:1;"/><line style="stroke:#495057;stroke-width:1;" x1="774" x2="784" y1="67.6094" y2="57.6094"/><line style="stroke:#495057;stroke-width:1;" x1="527" x2="774" y1="67.6094" y2="67.6094"/><line style="stroke:#495057;stroke-width:1;" x1="774" x2="774" y1="67.6094" y2="258.9094"/><text fill="#000000" font-family="Verdana" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="55.5215" x="623.7393" y="83.6045">Cliente</text></g><!--cluster browser--><g class="cluster" data-entity="browser" data-source-line="9" data-uid="ent0003" id="cluster_browser"><rect fill="#E9ECEF" height="113.3" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="193" x="559" y="113.6094"/><rect fill="#E9ECEF" height="10" style="stroke:#000000;stroke-width:1;" width="15" x="732" y="118.6094"/><rect fill="#E9ECEF" height="2" style="stroke:#000000;stroke-width:1;" width="4" x="730" y="120.6094"/><rect fill="#E9ECEF" height="2" style="stroke:#000000;stroke-width:1;" width="4" x="730" y="124.6094"/><text fill="#000000" font-family="Verdana" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="125.6309" x="592.6846" y="139.6045">Navegador Web</text></g><!--cluster docker--><g class="cluster" data-entity="docker" data-source-line="14" data-uid="ent0005" id="cluster_docker"><polygon fill="#F8F9FA" points="21,317.9094,31,307.9094,896,307.9094,896,1127.4794,886,1137.4794,21,1137.4794,21,317.9094" style="stroke:#495057;stroke-width:1;"/><line style="stroke:#495057;stroke-width:1;" x1="886" x2="896" y1="317.9094" y2="307.9094"/><line style="stroke:#495057;stroke-width:1;" x1="21" x2="886" y1="317.9094" y2="317.9094"/><line style="stroke:#495057;stroke-width:1;" x1="886" x2="886" y1="317.9094" y2="1137.4794"/><text fill="#000000" font-family="Verdana" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="96.4824" x="406.2588" y="333.9045">Docker Host</text></g><!--cluster frontendContainer--><g class="cluster" data-entity="frontendContainer" data-source-line="16" data-uid="ent0006" id="cluster_frontendContainer"><polygon fill="#F8F9FA" points="361,365.9094,371,355.9094,784,355.9094,784,563.1994,774,573.1994,361,573.1994,361,365.9094" style="stroke:#495057;stroke-width:1;"/><line style="stroke:#495057;stroke-width:1;" x1="774" x2="784" y1="365.9094" y2="355.9094"/><line style="stroke:#495057;stroke-width:1;" x1="361" x2="774" y1="365.9094" y2="365.9094"/><line style="stroke:#495057;stroke-width:1;" x1="774" x2="774" y1="365.9094" y2="573.1994"/><text fill="#000000" font-family="Verdana" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="83.6172" x="526.6914" y="381.9045">«container»</text><text fill="#000000" font-family="Verdana" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="135.7344" x="500.6328" y="398.2014">student-frontend</text></g><!--cluster nginx--><g class="cluster" data-entity="nginx" data-source-line="17" data-uid="ent0007" id="cluster_nginx"><rect fill="#E9ECEF" height="113.29" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="359" x="393" y="427.9094"/><rect fill="#E9ECEF" height="10" style="stroke:#000000;stroke-width:1;" width="15" x="732" y="432.9094"/><rect fill="#E9ECEF" height="2" style="stroke:#000000;stroke-width:1;" width="4" x="730" y="434.9094"/><rect fill="#E9ECEF" height="2" style="stroke:#000000;stroke-width:1;" width="4" x="730" y="438.9094"/><text fill="#000000" font-family="Verdana" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="45.5342" x="549.7329" y="453.9045">Nginx</text></g><!--cluster apiContainer--><g class="cluster" data-entity="apiContainer" data-source-line="23" data-uid="ent0010" id="cluster_apiContainer"><polygon fill="#F8F9FA" points="45,647.1994,55,637.1994,520,637.1994,520,1103.4794,510,1113.4794,45,1113.4794,45,647.1994" style="stroke:#495057;stroke-width:1;"/><line style="stroke:#495057;stroke-width:1;" x1="510" x2="520" y1="647.1994" y2="637.1994"/><line style="stroke:#495057;stroke-width:1;" x1="45" x2="510" y1="647.1994" y2="647.1994"/><line style="stroke:#495057;stroke-width:1;" x1="510" x2="510" y1="647.1994" y2="1113.4794"/><text fill="#000000" font-family="Verdana" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="83.6172" x="236.6914" y="663.1945">«container»</text><text fill="#000000" font-family="Verdana" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="91.2461" x="232.877" y="679.4914">student-api</text></g><!--cluster aspnet--><g class="cluster" data-entity="aspnet" data-source-line="24" data-uid="ent0011" id="cluster_aspnet"><rect fill="#E9ECEF" height="372.28" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="411" x="77" y="709.1994"/><rect fill="#E9ECEF" height="10" style="stroke:#000000;stroke-width:1;" width="15" x="468" y="714.1994"/><rect fill="#E9ECEF" height="2" style="stroke:#000000;stroke-width:1;" width="4" x="466" y="716.1994"/><rect fill="#E9ECEF" height="2" style="stroke:#000000;stroke-width:1;" width="4" x="466" y="720.1994"/><text fill="#000000" font-family="Verdana" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="108.4932" x="228.2534" y="735.1945">ASP.NET Core</text></g><!--cluster dbContainer--><g class="cluster" data-entity="dbContainer" data-source-line="31" data-uid="ent0015" id="cluster_dbContainer"><polygon fill="#F8F9FA" points="544,891.1794,554,881.1794,872,881.1794,872,1103.4794,862,1113.4794,544,1113.4794,544,891.1794" style="stroke:#495057;stroke-width:1;"/><line style="stroke:#495057;stroke-width:1;" x1="862" x2="872" y1="891.1794" y2="881.1794"/><line style="stroke:#495057;stroke-width:1;" x1="544" x2="862" y1="891.1794" y2="891.1794"/><line style="stroke:#495057;stroke-width:1;" x1="862" x2="862" y1="891.1794" y2="1113.4794"/><text fill="#000000" font-family="Verdana" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="83.6172" x="662.1914" y="907.1745">«container»</text><text fill="#000000" font-family="Verdana" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="87.0215" x="660.4893" y="923.4714">student-db</text></g><!--cluster sqlserver--><g class="cluster" data-entity="sqlserver" data-source-line="32" data-uid="ent0016" id="cluster_sqlserver"><path d="M576,963.1794 C576,953.1794 708,953.1794 708,953.1794 C708,953.1794 840,953.1794 840,963.1794 L840,1071.4794 C840,1081.4794 708,1081.4794 708,1081.4794 C708,1081.4794 576,1081.4794 576,1071.4794 L576,963.1794" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><path d="M576,963.1794 C576,973.1794 708,973.1794 708,973.1794 C708,973.1794 840,973.1794 840,963.1794" fill="none" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Verdana" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="131.626" x="642.187" y="988.1745">SQL Server 2022</text></g><!--entity Angular SPA--><g class="entity" data-entity="Angular SPA" data-source-line="10" data-uid="ent0004" id="entity_Angular SPA"><rect fill="#E9ECEF" height="46.2969" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="125.791" x="583.1" y="156.6094"/><rect fill="#E9ECEF" height="10" style="stroke:#000000;stroke-width:1;" width="15" x="688.891" y="161.6094"/><rect fill="#E9ECEF" height="2" style="stroke:#000000;stroke-width:1;" width="4" x="686.891" y="163.6094"/><rect fill="#E9ECEF" height="2" style="stroke:#000000;stroke-width:1;" width="4" x="686.891" y="167.6094"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="85.791" x="598.1" y="189.6045">Angular SPA</text></g><!--entity Static Files--><g class="entity" data-entity="Static Files" data-source-line="18" data-uid="ent0008" id="entity_Static Files"><rect fill="#E9ECEF" height="46.2969" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="116.2207" x="416.89" y="470.9094"/><rect fill="#E9ECEF" height="10" style="stroke:#000000;stroke-width:1;" width="15" x="513.1107" y="475.9094"/><rect fill="#E9ECEF" height="2" style="stroke:#000000;stroke-width:1;" width="4" x="511.1107" y="477.9094"/><rect fill="#E9ECEF" height="2" style="stroke:#000000;stroke-width:1;" width="4" x="511.1107" y="481.9094"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="76.2207" x="431.89" y="503.9045">Static Files</text></g><!--entity Reverse Proxy--><g class="entity" data-entity="Reverse Proxy" data-source-line="19" data-uid="ent0009" id="entity_Reverse Proxy"><rect fill="#E9ECEF" height="46.2969" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="140.6865" x="567.66" y="470.9094"/><rect fill="#E9ECEF" height="10" style="stroke:#000000;stroke-width:1;" width="15" x="688.3465" y="475.9094"/><rect fill="#E9ECEF" height="2" style="stroke:#000000;stroke-width:1;" width="4" x="686.3465" y="477.9094"/><rect fill="#E9ECEF" height="2" style="stroke:#000000;stroke-width:1;" width="4" x="686.3465" y="481.9094"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="100.6865" x="582.66" y="503.9045">Reverse Proxy</text></g><!--entity Kestrel Server--><g class="entity" data-entity="Kestrel Server" data-source-line="25" data-uid="ent0012" id="entity_Kestrel Server"><rect fill="#E9ECEF" height="46.2969" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="139.1963" x="101.4" y="752.1994"/><rect fill="#E9ECEF" height="10" style="stroke:#000000;stroke-width:1;" width="15" x="220.5963" y="757.1994"/><rect fill="#E9ECEF" height="2" style="stroke:#000000;stroke-width:1;" width="4" x="218.5963" y="759.1994"/><rect fill="#E9ECEF" height="2" style="stroke:#000000;stroke-width:1;" width="4" x="218.5963" y="763.1994"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="99.1963" x="116.4" y="785.1945">Kestrel Server</text></g><!--entity GraphQL Endpoint--><g class="entity" data-entity="GraphQL Endpoint" data-source-line="26" data-uid="ent0013" id="entity_GraphQL Endpoint"><rect fill="#E9ECEF" height="46.2969" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="168.5225" x="275.74" y="752.1994"/><rect fill="#E9ECEF" height="10" style="stroke:#000000;stroke-width:1;" width="15" x="424.2625" y="757.1994"/><rect fill="#E9ECEF" height="2" style="stroke:#000000;stroke-width:1;" width="4" x="422.2625" y="759.1994"/><rect fill="#E9ECEF" height="2" style="stroke:#000000;stroke-width:1;" width="4" x="422.2625" y="763.1994"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="128.5225" x="290.74" y="785.1945">GraphQL Endpoint</text></g><!--entity Health Check--><g class="entity" data-entity="Health Check" data-source-line="27" data-uid="ent0014" id="entity_Health Check"><rect fill="#E9ECEF" height="46.2969" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="133.4883" x="104.26" y="1011.1794"/><rect fill="#E9ECEF" height="10" style="stroke:#000000;stroke-width:1;" width="15" x="217.7483" y="1016.1794"/><rect fill="#E9ECEF" height="2" style="stroke:#000000;stroke-width:1;" width="4" x="215.7483" y="1018.1794"/><rect fill="#E9ECEF" height="2" style="stroke:#000000;stroke-width:1;" width="4" x="215.7483" y="1022.1794"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="93.4883" x="119.26" y="1044.1745">Health Check</text></g><!--entity StudentEnrollment DB--><g class="entity" data-entity="StudentEnrollment DB" data-source-line="33" data-uid="ent0017" id="entity_StudentEnrollment DB"><rect fill="#E9ECEF" height="46.2969" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="196.3789" x="599.81" y="1011.1794"/><rect fill="#E9ECEF" height="10" style="stroke:#000000;stroke-width:1;" width="15" x="776.1889" y="1016.1794"/><rect fill="#E9ECEF" height="2" style="stroke:#000000;stroke-width:1;" width="4" x="774.1889" y="1018.1794"/><rect fill="#E9ECEF" height="2" style="stroke:#000000;stroke-width:1;" width="4" x="774.1889" y="1022.1794"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="156.3789" x="614.81" y="1044.1745">StudentEnrollment DB</text></g><g class="entity" data-entity="GMN21" data-source-line="44" data-uid="ent0022" id="entity_GMN21"><path d="M911.83,451.2194 L911.83,536.8834 L1096.1742,536.8834 L1096.1742,461.2194 L1086.1742,451.2194 L911.83,451.2194" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><path d="M1086.1742,451.2194 L1086.1742,461.2194 L1096.1742,461.2194 L1086.1742,451.2194" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Verdana" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="99.1504" x="917.83" y="468.2863">Nginx Config:</text><text fill="#000000" font-family="Verdana" font-size="13" lengthAdjust="spacing" textLength="163.3442" x="917.83" y="483.4191">- Gzip/Brotli compression</text><text fill="#000000" font-family="Verdana" font-size="13" lengthAdjust="spacing" textLength="124.6616" x="917.83" y="498.5519">- Static file caching</text><text fill="#000000" font-family="Verdana" font-size="13" lengthAdjust="spacing" textLength="107.2437" x="917.83" y="513.6847">- GraphQL proxy</text><text fill="#000000" font-family="Verdana" font-size="13" lengthAdjust="spacing" textLength="118.9106" x="917.83" y="528.8175">- Security headers</text></g><g class="entity" data-entity="GMN24" data-source-line="52" data-uid="ent0025" id="entity_GMN24"><path d="M912.31,732.5194 L912.31,818.1834 L1067.6962,818.1834 L1067.6962,742.5194 L1057.6962,732.5194 L912.31,732.5194" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><path d="M1057.6962,732.5194 L1057.6962,742.5194 L1067.6962,742.5194 L1057.6962,732.5194" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Verdana" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="117.4697" x="918.31" y="749.5863">Optimizaciones:</text><text fill="#000000" font-family="Verdana" font-size="13" lengthAdjust="spacing" textLength="74.7373" x="918.31" y="764.7191">- Server GC</text><text fill="#000000" font-family="Verdana" font-size="13" lengthAdjust="spacing" textLength="91.1714" x="918.31" y="779.8519">- ReadyToRun</text><text fill="#000000" font-family="Verdana" font-size="13" lengthAdjust="spacing" textLength="134.3862" x="918.31" y="794.9847">- Connection pooling</text><text fill="#000000" font-family="Verdana" font-size="13" lengthAdjust="spacing" textLength="91.749" x="918.31" y="810.1175">- Rate limiting</text></g><g class="entity" data-entity="GMN27" data-source-line="60" data-uid="ent0028" id="entity_GMN27"><path d="M911.56,999.0694 L911.56,1069.6006 L1058.4467,1069.6006 L1058.4467,1009.0694 L1048.4467,999.0694 L911.56,999.0694" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><path d="M1048.4467,999.0694 L1048.4467,1009.0694 L1058.4467,1009.0694 L1048.4467,999.0694" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Verdana" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="71.8047" x="917.56" y="1016.1363">Recursos:</text><text fill="#000000" font-family="Verdana" font-size="13" lengthAdjust="spacing" textLength="87.0073" x="917.56" y="1031.2691">- 2 CPU cores</text><text fill="#000000" font-family="Verdana" font-size="13" lengthAdjust="spacing" textLength="85.8965" x="917.56" y="1046.4019">- 2.5 GB RAM</text><text fill="#000000" font-family="Verdana" font-size="13" lengthAdjust="spacing" textLength="125.8867" x="917.56" y="1061.5347">- Persistent volume</text></g><!--link browser to nginx--><g class="link" data-entity-1="browser" data-entity-2="nginx" data-source-line="39" data-uid="lnk18" id="link_browser_nginx"><path d="M744,228.2336 C744,229.1252 744,230.0262 744,230.9362 C744,260.0581 744,298.4894 744,336.9194 C744,356.1344 744,375.3491 744,393.3996 C744,402.4249 744,411.1591 744,419.4568 C744,421.5313 744,423.5784 744,425.596 C744,426.1004 744,426.603 744,427.1036 C744,427.354 744,421.6038 744,421.8532" fill="none" id="browser-to-nginx" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="744,427.8532,748,418.8532,744,422.8532,740,418.8532,744,427.8532" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Verdana" font-size="13" lengthAdjust="spacing" textLength="58.5508" x="745" y="287.9763">HTTP :80</text></g><!--link nginx to aspnet--><g class="link" data-entity-1="nginx" data-entity-2="aspnet" data-source-line="40" data-uid="lnk19" id="link_nginx_aspnet"><path d="M739.1096,541.547 C739.0472,541.8349 738.9839,542.1233 738.9198,542.4119 C738.7916,542.9892 738.6603,543.5678 738.5256,544.1474 C738.2563,545.3066 737.9738,546.4699 737.6774,547.6353 C737.0847,549.966 736.4368,552.305 735.7284,554.6361 C732.895,563.9606 729.095,573.1594 724,581.1994 C687.57,638.7094 627.8925,686.3994 576.6763,720.0044 C551.0681,736.8069 527.5753,750.0881 510.1614,759.315 C501.4545,763.9284 494.2672,767.5283 489.0952,770.0479 C488.7719,770.2054 493.8555,767.7412 493.5482,767.8902" fill="none" id="nginx-to-aspnet" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="488.1492,770.5076,497.9926,770.1809,492.6483,768.3265,494.5027,762.9822,488.1492,770.5076" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Verdana" font-size="13" lengthAdjust="spacing" textLength="75.0928" x="715.67" y="602.2663">HTTP :5000</text><text fill="#000000" font-family="Verdana" font-size="13" lengthAdjust="spacing" textLength="54.2979" x="726.0675" y="617.3991">/graphql</text></g><!--link aspnet to sqlserver--><g class="link" data-entity-1="aspnet" data-entity-2="sqlserver" data-source-line="41" data-uid="lnk20" id="link_aspnet_sqlserver"><path d="M488.0764,777.5021 C489.6784,777.736 491.5018,778.0049 493.5313,778.3085 C501.6492,779.5225 513.064,781.2895 526.7942,783.5745 C554.2547,788.1447 590.9769,794.7875 629.1088,803.2256 C705.3725,820.1019 787.275,844.1594 812,873.1794 C823.4475,886.6169 830.4719,903.14 834.5569,920.4161 C836.5994,929.0541 837.907,937.8804 838.6653,946.6034 C838.8549,948.7841 838.6673,944.9682 838.7911,947.1315" fill="none" id="aspnet-to-sqlserver" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="839.1339,953.1217,842.6132,943.9078,838.8482,948.1298,834.6262,944.3649,839.1339,953.1217" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Verdana" font-size="13" lengthAdjust="spacing" textLength="66.4536" x="801.63" y="861.2463">TCP :1433</text></g><!--link nginx to GMN21--><g class="link" data-entity-1="nginx" data-entity-2="GMN21" data-source-line="44" data-uid="lnk23" id="link_nginx_GMN21"><path d="M752.5689,494.0494 C753.4366,494.0494 754.3042,494.0494 755.1719,494.0494 C758.6425,494.0494 762.1131,494.0494 765.5837,494.0494 C772.525,494.0494 779.4662,494.0494 786.4073,494.0494 C800.2897,494.0494 814.1719,494.0494 828.0538,494.0494 C855.8175,494.0494 883.58,494.0494 911.34,494.0494" fill="none" id="nginx-GMN21" style="stroke:#000000;stroke-width:1;stroke-dasharray:7,7;"/></g><!--link aspnet to GMN24--><g class="link" data-entity-1="aspnet" data-entity-2="GMN24" data-source-line="52" data-uid="lnk26" id="link_aspnet_GMN24"><path d="M488.9252,775.3494 C489.4869,775.3494 490.0486,775.3494 490.6103,775.3494 C491.7336,775.3494 492.857,775.3494 493.9803,775.3494 C498.4738,775.3494 502.9673,775.3494 507.4607,775.3494 C516.4477,775.3494 525.4347,775.3494 534.4217,775.3494 C552.3957,775.3494 570.3698,775.3494 588.3441,775.3494 C624.2925,775.3494 660.2413,775.3494 696.19,775.3494 C768.0875,775.3494 839.985,775.3494 911.88,775.3494" fill="none" id="aspnet-GMN24" style="stroke:#000000;stroke-width:1;stroke-dasharray:7,7;"/></g><!--link sqlserver to GMN27--><g class="link" data-entity-1="sqlserver" data-entity-2="GMN27" data-source-line="60" data-uid="lnk29" id="link_sqlserver_GMN27"><path d="M840.2731,1034.3294 C840.3754,1034.3294 840.4777,1034.3294 840.5801,1034.3294 C840.7847,1034.3294 840.9893,1034.3294 841.1939,1034.3294 C841.6032,1034.3294 842.0124,1034.3294 842.4217,1034.3294 C845.6957,1034.3294 848.9698,1034.3294 852.2441,1034.3294 C858.7925,1034.3294 865.3413,1034.3294 871.89,1034.3294 C884.9875,1034.3294 898.085,1034.3294 911.18,1034.3294" fill="none" id="sqlserver-GMN27" style="stroke:#000000;stroke-width:1;stroke-dasharray:7,7;"/></g><!--SRC=[bPJVRzem4CVVyrVSsCEUQ1ajMeiG4eH0fMqT2qnxsFfWaYEnC7Pg6zOVwl- -inqAevksvI7n-Rxd-_Zkb5Usn3L29HYNaLbnMJ7DrY1LZaEMhGgjDZAFbL0QNeylnfVZmR5AwHnrhJY_xBGwxmuKcLfNIgAqBmvBBfCu6KUHvLOWpBYnk6QG8wHOaA6LMoV6RdBEf4K3JHXnLj2XNZL2KmcEnGQZo6508oQJX0rW1ZA_XiS8w7bcWCOrssB1Sih_5HTUkT3gXq5TIztpRI2BZM0QPjF1ZTzzYfvsIKOgMv7wIXdhm_DWFqPU63IEcR8rbreHZyozS6V4zA5IKqolb-tM_Vv1_aFSWiix7oxTwa3aGMUMMPx1c0iqDx-wKjoYDWXJhUxkzxwd-Zw_eMKLzvde-r-CWzdqv3gPGwnqg3qpbKHxpFeUgQSeO8QQo8ve9vfLvUSFaCYyKbpQ8_SLCc5BY4lCLlzqbppqDb_y_IOvisp1g5AD6G44EcYtscr_WhaL9cozABtFb4YjX5YxGeo6Bz48xWqLHk8TfvU9TiFMRFRhZdRXQZwVGlUY5OKDvwehkFDrMgtMTtbQk2BTYgZsEk4UhmlpcAHlpy_EtAXQ1CsBqe9QXaG4r5lq_Jmve2KlkhtJHP-scp1vuDNfK2ihk6-iHcE8r_lg4LlIY476ifBB8iJK7QlSV0KbPXlDxJsKoEY7O28QTd0anpo1Fm1zgYnVymUM-VhiaUe-J69lfNJY_Lobcy14_18pIo5GAILsI2cZB8AEisxdJzcVInO0KaTjr47gDiJJBrG7gaAmJpem6K8w-EZDALtD_QkeuribDclSP_e9]--></g></svg> |