Native CLI i18n: The TrustGraph CLI has built-in translation support that dynamically loads language strings. You can test and use different languages by simply passing the --lang flag (e.g., --lang es for Spanish, --lang ru for Russian) or by configuring your environment's LANG variable. Automated Docs Translations: This PR introduces autonomously translated Markdown documentation into several target languages, including Spanish, Swahili, Portuguese, Turkish, Hindi, Hebrew, Arabic, Simplified Chinese, and Russian.
31 KiB
| layout | title | parent |
|---|---|---|
| default | Teknik Özellikler: Çok Kiracılı Destek | Turkish (Beta) |
Teknik Özellikler: Çok Kiracılı Destek
Beta Translation: This document was translated via Machine Learning and as such may not be 100% accurate. All non-English languages are currently classified as Beta.
Genel Bakış
Kuyumuzu özelleştirmeyi engelleyen parametre adı eşleşmezliklerini düzelterek ve Cassandra anahtar alanı parametrelemesini ekleyerek çok kiracılı dağıtımları etkinleştirin.
Mimari Bağlam
Akış Tabanlı Kuyruk Çözümlemesi
TrustGraph sistemi, dinamik kuyruk çözümlemesi için akış tabanlı bir mimari kullanır ve bu, doğal olarak çok kiracılığı destekler:
Akış Tanımları, Cassandra'da saklanır ve arayüz tanımları aracılığıyla kuyruk adlarını belirtir.
Kuyruk adları, akış örneği kimlikleriyle değiştirilen {id} değişkenlerine sahip şablonlar kullanır.
Hizmetler, istek zamanında akış yapılandırmalarını arayarak kuyrukları dinamik olarak çözümler.
Her kiracı, farklı kuyruk adlarına sahip benzersiz akışlara sahip olabilir, bu da izolasyon sağlar.
Örnek akış arayüz tanımı:
{
"interfaces": {
"triples-store": "persistent://tg/flow/triples-store:{id}",
"graph-embeddings-store": "persistent://tg/flow/graph-embeddings-store:{id}"
}
}
Kiracı A, tenant-a-prod akışını başlatığında ve kiracı B, tenant-b-prod akışını başlattığında, otomatik olarak izole edilmiş kuyruklar elde ederler:
persistent://tg/flow/triples-store:tenant-a-prod
persistent://tg/flow/triples-store:tenant-b-prod
Çoklu kiracılığa doğru şekilde tasarlanmış hizmetler: ✅ Bilgi Yönetimi (çekirdekler) - İsteğe eklenen akış yapılandırmasından kuyrukları dinamik olarak çözer.
Düzeltilmesi gereken hizmetler: 🔴 Yapılandırma Hizmeti - Parametre adı eşleşmezliği, kuyruk özelleştirmesini engeller. 🔴 Kütüphaneci Hizmeti - Sabit kodlanmış depolama yönetimi konuları (aşağıda açıklanmıştır). 🔴 Tüm Hizmetler - Cassandra anahtar alanını özelleştiremezsiniz.
Sorun Tanımı
Sorun #1: AsyncProcessor'daki Parametre Adı Eşleşmezliği
CLI tanımları: --config-queue (belirsiz adlandırma)
Argparse'ın dönüştürdüğü: config_queue (params sözlüğünde)
Kodun aradığı: config_push_queue
Sonuç: Parametre göz ardı edilir ve varsayılan olarak persistent://tg/config/config olur.
Etkisi: AsyncProcessor'dan türeyen 32'den fazla hizmeti etkiler.
Engeller: Çoklu kiracılı dağıtımlar, kiracıya özel yapılandırma kuyruklarını kullanamaz.
Çözüm: CLI parametresinin adını --config-push-queue olarak değiştirerek netliği artırın (özellik şu anda bozuk olduğundan, bozucu değişiklik kabul edilebilir).
Sorun #2: Yapılandırma Hizmetindeki Parametre Adı Eşleşmezliği
CLI tanımları: --push-queue (belirsiz adlandırma)
Argparse'ın dönüştürdüğü: push_queue (params sözlüğünde)
Kodun aradığı: config_push_queue
Sonuç: Parametre göz ardı edilir.
Etkisi: Yapılandırma hizmeti, özel bir push kuyruğunu kullanamaz.
Çözüm: CLI parametresinin adını --config-push-queue olarak değiştirerek tutarlılığı ve netliği artırın (bozucu değişiklik kabul edilebilir).
Sorun #3: Sabit Kodlanmış Cassandra Anahtar Alanı
Mevcut durum: Anahtar alanı, çeşitli hizmetlerde "config", "knowledge", "librarian" olarak sabit kodlanmıştır.
Sonuç: Çoklu kiracılı dağıtımlar için anahtar alanı özelleştirilemez.
Etkisi: Yapılandırma, çekirdek ve kütüphaneci hizmetleri.
Engeller: Birden fazla kiracı, ayrı Cassandra anahtar alanlarını kullanamaz.
Sorun #4: Koleksiyon Yönetimi Mimarisi ✅ TAMAMLANDI
Önceki durum: Koleksiyonlar, ayrı koleksiyon tablosu aracılığıyla Cassandra kütüphaneci anahtar alanında depolanıyordu.
Önceki durum: Kütüphaneci, koleksiyon oluşturma/silme işlemini koordine etmek için 4 sabit kodlanmış depolama yönetimi konusunu kullanıyordu:
vector_storage_management_topic
object_storage_management_topic
triples_storage_management_topic
storage_management_response_topic
Sorunlar (Çözüldü):
Sabit kodlanmış konular, çoklu kiracılı dağıtımlar için özelleştirilemezdi.
Kütüphaneci ile 4+ depolama hizmeti arasında karmaşık asenkron koordinasyon.
Ayrı bir Cassandra tablosu ve yönetim altyapısı.
Kritik işlemler için kalıcı olmayan istek/yanıt kuyrukları.
Uygulanan Çözüm: Koleksiyonları yapılandırma hizmeti depolamasına taşıdık, dağıtım için yapılandırma push'u kullandık.
Durum: Tüm depolama arka uçları CollectionConfigHandler modeline taşınmıştır.
Çözüm
Bu özellik, Sorunlar #1, #2, #3 ve #4'ü ele alır.
1. Bölüm: Parametre Adı Eşleşmezliklerini Düzeltme
Değişiklik 1: AsyncProcessor Temel Sınıfı - CLI Parametresinin Adını Değiştirme
Dosya: trustgraph-base/trustgraph/base/async_processor.py
Satır: 260-264
Mevcut:
parser.add_argument(
'--config-queue',
default=default_config_queue,
help=f'Config push queue {default_config_queue}',
)
Sabit:
parser.add_argument(
'--config-push-queue',
default=default_config_queue,
help=f'Config push queue (default: {default_config_queue})',
)
Gerekçe:
Daha açık, daha kesin bir adlandırma
İç değişken adıyla eşleşiyor: config_push_queue
Özellik şu anda çalışmadığı için, bu bir değişikliktir ve kabul edilebilir.
params.get() içinde herhangi bir kod değişikliğine gerek yok; zaten doğru adı arıyor.
Değişiklik 2: Konfigürasyon Servisi - CLI Parametresinin Yeniden Adlandırılması
Dosya: trustgraph-flow/trustgraph/config/service/service.py
Satır: 276-279
Mevcut:
parser.add_argument(
'--push-queue',
default=default_config_push_queue,
help=f'Config push queue (default: {default_config_push_queue})'
)
Sabit:
parser.add_argument(
'--config-push-queue',
default=default_config_push_queue,
help=f'Config push queue (default: {default_config_push_queue})'
)
Gerekçe:
Daha anlaşılır bir adlandırma - "config-push-queue", sadece "push-queue"den daha açık.
İç değişken adıyla eşleşiyor: config_push_queue
AsyncProcessor'ın --config-push-queue parametresiyle tutarlı.
Özellik şu anda çalışmadığı için değişiklik kabul edilebilir.
params.get() içinde herhangi bir kod değişikliğine gerek yok - zaten doğru adı arıyor.
2. Bölüm: Cassandra Keyspace Parametrelendirmesi
3. Değişiklik: cassandra_config Modülüne Keyspace Parametresi Ekle
Dosya: trustgraph-base/trustgraph/base/cassandra_config.py
CLI argümanı ekle (add_cassandra_args() fonksiyonunda):
parser.add_argument(
'--cassandra-keyspace',
default=None,
help='Cassandra keyspace (default: service-specific)'
)
Ortam değişkeni desteği ekleyin (resolve_cassandra_config() fonksiyonunda):
keyspace = params.get(
"cassandra_keyspace",
os.environ.get("CASSANDRA_KEYSPACE")
)
resolve_cassandra_config()'nin dönüş değerini güncelleyin:
Şu anda döndürüyor: (hosts, username, password)
Aşağıdaki değeri döndürmesi için değiştirin: (hosts, username, password, keyspace)
Gerekçe:
Mevcut Cassandra yapılandırma kalıbıyla tutarlı
add_cassandra_args() aracılığıyla tüm hizmetlere erişilebilir
Hem CLI hem de ortam değişkeni yapılandırmasını destekler
Değişiklik 4: Yapılandırma Hizmeti - Parametreli Keyspace Kullanımı
Dosya: trustgraph-flow/trustgraph/config/service/service.py
30. Satır - Sabit kodlanmış keyspace'i kaldırın:
# DELETE THIS LINE:
keyspace = "config"
69-73 satırları - Cassandra yapılandırma çözümlemesi güncellendi:
Mevcut:
cassandra_host, cassandra_username, cassandra_password = \
resolve_cassandra_config(params)
Sabit:
cassandra_host, cassandra_username, cassandra_password, keyspace = \
resolve_cassandra_config(params, default_keyspace="config")
Gerekçe:
"config" varsayılan olarak kullanılarak geriye dönük uyumluluk sağlanır.
--cassandra-keyspace veya CASSANDRA_KEYSPACE ile geçersiz kılınabilir.
Değişiklik 5: Cores/Bilgi Hizmeti - Parametreleştirilmiş Anahtar Alanı Kullanımı
Dosya: trustgraph-flow/trustgraph/cores/service.py
Satır 37 - Sabit kodlanmış anahtar alanını kaldırın:
# DELETE THIS LINE:
keyspace = "knowledge"
Cassandra yapılandırma çözümlemesi güncellendi (yapılandırma hizmetiyle benzer konumda):
cassandra_host, cassandra_username, cassandra_password, keyspace = \
resolve_cassandra_config(params, default_keyspace="knowledge")
Değişiklik 6: Kütüphaneci Hizmeti - Parametreleştirilmiş Anahtar Alanı Kullanımı
Dosya: trustgraph-flow/trustgraph/librarian/service.py
Satır 51 - Sabit kodlanmış anahtar alanını kaldır:
# DELETE THIS LINE:
keyspace = "librarian"
Cassandra yapılandırma çözümlemesi güncellendi (yapılandırma hizmetiyle benzer konumda):
cassandra_host, cassandra_username, cassandra_password, keyspace = \
resolve_cassandra_config(params, default_keyspace="librarian")
3. Bölüm: Koleksiyon Yönetimini Config Servisine Taşıma
Genel Bakış
Koleksiyonları Cassandra librarian anahtar alanından config servisi depolama alanına taşıyın. Bu, sabit kodlanmış depolama yönetimi konularını ortadan kaldırır ve dağıtım için mevcut config push mekanizmasını kullanarak mimariyi basitleştirir.
Mevcut Mimari
API Request → Gateway → Librarian Service
↓
CollectionManager
↓
Cassandra Collections Table (librarian keyspace)
↓
Broadcast to 4 Storage Management Topics (hardcoded)
↓
Wait for 4+ Storage Service Responses
↓
Response to Gateway
Yeni Mimari
API Request → Gateway → Librarian Service
↓
CollectionManager
↓
Config Service API (put/delete/getvalues)
↓
Cassandra Config Table (class='collections', key='user:collection')
↓
Config Push (to all subscribers on config-push-queue)
↓
All Storage Services receive config update independently
Değişiklik 7: Koleksiyon Yöneticisi - Config Hizmeti API'sini Kullanın
Dosya: trustgraph-flow/trustgraph/librarian/collection_manager.py
Kaldırılacaklar:
LibraryTableStore kullanımı (33, 40-41 satırları)
Depolama yönetimi üreticilerinin başlatılması (86-140 satırları)
on_storage_response metodu (400-430 satırları)
pending_deletions takibi (57, 90-96 satırları ve tüm kullanım alanları)
Eklenecekler: API çağrıları için Config hizmeti istemcisi (istek/yanıt kalıbı)
Config İstemcisi Kurulumu:
# In __init__, add config request/response producers/consumers
from trustgraph.schema.services.config import ConfigRequest, ConfigResponse
# Producer for config requests
self.config_request_producer = Producer(
client=pulsar_client,
topic=config_request_queue,
schema=ConfigRequest,
)
# Consumer for config responses (with correlation ID)
self.config_response_consumer = Consumer(
taskgroup=taskgroup,
client=pulsar_client,
flow=None,
topic=config_response_queue,
subscriber=f"{id}-config",
schema=ConfigResponse,
handler=self.on_config_response,
)
# Tracking for pending config requests
self.pending_config_requests = {} # request_id -> asyncio.Event
list_collections'ı Değiştirin (145-180. satırlar):
async def list_collections(self, user, tag_filter=None, limit=None):
"""List collections from config service"""
# Send getvalues request to config service
request = ConfigRequest(
id=str(uuid.uuid4()),
operation='getvalues',
type='collections',
)
# Send request and wait for response
response = await self.send_config_request(request)
# Parse collections from response
collections = []
for key, value_json in response.values.items():
if ":" in key:
coll_user, collection = key.split(":", 1)
if coll_user == user:
metadata = json.loads(value_json)
collections.append(CollectionMetadata(**metadata))
# Apply tag filtering in-memory (as before)
if tag_filter:
collections = [c for c in collections if any(tag in c.tags for tag in tag_filter)]
# Apply limit
if limit:
collections = collections[:limit]
return collections
async def send_config_request(self, request):
"""Send config request and wait for response"""
event = asyncio.Event()
self.pending_config_requests[request.id] = event
await self.config_request_producer.send(request)
await event.wait()
return self.pending_config_requests.pop(request.id + "_response")
async def on_config_response(self, message, consumer, flow):
"""Handle config response"""
response = message.value()
if response.id in self.pending_config_requests:
self.pending_config_requests[response.id + "_response"] = response
self.pending_config_requests[response.id].set()
update_collection'yi değiştirin (182-312. satırlar):
async def update_collection(self, user, collection, name, description, tags):
"""Update collection via config service"""
# Create metadata
metadata = CollectionMetadata(
user=user,
collection=collection,
name=name,
description=description,
tags=tags,
)
# Send put request to config service
request = ConfigRequest(
id=str(uuid.uuid4()),
operation='put',
type='collections',
key=f'{user}:{collection}',
value=json.dumps(metadata.to_dict()),
)
response = await self.send_config_request(request)
if response.error:
raise RuntimeError(f"Config update failed: {response.error.message}")
# Config service will trigger config push automatically
# Storage services will receive update and create collections
delete_collection'ı Değiştirin (314-398. satırlar):
async def delete_collection(self, user, collection):
"""Delete collection via config service"""
# Send delete request to config service
request = ConfigRequest(
id=str(uuid.uuid4()),
operation='delete',
type='collections',
key=f'{user}:{collection}',
)
response = await self.send_config_request(request)
if response.error:
raise RuntimeError(f"Config delete failed: {response.error.message}")
# Config service will trigger config push automatically
# Storage services will receive update and delete collections
Koleksiyon Meta Veri Formatı:
config tablosunda şu şekilde saklanır: class='collections', key='user:collection'
Değer, zaman damgası alanları olmadan JSON olarak seri hale getirilmiş CollectionMetadata'dır.
Alanlar: user, collection, name, description, tags
Örnek: class='collections', key='alice:my-docs', value='{"user":"alice","collection":"my-docs","name":"My Documents","description":"...","tags":["work"]}'
8. Değişiklik: Kütüphane Hizmeti - Depolama Yönetimi Altyapısını Kaldır
Dosya: trustgraph-flow/trustgraph/librarian/service.py
Kaldır:
Depolama yönetimi üreticileri (173-190. satırlar):
vector_storage_management_producer
object_storage_management_producer
triples_storage_management_producer
Depolama yanıt tüketici (192-201. satırlar)
on_storage_response işleyici (467-473. satırlar)
Değiştir:
CollectionManager başlatma (215-224. satırlar) - depolama üretici parametrelerini kaldır
Not: Harici koleksiyon API'si değişmeden kalır:
list-collections
update-collection
delete-collection
9. Değişiklik: Koleksiyonlar Tablosunu LibraryTableStore'dan Kaldır
Dosya: trustgraph-flow/trustgraph/tables/library.py
Sil:
Koleksiyonlar tablosu CREATE ifadesi (114-127. satırlar)
Koleksiyonlar için hazırlanmış ifadeler (205-240. satırlar)
Tüm koleksiyon metotları (578-717. satırlar):
ensure_collection_exists
list_collections
update_collection
delete_collection
get_collection
create_collection
Gerekçe:
Koleksiyonlar artık config tablosunda saklanıyor
Uyumluluk bozan bir değişiklik kabul edilebilir - veri taşıma işlemine gerek yok
Kütüphane hizmetini önemli ölçüde basitleştirir
10. Değişiklik: Depolama Hizmetleri - Yapılandırmaya Dayalı Koleksiyon Yönetimi ✅ TAMAMLANDI
Durum: 11 depolama arka ucunun tamamı, CollectionConfigHandler'ı kullanmak üzere güncellendi.
Etkilenen Hizmetler (toplam 11): Belge gömülüleri: milvus, pinecone, qdrant Grafik gömülüleri: milvus, pinecone, qdrant Nesne depolama: cassandra Üçlü depolama: cassandra, falkordb, memgraph, neo4j
Dosyalar:
trustgraph-flow/trustgraph/storage/doc_embeddings/milvus/write.py
trustgraph-flow/trustgraph/storage/doc_embeddings/pinecone/write.py
trustgraph-flow/trustgraph/storage/doc_embeddings/qdrant/write.py
trustgraph-flow/trustgraph/storage/graph_embeddings/milvus/write.py
trustgraph-flow/trustgraph/storage/graph_embeddings/pinecone/write.py
trustgraph-flow/trustgraph/storage/graph_embeddings/qdrant/write.py
trustgraph-flow/trustgraph/storage/objects/cassandra/write.py
trustgraph-flow/trustgraph/storage/triples/cassandra/write.py
trustgraph-flow/trustgraph/storage/triples/falkordb/write.py
trustgraph-flow/trustgraph/storage/triples/memgraph/write.py
trustgraph-flow/trustgraph/storage/triples/neo4j/write.py
Uygulama Deseni (tüm hizmetler):
- Yapılandırma işleyiciyi
__init__içinde kaydedin:
# Add after AsyncProcessor initialization
self.register_config_handler(self.on_collection_config)
self.known_collections = set() # Track (user, collection) tuples
- Yapılandırma yöneticisini uygulayın:
async def on_collection_config(self, config, version):
"""Handle collection configuration updates"""
logger.info(f"Collection config version: {version}")
if "collections" not in config:
return
# Parse collections from config
# Key format: "user:collection" in config["collections"]
config_collections = set()
for key in config["collections"].keys():
if ":" in key:
user, collection = key.split(":", 1)
config_collections.add((user, collection))
# Determine changes
to_create = config_collections - self.known_collections
to_delete = self.known_collections - config_collections
# Create new collections (idempotent)
for user, collection in to_create:
try:
await self.create_collection_internal(user, collection)
self.known_collections.add((user, collection))
logger.info(f"Created collection: {user}/{collection}")
except Exception as e:
logger.error(f"Failed to create {user}/{collection}: {e}")
# Delete removed collections (idempotent)
for user, collection in to_delete:
try:
await self.delete_collection_internal(user, collection)
self.known_collections.discard((user, collection))
logger.info(f"Deleted collection: {user}/{collection}")
except Exception as e:
logger.error(f"Failed to delete {user}/{collection}: {e}")
- Başlangıçta bilinen koleksiyonları başlatın:
async def start(self):
"""Start the processor"""
await super().start()
await self.sync_known_collections()
async def sync_known_collections(self):
"""Query backend to populate known_collections set"""
# Backend-specific implementation:
# - Milvus/Pinecone/Qdrant: List collections/indexes matching naming pattern
# - Cassandra: Query keyspaces or collection metadata
# - Neo4j/Memgraph/FalkorDB: Query CollectionMetadata nodes
pass
- Mevcut işleyici metotları yeniden düzenleyin:
# Rename and remove response sending:
# handle_create_collection → create_collection_internal
# handle_delete_collection → delete_collection_internal
async def create_collection_internal(self, user, collection):
"""Create collection (idempotent)"""
# Same logic as current handle_create_collection
# But remove response producer calls
# Handle "already exists" gracefully
pass
async def delete_collection_internal(self, user, collection):
"""Delete collection (idempotent)"""
# Same logic as current handle_delete_collection
# But remove response producer calls
# Handle "not found" gracefully
pass
- Depolama yönetimi altyapısını kaldırın:
self.storage_request_consumerkurulumunu ve başlatmayı kaldırınself.storage_response_producerkurulumunu kaldırınon_storage_managementdağıtıcı yöntemini kaldırın Depolama yönetimi için metrikleri kaldırın Aşağıdaki import'ları kaldırın:StorageManagementRequest,StorageManagementResponse
Arka Uç Özel Hususlar:
Vektör depoları (Milvus, Pinecone, Qdrant): known_collections içinde mantıksal (user, collection)'ı takip edin, ancak her boyut için birden fazla arka uç koleksiyonu oluşturabilir. Tembel oluşturma modeline devam edin. Silme işlemleri, tüm boyut varyantlarını kaldırmalıdır.
Cassandra Nesneleri: Koleksiyonlar, yapılar değil, satır özellikleridir. Veritabanı seviyesindeki bilgileri takip edin.
Grafik depoları (Neo4j, Memgraph, FalkorDB): Başlangıçta CollectionMetadata düğümlerini sorgulayın. Senkronizasyon sırasında meta veri düğümlerini oluşturun/silin.
Cassandra Üçlüleri: Koleksiyon işlemleri için KnowledgeGraph API'sini kullanın.
Temel Tasarım Noktaları:
Son tutarlılık: İstek/yanıt mekanizması yoktur, yapılandırma itmesi yayınlanır
Tekrarlanabilirlik: Tüm oluşturma/silme işlemleri, yeniden denenmek üzere güvenli olmalıdır
Hata işleme: Hataları günlüğe kaydedin, ancak yapılandırma güncellemelerini engellemeyin
Kendini iyileştirme: Başarısız işlemler, bir sonraki yapılandırma itmesinde yeniden denenecektir
Koleksiyon anahtar biçimi: config["collections"] içinde "user:collection"
Değişiklik 11: Koleksiyon Şemasını Güncelle - Zaman Damgalarını Kaldır
Dosya: trustgraph-base/trustgraph/schema/services/collection.py
CollectionMetadata'ı değiştirin (Satırlar 13-21):
Aşağıdaki alanları kaldırın: created_at ve updated_at:
class CollectionMetadata(Record):
user = String()
collection = String()
name = String()
description = String()
tags = Array(String())
# Remove: created_at = String()
# Remove: updated_at = String()
CollectionManagementRequest'i Değiştir (25-47. satırlar): Zaman damgası alanlarını kaldır:
class CollectionManagementRequest(Record):
operation = String()
user = String()
collection = String()
timestamp = String()
name = String()
description = String()
tags = Array(String())
# Remove: created_at = String()
# Remove: updated_at = String()
tag_filter = Array(String())
limit = Integer()
Gerekçe: Zaman damgaları, koleksiyonlar için değer katmaz. Yapılandırma hizmeti, kendi sürüm takibini yapar. Şemayı basitleştirir ve depolama alanını azaltır.
Yapılandırma Hizmeti Geçişinin Faydaları
- ✅ Sabit kodlanmış depolama yönetimi konularını ortadan kaldırır - Çok kiracılı sorunu çözer.
- ✅ Daha basit koordinasyon - 4 veya daha fazla depolama yanıtı için karmaşık asenkron beklemeler olmaz.
- ✅ Sonunda tutarlılık - Depolama hizmetleri, yapılandırma itme yoluyla bağımsız olarak güncellenir.
- ✅ Daha iyi güvenilirlik - Kalıcı yapılandırma itme, kalıcı olmayan istek/yanıt yerine.
- ✅ Birleşik yapılandırma modeli - Koleksiyonlar, yapılandırma olarak ele alınır.
- ✅ Karmaşıklığı azaltır - Yaklaşık 300 satır koordinasyon kodunu kaldırır.
- ✅ Çok kiracılı için hazır - Yapılandırma, anahtar alanı aracılığıyla zaten kiracı izolasyonunu destekler.
- ✅ Sürüm takibi - Yapılandırma hizmeti sürüm mekanizması, denetim izi sağlar.
Uygulama Notları
Geriye Dönük Uyumluluk
Parametre Değişiklikleri:
CLI parametrelerinin yeniden adlandırılması, bozucu değişikliklerdir ancak kabul edilebilir (özellik şu anda çalışmıyor).
Hizmetler parametreler olmadan çalışır (varsayılanları kullanır).
Varsayılan anahtar alanları korunur: "config", "knowledge", "librarian".
Varsayılan kuyruk: persistent://tg/config/config
Koleksiyon Yönetimi: Bozucu değişiklik: Koleksiyon tablosu, "librarian" anahtar alanından kaldırılmıştır. Veri geçişi sağlanmamıştır - bu aşama için kabul edilebilir. Harici koleksiyon API'si değişmemiştir (listeleme/güncelleme/silme işlemleri). Koleksiyon meta veri biçimi basitleştirilmiştir (zaman damgaları kaldırılmıştır).
Test Gereksinimleri
Parametre Testi:
--config-push-queueparametresinin "graph-embeddings" hizmetinde çalıştığını doğrulayın.--config-push-queueparametresinin "text-completion" hizmetinde çalıştığını doğrulayın.--config-push-queueparametresinin yapılandırma hizmetinde çalıştığını doğrulayın.--cassandra-keyspaceparametresinin yapılandırma hizmeti için çalıştığını doğrulayın.--cassandra-keyspaceparametresinin "cores" hizmeti için çalıştığını doğrulayın.--cassandra-keyspaceparametresinin "librarian" hizmeti için çalıştığını doğrulayın.- Hizmetlerin parametreler olmadan çalıştığını (varsayılanları kullandığını) doğrulayın.
- Özel kuyruk adları ve anahtar alanı ile çok kiracılı dağıtımı doğrulayın.
Koleksiyon Yönetimi Testi:
9. list-collections işlemini yapılandırma hizmeti aracılığıyla doğrulayın.
10. update-collection'ın yapılandırma tablosunda oluşturulduğunu/güncellendiğini doğrulayın.
11. delete-collection'ın yapılandırma tablosundan kaldırıldığını doğrulayın.
12. Koleksiyon güncellemelerinde yapılandırma itmesinin tetiklendiğini doğrulayın.
13. Etiket filtrelemenin yapılandırma tabanlı depolama ile çalıştığını doğrulayın.
14. Koleksiyon işlemlerinin zaman damgası alanları olmadan çalıştığını doğrulayın.
Çok Kiracılı Dağıtım Örneği
# Tenant: tg-dev
graph-embeddings \
-p pulsar+ssl://broker:6651 \
--pulsar-api-key <KEY> \
--config-push-queue persistent://tg-dev/config/config
config-service \
-p pulsar+ssl://broker:6651 \
--pulsar-api-key <KEY> \
--config-push-queue persistent://tg-dev/config/config \
--cassandra-keyspace tg_dev_config
Etki Analizi
1-2 Değişikliklerinden Etkilenen Hizmetler (CLI Parametre Adı Değişikliği)
AsyncProcessor veya FlowProcessor'dan türeyen tüm hizmetler: config-service cores-service librarian-service graph-embeddings document-embeddings text-completion-* (tüm sağlayıcılar) extract-* (tüm çıkarıcılar) query-* (tüm sorgu hizmetleri) retrieval-* (tüm RAG hizmetleri) storage-* (tüm depolama hizmetleri) Ve 20'den fazla hizmet daha
3-6 Değişikliklerinden Etkilenen Hizmetler (Cassandra Keyspace)
config-service cores-service librarian-service
7-11 Değişikliklerinden Etkilenen Hizmetler (Koleksiyon Yönetimi)
Hızlı Uygulanacak Değişiklikler: librarian-service (collection_manager.py, service.py) tables/library.py (collections tablosunun kaldırılması) schema/services/collection.py (zaman damgası kaldırma)
Tamamlanan Değişiklikler (Değişiklik 10): ✅
Tüm depolama hizmetleri (toplam 11) - CollectionConfigHandler üzerinden koleksiyon güncellemeleri için yapılandırma itme işlemine geçirildi
Depolama yönetimi şeması storage.py'dan kaldırıldı
Gelecek Hususlar
Kullanıcı Başına Keyspace Modeli
Bazı hizmetler, her kullanıcının kendi Cassandra keyspace'ine sahip olduğu kullanıcı başına keyspace'leri dinamik olarak kullanır:
Kullanıcı başına keyspace kullanan hizmetler:
- Triples Sorgu Hizmeti (
trustgraph-flow/trustgraph/query/triples/cassandra/service.py:65)keyspace=query.userkullanır - Objects Sorgu Hizmeti (
trustgraph-flow/trustgraph/query/objects/cassandra/service.py:479)keyspace=self.sanitize_name(user)kullanır - KnowledgeGraph Doğrudan Erişim (
trustgraph-flow/trustgraph/direct/cassandra_kg.py:18) Varsayılan parametrekeyspace="trustgraph"
Durum: Bu, bu belirtimde değiştirilmemiştir.
Gelecekte İnceleme Gerekli:
Kullanıcı başına keyspace modelinin kiracı izolasyonu sorunlarına neden olup olmadığını değerlendirin
Çok kiracılı dağıtımların keyspace önek kalıplarına (örneğin, tenant_a_user1) ihtiyaç duyup duymadığını düşünün
Kiracılar arasında potansiyel kullanıcı kimliği çakışmalarını gözden geçirin
Tek, paylaşılan keyspace'in, kullanıcı tabanlı satır izolasyonu ile birlikte daha mı tercih edilebilir olduğunu değerlendirin
Not: Bu, mevcut çok kiracılı uygulamayı engellemez, ancak üretim çok kiracılı dağıtımlardan önce incelenmelidir.
Uygulama Aşamaları
Aşama 1: Parametre Düzeltmeleri (Değişiklikler 1-6)
--config-push-queue parametre adlandırmasını düzeltin
--cassandra-keyspace parametre desteğini ekleyin
Sonuç: Çok kiracılı kuyruk ve keyspace yapılandırması etkinleştirildi
Aşama 2: Koleksiyon Yönetimi Geçişi (Değişiklikler 7-9, 11)
Koleksiyon depolamasını yapılandırma hizmetine geçirin librarian'dan koleksiyon tablosunu kaldırın Koleksiyon şemasını güncelleyin (zaman damgalarını kaldırın) Sonuç: Sabit kodlu depolama yönetimi konuları ortadan kaldırılır, librarian basitleştirilir
Aşama 3: Depolama Hizmeti Güncellemeleri (Değişiklik 10) ✅ TAMAMLANDI
Tüm depolama hizmetlerini koleksiyonlar için yapılandırma itme işlemine almak için güncelleyin CollectionConfigHandler
Depolama yönetimi istek/yanıt altyapısını kaldırın
Eski şema tanımlarını kaldırın
Sonuç: Tamamen yapılandırmaya dayalı koleksiyon yönetimi elde edildi
Referanslar
GitHub Sorunu: https://github.com/trustgraph-ai/trustgraph/issues/582
İlgili Dosyalar:
trustgraph-base/trustgraph/base/async_processor.py
trustgraph-base/trustgraph/base/cassandra_config.py
trustgraph-base/trustgraph/schema/core/topic.py
trustgraph-base/trustgraph/schema/services/collection.py
trustgraph-flow/trustgraph/config/service/service.py
trustgraph-flow/trustgraph/cores/service.py
trustgraph-flow/trustgraph/librarian/service.py
trustgraph-flow/trustgraph/librarian/collection_manager.py
trustgraph-flow/trustgraph/tables/library.py