Parece, pelos seus comentários, que o MySQL e o Google Cloud SQL não são uma opção, pois sua arquitetura exige o uso de um único arquivo SQLite.
Além disso, por documentos SQLite, o NFS não é uma opção devido aos problemas de bloqueio.
Aqui estão algumas outras opções a serem consideradas.
Sistema de arquivos distribuído alternativo
Além do NFS, há vários outros sistemas de arquivos distribuídos que você pode querer avaliar, como o Ceph , GlusterFS , OrangeFS , ZFS , etc. Além de sua própria pesquisa, considere entrar em contato com usuários ou desenvolvedores do SQLite para obter orientação e experiências passadas.
Use o NFS, mas imponha um único gravador por vez
O problema do NFS parece ser sobre bloqueio, que é necessário apenas para gravações: contanto que você possa garantir que apenas um processo tenha o banco de dados bloqueado para gravações de uma vez, vários outros processos podem abri-lo para leituras assim isso deve ser OK (por favor confirme / verifique se este é o caso).
Assim, enquanto houver um método externo para garantir um único gravador, você poderá usar o NFS. Considere o uso de um serviço de bloqueio distribuído, como Apache ZooKeeper , HashiCorp Consul ou CoreOS etcd para o serviço de bloqueio, e você pode armazenar seu SQLite no NFS.
Isso, é claro, depende de cada processo com acesso direto ao banco de dados SQLite para fechá-lo corretamente quando não precisar mais gravar nele, portanto, a correção é difícil de ser aplicada, pois depende de todos os softwares corretos e cooperativos .
Servidor RPC leve
Você mencionou que sua arquitetura (que não pode ser alterada neste momento) depende do SQLite, mas se é possível fazer com que eles chamem um serviço RPC em vez de abrir o arquivo diretamente, você pode ter esse servidor como o único ponto de abertura banco de dados SQLite e evitar o problema de bloqueio de vários usuários simultâneos. No entanto, isso significa que você teria que alterar todo o código do cliente para chamar o serviço RPC, em vez de abrir o banco de dados SQLite diretamente, o que é uma quantidade não trivial de trabalho.
Conclusão
Nenhuma dessas opções é trivial e exigirá trabalho. A razão é que :
In contrast to many other database management systems, SQLite is not a client–server database engine. Rather, it is embedded into the end program.
Como tal, não é a solução certa para vários acessores e, portanto, são necessárias várias soluções alternativas.
A longo prazo, se você estiver em uma situação em que teria que fazer alterações significativas para continuar a manter esse sistema, convém migrar para o MySQL ou o Google Cloud SQL em vez de investir em soluções alternativas para continue usando o SQLite.