Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Önemli
PostgreSQL için Azure Cosmos DB artık yeni projeler için desteklenmemektedir. Bu hizmeti yeni projeler için kullanmayın. Bunun yerine, şu iki hizmetlerden birini kullanın:
99,999% kullanılabilirlik hizmet düzeyi sözleşmesi (SLA), anında otomatik ölçeklendirme ve birden çok bölgede otomatik yük devretme ile yüksek ölçekli senaryolar için tasarlanmış dağıtılmış bir veritabanı çözümü için NoSQL için Azure Cosmos DB kullanın.
Açık kaynak Citus uzantısını kullanarak bölümlenmiş Azure Veritabanı'nın PostgreSQL için Elastik Kümeler özelliğini kullanın.
Bu öğreticide, postgreSQL için Azure Cosmos DB'yi birden çok mikro hizmetin depolama arka ucu olarak kullanarak bu tür bir kümenin örnek kurulumunu ve temel işlemini gösterebilirsiniz. Şunları nasıl yapacağınızı öğrenin:
- Küme oluşturma
- Mikro hizmetleriniz için roller oluşturma
- Rolleri ve dağıtılmış şemaları oluşturmak için psql yardımcı programını kullanma
- Örnek hizmetler için tablolar oluşturma
- Hizmetleri yapılandırma
- Hizmetleri çalıştırma
- Veritabanını keşfetme
Önkoşullar
Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
Küme oluşturma
PostgreSQL için Azure Cosmos DB kümesi oluşturmak için Azure portalında oturum açın ve şu adımları izleyin:
Azure portalda Azure Cosmos DB for PostgreSQL kümesi oluşturma bölümüne gidin.
PostgreSQL için Azure Cosmos DB kümesi oluşturma formunda:
Temel Bilgiler sekmesindeki bilgileri doldurun.
Seçeneklerin çoğu açıkça anlaşılır durumdadır ama şunları aklınızda bulundurun:
- Küme adı, uygulamalarınızın bağlanmak için kullandığı DNS adını biçiminde
<node-qualifier>-<clustername>.<uniqueID>.postgres.cosmos.azure.combelirler. - 15 gibi büyük bir PostgreSQL sürümü seçebilirsiniz. PostgreSQL için Azure Cosmos DB, seçilen ana Postgres sürümü için her zaman en son Citus sürümünü destekler.
- Yönetici kullanıcı adı
citusolmalıdır. - Veritabanı adını varsayılan 'citus' değerinde bırakabilir veya tek veritabanı adınızı tanımlayabilirsiniz. Küme sağlamadan sonra veritabanını yeniden adlandıramazsınız.
- Küme adı, uygulamalarınızın bağlanmak için kullandığı DNS adını biçiminde
Ekranın alt kısmındaki İleri: Ağ'ı seçin.
Ağ ekranında Azure içindeki Azure hizmetlerinden ve kaynaklarından bu kümeye genel erişime izin ver'i seçin.
Gözden geçir + oluştur'u seçin ve doğrulamadan geçtikten sonra Oluştur'u seçerek kümeyi oluşturun.
Sağlama işlemi birkaç dakika sürer. Sayfa, uygulama izlemeye yeniden yönlendirilir. Dağıtım devam ediyor durumu Dağıtımınız tamamlandı olarak değiştiğinde Kaynağa git'i seçin.
Mikro hizmetleriniz için roller oluşturma
Dağıtılmış şemalar PostgreSQL için Azure Cosmos DB kümesinde yeniden konumlandırılabilir. Sistem bunları kullanılabilir düğümler arasında tüm birim olarak yeniden dengeleyerek kaynakları el ile ayırma olmadan verimli bir şekilde paylaşmaya olanak tanır.
Tasarım gereği, mikro hizmetler kendi depolama katmanlarının sahibidir, oluşturdukları ve depoladıkları tablo ve veri türleri hakkında hiçbir varsayımda bulunmazız. Her hizmet için bir şema sağlarız ve veritabanına bağlanmak için ayrı bir ROLE kullandıklarını varsayarız. Kullanıcı bağlandığında, rol adı search_path başına eklenir, bu nedenle rol şema adıyla eşleşiyorsa doğru search_path ayarlamak için herhangi bir uygulama değişikliğine ihtiyacınız yoktur.
Örneğimizde üç hizmet kullanıyoruz:
- kullanıcı
- zaman
- Ping gönderme
Kullanıcı rollerinin nasıl oluşturulacağını ve her hizmet için aşağıdaki rollerin nasıl oluşturulacağını açıklayan adımları izleyin:
userservicetimeservicepingservice
Dağıtılmış şemalar oluşturmak için psql yardımcı programını kullanma
Psql kullanarak PostgreSQL için Azure Cosmos DB'ye bağlandıktan sonra bazı temel görevleri tamamlayabilirsiniz.
PostgreSQL için Azure Cosmos DB'de şema dağıtmanın iki yolu vardır:
El ile citus_schema_distribute(schema_name) işlevini çağırarak:
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');
Bu yöntem, mevcut normal şemaları dağıtılmış şemalara dönüştürmenize de olanak tanır.
Not
Yalnızca dağıtılmış ve başvuru tabloları içermeyen şemaları dağıtabilirsiniz.
Alternatif yaklaşım, citus.enable_schema_based_sharding yapılandırma değişkenlerini etkinleştirmektir:
SET citus.enable_schema_based_sharding TO ON;
CREATE SCHEMA AUTHORIZATION userservice;
CREATE SCHEMA AUTHORIZATION timeservice;
CREATE SCHEMA AUTHORIZATION pingservice;
Değişken geçerli oturum için veya koordinatör düğümü parametrelerinde kalıcı olarak değiştirilebilir. Parametresi ON olarak ayarlandığında, oluşturulan tüm şemalar varsayılan olarak dağıtılır.
Şu anda dağıtılmış olan şemaları aşağıdakini çalıştırarak listeleyebilirsiniz:
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)
Örnek hizmetler için tablolar oluşturma
Artık her mikro hizmet için PostgreSQL için Azure Cosmos DB'ye bağlanmanız gerekir. Kullanıcıyı mevcut bir psql örneğinde değiştirmek için \c komutunu kullanabilirsiniz.
\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
);
Hizmetleri yapılandırma
Bu öğreticide basit bir hizmet kümesi kullanacağız. Bu genel deposunu kopyalayarak bunları alabilirsiniz:
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
Hizmetleri çalıştırmadan önce, PostgreSQL için Azure Cosmos DB kümenizle bağlantı yapılandırmasını içeren user/app.py, ping/app.py ve time/app.py dosyalarını düzenleyin.
# Database configuration
db_config = {
'host': 'c-EXAMPLE.EXAMPLE.postgres.cosmos.azure.com',
'database': 'citus',
'password': 'SECRET',
'user': 'pingservice',
'port': 5432
}
Değişiklikleri yaptıktan sonra, değiştirilen tüm dosyaları kaydedin ve hizmetleri çalıştırmanın sonraki adımına geçin.
Hizmetleri çalıştırma
Her uygulama dizinine geçin ve bunları kendi python env'lerinde çalıştırın.
cd user
pipenv install
pipenv shell
python app.py
Zaman ve ping hizmeti için komutları yineleyin; bundan sonra API'yi kullanabilirsiniz.
Bazı kullanıcılar oluşturun:
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
Oluşturulan kullanıcıları listeleyin:
curl http://localhost:5000/users
Geçerli saati alma:
Get current time:
ping komutunu example.com karşı çalıştırın:
curl -X POST -H "Content-Type: application/json" -d '{"host": "example.com"}' http://localhost:5002/ping
Veritabanını keşfetme
Artık bazı API işlevlerini çağırdığınıza göre veriler depolanmıştır ve beklenenin yansıtılıp yansıtılamadığını citus_schemas de kontrol edebilirsiniz:
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)
Şemaları oluşturduğunuzda, PostgreSQL için Azure Cosmos DB'ye şemaları hangi makinelerde oluşturacağını söylememiştiniz. Otomatik olarak yapıldı. Aşağıdaki sorguyla her şemanın nerede olduğunu görebilirsiniz:
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
Bu sayfadaki örnek çıktının kısa olması için PostgreSQL için Azure Cosmos DB'de gösterildiği gibi kullanmak nodename yerine bunu localhost ile değiştiriyoruz.
localhost:9701 Bunun çalışan bir ve localhost:9702 çalışan iki olduğunu varsayalım. Yönetilen hizmet üzerindeki düğüm adları daha uzun ve rastgele öğeler içeriyor.
Kullanıcı ve ping hizmeti ikinci çalışanda localhost:9701 alan paylaşırken, zaman hizmetinin localhost:9702 düğüme konumlandığını görebilirsiniz. Örnek uygulamalar basittir ve buradaki veri boyutları yoksayılabilir ancak düğümler arasındaki eşit olmayan depolama alanı kullanımından rahatsız olduğunuzu varsayalım. Büyük kullanıcı hizmeti tek başına kalırken, iki küçük zaman ve ping hizmetinin tek bir makinede yer alması daha mantıklı olacaktır.
Kümeyi disk boyutuna göre kolayca yeniden dengeleyebilirsiniz:
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)
İşiniz bittiğinde, yeni düzenimizin nasıl göründüğünü de kontrol edebilirsiniz:
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)
Beklentilere göre şemalar taşındı ve daha dengeli bir kümemiz var. Bu işlem uygulamalar için saydamdı. Onları yeniden başlatmanız bile gerekmez, sorguları sunmaya devam ederler.
Sonraki adımlar
Bu öğreticide, dağıtılmış şemaların nasıl oluşturulacağını öğrendiniz, bunları depolama olarak kullanarak mikro hizmetler çalıştırıldı. Ayrıca PostgreSQL için şema tabanlı parçalı Azure Cosmos DB'yi keşfetmeyi ve yönetmeyi de öğrendiniz.