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


Mikroszolgáltatások

Fontos

Az Azure Cosmos DB for PostgreSQL már nem támogatott új projektek esetén. Ne használja ezt a szolgáltatást új projektekhez. Ehelyett használja az alábbi két szolgáltatás egyikét:

  • Az Azure Cosmos DB for NoSQL használata nagy léptékű forgatókönyvekhez tervezett elosztott adatbázis-megoldáshoz 99,999% rendelkezésre állási szolgáltatásiszint-szerződéssel (SLA), azonnali automatikus skálázással és automatikus feladatátvétellel több régióban.

  • Használja az Azure Database For PostgreSQL Rugalmas fürtök funkcióját a megosztott PostgreSQL-hez a nyílt forráskódú Citus-bővítmény használatával.

Ebben az oktatóanyagban az Azure Cosmos DB-t PostgreSQL számára használja több mikroszolgáltatás háttértárként, bemutatva egy ilyen klaszter mintabeállítását és alapvető működésé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

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 portálra, és kövesse az alábbi lépéseket egy Azure Cosmos DB for PostgreSQL klaszter 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 PostgreSQL-fürt létrehozására szolgáló ű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 alakban <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 lehet átnevezni 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ások és az Azure-beli erőforrások számára ehhez 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 sikeres befejezé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:

  • felhasználó
  • idő
  • 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 a user/app.py, ping/app.py és time/app.py fájlokat, amelyek biztosítják az Azure Cosmos DB for PostgreSQL-fürt kapcsolatkonfigurációját.

# 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 pingetést az example.com ellen.

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 az első munkás, és localhost:9702 a második munkás. 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. Ésszerűbb lenne, ha a két kisebb idő és ping szolgáltatás egy gépen helyezkedne el, míg a nagy felhasználói szolgáltatás különállóan működne.

A fürt könnyen kiegyensúlyozható a lemezméret alapján.

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, és miként futtathat mikroszolgáltatásokat tárolóeszközként ezekkel. 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