Sdílet prostřednictvím


Mikroslužby

V tomto kurzu použijete Azure Cosmos DB for PostgreSQL jako back-end úložiště pro více mikroslužeb a předvádíte ukázkové nastavení a základní provoz takového clusteru. Naučte se:

  • Vytvoření clusteru
  • Vytváření rolí pro mikroslužby
  • Použití nástroje psql k vytvoření rolí a distribuovaných schémat
  • Vytvoření tabulek pro ukázkové služby
  • Konfigurace služeb
  • Spouštění služeb
  • Prozkoumání databáze

PLATÍ PRO: Azure Cosmos DB for PostgreSQL (využívající rozšíření databáze Citus do PostgreSQL)

Požadavky

Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet.

Vytvoření clusteru

Přihlaste se k webu Azure Portal a následujícím postupem vytvořte cluster Azure Cosmos DB for PostgreSQL:

Na webu Azure Portal přejděte do části Vytvoření clusteru Azure Cosmos DB for PostgreSQL.

Ve formuláři Vytvoření clusteru Azure Cosmos DB for PostgreSQL:

  1. Vyplňte požadované informace na kartě Základní informace.

    Snímek obrazovky znázorňující kartu Základy na obrazovce Vytvořit

    Většina možností je intuitivní, mějte však na paměti následující skutečnosti:

    • Název clusteru určuje název DNS, který vaše aplikace používají pro připojení, ve formuláři <node-qualifier>-<clustername>.<uniqueID>.postgres.cosmos.azure.com.
    • Můžete zvolit hlavní verzi PostgreSQL, například 15. Azure Cosmos DB for PostgreSQL vždy podporuje nejnovější verzi Citus pro vybranou hlavní verzi Postgres.
    • Uživatelské jméno správce musí mít hodnotu citus.
    • Název databáze můžete nechat na výchozí hodnotě citus nebo definovat jediný název databáze. Po zřízení clusteru není možné přejmenovat databázi.
  2. Vyberte Další: Sítě v dolní části obrazovky.

  3. Na obrazovce Sítě vyberte Povolit veřejný přístup ze služeb a prostředků Azure v rámci Azure k tomuto clusteru.

    Snímek obrazovky znázorňující kartu Sítě na obrazovce Vytvořit

  4. Vyberte Zkontrolovat a vytvořit a po ověření výběrem možnosti Vytvořit cluster vytvořte.

  5. Zřizování trvá několik minut. Stránka se přesměruje na monitorování nasazení. Jakmile se stav změní z Nasazení probíhá na Nasazení se dokončilo, vyberte Přejít k prostředku.

Vytváření rolí pro mikroslužby

Distribuovaná schémata se znovu přidělují v rámci clusteru Azure Cosmos DB for PostgreSQL. Systém je může znovu vyvážit jako celek napříč dostupnými uzly, což umožňuje efektivně sdílet prostředky bez ručního přidělení.

Mikroslužby vlastní svou vrstvu úložiště, ale nevytvoříme žádné předpoklady pro typ tabulek a dat, které vytvářejí a ukládají. Poskytujeme schéma pro každou službu a předpokládáme, že pro připojení k databázi používají odlišnou roli. Když se uživatel připojí, jeho název role se umístí na začátek search_path, takže pokud se role shoduje s názvem schématu, nepotřebujete k nastavení správných search_path žádné změny aplikace.

V našem příkladu používáme tři služby:

  • user
  • čas
  • cinknout

Postupujte podle kroků popisujících , jak vytvořit role uživatelů a vytvořit pro každou službu následující role:

  • userservice
  • timeservice
  • pingservice

Použití nástroje psql k vytvoření distribuovaných schémat

Po připojení ke službě Azure Cosmos DB for PostgreSQL pomocí psql můžete provést některé základní úlohy.

Schéma je možné distribuovat ve službě Azure Cosmos DB for PostgreSQL dvěma způsoby:

Ruční voláním citus_schema_distribute(schema_name) funkce:

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');

Tato metoda také umožňuje převést existující běžná schémata na distribuovaná schémata.

Poznámka:

Můžete distribuovat pouze schémata, která neobsahují distribuované a referenční tabulky.

Alternativním přístupem je povolit citus.enable_schema_based_sharding konfigurační proměnnou:

SET citus.enable_schema_based_sharding TO ON;

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

Proměnnou lze změnit pro aktuální relaci nebo trvale v parametrech koordinačního uzlu. Když je parametr nastavený na ZAPNUTO, distribuují se ve výchozím nastavení všechna vytvořená schémata.

Aktuálně distribuovaná schémata můžete zobrazit spuštěním následujícího příkazu:

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)

Vytvoření tabulek pro ukázkové služby

Teď se musíte připojit ke službě Azure Cosmos DB for PostgreSQL pro každou mikroslužbu. K prohození uživatele v existující instanci psql můžete použít příkaz \c.

\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
);

Konfigurace služeb

V tomto kurzu používáme jednoduchou sadu služeb. Můžete je získat klonováním tohoto veřejného úložiště:

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

Před spuštěním služeb ale upravte user/app.pyping/app.py a time/app.py soubory, které poskytují konfiguraci připojení pro váš cluster Azure Cosmos DB for PostgreSQL:

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

Po provedení změn uložte všechny upravené soubory a přejděte k dalšímu kroku spuštění služeb.

Spouštění služeb

Přejděte do každého adresáře aplikace a spusťte je ve vlastním prostředí Python env.

cd user
pipenv install
pipenv shell
python app.py

Opakujte příkazy pro službu time a ping, po které můžete použít rozhraní API.

Vytvořte některé uživatele:

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

Vytvořte seznam vytvořených uživatelů:

curl http://localhost:5000/users

Získání aktuálního času:

Get current time:

Spusťte příkaz ping proti example.com:

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

Prozkoumání databáze

Teď, když jste volali některé funkce rozhraní API, se data uložila a můžete zkontrolovat, jestli citus_schemas se jedná o očekávané výsledky:

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)

Při vytváření schémat jste neřekli službě Azure Cosmos DB for PostgreSQL, na kterých počítačích se mají schémata vytvářet. Bylo to provedeno automaticky. Pomocí následujícího dotazu můžete zjistit, kde se nachází každé schéma:

  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

Pro stručnost ukázkového výstupu na této stránce místo použití nodename , jak je zobrazeno ve službě Azure Cosmos DB for PostgreSQL, nahradíme ho místním hostitelem. Předpokládejme, že localhost:9701 je pracovní proces jeden a localhost:9702 je pracovní dvěma. Názvy uzlů ve spravované službě jsou delší a obsahují randomizované prvky.

Uvidíte, že časová služba přistála na uzlu localhost:9701 , zatímco uživatel a služba ping sdílejí prostor na druhém pracovním procesu localhost:9702. Ukázkové aplikace jsou zjednodušené a velikosti dat, které tady jsou ignorovatelné, ale předpokládejme, že jste znechuceni nerovnoměrným využitím prostoru úložiště mezi uzly. Mělo by větší smysl mít dvě menší časy a služby ping se nacházejí na jednom počítači, zatímco velká uživatelská služba se nachází sama.

Snadno vyrovnáváte cluster podle velikosti disku:

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)

Až budete hotovi, můžete zkontrolovat, jak vypadá nové rozložení:

  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)

Podle očekávání se schémata přesunula a máme vyváženější cluster. Tato operace byla pro aplikace transparentní. Nemusíte je ani restartovat, ale budou dál obsluhovat dotazy.

Další kroky

V tomto kurzu jste se dozvěděli, jak vytvářet distribuovaná schémata, spouštět mikroslužby pomocí nich jako úložiště. Dozvěděli jste se také, jak prozkoumat a spravovat horizontálně dělené služby Azure Cosmos DB for PostgreSQL založené na schématu.

  • Informace o typech uzlů clusteru