ApsaraDB for SelectDB, tek bir örnek içinde birden fazla hesaplama kümesini destekler. Her küme fiziksel olarak yalıtılmış hesaplama kaynaklarına sahip olsa da tüm kümeler aynı temel verileri okuyup yazar; bu sayede farklı iş sistemleri birbirlerinin performansını etkilemeden bağımsız şekilde iş yüklerini çalıştırabilir.
Çalışma mantığı
ApsaraDB for SelectDB, cloud-native bir hesaplama-depolama ayrımı mimarisi kullanır. Üst katmandaki hesaplama kaynakları depolamadan ayrılmıştır; bu sayede birden fazla hesaplama kümesi veriyi çoğaltmadan aynı veriyi paylaşabilir. Her küme özel bir kaynak grubu gibi davranır: Bir veya daha fazla hesaplama birimini koordine ederek bir hesaplama görevini tamamlar ve hesaplama kaynakları diğer kümelerden fiziksel olarak yalıtılır.
Kullanım senaryoları
Birden fazla hesaplama kümesi, farklı iş sistemleri arasında iş yükü yalıtımı sağlamak için uygundur:
Okuma/yazma yalıtımı: Yoğun yazma içeren veri alım iş yüklerini, yoğun okuma gerektiren sorgu iş yüklerinden ayırarak büyük ekleme işlemlerinin sorgu yanıt sürelerini düşürmesini önleyin.
Çevrimiçi/çevrimdışı yalıtımı: Gerçek zamanlı hizmet sorgularını ve toplu iş analizlerini ayrı kümelerde çalıştırarak üretim trafiği için öngörülebilir gecikme süresi garantisi sunun.
Örnek: İki iş sisteminin yalıtılması
Bu örnekte, A İş Sistemi için cluster_01 ve B İş Sistemi için cluster_02 adlı iki kümenin nasıl kurulacağı ve her iki kümenin de aynı temel verileri paylaştığı nasıl doğrulanacağı gösterilmektedir.
Ön koşullar
Başlamadan önce aşağıdakilere sahip olduğunuzdan emin olun:
En az iki hesaplama kümesine (
cluster_01vecluster_02) sahip bir ApsaraDB for SelectDB örneğiÖrneğe yönetici hesap erişimi
Adım 1: Kullanıcı hesaplarını oluşturun ve küme erişimi verin
Yönetici hesabını kullanarak örneğe bağlanın ve iki kullanıcı hesabı oluşturun.
-- Create user accounts
CREATE USER test_01 IDENTIFIED BY 'testPassword';
CREATE USER test_02 IDENTIFIED BY 'testPassword';
-- Grant full data access to both accounts
GRANT ALL ON *.* TO test_01;
GRANT ALL ON *.* TO test_02;
-- Assign each account to its cluster
GRANT USAGE_PRIV ON CLUSTER cluster_01 TO test_01;
GRANT USAGE_PRIV ON CLUSTER cluster_02 TO test_02;
Adım 2: Küme atamalarını doğrulayın
Hâlâ yönetici hesabını kullanırken kurulumu onaylamak için SHOW clusters komutunu çalıştırın.
SHOW clusters;
Beklenen çıktı:
+------------+------------+-------+
| cluster | is_current | users |
+------------+------------+-------+
| cluster_01 | FALSE | |
| cluster_02 | TRUE | |
+------------+------------+-------+
Yönetici hesabının her iki kümeye de erişimi vardır ve varsayılan olarak cluster_02 kümesini kullanır.
Şimdi test_01 olarak bağlanın ve aynı komutu çalıştırın.
SHOW clusters;
Beklenen çıktı:
+------------+------------+-------+
| cluster | is_current | users |
+------------+------------+-------+
| cluster_01 | TRUE | |
+------------+------------+-------+
test_01 yalnızca cluster_01 kümesine erişebilir; bu durum küme atamasının doğru çalıştığını doğrular.
Şimdi test_02 olarak bağlanın ve aynı komutu çalıştırın.
SHOW clusters;
Beklenen çıktı:
+------------+------------+-------+
| cluster | is_current | users |
+------------+------------+-------+
| cluster_02 | TRUE | |
+------------+------------+-------+
test_02 yalnızca cluster_02 kümesine erişebilir; bu durum küme atamasının doğru çalıştığını doğrular.
Adım 3: cluster_01 üzerinde veri yazın
test_01 olarak bağlanın ve yeni bir tabloya test kayıtları ekleyin.
CREATE TABLE golds_log
(
user_id bigint,
accounts string,
change_type string,
golds bigint,
log_time int
) DISTRIBUTED BY HASH(`user_id`) BUCKETS 3;
INSERT INTO golds_log VALUES
(3645356, 'wds7654321(4171752)', 'swim', 1700, 152607152),
(2016869, 'dqyx123456789(2376699)', 'noise', 1140, 152607152),
(3630468, 'dke3776611(4156064)', 'white', 1200, 152602752);
Adım 4: Aynı verileri cluster_02 üzerinde okuyun
test_02 olarak bağlanın ve test_01 tarafından az önce yazılan tabloyu sorgulayın.
SELECT * FROM golds_log;
Beklenen çıktı:
+---------+------------------------+-------------+-------+-----------+
| user_id | accounts | change_type | golds | log_time |
+---------+------------------------+-------------+-------+-----------+
| 3630468 | dke3776611(4156064) | noise | 1200 | 152602752 |
| 2016869 | dqyx123456789(2376699) | whitewo | 1140 | 152607152 |
| 3645356 | wds7654321(4171752) | swim | 1700 | 152607152 |
+---------+------------------------+-------------+-------+-----------+
test_02 tarafından test_01 ile yazılan veriler okunabilir; bu durum tüm kümelerin aynı temel depolamayı paylaştığını doğrular.
Bir kullanıcının küme erişimi olmadığında ne olur?
Yönetici hesabını kullanarak örneğe bağlanın ve herhangi bir küme erişimi vermeden üçüncü bir kullanıcı oluşturun.
CREATE USER test_03 IDENTIFIED BY 'testPassword';
GRANT ALL ON *.* TO test_03;
test_03 olarak bağlanın ve bir sorgu çalıştırın:
SELECT * FROM golds_log;
Sorgu aşağıdaki hatayla başarısız olur:
ERROR 1105 (HY000): errCode = 2, detailMessage = 90363 have no queryable replicas. err: 90364's backend -1 does not exist or not alive, or you may not have permission to access the current cluster, clusterName=null
Bu hata, hesabın örnekteki hiçbir kümeye erişimi olmadığını gösterir. Sorunu çözmek için en az bir küme üzerinde USAGE_PRIV izni verin.