# Epic InterSystems Iris Architecture
## Introduction
InterSystems Iris is the database platform used by the Epic application. It provides a robust, scalable foundation for healthcare data management with comprehensive support for high availability, disaster recovery, and enterprise-scale deployments.
### Core Components
The InterSystems Iris architecture consists of several key components:
- **Data Server**: The access point for persistently stored data
- **Application Server**: Manages database queries and makes data requests to the data server
- **Symmetric Multiprocessor (SMP) Architecture**: Sufficient for most Epic software environments
- **Enterprise Caché Protocol (ECP)**: Enables distributed models for large deployments
### Key Advantages
The updated Iris database provides significant benefits:
- **Increased Scale**: Enables larger organizations with multiple Epic instances to consolidate into one larger instance
- **Platform Flexibility**: Licensing holiday allowing customers to move between AIX and Red Hat Enterprise Linux (RHEL) without paying for a new platform license
## Epic Environment Overview
The complete Epic ecosystem includes multiple interconnected components working together to provide comprehensive healthcare data management.
```mermaid
graph TB
subgraph "Client Layer"
HS[Hyperspace<br/>Client Access]
end
subgraph "Primary Site"
PROD[("Production DB<br/>Read/Write")]
APP[Application<br/>Servers]
REPORT[("Report Mirror<br/>Read-Only")]
CLARITY[("Clarity DB<br/>Oracle/SQL Server")]
WEBLOB[WebBLOB Server<br/>SMB Storage]
end
subgraph "Secondary Site"
DR[("DR Mirror<br/>Read-Only")]
SUPPORT[("Support Mirror<br/>Read-Only")]
end
subgraph "Development"
TEST[("Test/Dev/Staging<br/>Environments")]
end
subgraph "Storage Infrastructure"
STORAGE[Storage Cluster<br/>SAN/NAS Storage]
SNAP[Storage Replication]
end
HS --> APP
APP --> PROD
PROD -.Mirror Sync.-> REPORT
REPORT -.Daily Extract.-> CLARITY
PROD -.Async Mirror.-> DR
PROD -.Mirror.-> SUPPORT
PROD --> STORAGE
REPORT --> STORAGE
DR --> STORAGE
WEBLOB --> SNAP
TEST --> STORAGE
classDef production fill:#ff6b6b,stroke:#c92a2a,stroke-width:3px,color:#fff
classDef report fill:#4dabf7,stroke:#1971c2,stroke-width:2px,color:#fff
classDef dr fill:#ff922b,stroke:#d9480f,stroke-width:2px,color:#fff
classDef support fill:#51cf66,stroke:#2f9e44,stroke-width:2px,color:#fff
classDef clarity fill:#ffd43b,stroke:#fab005,stroke-width:2px,color:#000
classDef weblob fill:#cc5de8,stroke:#9c36b5,stroke-width:2px,color:#fff
classDef test fill:#e9ecef,stroke:#868e96,stroke-width:1px,color:#000
classDef storage fill:#343a40,stroke:#212529,stroke-width:2px,color:#fff
class PROD production
class REPORT report
class DR dr
class SUPPORT support
class CLARITY clarity
class WEBLOB weblob
class TEST test
class STORAGE,SNAP storage
```
## InterSystems Iris Database Architecture
### Symmetric Multiprocessor (SMP) Architecture
For most Epic software environments, the SMP architecture in a single database server suffices to service Epic applications' database requests. In large deployments, a distributed model can be supported using InterSystems' Enterprise Caché Protocol (ECP).
```mermaid
graph LR
subgraph "Standard SMP Architecture"
direction LR
APP1[Application<br/>Server]
DATA1[Data<br/>Server]
STOR1[(All-Flash<br/>Storage)]
APP1 -->|Query| DATA1
DATA1 -->|I/O| STOR1
end
subgraph "Distributed ECP Architecture"
direction LR
DATA2[Data<br/>Server]
STOR2[(Shared<br/>Storage)]
APP2A[Application<br/>Server A]
APP2B[Application<br/>Server B]
APP2C[Application<br/>Server C]
APP2A -->|ECP| DATA2
APP2B -->|ECP| DATA2
APP2C -->|ECP| DATA2
DATA2 -->|I/O| STOR2
end
subgraph "High Availability Cluster"
direction LR
PRIMARY[Primary<br/>Data Server<br/>Active]
STANDBY[Standby<br/>Data Server<br/>Passive]
SHARED[(Shared<br/>Storage)]
PRIMARY -.Failover.-> STANDBY
PRIMARY --> SHARED
STANDBY -.-> SHARED
end
classDef appserver fill:#74c0fc,stroke:#1971c2,stroke-width:2px,color:#000
classDef dataserver fill:#ff6b6b,stroke:#c92a2a,stroke-width:2px,color:#fff
classDef storage fill:#343a40,stroke:#212529,stroke-width:2px,color:#fff
classDef standby fill:#ffd43b,stroke:#fab005,stroke-width:2px,color:#000
class APP1,APP2A,APP2B,APP2C appserver
class DATA1,DATA2,PRIMARY dataserver
class STOR1,STOR2,SHARED storage
class STANDBY standby
```
### Failover and High Availability
The use of failover-enabled clustered hardware enables a standby data server to access the same storage as the primary data server. This configuration allows the standby data server to take over processing responsibilities during a hardware failure, ensuring continuous operation.
### Replication Technologies
InterSystems provides comprehensive technologies to satisfy data replication, disaster recovery, and high-availability (HA) requirements:
- **InterSystems Replication**: Replicates an Iris database synchronously or asynchronously from a primary data server to one or more secondary data servers
- **Storage Replication**: Replicates WebBLOB storage for backup and disaster recovery purposes
## Database Server Types
In Epic software environments, a single patient-centric database is deployed with multiple mirror configurations to support different operational needs.
### Mirror Replication Flow
```mermaid
graph TB
subgraph "Primary Site"
PROD[("Production Database<br/>Read/Write<br/>High Performance<br/>All-Flash Storage")]
FAILOVER[Failover Server<br/>Standby]
REPORT[("Report Mirror<br/>Read-Only<br/>Reporting Workload")]
end
subgraph "Disaster Recovery Site"
DR[("DR Mirror<br/>Read-Only → SRW<br/>Geographic Separation")]
end
subgraph "Optional"
SUPPORT[("Support Mirror<br/>Read-Only → Read/Write<br/>Business Continuity")]
end
PROD -.Shared Storage.-> FAILOVER
PROD -->|Epic Mirror<br/>Synchronous| REPORT
PROD -->|Epic Mirror<br/>Asynchronous| DR
PROD -->|Epic Mirror| SUPPORT
FAILOVER -.Automatic<br/>Failover.-> PROD
classDef production fill:#ff6b6b,stroke:#c92a2a,stroke-width:3px,color:#fff
classDef failover fill:#ffd43b,stroke:#fab005,stroke-width:2px,color:#000
classDef report fill:#4dabf7,stroke:#1971c2,stroke-width:2px,color:#fff
classDef dr fill:#ff922b,stroke:#d9480f,stroke-width:2px,color:#fff
classDef support fill:#51cf66,stroke:#2f9e44,stroke-width:2px,color:#fff
class PROD production
class FAILOVER failover
class REPORT report
class DR dr
class SUPPORT support
```
### Production Database Server
In Epic's hardware requirements, the physical server hosting the primary read/write Iris data server is called the production database server. Key characteristics:
- **Storage Requirements**: High performance all-flash storage for files belonging to the primary database instance
- **High Availability**: Epic supports the use of a failover database server with access to the same files
- **Replication**: Uses Epic Mirror to replicate to read-only Report, disaster recovery, and support read-only copies
- **Business Continuity**: Each type of database server can be switched to read/write mode for business continuity reasons
### Report Mirror Database Server
A reporting mirror database server provides read-only access to production data. Key characteristics:
- **Configuration**: Hosts an Iris data server configured as a backup mirror of the production Iris data server
- **Storage Capacity**: Same requirements as the production database server
- **Performance Profile**: Write performance matches production, but read workload characteristics are different and sized accordingly
- **Purpose**: Dedicated reporting queries without impacting production performance
### Support Read-Only Mirror Database Server
This database server is optional and provides additional read-only access to production data:
- **Purpose**: Provides a copy of production in read-only mode for support activities
- **Flexibility**: Can be switched to read/write mode for business continuity reasons
- **Deployment**: Not always included in standard configurations
### Disaster Recovery Mirror Database Server
To meet business continuity and disaster recovery objectives, a DR mirror database server is commonly deployed:
- **Geographic Separation**: Deployed at a site geographically separate from production and/or reporting mirror database servers
- **Configuration**: Hosts an Iris data server configured as a backup mirror of the production Iris data server
- **Business Continuity**: Can be configured to act as a mirror read/write instance (SRW) if the production site becomes unavailable
- **Storage Requirements**: Same file storage requirements as production database server, sized from a performance perspective for business continuity
### Test, Development, and Staging Environments
Healthcare organizations often deploy additional environments for testing and development:
- **Purpose**: Development, testing, and staging environments for application updates and testing
- **Storage**: Additional Iris data servers requiring storage, which can be accommodated by the same storage system
- **Requirements**: Epic has specific requirements and constraints for providing additional storage from a shared storage system
## Additional Epic Components
Beyond the Iris ODB data servers, Epic software environments include several other critical components.
### Clarity Database
- **Platform**: Oracle or Microsoft SQL Server database server
- **Purpose**: Backend for Epic's Clarity business-reporting tools
- **Data Source**: Reports on data extracted daily from the reporting Iris database
### WebBLOB Server
- **Protocol**: SMB (Server Message Block)
- **Storage**: Stores large binary objects such as images and documents
- **Replication**: Storage replication used for backup and disaster recovery
### Multipurpose Components
- **Multipurpose Database Server**: Supports various ancillary database needs
- **Multipurpose Virtual Machines**: Provide flexible compute resources for various Epic functions
### Hyperspace
- **Purpose**: Client access layer for Epic applications
- **Function**: Provides the user interface for clinicians and staff to access Epic systems
### Consolidated Storage Strategy
The storage requirements of all these multiple workloads, pools, NAS and SAN protocols can be consolidated and hosted by a single storage cluster. This consolidation enables healthcare organizations to have a single data management strategy for all Epic and non-Epic workloads.
## Storage Architecture
### File Types and I/O Patterns
Each Epic database server performs I/O on three primary types of files:
```mermaid
graph TB
subgraph "Epic Database Server"
SERVER[Iris Data Server]
end
subgraph "Storage System"
subgraph "Database Files"
DB1[Primary Database<br/>100% Random I/O<br/>Most Demanding]
DB2[Mirror Databases<br/>Less Demanding<br/>Fewer Read Requests]
end
subgraph "Journal Files"
JOURNAL[Transaction Logs<br/>Sequential I/O<br/>Write-Intensive]
end
subgraph "Application Files"
APPFILES[Application Code<br/>Configuration<br/>Static Content]
end
end
SERVER -->|Random Read/Write| DB1
SERVER -->|Random Read| DB2
SERVER -->|Sequential Write| JOURNAL
SERVER -->|Read Access| APPFILES
classDef database fill:#ff6b6b,stroke:#c92a2a,stroke-width:2px,color:#fff
classDef mirror fill:#4dabf7,stroke:#1971c2,stroke-width:2px,color:#fff
classDef journal fill:#51cf66,stroke:#2f9e44,stroke-width:2px,color:#fff
classDef app fill:#ffd43b,stroke:#fab005,stroke-width:2px,color:#000
class DB1 database
class DB2 mirror
class JOURNAL journal
class APPFILES app
```
### Workload Characteristics
The workload of an individual database server depends on its role in the Epic software environment:
- **Production Database Files**: Typically incur the most demanding workload, consisting of 100% random I/O requests
- **Mirror Databases**: Workload is typically less demanding with fewer read requests
- **Journal Files**: Workloads are mainly sequential, providing predictable performance patterns
### Performance Benchmarking
Epic maintains a workload model for storage performance benchmarking and customer workload analysis. For more information about the Epic workload model, benchmark results, and guidance on correctly sizing storage for Epic environments, consult Epic's documentation and sizing tools.
## High Availability and Disaster Recovery
```mermaid
graph TB
subgraph "Primary Site"
direction TB
PROD_PRIMARY[("Production Database<br/>Read/Write<br/>Primary")]
PROD_FAILOVER[("Failover Server<br/>Standby")]
REPORT_PRIMARY[("Report Mirror<br/>Read-Only")]
WEBLOB_PRIMARY[WebBLOB Storage<br/>Primary]
STORAGE_PRIMARY[(Primary Storage)]
PROD_PRIMARY -.Cluster.-> PROD_FAILOVER
PROD_PRIMARY --> STORAGE_PRIMARY
PROD_FAILOVER -.-> STORAGE_PRIMARY
REPORT_PRIMARY --> STORAGE_PRIMARY
WEBLOB_PRIMARY --> STORAGE_PRIMARY
end
subgraph "DR Site - Geographic Separation"
direction TB
DR_MIRROR[("DR Mirror<br/>Read-Only → SRW<br/>Backup")]
WEBLOB_DR[WebBLOB Storage<br/>DR Copy]
STORAGE_DR[(DR Storage)]
DR_MIRROR --> STORAGE_DR
WEBLOB_DR --> STORAGE_DR
end
PROD_PRIMARY ==>|Epic Mirror<br/>Async Replication| DR_MIRROR
WEBLOB_PRIMARY ==>|Storage Replication| WEBLOB_DR
STORAGE_PRIMARY -.Backup/DR.-> STORAGE_DR
subgraph "Failure Scenarios"
SCENARIO1["Hardware Failure:<br/>Automatic failover to standby<br/>within Primary Site"]
SCENARIO2["Site Failure:<br/>Manual activation of DR site<br/>DR Mirror → SRW mode"]
end
classDef primary fill:#ff6b6b,stroke:#c92a2a,stroke-width:3px,color:#fff
classDef standby fill:#ffd43b,stroke:#fab005,stroke-width:2px,color:#000
classDef dr fill:#ff922b,stroke:#d9480f,stroke-width:3px,color:#fff
classDef storage fill:#343a40,stroke:#212529,stroke-width:2px,color:#fff
classDef scenario fill:#e9ecef,stroke:#868e96,stroke-width:1px,color:#000
class PROD_PRIMARY,REPORT_PRIMARY primary
class PROD_FAILOVER standby
class DR_MIRROR dr
class STORAGE_PRIMARY,STORAGE_DR storage
class SCENARIO1,SCENARIO2 scenario
```
### Hardware Failure Protection
Failover-enabled clustered hardware provides automatic recovery:
- **Standby Server**: Accesses the same storage as the primary data server
- **Automatic Failover**: Standby server takes over processing responsibilities during hardware failure
- **Minimal Downtime**: Quick recovery maintains service continuity
### Site Failure Protection
Geographic separation and mirror replication provide disaster recovery:
- **Asynchronous Replication**: Data replicated to geographically separate DR site
- **Manual Activation**: DR mirror can be promoted to read/write mode (SRW)
- **WebBLOB Replication**: Storage replication ensures document and image availability
- **Business Continuity**: Full system recovery at DR site if primary site unavailable
## Deployment Planning and Sizing
### Hardware Configuration Guide
Epic provides each customer with a customized hardware configuration guide containing:
- **I/O Projections**: Expected input/output operations based on customer's projected workload
- **Storage Capacity Requirements**: Total storage needs for all database instances
- **Environment Coverage**: Requirements for development, testing, staging, and production environments
- **Ancillary Workloads**: Additional workloads that may be consolidated on the storage system
Customers can use this hardware configuration guide to communicate total storage requirements. The guide contains all the data needed to properly size an Epic deployment.
### Database Storage Layout Guide
During the deployment phase, Epic provides a Database Storage Layout Guide with more granular details:
- **LUN-Level Details**: Specific logical unit number configurations
- **Advanced Storage Design**: Detailed layout recommendations for optimal performance
- **General Recommendations**: Storage best practices for optimal results
- **Storage Optimization**: Use this guide to determine the best storage layout for your infrastructure