-
Notifications
You must be signed in to change notification settings - Fork 10
Pid Provider
Roberta Takenaka edited this page Jun 20, 2025
·
1 revision
O sistema SciELO possui uma arquitetura híbrida distribuída com:
- Core: Aplicação central única que gerencia o banco de PIDs consolidado
- Upload: N instâncias descentralizadas, uma por coleção SciELO nacional
- Sincronização: Registro local + sincronização com Core via API
Componentes Comuns:
-
pid_provider/models.py: Modelos de dados (PidProviderXML, XMLVersion, etc.) -
pid_provider/base_pid_provider.py: Lógica base de processamento de PIDs
Componentes Específicos:
-
Upload:
pid_provider/client.py- Cliente API para comunicação com Core -
Core:
views.py- Endpoints REST para receber requisições das instâncias Upload
1. Recepção no Upload:
- Upload recebe XML de artigo científico
- Processa e registra PID localmente usando
BasePidProvider - Mantém registro local em
PidProviderXMLcom status inicial
2. Sincronização com Core:
-
PidProviderAPIClientempacota XML e metadados - Envia via POST para endpoint
/api/v2/pid/pid_provider/do Core - Core processa via
PidProviderViewSetusando mesmoBasePidProvider
3. Tratamento de Conflitos:
- Se Core detecta PID v2 incorreto, Upload usa endpoint
/fix_pid_v2/ -
FixPidV2ViewSetcorrige inconsistências entre sistemas - Registro local do Upload é atualizado com dados do Core
- Resiliência: Upload continua funcionando mesmo com Core indisponível
- Consistência: Core mantém visão unificada de todos os PIDs
- Autonomia: Cada coleção opera independentemente
- Sincronização: Dados locais são eventualmente consistentes com Core
O diagrama ilustra a arquitetura distribuída híbrida do sistema SciELO, destacando:
- Múltiplas instâncias Upload (Brasil, Argentina, México, etc.)
- Core centralizado unificando todos os PIDs
- Processamento local com sincronização remota
- models.py: Definições de banco idênticas em ambos sistemas
- base_pid_provider.py: Lógica de negócio unificada
- Garante consistência de processamento
-
Upload:
client.pypara comunicação API -
Core:
views.pypara recepção de requisições - Cada sistema otimizado para sua função
Processamento Local → Tentativa de Sync → Falha de Rede → Operação Continua
- Detecção automática de PID v2 incorreto
- Endpoint dedicado
/fix_pid_v2/para correções - Sincronização bidirecional Upload ↔ Core
- Alta Disponibilidade: Upload funciona offline
- Consistência Global: Core mantém visão unificada
- Escalabilidade: Adição fácil de novas coleções
- Integridade: Resolução automática de conflitos
Esta arquitetura permite que o SciELO opere globalmente com autonomia regional, mantendo consistência de dados e alta disponibilidade do serviço.
graph TD
%% Upload Instances
UPLOAD1[📤 Upload Brasil<br/>Instância SciELO BR]
UPLOAD2[📤 Upload Argentina<br/>Instância SciELO AR]
UPLOAD3[📤 Upload México<br/>Instância SciELO MX]
UPLOADN[📤 Upload N<br/>Outras Coleções...]
%% Core System
CORE[🏛️ Core Central<br/>Sistema Unificado SciELO]
%% Shared Components
SHARED_MODELS[📊 Módulos Compartilhados<br/>pid_provider/models.py<br/>pid_provider/base_pid_provider.py]
%% Upload Specific Components
CLIENT[📡 Upload Específico<br/>pid_provider/client.py<br/>PidProviderAPIClient]
%% Core Specific Components
VIEWS[🔌 Core Específico<br/>views.py<br/>PidProviderViewSet<br/>FixPidV2ViewSet]
%% Workflow Steps
XML_INPUT[📄 XML Input<br/>Artigo Científico]
%% Local Processing
LOCAL_PROCESS[⚙️ Processamento Local<br/>BasePidProvider.provide_pid_for_xml_with_pre<br/>Registro em PidProviderXML local]
%% API Communication
API_CALL[📡 Chamada API<br/>POST /api/v2/pid/pid_provider/<br/>XML + Metadados]
%% Core Processing
CORE_PROCESS[🏛️ Processamento Core<br/>PidProviderViewSet.create<br/>Mesmo BasePidProvider<br/>Registro consolidado]
%% Conflict Resolution
CONFLICT_CHECK{❓ Conflito<br/>PID v2?}
FIX_PID[🔧 Correção PID<br/>POST /fix_pid_v2/<br/>FixPidV2ViewSet]
%% Sync Back
UPDATE_LOCAL[🔄 Atualização Local<br/>client.provide_pid_and_handle_incorrect_pid_v2<br/>Sincronização com Core]
%% Database States
LOCAL_DB[(🗄️ BD Local Upload<br/>PidProviderXML<br/>XMLVersion<br/>Registro autônomo)]
CORE_DB[(🏛️ BD Central Core<br/>PidProviderXML consolidado<br/>Visão unificada<br/>Todos os PIDs)]
%% Success/Error States
SUCCESS[✅ Sucesso<br/>PID registrado localmente<br/>e sincronizado com Core]
RESILIENCE[🛡️ Resiliência<br/>Upload continua operando<br/>mesmo com Core indisponível]
%% Flow Connections - Input
XML_INPUT --> UPLOAD1
XML_INPUT --> UPLOAD2
XML_INPUT --> UPLOAD3
XML_INPUT --> UPLOADN
%% Shared Components
SHARED_MODELS -.-> UPLOAD1
SHARED_MODELS -.-> UPLOAD2
SHARED_MODELS -.-> UPLOAD3
SHARED_MODELS -.-> UPLOADN
SHARED_MODELS -.-> CORE
%% Specific Components
CLIENT -.-> UPLOAD1
CLIENT -.-> UPLOAD2
CLIENT -.-> UPLOAD3
CLIENT -.-> UPLOADN
VIEWS -.-> CORE
%% Local Processing Flow
UPLOAD1 --> LOCAL_PROCESS
LOCAL_PROCESS --> LOCAL_DB
LOCAL_PROCESS --> API_CALL
%% API Communication
API_CALL --> CORE
CORE --> CORE_PROCESS
CORE_PROCESS --> CORE_DB
CORE_PROCESS --> CONFLICT_CHECK
%% Conflict Resolution
CONFLICT_CHECK -->|Sim| FIX_PID
CONFLICT_CHECK -->|Não| UPDATE_LOCAL
FIX_PID --> UPDATE_LOCAL
%% Final Update
UPDATE_LOCAL --> LOCAL_DB
UPDATE_LOCAL --> SUCCESS
%% Resilience Path
API_CALL -.->|Falha de Rede| RESILIENCE
RESILIENCE --> LOCAL_DB
%% Multiple Upload Instances
UPLOAD2 -.-> LOCAL_PROCESS
UPLOAD3 -.-> LOCAL_PROCESS
UPLOADN -.-> LOCAL_PROCESS
%% API Endpoints Labels
API_ENDPOINTS[🔗 Endpoints Core<br/>POST /api/v2/pid/pid_provider/<br/>POST /api/v2/pid/fix_pid_v2/<br/>Authentication: Bearer Token]
CORE -.-> API_ENDPOINTS
API_CALL -.-> API_ENDPOINTS
FIX_PID -.-> API_ENDPOINTS
%% Architecture Benefits
BENEFITS[💡 Benefícios da Arquitetura<br/>• Resiliência: Upload autônomo<br/>• Consistência: Core unificado<br/>• Escalabilidade: N instâncias<br/>• Sincronização: Eventual consistency]
SUCCESS -.-> BENEFITS
RESILIENCE -.-> BENEFITS
%% Styling
classDef upload fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef core fill:#fff3e0,stroke:#f57c00,stroke-width:3px
classDef shared fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef process fill:#e8f5e8,stroke:#388e3c,stroke-width:2px
classDef api fill:#ffebee,stroke:#d32f2f,stroke-width:2px
classDef database fill:#e0f2f1,stroke:#00695c,stroke-width:2px
classDef decision fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef success fill:#e8f5e8,stroke:#2e7d32,stroke-width:3px
classDef info fill:#e1f5fe,stroke:#0288d1,stroke-width:2px
class UPLOAD1,UPLOAD2,UPLOAD3,UPLOADN,CLIENT upload
class CORE,VIEWS,CORE_PROCESS core
class SHARED_MODELS shared
class LOCAL_PROCESS,XML_INPUT process
class API_CALL,FIX_PID,UPDATE_LOCAL,API_ENDPOINTS api
class LOCAL_DB,CORE_DB database
class CONFLICT_CHECK decision
class SUCCESS,RESILIENCE success
class BENEFITS,API_ENDPOINTS info