¿Es posible que varios procesos geth compartan datos de cadena?

Me gustaría saber si es posible que varios procesos geth compartan la misma cadena de datos.

Actualmente tengo varios nodos (para una cadena privada) conectados al mismo sistema de archivos a través de NFS y alojando sus datos de cadena en ese sistema de archivos. Cada uno tiene su propia base de datos con su propia cadena de datos, pero me gustaría que compartieran los mismos datos para no tener que mantener una copia redundante separada de todos los datos para cada nodo individual. Esto representa un gran ahorro en espacio de almacenamiento.

El enfoque ingenuo de asignar todos los procesos al mismo datadir da como resultado que un nodo funcione y los otros nodos queden bloqueados fuera de la base de datos.

Estoy abierto a bifurcar repositorios y hacer modificaciones de software si esto es plausible pero no es posible actualmente, y agradezco cualquier idea sobre cómo hacerlo si es necesario.

Gracias de antemano por cualquier ayuda o consejo que pueda proporcionar.

Edición 1:

  • Mi intención no es que todos los nodos de la red compartan el mismo conjunto de datos, solo para ciertos grupos de ellos. Mi intención sería que todos los pares en una región en particular compartan datos de la cadena, pero controlaría varias regiones y también habría usuarios externos que se conectarían a la red.
  • Controlo y confío en todos los nodos que estarían compartiendo datos en cadena. Otros pares de red que no controlo administrarían sus propios datos de cadena.
  • La impresión que tengo es que es poco probable que sea una característica existente, pero todavía estoy interesado en modificar el software para que esto suceda. Si esto es imposible debido a los detalles de cómo funcionan cosas como leveldb y geth, me gustaría entender por qué.
verifique mi respuesta y si ese no es su punto, proporcione más detalles.

Respuestas (2)

No creo que eso sea posible, porque romperá por completo el objetivo de la red ethereum y puede (y debería) romper la integridad y la validación de la red de las transacciones y los datos almacenados en la cadena de bloques.

Hacer que los nodos compartan los mismos datos haría que sea absurdo pasar transacciones a lo largo de la red para su validación, ya que todos los nodos tienen los mismos datos compartidos, por lo que un nodo publicaría las transacciones y el otro simplemente leería las mismas transacciones desde el mismo espacio en disco y verifique que sea lo mismo (y lo es desde el principio. Básicamente está comparando 1 a 1)

Gracias por la pronta respuesta. Entiendo que el uso de datos compartidos significaría que los nodos realmente no se verifican entre sí, pero eso no me preocupa porque controlo y confío en todos ellos. Para ser claros, no controlaré todos los nodos de la red, pero me gustaría que los que controlo compartan el conjunto de datos si es posible. Esto probablemente sugiere que no es una característica existente, pero todavía estoy interesado en cómo podría hacer que esto funcione para mi caso de uso, incluso si requiere una modificación del software.
Si controla y comparte datos entre múltiples nodos, no será más útil que tener múltiples puntos finales para el nodo y la API de contrato inteligente. solo liberará a su nodo del cargo de solicitudes RPC, nada más. En el caso de que haya superado el bloqueo de los archivos (lo que no es razonable, ya que la cadena de datos es confidencial y el acceso simultáneo la rompería y dejaría el nodo inservible hasta la resincronización), solo tendrá un nodo en pleno funcionamiento mientras que los demás simplemente están inactivos ya que si un nodo valida una transacción, por defecto existe en la cadena de datos para todos.
Pero si aún quieres hacerlo, tendrás que modificar el código fuente, eso está claro.

Cuando un nodo se está ejecutando, bloquea la base de datos para proteger la integridad de los datos. Cada vez que se agrega una nueva entrada a la base de datos, los datos anteriores se invalidan y se debe cambiar el nuevo estado actualizado. La única forma en que esto podría funcionar es si se accedió a la base de datos como solo lectura y no se modificó.

Si quisiera acceder a diferentes partes de la base de datos para cada nodo (similar a la fragmentación), tendría que poder fragmentar los datos en diferentes partes, lo que parece imposible en la estructura actual. Necesita todo el proceso para obtener la información de una cuenta.

Para solucionar este problema, debe observar toda la estructura de la base de datos. Dado que usamos un Radix trie visto aquí:ingrese la descripción de la imagen aquí

Para tener dos cadenas diferentes con romane y rubens, necesitaría crear dos bases de datos duplicadas, una con un nodo raíz de rom y la otra con rub. Ahora ha fragmentado el trie en dos intentos diferentes. Luego, puede tener un nodo que funcione con todas las solicitudes que comiencen con rom y otro con rub.

El proceso de tener dos nodos fragmentando el trabajo requerido es algo que tendría que resolver, pero el enfoque sería fragmentar el trie para tener varios nodos trabajando en un conjunto de datos.