Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Důležité
Azure Cosmos DB for PostgreSQL se už pro nové projekty nepodporuje. Tuto službu nepoužívejte pro nové projekty. Místo toho použijte jednu z těchto dvou služeb:
Azure Cosmos DB for NoSQL můžete použít pro distribuované databázové řešení navržené pro vysoce škálovatelné scénáře s 99,999% smlouvou o úrovni služeb (SLA), okamžitým automatickým škálováním a automatickým převzetím služeb při selhání napříč několika oblastmi.
Použijte funkci Elastic Clusters služby Azure Database for PostgreSQL pro horizontálně dělené PostgreSQL pomocí opensourcového rozšíření Citus.
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
- Provoz služeb
- Prozkoumání databáze
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 pro PostgreSQL:
Vyplňte požadované informace na kartě Základní informace.
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.
- Název clusteru určuje název DNS, který vaše aplikace používají pro připojení, ve formuláři
Vyberte Další: Sítě v dolní části obrazovky.
Na obrazovce Sítě vyberte Povolit veřejný přístup ze služeb a prostředků Azure v rámci Azure k tomuto clusteru.
Vyberte Zkontrolovat a vytvořit, a jakmile ověření proběhne, klikněte na Vytvořit pro vytvoření clusteru.
Zřizování trvá několik minut. Stránka se přesměrovává 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 lze přesouvat 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:
- uživatel
- čas
- Ping
Postupujte podle kroků popisujících , jak vytvořit role uživatelů a vytvořit pro každou službu následující role:
userservicetimeservicepingservice
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:
Manuálně pomocí volání funkce 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');
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 konfigurační proměnnou citus.enable_schema_based_sharding pomocí:
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.
Provoz 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ík jedna a localhost:9702 je pracovník dva. 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živatelská a ping služba sdílejí prostor na druhé pracovní jednotce localhost:9702. Ukázkové aplikace jsou jednoduché a velikosti dat jsou zde zanedbatelné, ale předpokládejme si, že jste znepokojeni nerovnoměrným využitím úložného prostoru mezi uzly. Mělo by větší smysl mít dvě menší služby času a pingu umístěny na jednom počítači, zatímco velká uživatelská služba je umístěna samostatně.
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 Azure Cosmos DB for PostgreSQL dělené na základě schématu.