This document describes the technical implementation of the YDB Capacity Calculator, a single-page application that helps capacity planners determine server requirements for YDB clusters based on capacity needs or calculate capacity provided by a given server configuration.
The application is a client-side single-page application built with:
- HTML5 for structure
- CSS3 for styling
- Vanilla JavaScript for functionality
- Local storage for data persistence
- Header with application title and description
- Mode toggle buttons for switching between use cases
- Server configuration input section
- Capacity requirements input section (Servers Needed mode)
- Server count input (Resources Provided mode)
- Calculate button
- Results display section
- Footer with YDB information
- Responsive design using CSS Grid and Flexbox
- YDB color scheme implementation
- Mobile-friendly layout
- Clear visual hierarchy
- Interactive elements with hover states
- Form input validation
- Calculation logic for both modes
- Local storage integration
- Dynamic UI updates
- Error handling
This functionality allows users to determine how many servers are needed based on capacity requirements.
-
Storage Groups Calculation
- Each storage group consists of 9 VDisks
- Reserve calculation (1% or minimum 18 VDisks)
- VDisks per server calculation based on device count and VDisks per device
- Server count calculation based on required VDisks
-
CPU Cores Calculation
- System reserve: 2-4 cores per server (using 2 as minimum)
- Storage reserve: 6 cores per NVMe device, 0.5 per HDD device
- Available cores for database nodes
- Server count calculation based on required database cores
-
RAM Calculation
- System reserve: 4GB per server
- Storage reserve: 6GB per NVMe device, 2GB per HDD device
- Available RAM for database nodes
- Server count calculation based on required database RAM
-
Final Server Count
- Takes the maximum of storage, CPU, and RAM requirements
- Ensures minimum of 12 servers
This functionality allows users to determine what capacity is provided by a given server configuration and server count.
-
Storage Groups Calculation
- Total VDisks calculation for HDD and NVMe
- Reserve application (1% or minimum 18 VDisks)
- Available VDisks after reserve
- Storage groups calculation (9 VDisks per group)
-
Database Cores Calculation
- System reserve: 2 cores per server
- Storage reserve: 6 cores per NVMe device, 0.5 per HDD device
- Available cores per server for database nodes
- Total database cores across all servers
-
Database RAM Calculation
- System reserve: 4GB per server
- Storage reserve: 6GB per NVMe device, 2GB per HDD device
- Available RAM per server for database nodes
- Total database RAM across all servers
- Server configuration is saved to local storage on any change
- Configuration is loaded from local storage on page load
- Capacity requirements are not persisted (user may want different values each time)
- Input validation for all numeric fields
- Clear error messages for invalid inputs
- Prevention of negative or zero server counts
- Handling of edge cases (e.g., no devices specified)
- Adapts to different screen sizes
- Mobile-friendly layout
- Appropriate font sizes and spacing for all devices
- Accessible color scheme
All business rules from the requirements document are implemented:
- Storage group calculation with 9 VDisks per group
- Reserve calculation (1% or minimum 18 VDisks)
- System resource reservations (cores and RAM)
- Storage device resource reservations
- Calculation of available resources for database nodes
- Minimum server count enforcement (12 servers)
index.html: Main HTML filecss/styles.css: Stylingjs/calculator.js: Calculation logicdocs/: Documentation filesrequirements.md: Project requirementsuser-stories.md: User storiesbusiness-rules.md: Business rulestechnical-specification.md: This documentresources-provided-technical-spec.md: Detailed specification for Resources Provided modeui-design.md: UI design documentationuser-guide.md: User instructionsproject-summary.md: Project overviewtest-results.md: Testing results
The application has been tested with various configurations to ensure:
- Correct calculation of server requirements
- Proper application of business rules
- Accurate handling of edge cases
- Responsive design on different devices
- Data persistence functionality
- Correct behavior when switching between modes