Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Dalam tutorial ini, Anda menggunakan Azure Cosmos DB for PostgreSQL sebagai backend penyimpanan untuk beberapa layanan mikro, menunjukkan penyiapan sampel dan operasi dasar kluster tersebut. Pelajari cara:
- Membuat kluster
- Membuat peran untuk layanan mikro Anda
- Menggunakan utilitas psql untuk membuat peran dan skema terdistribusi
- Membuat tabel untuk layanan sampel
- Mengonfigurasi layanan
- Menjalankan layanan
- Menjelajahi database
BERLAKU UNTUK:
Azure Cosmos DB for PostgreSQL (diperkuat dengan ekstensi basis data Citus untuk PostgreSQL)
Prasyarat
Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum Anda memulai.
Membuat kluster
Masuk ke portal Azure dan ikuti langkah-langkah ini untuk membuat kluster Azure Cosmos DB for PostgreSQL:
Pergi ke Buat kluster Azure Cosmos DB for PostgreSQL di portal Azure.
Pada formulir "Buat sebuah kluster Azure Cosmos DB untuk PostgreSQL":
Isi informasi pada tab Dasar.
Sebagian besar opsi cukup jelas, tetapi perlu diingat:
- Nama kluster menentukan nama DNS yang digunakan aplikasi Anda untuk menyambungkan, dalam bentuk
<node-qualifier>-<clustername>.<uniqueID>.postgres.cosmos.azure.com
. - Anda dapat memilih versi PostgreSQL utama seperti 15. Azure Cosmos DB for PostgreSQL selalu mendukung versi Citus terbaru untuk versi Postgres utama yang dipilih.
- Nama pengguna admin harus memiliki nilai
citus
. - Anda dapat membiarkan nama database pada nilai defaultnya 'citus' atau menentukan satu-satunya nama database Anda. Anda tidak dapat mengganti nama database setelah provisi kluster.
- Nama kluster menentukan nama DNS yang digunakan aplikasi Anda untuk menyambungkan, dalam bentuk
Pilih Berikutnya : Jaringan di bagian bawah layar.
Pada layar Jaringan, pilih Izinkan akses publik dari layanan dan sumber daya Azure dalam Azure ke kluster ini.
Pilih Tinjau + buat, dan saat validasi lolos, pilih Buat untuk membuat kluster.
Pengaturan membutuhkan waktu beberapa menit. Halaman akan dialihkan untuk memantau penyebaran. Saat status berubah dari Penyebaran dalam proses menjadi Penyebaran selesai, pilih Buka sumber daya.
Membuat peran untuk layanan mikro Anda
Skema terdistribusi dapat direlokasi dalam kluster Azure Cosmos DB for PostgreSQL. Sistem dapat menyeimbangkannya kembali sebagai seluruh unit di seluruh simpul yang tersedia, memungkinkan untuk berbagi sumber daya secara efisien tanpa alokasi manual.
Secara desain, layanan mikro memiliki lapisan penyimpanannya, kami tidak membuat asumsi apa pun pada jenis tabel dan data yang mereka buat dan simpan. Kami menyediakan skema untuk setiap layanan dan mengasumsikan bahwa mereka menggunakan PERAN yang berbeda untuk menyambungkan ke database. Saat pengguna terhubung, nama peran mereka diletakkan di awal search_path, jadi jika peran cocok dengan nama skema, Anda tidak memerlukan perubahan aplikasi untuk mengatur search_path yang benar.
Kami menggunakan tiga layanan dalam contoh kami:
- pengguna
- waktu
- Ping
Ikuti langkah-langkah yang menjelaskan cara membuat peran pengguna dan membuat peran berikut untuk setiap layanan:
userservice
timeservice
pingservice
Menggunakan utilitas psql untuk membuat skema terdistribusi
Setelah tersambung ke Azure Cosmos DB for PostgreSQL menggunakan psql, Anda dapat menyelesaikan beberapa tugas dasar.
Ada dua cara di mana skema dapat didistribusikan di Azure Cosmos DB for PostgreSQL:
Secara manual dengan memanggil citus_schema_distribute(schema_name)
fungsi:
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');
Metode ini juga memungkinkan Anda untuk mengonversi skema reguler yang ada menjadi skema terdistribusi.
Catatan
Anda hanya dapat mendistribusikan skema yang tidak berisi tabel terdistribusi dan referensi.
Pendekatan alternatif adalah mengaktifkan variabel konfigurasi citus.enable_schema_based_sharding:
SET citus.enable_schema_based_sharding TO ON;
CREATE SCHEMA AUTHORIZATION userservice;
CREATE SCHEMA AUTHORIZATION timeservice;
CREATE SCHEMA AUTHORIZATION pingservice;
Variabel dapat diubah untuk sesi saat ini atau secara permanen dalam parameter simpul koordinator. Dengan parameter diatur ke AKTIF, semua skema yang dibuat didistribusikan secara default.
Anda dapat mencantumkan skema yang saat ini didistribusikan dengan menjalankan:
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)
Membuat tabel untuk layanan sampel
Anda sekarang perlu terhubung ke Azure Cosmos DB for PostgreSQL untuk setiap layanan mikro. Anda dapat menggunakan perintah \c untuk menukar pengguna dalam instans psql yang ada.
\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
);
Mengonfigurasi layanan
Dalam tutorial ini, kami menggunakan serangkaian layanan sederhana. Anda dapat memperolehnya dengan mengkloning repositori publik ini:
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
Namun sebelum Anda menjalankan layanan, edit user/app.py
, ping/app.py
dan time/app.py
file yang menyediakan konfigurasi koneksi untuk kluster Azure Cosmos DB for PostgreSQL Anda:
# Database configuration
db_config = {
'host': 'c-EXAMPLE.EXAMPLE.postgres.cosmos.azure.com',
'database': 'citus',
'password': 'SECRET',
'user': 'pingservice',
'port': 5432
}
Setelah membuat perubahan, simpan semua file yang dimodifikasi dan lanjutkan ke langkah berikutnya menjalankan layanan.
Menjalankan layanan
Ubah ke setiap direktori aplikasi dan jalankan di python env mereka sendiri.
cd user
pipenv install
pipenv shell
python app.py
Ulangi perintah untuk layanan waktu dan ping, setelah itu Anda dapat menggunakan API.
Buat beberapa pengguna:
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
Daftar pengguna yang telah dibuat
curl http://localhost:5000/users
Dapatkan waktu saat ini:
Get current time:
Jalankan ping terhadap example.com:
curl -X POST -H "Content-Type: application/json" -d '{"host": "example.com"}' http://localhost:5002/ping
Menjelajahi database
Sekarang setelah Anda memanggil beberapa fungsi API, data telah disimpan dan Anda dapat memeriksa apakah citus_schemas
mencerminkan apa yang diharapkan:
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)
Saat membuat skema, Anda tidak memberi tahu Azure Cosmos DB for PostgreSQL di komputer mana untuk membuat skema. Itu dilakukan secara otomatis. Anda dapat melihat di mana setiap skema berada dengan kueri berikut:
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
Untuk singkatnya output contoh di halaman ini, alih-alih menggunakan nodename
seperti yang ditampilkan di Azure Cosmos DB for PostgreSQL, kami menggantinya dengan localhost. Asumsikan bahwa localhost:9701
adalah pekerja satu dan localhost:9702
merupakan pekerja dua. Nama node pada layanan terkelola lebih panjang dan berisi elemen acak.
Anda dapat melihat bahwa layanan waktu mendarat di node localhost:9701
sementara pengguna dan layanan ping berbagi ruang pada pekerja localhost:9702
kedua . Contoh aplikasi sederhana, dan ukuran data di sini tidak dapat diabaikan, tetapi mari kita asumsikan bahwa Anda kesal oleh pemanfaatan ruang penyimpanan yang tidak merata antara simpul. Akan lebih masuk akal jika dua layanan yang lebih kecil, yaitu waktu dan ping, ditempatkan pada satu mesin sementara layanan pengguna yang besar berada sendiri.
Anda dapat dengan mudah menyeimbangkan kembali kluster berdasarkan ukuran disk:
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)
Setelah selesai, Anda dapat memeriksa tampilan tata letak baru kami:
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)
Menurut harapan, skema telah dipindahkan dan kami memiliki kluster yang lebih seimbang. Operasi ini telah transparan untuk aplikasi. Anda bahkan tidak perlu memulai ulang mereka; mereka terus melayani kueri.
Langkah berikutnya
Dalam tutorial ini, Anda mempelajari cara membuat skema terdistribusi, menjalankan layanan mikro menggunakannya sebagai penyimpanan. Anda juga mempelajari cara menjelajahi dan mengelola Azure Cosmos DB for PostgreSQL yang dipecah berbasis skema.