{"id":37019,"date":"2019-10-31T22:15:20","date_gmt":"2019-10-31T19:15:20","guid":{"rendered":"https:\/\/prohoster.info\/blog\/sistema-udalennogo-fajlovogo-dostupa-cage\/"},"modified":"2019-10-31T22:15:20","modified_gmt":"2019-10-31T19:15:20","slug":"sistema-udalennogo-fajlovogo-dostupa-cage","status":"publish","type":"post","link":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/sistema-udalennogo-fajlovogo-dostupa-cage","title":{"rendered":"Sistema de acceso remoto a archivos Cage","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h3>Prop\u00f3sito del sistema<\/h3>\n<p><\/p>\n<p>Soporte para el acceso remoto a archivos en computadoras dentro de una red. El sistema \u00abvirtual\u00bb apoya todas las operaciones b\u00e1sicas de archivos (creaci\u00f3n, eliminaci\u00f3n, lectura, escritura, etc.) mediante el intercambio de transacciones (mensajes) a trav\u00e9s del protocolo TCP.<\/p>\n<p><\/p>\n<h3>\u00c1reas de aplicaci\u00f3n<\/h3>\n<p><\/p>\n<p>La funcionalidad del sistema es efectiva en los siguientes casos:<\/p>\n<ul>\n<li> en aplicaciones nativas para dispositivos m\u00f3viles y embebidos (smartphones, sistemas de control a bordo, etc.), que requieren acceso r\u00e1pido a archivos en servidores remotos en condiciones de posibles interrupciones temporales en la conexi\u00f3n (al salir de l\u00ednea);<\/li>\n<li> en bases de datos altamente cargadas, si el procesamiento de las solicitudes se realiza en servidores distintos a los que almacenan los datos;<\/li>\n<li> en redes corporativas distribuidas para la recolecci\u00f3n y procesamiento de informaci\u00f3n, que requieren alta velocidad en el intercambio de datos, redundancia y confiabilidad;<\/li>\n<li> en sistemas complejos con arquitectura de microservicios, donde los retrasos en el intercambio de informaci\u00f3n entre m\u00f3dulos son de vital importancia.<\/li>\n<\/ul>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex> <\/p>\n<h3>Estructura<\/h3>\n<p><\/p>\n<p>El sistema Cage (hay una implementaci\u00f3n \u2014 versi\u00f3n beta en Python 3.7 en Windows) incluye dos partes principales: <\/p>\n<ol>\n<li> <b>Cageserver<\/b> \u2014 un programa servidor de archivos (paquete de funciones), que se ejecuta en computadoras dentro de la red, a los archivos a los cuales se necesita acceso remoto;<\/li>\n<li> clase <b>Cage<\/b> con una biblioteca de m\u00e9todos para el software cliente, que simplifica la codificaci\u00f3n de la interacci\u00f3n con los servidores.<\/li>\n<\/ol>\n<p><\/p>\n<h3>Uso del sistema en el lado de los clientes<\/h3>\n<p><\/p>\n<p>Los m\u00e9todos de la clase Cage reemplazan las operaciones \u00abrutinarias\u00bb normales del sistema de archivos: <i>creaci\u00f3n, apertura, cierre, eliminaci\u00f3n <\/i>de archivos, as\u00ed como <i>lectura\/escritura de datos en formato binario<\/i> (especificando la posici\u00f3n y el tama\u00f1o de los datos). Conceptualmente, estos m\u00e9todos se asemejan a las funciones de archivos del lenguaje C, donde la apertura\/cierre de archivos se realiza \u00abpor canales\u00bb de entrada-salida. <\/p>\n<p><\/p>\n<p>En otras palabras, el programador no trabaja con los m\u00e9todos de objetos \u00abde archivo\u00bb (de la clase <b>_io<\/b> en Python), sino con los m\u00e9todos de la clase Cage.<\/p>\n<p><\/p>\n<p>Al crear una instancia del objeto Cage, se establece una conexi\u00f3n inicial con el servidor (o varios servidores), se pasa la autorizaci\u00f3n mediante el Id del cliente y se recibe una confirmaci\u00f3n con el n\u00famero de puerto asignado para realizar todas las operaciones de archivo. Al eliminar el objeto Cage, se env\u00eda al servidor un comando para finalizar la conexi\u00f3n y cerrar los archivos. La finalizaci\u00f3n de la conexi\u00f3n tambi\u00e9n puede ser iniciada por los propios servidores.<\/p>\n<p><\/p>\n<p>El sistema mejora el rendimiento de lectura\/escritura mediante el almacenamiento en cach\u00e9 de fragmentos de archivos utilizados con frecuencia por los programas cliente en la memoria RAM.<br \/>\nEl software cliente puede utilizar cualquier n\u00famero de objetos Cage con diversas configuraciones (tama\u00f1o de cach\u00e9, tama\u00f1o de bloques al intercambiar datos con el servidor, etc.). <\/p>\n<p><\/p>\n<p>Un objeto Cage puede intercambiar datos con m\u00faltiples archivos en varios servidores. Los par\u00e1metros de conexi\u00f3n (direcci\u00f3n IP o DNS del servidor, puerto principal para autenticaci\u00f3n, ruta y nombre del archivo) se establecen al crear el objeto.<\/p>\n<p><\/p>\n<p>Dado que cada objeto Cage puede trabajar simult\u00e1neamente con m\u00faltiples archivos, se utiliza un espacio de memoria compartido para la cach\u00e9. El tama\u00f1o de la cach\u00e9, que es la cantidad de p\u00e1ginas y su tama\u00f1o, se determina din\u00e1micamente al crear el objeto Cage. Por ejemplo, una cach\u00e9 de 1 GB son 1000 p\u00e1ginas de 1 MB, o 10,000 p\u00e1ginas de 100 KB, o 1 mill\u00f3n de p\u00e1ginas de 1 KB. La elecci\u00f3n del tama\u00f1o y la cantidad de p\u00e1ginas es una tarea espec\u00edfica para cada caso de uso.<\/p>\n<p><\/p>\n<p>Se pueden utilizar m\u00faltiples objetos Cage simult\u00e1neamente para establecer diferentes configuraciones de cach\u00e9 seg\u00fan las caracter\u00edsticas de acceso a la informaci\u00f3n en distintos archivos. Como base, se aplica el algoritmo de almacenamiento en cach\u00e9 m\u00e1s simple: despu\u00e9s de agotar el volumen de memoria establecido, las nuevas p\u00e1ginas desplazan a las antiguas seg\u00fan el principio de expulsi\u00f3n con el m\u00ednimo de accesos. El almacenamiento en cach\u00e9 es especialmente efectivo en caso de acceso conjunto no uniforme (en el sentido estad\u00edstico), tanto a diferentes archivos como a fragmentos de cada archivo. <\/p>\n<p><\/p>\n<p>La clase Cage admite entrada\/salida no solo por direcciones de datos (especificando la posici\u00f3n y longitud del arreglo, \u00absustituyendo\u00bb las operaciones del sistema de archivos), sino tambi\u00e9n a un nivel m\u00e1s bajo, \u00abf\u00edsico\u00bb, por los n\u00fameros de p\u00e1gina en la memoria cach\u00e9. <\/p>\n<p><\/p>\n<p>Para los objetos Cage se admite la funci\u00f3n original <i>\u00abhibernaci\u00f3n\u00bb<\/i> (\u00absue\u00f1o\u00bb) \u2013 se pueden \u00abreducir\u00bb (por ejemplo, en caso de una desconexi\u00f3n con los servidores, o al detener la aplicaci\u00f3n, etc.) a un archivo de volcado local en el lado del cliente y recuperarlo r\u00e1pidamente desde ese archivo (despu\u00e9s de restablecer la conexi\u00f3n, al reiniciar la aplicaci\u00f3n). Esto permite una reducci\u00f3n significativa del tr\u00e1fico al activar el trabajo del programa cliente despu\u00e9s de una desconexi\u00f3n temporal \u00aboffline\u00bb, ya que los fragmentos de archivos utilizados frecuentemente ya estar\u00e1n en cach\u00e9.<\/p>\n<p><\/p>\n<p>Cage es aproximadamente 3600 l\u00edneas de c\u00f3digo.<\/p>\n<p><\/p>\n<h3>Principios de construcci\u00f3n de servidores<\/h3>\n<p><\/p>\n<p>Los servidores de archivos Cageserver se pueden ejecutar con un n\u00famero arbitrario de puertos, uno de los cuales (\u00abprincipal\u00bb) se utiliza \u00fanicamente para la autorizaci\u00f3n de todos los clientes, mientras que los dem\u00e1s son para el intercambio de datos. La \u00fanica necesidad para el programa del servidor Cage es Python. Paralelamente, la computadora con el servidor de archivos puede realizar cualquier otro trabajo. <\/p>\n<p><\/p>\n<p>El servidor se inicia inicialmente como una combinaci\u00f3n de dos procesos principales:<\/p>\n<ol>\n<li><b>\u00abConexiones\u00bb<\/b> \u2013 proceso para llevar a cabo operaciones de establecimiento de conexi\u00f3n con los clientes y su terminaci\u00f3n a iniciativa del servidor;<\/li>\n<li><b>\u00abOperaciones\u00bb<\/b> \u2013 proceso para ejecutar tareas (operaciones) de los clientes relacionadas con archivos, as\u00ed como para cerrar sesiones de conexi\u00f3n por \u00f3rdenes de los clientes.<\/li>\n<\/ol>\n<p><\/p>\n<p>Ambos procesos no est\u00e1n sincronizados y est\u00e1n organizados como ciclos infinitos de recepci\u00f3n y env\u00edo de mensajes basados en colas multiprocesadas, objetos proxy, bloqueos y sockets.<br \/>\nEl proceso \u00abConexiones\u00bb asigna a cada cliente un puerto para la transmisi\u00f3n de datos. El n\u00famero de puertos se establece al iniciar el servidor. La correspondencia entre puertos y clientes se almacena en memoria proxy compartida entre procesos.<\/p>\n<p><\/p>\n<p>El proceso \u00abOperaciones\u00bb mantiene la separaci\u00f3n de recursos de archivos, permitiendo que varios clientes diferentes puedan leer datos de un \u00fanico archivo de forma conjunta (<i>cuasi-paralela<\/i>, ya que el acceso es gestionado por bloqueos) si esto fue permitido en su apertura inicial por el \u00abprimer\u00bb cliente. \n<\/p>\n<p>El procesamiento de comandos para crear\/eliminar\/abrir\/cerrar archivos en <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/es\/server\/dts-dronten\/\"   title=\"servidor\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"2497\">servidor<\/a> se lleva a cabo en el propio proceso \u00abOperaciones\u00bb de manera estrictamente secuencial utilizando el subsistema de archivos del OS del servidor.<\/p>\n<p><\/p>\n<p>Para acelerar en general las operaciones de lectura\/escritura, estas se llevan a cabo en hilos (threads) generados por el proceso \"Operaciones\". El n\u00famero de hilos suele ser igual al n\u00famero de archivos abiertos. Las tareas de lectura\/escritura de los clientes se env\u00edan a una cola com\u00fan, y el primer hilo libre toma la tarea del frente de la cola. Una l\u00f3gica especial permite excluir las operaciones de sobreescritura de datos en la memoria RAM del servidor.<\/p>\n<p><\/p>\n<p>El proceso \"Operaciones\" supervisa la actividad de los clientes y detiene su atenci\u00f3n tanto por sus comandos como al exceder el tiempo de espera por inactividad.<\/p>\n<p><\/p>\n<p>Para garantizar la fiabilidad, Cageserver mantiene registros de todas las transacciones. Un registro com\u00fan contiene copias de los mensajes de los clientes con tareas para crear\/abrir\/renombrar\/eliminar archivos. Para cada archivo de trabajo se crea un registro separado, en el que se escriben copias de mensajes con tareas de lectura y escritura de datos en ese archivo de trabajo, as\u00ed como matrices de datos escritos (nuevos) y matrices de datos que se destruyeron al sobrescribir (escribir nuevos datos \"encima\" de los antiguos). <\/p>\n<p><\/p>\n<p>Estos registros permiten tanto recuperar nuevos cambios en las copias de seguridad como revertir el contenido actual a un momento deseado en el pasado. <\/p>\n<p><\/p>\n<p>Cageserver tiene aproximadamente 3100 l\u00edneas de c\u00f3digo.<\/p>\n<p>\n<img decoding=\"async\" alt=\"Sistema de acceso remoto a archivos Cage\" src=\"\/wp-content\/uploads\/2019\/08\/606d593347d73274b0c172dae34da0d7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Inicio del programa del servidor de archivos Cageserver<\/h3>\n<p><\/p>\n<p>Al iniciar, se debe definir en el di\u00e1logo:<br \/>\n \u2014 el puerto principal para la autorizaci\u00f3n;<br \/>\n \u2014 el n\u00famero de puertos para el intercambio de transacciones con clientes autorizados (de 1 en adelante, el grupo de n\u00fameros comienza con el siguiente al n\u00famero del puerto principal).<\/p>\n<p><\/p>\n<h3>Uso de la clase Cage<\/h3>\n<p><\/p>\n<p><b>class<\/b> cage.<b>Cage<\/b>( <i>cage_name=\u00bb, pagesize=0, numpages=0, maxstrlen=0, server_ip={}, wait=0, awake=False, cache_file=\u00bb<\/i> )<\/p>\n<p><\/p>\n<p>De esta clase se crean objetos que realizan la interacci\u00f3n con los servidores de archivos y contienen memoria cach\u00e9.<\/p>\n<p><\/p>\n<p><b><u>Par\u00e1metros<\/u><\/b><\/p>\n<p><\/p>\n<ul>\n<li> <b>cage_name<\/b>(<i>str<\/i>) \u2014 nombre condicional del objeto que se utiliza para la identificaci\u00f3n de clientes en el lado del servidor <\/li>\n<li> <b>pagesize<\/b>(<i>int<\/i>) \u2014 tama\u00f1o de una p\u00e1gina de memoria cach\u00e9 (en bytes)<\/li>\n<li> <b>numpages<\/b>(<i>int<\/i>) \u2014 n\u00famero de p\u00e1ginas de memoria cach\u00e9<\/li>\n<li> <b>maxstrlen<\/b>(<i>int<\/i>) \u2014 longitud m\u00e1xima de la cadena en bytes en las operaciones de lectura y escritura<\/li>\n<li> <b>server_ip<\/b>(<i>dict<\/i>) \u2014 diccionario con las direcciones utilizadas <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/es\/server\/\"   title=\"servidores\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"1347\">servidores<\/a>, donde la clave es el nombre condicional del servidor (ID del servidor dentro de la aplicaci\u00f3n), y el valor es una cadena con la direcci\u00f3n: \u201cip address:port\u201d o \u201cDNS:port\u201d (la correspondencia entre nombres y direcciones reales es temporal y se puede cambiar)<\/li>\n<li> <b>esperar<\/b>(<i>int<\/i>) \u2014 tiempo de espera para obtener la respuesta del servidor al recibir los puertos (en seg.)<\/li>\n<li> <b>despertar<\/b>(<i>boolean<\/i>) \u2014 indicador del m\u00e9todo de creaci\u00f3n del objeto (<i>False<\/i> \u2014 si se crea un nuevo objeto, <i>Verdadero<\/i> \u2014 si el objeto se crea a partir de uno previamente \u201csuspendido\u201d \u2014 usando la operaci\u00f3n de \u201chibernaci\u00f3n\u201d, por defecto Falso)<\/li>\n<li> <b>archivo_cache<\/b>(<i>str<\/i>) \u2014 nombre del archivo para hibernaci\u00f3n<\/li>\n<\/ul>\n<p><\/p>\n<p><b><u>Los m\u00e9todos<\/u><\/b><\/p>\n<p><\/p>\n<p>Cage.<b>crear_archivo<\/b>( <i>servidor, ruta<\/i> ) \u2013 crear un nuevo archivo<\/p>\n<p><\/p>\n<p>Cage.<b>renombrar_archivo<\/b>( <i>servidor, ruta, nuevo_nombre<\/i> ) \u2013 renombrar el archivo<\/p>\n<p><\/p>\n<p>Cage.<b>eliminar_archivo<\/b>( <i>servidor, ruta<\/i>) \u2013 eliminar el archivo<\/p>\n<p><\/p>\n<p>Cage.<b>open<\/b>( <i>servidor, ruta, mod <\/i>) \u2013 abrir el archivo<\/p>\n<p><\/p>\n<p>Devuelve <i>fchannel<\/i> n\u00famero de canal. El par\u00e1metro <i>mod<\/i> \u2014 es el modo de apertura del archivo: \u00abwm\u00bb \u2014 monopolio (lectura\/escritura), \u00abrs\u00bb \u2014 solo lectura, y compartido solo para lectura por otros clientes, \u00abws\u00bb \u2014 lectura\/escritura, y compartido solo para lectura por otros clientes. <\/p>\n<p><\/p>\n<p>Cage.<b>close<\/b> (<i>fchannel<\/i>) \u2013 cerrar el archivo<\/p>\n<p><\/p>\n<p>Cage.<b>write <\/b>(<i>fchannel, inicio, datos <\/i>) \u2013 escribir una cadena de bytes en el archivo<\/p>\n<p><\/p>\n<p>Cage.<b>read <\/b>(<i>fchannel, inicio, len_data<\/i> ) \u2013 leer una cadena de bytes del archivo<\/p>\n<p><\/p>\n<p>Cage.<b>enviar_paginas <\/b>( <i>fchannel<\/i> ) \u2013 \u201cempuja\u201d del b\u00fafer al servidor todas las p\u00e1ginas del canal especificado que han sido modificadas. Se utiliza en aquellos puntos del algoritmo donde se debe asegurar que todas las operaciones en el canal se han guardado f\u00edsicamente en el archivo en el servidor.<\/p>\n<p><\/p>\n<p>Cage.<b>empujar_todas<\/b> () \u2013 \u201cempuja\u201d del b\u00fafer al servidor todas las p\u00e1ginas de todos los canales para la instancia de la clase Cage que han sido modificadas. Se utiliza cuando se debe asegurar que todas las operaciones en todos los canales se guardan en el servidor.<\/p>\n<p>Fuente: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/463085\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0444\u0430\u0439\u043b\u0430\u043c \u043d\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\u0445 \u0432 \u0441\u0435\u0442\u0438. \u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u00ab\u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u00bb \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 (\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435, \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435, \u0447\u0442\u0435\u043d\u0438\u0435, \u0437\u0430\u043f\u0438\u0441\u044c \u0438 \u0434\u0440.) \u043f\u0443\u0442\u0451\u043c \u043e\u0431\u043c\u0435\u043d\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u043c\u0438 (\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438) \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 \u0422\u0421\u0420. \u041e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u0435\u043d \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445: \u0432 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445 \u0434\u043b\u044f \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0438 embedded \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 (\u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u044b, \u0431\u043e\u0440\u0442\u043e\u0432\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u0442.\u043f.), \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0438\u0445 \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":27748,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-37019","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0444\u0430\u0439\u043b\u0430\u043c \u043d\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\u0445 \u0432 \u0441\u0435\u0442\u0438.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/sistema-udalennogo-fajlovogo-dostupa-cage\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 Cage | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0444\u0430\u0439\u043b\u0430\u043c \u043d\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\u0445 \u0432 \u0441\u0435\u0442\u0438.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/sistema-udalennogo-fajlovogo-dostupa-cage\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:15:20+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:15:20+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Sistema de acceso remoto a archivos Cage | ProHoster","description":"Prop\u00f3sito del sistema Soporte de acceso remoto a archivos en computadoras de la red.","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/sistema-udalennogo-fajlovogo-dostupa-cage","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 Cage | ProHoster","og:description":"\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0444\u0430\u0439\u043b\u0430\u043c \u043d\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\u0445 \u0432 \u0441\u0435\u0442\u0438.","og:url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/sistema-udalennogo-fajlovogo-dostupa-cage","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:15:20+00:00","article:modified_time":"2019-10-31T19:15:20+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"37019","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-02-09 21:52:49","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:34:26","updated":"2026-02-09 21:52:49","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/37019","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=37019"}],"version-history":[{"count":2,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/37019\/revisions"}],"predecessor-version":[{"id":159779,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/37019\/revisions\/159779"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/27748"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=37019"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=37019"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=37019"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}