Tech Architecture of APITable
APITable mainly consist of multi packages to form app services:
web-server: build supercharged, SEO-friendly, and extremely user-facing static website and web application by using NextJSUI: provides extremely smooth, user-friendly, super-fast database-spreadsheet interface in <canvas> Rendering Engine
backend-server: handles HTTP requests about nodes, users, organizations, etc. Code under Java Spring Boot Frameworkroom-server: handles operations(OTJSON) of datasheets, communicates withSocket Serverthrough gRPC, and also provides APIs for developers. Coding under TypeScript and NestJS framework.nest-server: handles HTTP GET requests about datasheets, records, views, etc.socket-server: establishes a long connection with clients through the WebSocket protocol, allowing for two-way communication and real-time collaboration, notifications, and other featuresinit-setting,Responsible for initializing the configuration of core servicesinit-appdata,Responsible for initializing data, including databases, system-wide images, text, etc.MySQL: stores persistent data, such as datasheets, records, views, etc.Redis: stores cache, such as log-in session, hot data, etc.Minio OSS: stores uploaded files
Here’s different perspective of APITable's architecture.
App Services Architecture
Take a look at the complete architecture of the app's services.
graph TD;
subgraph "APITable Architecture";
subgraph "Infrastructure Layer";
gateway --> backend-server;
gateway --> room-server;
room-server --> backend-server;
gateway --> web-server
end
subgraph "Client Layer";
web-client((Web Client)) --> gateway((Gateway\nNginx));
iOS-app((iOS App)) --> gateway;
android-app((Android App)) --> gateway;
end
endCloud Infrastructure
graph TD;
subgraph "APITable Infrastructure";
Client --> gateway
gateway((Nginx\nGateway)) -->|HTTP| backend-server;
gateway -->|Web Socket| socket-server;
gateway -->|HTTP| web-server;
web-server -->|HTTP| backend-server;;
socket-server -->|Web Socket| room-server;
backend-server -->|Read/Write| mysql((MySQL));
backend-server -->|Read/Write| redis((Redis));
backend-server -->|Read/Write| Minio-OSS((Minio-OSS));
room-server --> backend-server;
room-server -->|Read/Write| mysql((MySQL));
room-server -->|Read/Write| redis((Redis));
room-server -->|Read/Write| mq((RabbitMQ));
endScalable Infrastructure
nest-server: is another mode of room-server. The code base is the same as room-server, but it is responsible for load balancing thegetDatapackoperations to prevent resource conflicts.
graph LR;
subgraph "APITable Scalable Infrastructure";
Client --> gateway
gateway((Nginx\nGateway)) -->|HTTP| backend-servers;
gateway -->|HTTP| web-servers;
gateway -->|HTTP| nest-servers;
gateway -->|Web Socket| socket-server;
web-servers --> |HTTP| backend-servers;
socket-server -->|Web Socket| room-servers;
backend-servers -->|Read/Write| mysql((MySQL));
backend-servers -->|Read/Write| redis((Redis));
backend-servers -->|Read/Write| Minio-OSS((Minio-OSS));
nest-servers --> mysql
room-servers --> backend-servers;
room-servers -->|Read/Write| mysql((MySQL));
room-servers -->|Read/Write| redis((Redis));
room-servers -->|Read/Write| mq((RabbitMQ));
subgraph nest-servers;
nest-server1;
nest-server2;
end
subgraph backend-servers;
backend-server1;
backend-server2;
end
subgraph room-servers;
room-server1;
room-server2;
room-server3;
room-server4;
end
end