trustgraph/docs/tech-specs/multi-tenant-support.sw.md
Alex Jenkins 8954fa3ad7 Feat: TrustGraph i18n & Documentation Translation Updates (#781)
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.
2026-04-14 12:08:32 +01:00

30 KiB

layout title parent
default Maelezo ya Kiufundi: Usaidizi wa Matumizi Mbalimbali (Multi-Tenant) Swahili (Beta)

Maelezo ya Kiufundi: Usaidizi wa Matumizi Mbalimbali (Multi-Tenant)

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.

Muhtasari

Wezesha matumizi mbalimbali kwa kurekebisha kutofautiana kwa majina ya vigezo ambavyo huuzuia utengenezaji wa folyo (queue) na kwa kuongeza utaratibu wa kuweka vigezo kwa Cassandra.

Mfumo wa Uendeshaji

Utatuzi wa Folyo Kulingana na Mchakato

Mfumo wa TrustGraph hutumia mfumo wa usanifu unaozingatia mchakato (flow-based architecture) kwa utatuzi wa folyo, ambao kwa asili unao na uwezo wa kuunga mkono matumizi mbalimbali:

Maelezo ya Mchakato (Flow Definitions) huhifadhiwa katika Cassandra na yanaeleza majina ya folyo kupitia maelezo ya kiungo (interface). Majina ya folyo hutumia vipengele (templates) na vigezo vya {id} ambavyo hubadilishwa na kitambulisho cha mfano wa mchakato. Huduma zinatatua folyo kwa njia ya moja kwa moja kwa kutafuta mipangilio ya mchakato wakati wa ombi. Kila mtumiaji anaweza kuwa na mchakato wake wa kipekee na majina tofauti ya folyo, ambayo hutoa upekee.

Kielelezo cha maelezo ya kiungo ya mchakato:

{
  "interfaces": {
    "triples-store": "persistent://tg/flow/triples-store:{id}",
    "graph-embeddings-store": "persistent://tg/flow/graph-embeddings-store:{id}"
  }
}

Wakati mwendeshaji A anaanza mtiririko tenant-a-prod na mwendeshaji B anaanza mtiririko tenant-b-prod, wanapata moja kwa moja folyo zisizo na muunganisho: persistent://tg/flow/triples-store:tenant-a-prod persistent://tg/flow/triples-store:tenant-b-prod

Huduma zilizoundwa vizuri kwa utumiaji wa wateja wengi: Usimamizi wa Maarifa (msingi) - Inatatua moja kwa moja folyo kutoka usanidi wa mtiririko uliopitishwa katika ombi.

Huduma zinazohitaji marekebisho: 🔴 Huduma ya Usanidi - Utangamano wa jina la parameter unazuia utengenezaji wa folyo 🔴 Huduma ya Maktaba - Mada ya uhifadhi iliyopangwa (iliyozungumzwa hapa chini) 🔴 Huduma Zote - Haiwezi kubadilisha nafasi ya Cassandra

Taarifa ya Tatizo

Tatizo #1: Utangamano wa Jina la Parameter katika AsyncProcessor

CLI inafafanua: --config-queue (jina lisilo wazi) Argparse inabadilisha kuwa: config_queue (katika kamusi ya params) Msimu unatafuta: config_push_queue Matokeo: Parameter inakwama, inarudisha persistent://tg/config/config Athari: Huathiri huduma zote 32+ zinazorithi kutoka kwa AsyncProcessor Inazuia: Uwekaji wa wateja wengi hauna uwezo wa kutumia folyo maalum za mteja Suluhisho: Badilisha parameter ya CLI kuwa --config-push-queue kwa uwazi (mabadiliko ya kuvunja yanakubalika kwani kipengele hicho kwa sasa kimevunjika)

Tatizo #2: Utangamano wa Jina la Parameter katika Huduma ya Usanidi

CLI inafafanua: --push-queue (jina lisilo wazi) Argparse inabadilisha kuwa: push_queue (katika kamusi ya params) Msimu unatafuta: config_push_queue Matokeo: Parameter inakwama Athari: Huduma ya usanidi haiwezi kutumia folyo ya kushinikiza maalum Suluhisho: Badilisha parameter ya CLI kuwa --config-push-queue kwa utangamano na uwazi (mabadiliko ya kuvunja yanakubalika)

Tatizo #3: Nafasi ya Cassandra Iliyopangwa

Sasa: Nafasi ya Cassandra imepangwa kama "config", "knowledge", "librarian" katika huduma mbalimbali Matokeo: Haiwezi kubadilisha nafasi ya utumiaji wa wateja wengi Athari: Huduma za usanidi, msingi, na maktaba Inazuia: Wateja wengi hawawezi kutumia nafasi tofauti za Cassandra

Tatizo #4: Usanidi wa Usimamizi wa Mkusanyiko IMEKAMILIKA

Hapo awali: Mkusanyiko ulihifadhiwa katika nafasi ya maktaba ya Cassandra kupitia meza tofauti ya mkusanyiko Hapo awali: Maktaba ilitumia mada 4 zilizopangwa za usimamizi wa uhifadhi ili kuratibu uundaji/ufutaji wa mkusanyiko: vector_storage_management_topic object_storage_management_topic triples_storage_management_topic storage_management_response_topic Matatizo (Yaliyoshughulikiwa): Mada iliyopangwa haikuweza kubadilishwa kwa utumiaji wa wateja wengi Uratibu wa async tata kati ya maktaba na huduma 4+ za uhifadhi Meza tofauti ya Cassandra na miundombinu ya usimamizi Folyo za ombi/jibu zisizo na uhai kwa operesheni muhimu Suluhisho Liliofanywa: Kuhamishia mkusanyiko kwenye uhifadhi wa huduma ya usanidi, tumia kushinikiza usanidi kwa usambazaji Hali: Uhifadhi wote wa nyuma umehamishwa kwenye mtindo wa CollectionConfigHandler

Suluhisho

Hii inahusu Matatizo #1, #2, #3, na #4.

Sehemu ya 1: Marekebisho ya Utangamano wa Jina la Parameter

Mabadiliko ya 1: Darasa la Msingi la AsyncProcessor - Badilisha Jina la Parameter ya CLI

Faili: trustgraph-base/trustgraph/base/async_processor.py Laini: 260-264

Sasa:

parser.add_argument(
    '--config-queue',
    default=default_config_queue,
    help=f'Config push queue {default_config_queue}',
)

Imara:

parser.add_argument(
    '--config-push-queue',
    default=default_config_queue,
    help=f'Config push queue (default: {default_config_queue})',
)

Sababu: Majina wazi na ya dhahiri zaidi Inafanana na jina la ndani la config_push_queue Mabadiliko yanayoweza kusababisha migogoro yanafaa kwani kipengele hivi sasa hakifanyi kazi Hakuna mabadiliko ya msimbo yanayohitajika katika params.get() - tayari inatafuta jina sahihi

Mabadiliko ya 2: Huduma ya Usanidi - Badilisha Jina la Paramu ya CLI

Faili: trustgraph-flow/trustgraph/config/service/service.py Laini: 276-279

Sasa:

parser.add_argument(
    '--push-queue',
    default=default_config_push_queue,
    help=f'Config push queue (default: {default_config_push_queue})'
)

Imara:

parser.add_argument(
    '--config-push-queue',
    default=default_config_push_queue,
    help=f'Config push queue (default: {default_config_push_queue})'
)

Sababu: Majina wazi zaidi - "config-push-queue" yanaeleza zaidi kuliko "push-queue" tu. Inalingana na jina la ndani config_push_queue. Inafanana na parameter ya --config-push-queue ya AsyncProcessor. Mabadiliko yanayoweza kusababisha migogoro yanafaa kwani kipengele hicho kwa sasa hakifanyi kazi. Hakuna mabadiliko ya msimbo yanayohitajika katika params.get() - tayari inatafuta jina sahihi.

Sehemu ya 2: Ongeza Uwekaji wa Vigezo vya Keyspace ya Cassandra

Mabadiliko ya 3: Ongeza Parameter ya Keyspace kwenye Moduli ya cassandra_config

Faili: trustgraph-base/trustgraph/base/cassandra_config.py

Ongeza hoja ya CLI (katika kazi ya add_cassandra_args()):

parser.add_argument(
    '--cassandra-keyspace',
    default=None,
    help='Cassandra keyspace (default: service-specific)'
)

Ongeza utumiaji wa vigezo vya mazingira (katika kitendwa resolve_cassandra_config()):

keyspace = params.get(
    "cassandra_keyspace",
    os.environ.get("CASSANDRA_KEYSPACE")
)

Sasisha thamani ya kurudiwa ya resolve_cassandra_config(): Hivi sasa inarudisha: (hosts, username, password) Badilisha ili irudishe: (hosts, username, password, keyspace)

Sababu: Inafanana na mtindo uliopo wa usanidi wa Cassandra Inapatikana kwa huduma zote kupitia add_cassandra_args() Inasaidia usanidi wa CLI na wa vigezo vya mazingira

Mabadiliko ya 4: Huduma ya Usanidi - Tumia Vipengele Vilivyobadilishwa

Faili: trustgraph-flow/trustgraph/config/service/service.py

Laini ya 30 - Ondoa jina la keyspace lililokodishwa:

# DELETE THIS LINE:
keyspace = "config"

Mishale 69-73 - Sasisha utatuzi wa usanidi wa Cassandra:

Sasa:

cassandra_host, cassandra_username, cassandra_password = \
    resolve_cassandra_config(params)

Imara:

cassandra_host, cassandra_username, cassandra_password, keyspace = \
    resolve_cassandra_config(params, default_keyspace="config")

Sababu: Inahifadhi utangamano na "config" kama chaguo-msingi. Inaruhusu kubadilishwa kupitia --cassandra-keyspace au CASSANDRA_KEYSPACE.

Mabadiliko ya 5: Huduma za Msingi/Huduma ya Maarifa - Tumia Vipengele vya Kubadilika vya Nafasi ya Kuhifadhia

Faili: trustgraph-flow/trustgraph/cores/service.py

Laini ya 37 - Ondoa jina la nafasi ya kuhifadhia lililopangwa:

# DELETE THIS LINE:
keyspace = "knowledge"

Sasisha utatuzi wa usanidi wa Cassandra (katika eneo sawa kama huduma ya usanidi):

cassandra_host, cassandra_username, cassandra_password, keyspace = \
    resolve_cassandra_config(params, default_keyspace="knowledge")

Mabadiliko ya 6: Huduma ya Maktaba - Tumia Vipengele Vilivyobadilika

Faili: trustgraph-flow/trustgraph/librarian/service.py

Laini ya 51 - Ondoa jina la eneo la kuhifadhi data lililopangwa:

# DELETE THIS LINE:
keyspace = "librarian"

Sasisha utatuzi wa usanidi wa Cassandra (katika eneo sawa na huduma ya usanidi):

cassandra_host, cassandra_username, cassandra_password, keyspace = \
    resolve_cassandra_config(params, default_keyspace="librarian")

Sehemu ya 3: Hamisha Usimamizi wa Mkusanyiko hadi Huduma ya Usanidi

Muhtasari

Hamisha mkusanyiko kutoka kwa nafasi ya kuhifadhi "Cassandra librarian" hadi uhifadhi wa huduma ya usanidi. Hii huondoa mada za usimamizi wa uhifadhi zilizopangwa mapema na hurahisisha usanifu kwa kutumia mfumo uliopo wa usambazaji wa usanidi.

Usanifu wa Sasa

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

Usanifu Mpya

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

Mabadiliko ya 7: Msimamizi wa Mkusanyiko - Tumia API ya Huduma ya Usanidi

Faili: trustgraph-flow/trustgraph/librarian/collection_manager.py

Ondoa: Matumizi ya LibraryTableStore (Mistari 33, 40-41) Uanzishaji wa watengenezaji wa usimamizi wa hifadhi (Mistari 86-140) Njia ya on_storage_response (Mistari 400-430) Ufuatiliaji wa pending_deletions (Mistari 57, 90-96, na matumizi katika maeneo mengine)

Ongeza: Mteja wa huduma ya usanidi kwa simu za API (mfumo wa ombi/jibu)

Uwekaji wa Mteja wa Usanidi:

# 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

Badilisha list_collections (Mistari 145-180):

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()

Badilisha update_collection (Mistari 182-312):

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

Badilisha delete_collection (Mistari 314-398):

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

Muundo wa Meta Data ya Mkusanyiko: Hifadhiwa katika jedwali la usanidi kama: class='collections', key='user:collection' Thamani ni CollectionMetadata iliyopigwa muundo wa JSON (bila mashamba ya wakati) Mashamba: user, collection, name, description, tags Mfano: class='collections', key='alice:my-docs', value='{"user":"alice","collection":"my-docs","name":"My Documents","description":"...","tags":["work"]}'

Mabadiliko ya 8: Huduma ya Maktaba - Ondoa Miundombinu ya Usimamizi wa Uhifadhi

Faili: trustgraph-flow/trustgraph/librarian/service.py

Ondoa: Wafalme wa usimamizi wa uhifadhi (Mistari 173-190): vector_storage_management_producer object_storage_management_producer triples_storage_management_producer Mfumo wa matumizi ya majibu ya uhifadhi (Mistari 192-201) Msimamizi on_storage_response (Mistari 467-473)

Badilisha: Uanzishaji wa CollectionManager (Mistari 215-224) - ondoa vigezo vya mtayarishaji wa uhifadhi

Kumbuka: API ya nje ya mkusanyiko inabaki bila kubadilika: list-collections update-collection delete-collection

Mabadiliko ya 9: Ondoa Jedwali la Mkusanyiko kutoka LibraryTableStore

Faili: trustgraph-flow/trustgraph/tables/library.py

Futa: Kauli ya kuunda jedwali la Mkusanyiko (Mistari 114-127) Maneno yaliyotayarishwa ya Mkusanyiko (Mistari 205-240) Mbinu zote za mkusanyiko (Mistari 578-717): ensure_collection_exists list_collections update_collection delete_collection get_collection create_collection

Mazingatio: Mkusanyiko sasa huhifadhiwa kwenye meza ya usanidi. Mabadiliko yanayoweza kusababisha migogoro yanayokubalika - hakuna uhamisho wa data unaohitajika. Inarahisisha huduma ya "librarian" kwa kiasi kikubwa.

Mabadiliko ya 10: Huduma za Uhifadhi - Usimamizi wa Mkusanyiko Kulingana na Usanidi IMEKAMILIKA

Hali: Vifaa vyote 11 vya uhifadhi vimehamishwa ili kutumia CollectionConfigHandler.

Huduma Zinazoathirika (jumla ya 11): Uingizaji wa hati: milvus, pinecone, qdrant Uingizaji wa grafu: milvus, pinecone, qdrant Uhifadhi wa vitu: cassandra Uhifadhi wa "triples": cassandra, falkordb, memgraph, neo4j

Faili: 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

Mfumo wa Utendaji (huduma zote):

  1. Jisajili "config handler" katika __init__:
# Add after AsyncProcessor initialization
self.register_config_handler(self.on_collection_config)
self.known_collections = set()  # Track (user, collection) tuples
  1. Teleza kidhibiti cha usanidi:
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}")
  1. Anzisha kukusanya data inayojulikana wakati wa kuanza:
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
  1. Kuboresha mbinu zilizopo za utendaji:
# 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
  1. Ondoa miundomino ya usimamizi wa hifadhi: Ondoa usanidi na uanzishaji wa self.storage_request_consumer Ondoa usanidi wa self.storage_response_producer Ondoa njia ya utaratibu wa on_storage_management Ondoa vipimo (metrics) vya usimamizi wa hifadhi Ondoa uingizaji (imports): StorageManagementRequest, StorageManagementResponse

Mazingatio Maalum ya Seva ya Nyuma (Backend):

Vihifadhi vya data (Vector stores) (Milvus, Pinecone, Qdrant): Fuatilia (user, collection) ya kimantiki katika known_collections, lakini inaweza kuunda mkusanyiko mwingi wa seva ya nyuma kwa kila kipimo. Endeleza mtindo wa uundaji wa polepole. Operesheni za kufuta lazima iondoe matoleo yote ya kipimo.

Cassandra Objects: Mikusanyiko ni sifa za mstari, sio muundo. Fuatilia taarifa za kiwango cha keyspace.

Vihifadhi vya grafu (Graph stores) (Neo4j, Memgraph, FalkorDB): Tafuta nodi za CollectionMetadata wakati wa kuanza. Unda/futa nodi za metadata wakati wa kusawazisha.

Cassandra Triples: Tumia API ya KnowledgeGraph kwa operesheni za mkusanyiko.

Mambo Muhimu ya Ubunifu:

Ulinganifu wa muda (Eventual consistency): Hakuna utaratibu wa ombi/jibu, utaratibu wa kusukuma usanidi hutangazwa Ulinganifu (Idempotency): Operesheni zote za kuunda/kufuta lazima ziwe salama kufanywa tena Usimamizi wa makosa (Error handling): Leta makosa lakini usizuie sasisho za usanidi Kujirejesha (Self-healing): Operesheni ambazo zimefeli zitajaribu tena wakati wa sasisho la usanidi lijayo Muundo wa ufunguo wa mkusanyiko (Collection key format): "user:collection" katika config["collections"]

Mabadiliko ya 11: Sasisha Mpango wa Mkusaniko - Ondoa Alama za Muda (Timestamps)

Faili: trustgraph-base/trustgraph/schema/services/collection.py

Badilisha CollectionMetadata (Mistari 13-21): Ondoa sehemu za created_at na updated_at:

class CollectionMetadata(Record):
    user = String()
    collection = String()
    name = String()
    description = String()
    tags = Array(String())
    # Remove: created_at = String()
    # Remove: updated_at = String()

Badilisha CollectionManagementRequest (Mistari 25-47): Ondoa sehemu za wakati:

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()

Sababu: Wakati (Timestamps) havi faida kwa makusanyo. Huduma ya usanidi (config) inadhibiti ufuatiliaji wake wa toleo. Inarahisisha muundo na kupunguza uhifadhi.

Faida za Uhamishaji wa Huduma ya Usanidi

  1. Inaondoa masuala ya usimamizi wa uhifadhi yaliyopangwa awali - Inatatua kizuizi cha wateja wengi.
  2. Uratibu rahisi zaidi - Hakuna utaratibu ngumu wa kusubiri majibu kutoka kwa huduma 4+ za uhifadhi.
  3. Ulinganifu wa muda - Huduma za uhifadhi husasishwa kwa kujitegemea kupitia utaratibu wa usanidi.
  4. Uaminifu bora zaidi - Uratibu wa kudumu wa usanidi dhidi ya ombi/jibu lisilo la kudumu.
  5. Mfumo wa usanidi uliounganishwa - Makusanyo yanatibiwa kama usanidi.
  6. Inapunguza utata - Inondoa mistari ~300 ya nambari ya uratibu.
  7. Inafaa kwa wateja wengi - Usanidi tayari una msaada wa kutenganisha wateja kupitia nafasi.
  8. Ufuatiliaji wa toleo - Mfumo wa toleo wa huduma ya usanidi hutoa kumbukumbu ya uhakiki.

Maelezo ya Utendaji

Utangamano wa Nyuma

Mabadiliko ya Vigezo: Mabadiliko ya majina ya vigezo vya CLI ni mabadiliko ambayo yanaweza kusababisha matatizo lakini yanapokelewa (kipengele hapo kwa sasa hakifanyi kazi). Huduma zinafanya kazi bila vigezo (tumia chaguo-msingi). Nafasi chaguo-msingi zimehifadhiwa: "config", "knowledge", "librarian". Kichefuchefu chaguo-msingi: persistent://tg/config/config

Usimamizi wa Makusanyo: Mabadiliko ambayo yanaweza kusababisha matatizo: Jedwali la makusanyo limeondolewa kutoka kwa nafasi ya "librarian". Hakuna uhamishaji wa data unaotolewa - inakubalika kwa hatua hii. API ya makusanyo ya nje haijabadilika (operesheni za kuorodhesha/kusasisha/kufuta). Muundo wa metadata ya makusanyo umeboreshwa (wakati umeondolewa).

Mahitaji ya Majaribio

Majaribio ya Vigezo:

  1. Thibitisha kwamba kiparamu --config-push-queue hufanya kazi kwenye huduma ya "graph-embeddings".
  2. Thibitisha kwamba kiparamu --config-push-queue hufanya kazi kwenye huduma ya "text-completion".
  3. Thibitisha kwamba kiparamu --config-push-queue hufanya kazi kwenye huduma ya usanidi.
  4. Thibitisha kwamba kiparamu --cassandra-keyspace hufanya kazi kwa huduma ya usanidi.
  5. Thibitisha kwamba kiparamu --cassandra-keyspace hufanya kazi kwa huduma ya "cores".
  6. Thibitisha kwamba kiparamu --cassandra-keyspace hufanya kazi kwa huduma ya "librarian".
  7. Thibitisha kwamba huduma zinafanya kazi bila vigezo (zinatumia chaguo-msingi).
  8. Thibitisha uwekaji wa wateja wengi na majina ya kichefuchefu na nafasi maalum.

Majaribio ya Usimamizi wa Makusanyo: 9. Thibitisha operesheni list-collections kupitia huduma ya usanidi. 10. Thibitisha kwamba update-collection huunda/kusasisha kwenye jedwali la usanidi. 11. Thibitisha kwamba delete-collection huondoa kutoka kwenye jedwali la usanidi. 12. Thibitisha kwamba utaratibu wa "config push" huwashwa wakati wa sasisho za makusanyo. 13. Thibitisha kwamba utaratibu wa kuchujwa wa lebo hufanya kazi na uhifadhi unaotegemea usanidi. 14. Thibitisha kwamba operesheni za makusanyo hufanya kazi bila sehemu za wakati.

Mfano wa Uwekaji wa Wateja Wengi

# 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

Uchambuzi wa Athari

Huduma Zinazoathiriwa na Mabadiliko 1-2 (Kubadilisha Jina la Paramu ya CLI)

Huduma zote zinazorithi kutoka kwa AsyncProcessor au FlowProcessor: config-service cores-service librarian-service graph-embeddings document-embeddings text-completion-* (wote watoa huduma) extract-* (wote waangamizi) query-* (huduma zote za kuulizia) retrieval-* (huduma zote za RAG) storage-* (huduma zote za kuhifadhi) Na huduma zingine 20+

Huduma Zinazoathiriwa na Mabadiliko 3-6 (Nafasi ya Cassandra)

config-service cores-service librarian-service

Huduma Zinazoathiriwa na Mabadiliko 7-11 (Usimamizi wa Mkusanyiko)

Mabadiliko ya Mara Moja: librarian-service (collection_manager.py, service.py) tables/library.py (ondoa meza ya mkusanyiko) schema/services/collection.py (ondoa alama ya muda)

Mabadiliko Yaliyokamilika (Mabadiliko ya 10): Huduma zote za kuhifadhi (jumla ya 11) - zimehamishwa kwa utaratibu wa kusukuma usanidi kwa mkusanyiko kupitia CollectionConfigHandler Mfumo wa usimamizi wa kuhifadhi umeondolewa kutoka storage.py

Mambo ya Kuzingatia ya Baadaye

Mfumo wa Nafasi ya Mtumiaji Kila Mmoja

Huduma zingine hutumia nafasi za mtumiaji kila mmoja kwa njia ya moja kwa moja, ambapo kila mtumiaji hupata nafasi yake mwenyewe ya Cassandra:

Huduma zenye nafasi za mtumiaji kila mmoja:

  1. Huduma ya Uulizia ya Triples (trustgraph-flow/trustgraph/query/triples/cassandra/service.py:65) Inatumia keyspace=query.user
  2. Huduma ya Uulizia ya Vitabu (trustgraph-flow/trustgraph/query/objects/cassandra/service.py:479) Inatumia keyspace=self.sanitize_name(user)
  3. Ufikiaji wa Moja kwa Moja wa KnowledgeGraph (trustgraph-flow/trustgraph/direct/cassandra_kg.py:18) Paramu ya chaguo-msingi keyspace="trustgraph"

Hali: Hizi hazibadiliki katika maelezo haya.

Hakikisha Upya wa Baadaye: Tathmini ikiwa mfumo wa nafasi ya mtumiaji kila mmoja huunda masuala ya kutenganisha wateja Fikiria ikiwa usambazaji wa wateja mbalimbali unahitaji muundo wa mbele ya nafasi (k.m., tenant_a_user1) Angalia uwezekano wa migongano ya kitambulisho cha mtumiaji kati ya wateja Tathmini ikiwa nafasi moja iliyoshirikiwa kwa kila mteja na kutenganisha mstari kwa msingi wa mtumiaji ni bora

Kumbuka: Hii haizuie utekelezaji wa sasa wa wateja mbalimbali lakini inapaswa kukaguliwa kabla ya utekelezaji wa wateja mbalimbali wa uzalishaji.

Awamu za Utendaji

Awamu ya 1: Marekebisho ya Paramu (Mabadiliko 1-6)

Marekebisho ya jina la paramu --config-push-queue Ongeza msaada wa paramu --cassandra-keyspace Matokeo: Mpangilio wa folyo na nafasi ya wateja mbalimbali umeanzishwa

Awamu ya 2: Uhamishaji wa Usimamizi wa Mkusanyiko (Mabadiliko 7-9, 11)

Hamisha uhifadhi wa mkusanyiko kwa huduma ya usanidi Ondoa meza ya mkusanyiko kutoka kwa librarian Sasisha mfumo wa mkusanyiko (ondoa alama za muda) Matokeo: Huondoa mada zilizokota za usimamizi wa uhifadhi, hurahisisha librarian

Awamu ya 3: Masasisho ya Huduma ya Uhifadhi (Mabadiliko ya 10) IMEKAMILIKA

Zesasisha huduma zote za kuhifadhi ili zitumie utaratibu wa kusukuma usanidi kwa mkusanyiko kupitia CollectionConfigHandler Ondoa miundombinu ya ombi/jibu la usimamizi wa uhifadhi Ondoa ufafanuzi wa zamani wa mfumo Matokeo: Usimamizi kamili wa mkusanyiko unaotegemea usanidi umefikiwa

Marejeleo

GitHub Issue: https://github.com/trustgraph-ai/trustgraph/issues/582 Faili Zinazohusiana: 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