Megosztás a következőn keresztül:


Mikroszolgáltatások

Ebben az oktatóanyagban az Azure Cosmos DB for PostgreSQL-t használja több mikroszolgáltatás háttérrendszereként, bemutatva egy ilyen fürt mintabeállítását és alapműveletét. Az alábbiak végrehajtásának módját ismerheti meg:

  • Fürt létrehozása
  • Szerepkörök létrehozása a mikroszolgáltatásokhoz
  • Szerepkörök és elosztott sémák létrehozása a psql segédprogrammal
  • Táblák létrehozása a mintaszolgáltatásokhoz
  • Szolgáltatások konfigurálása
  • Szolgáltatások futtatása
  • Az adatbázis felfedezése

A KÖVETKEZŐKRE VONATKOZIK: Azure Cosmos DB for PostgreSQL (a Citus adatbázisbővítménye a PostgreSQL-re)

Előfeltételek

Ha még nincs Azure-előfizetése, kezdés előtt hozzon létre egy ingyenes fiókot.

Fürt létrehozása

Jelentkezzen be az Azure Portalra , és kövesse az alábbi lépéseket egy Azure Cosmos DB for PostgreSQL-fürt létrehozásához:

Az Azure Portalon lépjen az Azure Cosmos DB for PostgreSQL-fürt létrehozása elemre.

Az Azure Cosmos DB for PostgreSQL-fürt létrehozása űrlapon:

  1. Adja meg az Alapvető beállítások lapon kért adatokat.

    Képernyőkép a Létrehozás képernyő Alapismeretek lapján.

    A legtöbb beállítás egyértelmű, de tartsa szem előtt a következőket:

    • A fürt neve határozza meg az alkalmazások által a csatlakozáshoz használt DNS-nevet az űrlapon <node-qualifier>-<clustername>.<uniqueID>.postgres.cosmos.azure.com.
    • Választhat egy fő PostgreSQL-verziót, például a 15-öt. Az Azure Cosmos DB for PostgreSQL mindig a legújabb Citus-verziót támogatja a kiválasztott fő Postgres-verzióhoz.
    • A rendszergazdai felhasználónév legyen citus.
    • Meghagyhatja az adatbázis nevét az alapértelmezett "citus" értéknél, vagy megadhatja az egyetlen adatbázisnevet. A fürt kiépítése után nem nevezheti át az adatbázist.
  2. Válassza a Tovább elemet : Hálózatkezelés a képernyő alján.

  3. A Hálózatkezelés képernyőn válassza a Nyilvános hozzáférés engedélyezése az Azure-szolgáltatásokból és az Azure-beli erőforrásokból a fürthöz lehetőséget.

    Képernyőkép a Létrehozás képernyő Hálózatkezelés lapján.

  4. Válassza a Felülvizsgálat + létrehozás elemet, majd az ellenőrzés elvégzése után kattintson a Létrehozás gombra a fürt létrehozásához.

  5. Az üzembe helyezés eltarthat néhány percig. Az oldal átirányítja az üzembe helyezés monitorozásához. Amikor az állapot az Üzembe helyezés folyamatban után az Az üzembe helyezés befejeződött értékre vált, válassza az Ugrás az erőforrásra lehetőséget.

Szerepkörök létrehozása a mikroszolgáltatásokhoz

Az elosztott sémák áthelyezhetők egy Azure Cosmos DB for PostgreSQL-fürtön belül. A rendszer teljes egységként kiegyensúlyozhatja őket az elérhető csomópontok között, így manuális kiosztás nélkül hatékonyan oszthatja meg az erőforrásokat.

A mikroszolgáltatások a saját tárolási rétegükkel rendelkeznek, nem feltételezzük, hogy milyen típusú táblákat és adatokat hoznak létre és tárolnak. Minden szolgáltatáshoz biztosítunk sémát, és feltételezzük, hogy egy különálló SZEREPKÖR használatával csatlakoznak az adatbázishoz. Amikor egy felhasználó csatlakozik, a szerepkör neve a search_path elején lesz elhelyezve, így ha a szerepkör megegyezik a séma nevével, nincs szükség alkalmazásmódosításra a megfelelő search_path beállításához.

A példánkban három szolgáltatást használunk:

  • user
  • time
  • ping

Kövesse a felhasználói szerepkörök létrehozását és az egyes szolgáltatásokhoz a következő szerepkörök létrehozását ismertető lépéseket:

  • userservice
  • timeservice
  • pingservice

Elosztott sémák létrehozása a psql segédprogrammal

Miután a psql használatával csatlakozott az Azure Cosmos DB for PostgreSQL-hez, elvégezhet néhány alapvető feladatot.

A sémák kétféleképpen terjeszthetők az Azure Cosmos DB for PostgreSQL-ben:

Manuálisan a függvény meghívásával citus_schema_distribute(schema_name) :

CREATE SCHEMA AUTHORIZATION userservice;
CREATE SCHEMA AUTHORIZATION timeservice;
CREATE SCHEMA AUTHORIZATION pingservice;

SELECT citus_schema_distribute('userservice');
SELECT citus_schema_distribute('timeservice');
SELECT citus_schema_distribute('pingservice');

Ezzel a módszerrel a meglévő normál sémákat elosztott sémákká is konvertálhatja.

Feljegyzés

Csak olyan sémákat oszthat ki, amelyek nem tartalmaznak elosztott és referenciatáblákat.

Alternatív módszer citus.enable_schema_based_sharding konfigurációs változó engedélyezése:

SET citus.enable_schema_based_sharding TO ON;

CREATE SCHEMA AUTHORIZATION userservice;
CREATE SCHEMA AUTHORIZATION timeservice;
CREATE SCHEMA AUTHORIZATION pingservice;

A változó az aktuális munkamenetben vagy a koordinátor csomópontparamétereiben módosítható. Ha a paraméter BE értékre van állítva, az összes létrehozott séma alapértelmezés szerint el van osztva.

Az aktuálisan elosztott sémákat a következő futtatásával listázhatja:

select * from citus_schemas;
 schema_name | colocation_id | schema_size | schema_owner
-------------+---------------+-------------+--------------
 userservice |             5 | 0 bytes     | userservice
 timeservice |             6 | 0 bytes     | timeservice
 pingservice |             7 | 0 bytes     | pingservice
(3 rows)

Táblák létrehozása a mintaszolgáltatásokhoz

Most minden mikroszolgáltatáshoz csatlakoznia kell az Azure Cosmos DB for PostgreSQL-hez. A \c paranccsal felcserélheti a felhasználót egy meglévő psql-példányon belül.

\c citus userservice
CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    email VARCHAR(255) NOT NULL
);
\c citus timeservice
CREATE TABLE query_details (
    id SERIAL PRIMARY KEY,
    ip_address INET NOT NULL,
    query_time TIMESTAMP NOT NULL
);
\c citus pingservice
CREATE TABLE ping_results (
    id SERIAL PRIMARY KEY,
    host VARCHAR(255) NOT NULL,
    result TEXT NOT NULL
);

Szolgáltatások konfigurálása

Ebben az oktatóanyagban egy egyszerű szolgáltatáskészletet használunk. Ezeket a nyilvános adattár klónozásával szerezheti be:

git clone https://github.com/citusdata/citus-example-microservices.git
$ tree
.
├── LICENSE
├── README.md
├── ping
│   ├── app.py
│   ├── ping.sql
│   └── requirements.txt
├── time
│   ├── app.py
│   ├── requirements.txt
│   └── time.sql
└── user
    ├── app.py
    ├── requirements.txt
    └── user.sql

A szolgáltatások futtatása előtt azonban szerkessze user/app.pyping/app.py az time/app.py Azure Cosmos DB for PostgreSQL-fürt kapcsolatkonfigurációját biztosító fájlokat:

# Database configuration
db_config = {
    'host': 'c-EXAMPLE.EXAMPLE.postgres.cosmos.azure.com',
    'database': 'citus',
    'password': 'SECRET',
    'user': 'pingservice',
    'port': 5432
}

A módosítások elvégzése után mentse az összes módosított fájlt, és lépjen tovább a szolgáltatások futtatásának következő lépésére.

Szolgáltatások futtatása

Váltson át minden alkalmazáskönyvtárra, és futtassa őket a saját Python-envben.

cd user
pipenv install
pipenv shell
python app.py

Ismételje meg a parancsokat az idő- és pingelési szolgáltatáshoz, amely után használhatja az API-t.

Hozzon létre néhány felhasználót:

curl -X POST -H "Content-Type: application/json" -d '[
  {"name": "John Doe", "email": "john@example.com"},
  {"name": "Jane Smith", "email": "jane@example.com"},
  {"name": "Mike Johnson", "email": "mike@example.com"},
  {"name": "Emily Davis", "email": "emily@example.com"},
  {"name": "David Wilson", "email": "david@example.com"},
  {"name": "Sarah Thompson", "email": "sarah@example.com"},
  {"name": "Alex Miller", "email": "alex@example.com"},
  {"name": "Olivia Anderson", "email": "olivia@example.com"},
  {"name": "Daniel Martin", "email": "daniel@example.com"},
  {"name": "Sophia White", "email": "sophia@example.com"}
]' http://localhost:5000/users

A létrehozott felhasználók listázása:

curl http://localhost:5000/users

Aktuális idő lekérése:

Get current time:

Futtassa a pingelést a example.com:

curl -X POST -H "Content-Type: application/json" -d '{"host": "example.com"}' http://localhost:5002/ping

Az adatbázis felfedezése

Most, hogy meghívott néhány API-függvényt, az adatok tárolása megtörtént, és ellenőrizheti, hogy a várt értéket tükrözi-e citus_schemas :

select * from citus_schemas;
 schema_name | colocation_id | schema_size | schema_owner
-------------+---------------+-------------+--------------
 userservice |             1 | 112 kB      | userservice
 timeservice |             2 | 32 kB       | timeservice
 pingservice |             3 | 32 kB       | pingservice
(3 rows)

A sémák létrehozásakor nem árulta el az Azure Cosmos DB for PostgreSQL-nek, hogy mely gépeken hozza létre a sémákat. Ez automatikusan megtörtént. Az alábbi lekérdezéssel láthatja, hogy hol találhatók az egyes sémák:

  select nodename,nodeport, table_name, pg_size_pretty(sum(shard_size))
    from citus_shards
group by nodename,nodeport, table_name;
nodename  | nodeport |         table_name         | pg_size_pretty
-----------+----------+---------------------------+----------------
 localhost |     9701 | timeservice.query_details | 32 kB
 localhost |     9702 | userservice.users         | 112 kB
 localhost |     9702 | pingservice.ping_results  | 32 kB

Az oldalon található példakimenet rövidsége érdekében ahelyett, hogy az Azure Cosmos DB for PostgreSQL-ben látható módon használnánk nodename , a localhostra cseréljük. Tegyük fel, hogy localhost:9701 ez az első, a localhost:9702 második pedig a feldolgozó. A felügyelt szolgáltatás csomópontnevei hosszabbak, és véletlenszerű elemeket tartalmaznak.

Láthatja, hogy az időszolgáltatás a csomóponton localhost:9701 landolt, míg a felhasználó és a pingelési szolgáltatás helyet osztott meg a második feldolgozón localhost:9702. A példaalkalmazások egyszerűek, és az adatméretek figyelmen kívül hagyhatók, de tegyük fel, hogy bosszantja a csomópontok közötti egyenetlen tárterület-kihasználtság. Érdemesebb lenne két kisebb időt igénybe véve pingelni a szolgáltatásokat egy gépen, míg a nagy felhasználói szolgáltatás egyedül található.

A fürt lemezméret szerint egyszerűen kiegyensúlyozható:

select citus_rebalance_start();
NOTICE:  Scheduled 1 moves as job 1
DETAIL:  Rebalance scheduled as background job
HINT:  To monitor progress, run: SELECT * FROM citus_rebalance_status();
 citus_rebalance_start
-----------------------
                     1
(1 row)

Ha elkészült, ellenőrizheti az új elrendezés megjelenését:

  select nodename,nodeport, table_name, pg_size_pretty(sum(shard_size))
    from citus_shards
group by nodename,nodeport, table_name;
 nodename  | nodeport |         table_name        | pg_size_pretty
-----------+----------+---------------------------+----------------
 localhost |     9701 | timeservice.query_details | 32 kB
 localhost |     9701 | pingservice.ping_results  | 32 kB
 localhost |     9702 | userservice.users         | 112 kB
(3 rows)

Az elvárásoknak megfelelően a sémák át lettek helyezve, és kiegyensúlyozottabb fürtünk van. Ez a művelet transzparens volt az alkalmazások számára. Még csak nem is kell újraindítania őket, továbbra is kiszolgálják a lekérdezéseket.

Következő lépések

Ebben az oktatóanyagban megtanulta, hogyan hozhat létre elosztott sémákat, hogyan futtatott mikroszolgáltatásokat tárolóként. Azt is megtanulta, hogyan vizsgálhatja meg és kezelheti a sémaalapú, szilánkos Azure Cosmos DB for PostgreSQL-t.

  • Tudnivalók a fürtcsomópont-típusokról