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:
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)
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í:
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.
kaki maestro del tiempo