Impostazione di una distribuzione multiregione di HarperDB su
HarperDB, una piattaforma applicativa e di dati distribuita a livello globale, è ora disponibile sul Marketplace DigitalOcean, offrendo agli utenti DigitalOcean un modo rapido per avviare HarperDB.
HarperDB è unico perché combina un database ad alte prestazioni, applicazioni personalizzate create dall'utente e streaming di dati in tempo reale in un'unica piattaforma. La tecnologia è stata costruita con particolare attenzione alle prestazioni e alla facilità d'uso. Con API flessibili definite dall'utente, una semplice interfaccia HTTP/S e un archivio dati a modello singolo ad alte prestazioni che supporta carichi di lavoro sia NoSQL che SQL, HarperDB si adatta alla tua applicazione dalla prova di concetto alla produzione.
Il motore di replica di HarperDB replica i dati tra istanze di HarperDB utilizzando un modello pub/sub bidirezionale ad alte prestazioni in base alla tabella. Ciò può avvenire su un numero illimitato di nodi, consentendo in definitiva una scala globale illimitata. HarperDB sbaraglia la concorrenza anche in termini di prestazioni, con oltre 20.000 scritture/secondo/nodo e 120.000 letture/secondo/nodo.
In questo tutorial, esamineremo la configurazione di HarperDB su più regioni tramite DigitalOcean Droplet e dimostreremo la creazione di un semplice livello API sopra con funzioni personalizzate.
Dopo aver effettuato l'accesso a DigitalOcean, vai al marketplace e fai clic su "Crea HarperDB Droplet":
Creeremo due istanze: una a New York e una a San Francisco. Scegli il tipo di droplet (utilizzarò il livello base a scopo dimostrativo) e allega un volume. È possibile scegliere il formato automatico e l'opzione di montaggio a meno che non si desideri gestire personalmente la configurazione LVM.
Attendi la creazione dei due Droplet in ciascuna regione e annota gli indirizzi IP. Inoltre, dovremo abilitare i firewall affinché HarperDB Studio interagisca con le nostre istanze.
Passare alla sezione Rete > Firewall e aprire le porte 9925-9926 e 9932:
Infine, entra nei Droplet e controlla il contenuto di ~/.harperdb
per le credenziali che sono state create automaticamente. Avrai bisogno di questi dettagli per la sezione successiva.
HarperDB Studio è un portale online per la gestione delle istanze HarperDB. HarperDB dispone di un livello gratuito estremamente potente, con la possibilità di passare a un modello a pagamento secondo necessità. Vedi le informazioni sui prezzi qui.
Passare a studio.harperdb.io e fare clic su "Crea nuova istanza cloud HarperDB" e scegliere l'opzione "Enterprise". Quindi compila di conseguenza le informazioni sull'istanza:
Il nome utente/password proviene dal file .harperdb
menzionato sopra e l'host è l'indirizzo IP del tuo Droplet. È importante fare clic sul pulsante SSL poiché l'installazione del marketplace ha SSL abilitato.
Dopo aver fatto clic su Dettagli istanza, potrebbe essere visualizzato un avviso relativo all'accettazione di certificati autofirmati. Fare clic sul collegamento nel browser e accettare tali certificati. Dopo alcuni secondi, vedrai la tua istanza apparire sulla dashboard.
Ora che i nostri database sono impostati, possiamo creare schemi e tabelle. Creiamo uno schema chiamato dev
e una tabella chiamata dog
con l'attributo hash id
:
Possiamo quindi utilizzare i comandi curl per aggiungere alcuni dati:
curl -k --location 'https://<my-ip>:9925' \
--header 'Content-Type: application/json' \
--header 'Authorization: <YourBase64EncodedInstanceUser:Pass>' \
--data-raw '{
"operation": "insert",
"schema": "dev",
"table": "dog",
"records": [
{
"dog_name": "Charlie",
"age": 2
}
]
}'
Una delle caratteristiche interessanti di HarperDB è che hanno un supporto di replica di prima classe integrato nel database. Passare alla scheda replica
su HarperDB studio e creare un utente cluster per abilitare il clustering.
Fallo per entrambi i Droplet e attendi il riavvio del database. Quindi puoi aggiungere ciascuna istanza nella scheda clustering con funzionalità di pubblicazione/sottoscrizione:
HarperDB realizza la replica in un modello pub/sub asincrono. Nel nostro esempio, vorremo configurare un'applicazione multiregione in grado di recuperare dati, quindi abilitare entrambe le funzionalità di pubblicazione/sottoscrizione.
Puoi provare ad aggiungere un altro punto dati e dovresti vedere i dati visualizzati nella scheda Sfoglia per entrambe le istanze.
HarperDB consente agli utenti di definire un livello API leggero tramite una funzionalità chiamata Funzioni personalizzate. Le funzioni personalizzate combinano funzioni serverless con il database sottostante, comprimendo lo stack in un'unica soluzione con la possibilità di definire endpoint API personalizzati che hanno accesso diretto alle operazioni principali di HarperDB. Le funzioni personalizzate serverless di HarperDB, basate su Fastify, sono proprio come le funzioni AWS Lambda o le procedure memorizzate. Le funzioni richiedono poca manutenzione e sono facili da sviluppare; definire la logica e scegliere quando eseguirla.
Utilizzeremo le funzioni personalizzate per implementare una semplice funzione che recupera i dati insieme alle informazioni sulla regione.
Per fare ciò, vai alla directory /opt/hdb/custom_functions
sui droplet HarperDB. Quindi crea una nuova directory chiamata “digitalocean”. Qui inizializzeremo il progetto npm:
npm init -y
npm install @fastify/env
Stiamo utilizzando la libreria @fastify/env per caricare le variabili di ambiente in cui codificheremo le informazioni sulla regione.
Crea un index.js
in una nuova directory routes
:
mkdir routes
touch routes/index.js
Quindi incolla il seguente codice:
import fastifyEnv from '@fastify/env'
import { fileURLToPath } from 'url'
import path from 'path'
const schema = {
type: 'object',
required: ['DO_REGION'],
properties: {
DO_REGION: {
type: 'string'
},
}
}
const __filename = fileURLToPath(import.meta.url)
const __dirname = path.dirname(__filename)
const options = {
schema,
dotenv: {
path: `${__dirname}/.env`,
debug: true
},
data: process.env
}
export default async (server, { hdbCore, logger }) => {
await server.register(fastifyEnv, options);
server.route({
url: '/',
method: 'GET',
handler: async () => {
const body = {
operation: 'sql',
sql: 'SELECT * FROM dev.dog ORDER BY dog_name',
};
const results = await hdbCore.requestWithoutAuthentication({ body });
const response = {
region: process.env.DO_REGION,
results
}
return response
},
});
};
Quindi crea un file .env
e aggiungi informazioni DO_REGION
come:
DO_REGION=new-york
Infine, siamo pronti per testare la nostra applicazione che recupera tutti i record dalla nostra tabella dev.dog
ordinati in base all'attributo dog_name.
Per impostazione predefinita, l'endpoint della funzione personalizzata è
Scegli un IP Droplet vicino a te. Una volta arricciato l'endpoint, torniamo:
{
"region": "new-york",
"results": [
{
"age": 2,
"dog_name": "Charlie"
},
{
"age": 4,
"dog_name": "Coco"
}
]
}
Tieni presente che nel mio caso ho contattato la regione di New York (nota anche che ho aggiunto un altro record in precedenza).
Puoi ricevere lo stesso output dall'altra regione tranne che con i dati della regione corretti (ad esempio San Francisco).
Se desideri instradare il traffico in base alla geolocalizzazione, puoi integrare questi endpoint in un bilanciatore del carico globale o utilizzare un servizio DNS in grado di instradare il traffico di conseguenza.
In questo articolo abbiamo visto come impostare una configurazione multi-regione di HarperDB con replica su DigitalOcean. Con il nuovo modello di marketplace, è banale creare nuove istanze di HarperDB su richiesta. Abbiamo anche spiegato come abilitare la replica e aggiunto un esempio di funzioni personalizzate per mostrare come è possibile aggiungere un livello API con un sovraccarico minimo.