Сайтқа келушілердің немесе деректер базасының көлемі миллиондаған жазбаларға жеткенде, стандартты әзірлеу әдістері төтеп бере алмайды. Беттер бірнеше секунд бойы жүктеле бастайды, сервер процессоры 100%-ға жүктеледі, деректер базасы кестелерді бұғаттайды, ал пайдаланушылар 504 Gateway Timeout қателерін көреді.
Қымбатырақ серверді жай ғана сатып алу мәселені уақытша ғана шешеді — оңтайландырылмаған сұраулар өте нашар масштабталады. Біз жоғары жүктемелі (Highload) жүйелерді архитектура және код деңгейінде оңтайландырамыз. Біз баяу сұраулар логтарын (Slow Query Log) талдаймыз, тиімді индекстер базасын құрамыз, ауыр SQL-сұрауларды қайта жазамыз және оперативті жадта кэштеуді (Redis, Memcached) іске қосамыз.
Терабайттаған деректері бар жобалар үшін біз үлестірілген архитектураларды енгіземіз: оқу және жазу ағындарын бөлу үшін деректер базасын репликациялау (Master-Slave), сондай-ақ көлденең масштабтау (шардинг).
Индекстерді оңтайландырғаннан кейін баяу SQL-сұрауларын орындау уақытын жылдамдату
RPS (секундына сұраныс) — оңтайландырылған базаның мақсатты өнімділігі
Кэштелген режимде ең жоғары жүктеме кезінде бэкендтегі API жауап беру уақыты
Деректер жолдары — оңтайландыру аясында біз жұмыс істейтін кестелердің ең аз көлемі
Кірістірілген циклдары бар оңтайлы емес SQL-сұранысы база өскен сайын экспоненциалды түрде баяу орындала бастайды. Біз таза, жылдам бэкенд кодын жазамыз және дұрыс индекстерді баптаймыз, осылайша серверді жалға алу шығыныңызды үнемдейміз.
Біз жүйелік метрикаларға егжей-тегжейлі зерттеу жүргізіп, тар жерлерді оңтайландырамыз.
Мамандандырылған профайлерлерді (Blackfire, Xdebug, V8 Profiler) пайдалана отырып, біз серверлік скрипттердің жұмысын миллисекундтар бойынша талдаймыз. «Ауыр» функцияларды, жедел жадтың жылыстауын және артық циклдарды табамыз.
Серверлік кодтың өзін оңтайландыру процессорға (CPU) түсетін жүктемені бірнеше есе азайтуға мүмкіндік береді.
Дәстүрлі қатты дискілерге және ДББЖ-ге сұраулар салыстырмалы түрде ұзақ орындалады. Біз Redis/Memcached — жедел жадтағы дерекқорларды баптаймыз. «Ыстық» және сирек өзгеретін деректер миллисекундтың үлестерінде беріледі.
Сервер негізгі дерекқорға хабарласпай-ақ, кэштелген бетті немесе блокты бірден береді.
Бір уақытта жазу және оқу кезінде дерекқор кестелерді блоктай алады (Database locks). Біз репликацияны баптаймыз: негізгі сервер (Master) жазу үшін деректерді қабылдайды, ал көшірме серверлер пулы (Slaves) оқу үшін деректерді береді.
Бұл өзара блоктарды алып тастайды және оқу жүктемесін машиналар арасында бөледі.
Логтарды жинаудың, сұраныстарды жөндеудің, кэшті баптаудың және жүктемелік тесттердің дәйекті процесі.
Баяу SQL-сұраныстарды мониторингтеуді қосамыз. Орындалу уақыты 100 мс-тан асатын сұраныстарды анықтаймыз. ДБ-ға түсетін жүктеме картасын құрамыз.
Сұраныстарды орындау жоспарларын (EXPLAIN) талдаймыз. Құрама индекстерді қосамыз, кестелерді толық сканерлеуді (Full Table Scan) жоямыз, JOIN-қосылыстарды оңтайландырамыз.
Бэкенд кодын профильдеуді іске қосамыз. Жадтың ағуын, деректерді өңдеудің тиімсіз алгоритмдерін іздейміз, ішкі циклдерді оңтайландырамыз.
Кэштеу схемасын жобалаймыз: сайттың статикалық блоктары, тауарлар тізімі, мәзірі үшін кэш-асайд (cache-aside). Өмір сүру уақытын (TTL) және кэшті жарамсыз етуді баптаймыз.
СУБД конфигурациялық файлдарын (my.cnf, postgresql.conf) дәл баптаймыз: жадтың буферлік пулын, қосылымдар кэшін және дискіге жазу параметрлерін бөлу.
k6/wrk утилиталары арқылы біз мыңдаған пайдаланушылардың ең жоғарғы ағынын имитациялаймыз. Жауап беру уақытының тұрақтылығын, CPU тұтынуын өлшейміз және нәтижені сандармен дәлелдейміз.
Біз дерекқорларды профильдеу және кэштеудің озық бағдарламалық қамтамасыз етуін қолданамыз.
Кодтың үздік профайлерлері. Інтерактивті «шақыру карталарын» (Call Graphs) ұсынады, бұл PHP немесе Node.js-тің қай жолы процессор ресурстарын алып жатқанын айқын көруге мүмкіндік береді.
ЖЖҚ-дағы аса жылдам кэш-қойма. Ауыр сұраныстардың нәтижелерін, пайдаланушы сессияларын және токендерді сақтау үшін қолданылады, сұраныстарға микросекундтар ішінде жауап береді.
Жүктемелік тестілеуді өткізуге арналған заманауи бағдарламалық қамтамасыз ету. Мыңдаған ағынға асинхронды HTTP-сұрауларын жасайды, бұл бэкендтің шекті төзімділігін бағалауға мүмкіндік береді.
Бағасы дерекқор өлшеміне, серверлік логиканың күрделілігіне және талап етілетін RPS көрсеткішіне байланысты.
| Мүмкіндіктер | SQL және индекстерді оңтайландыру Дерекқорды тазарту және баяу сұраныстарды жеделдету 60 000 ₽ Мерзімі: 7 күнге дейін Тапсырыс беру | Танымал Кэштеу және код Redis интеграциясы, бэкенд кодын профильдеу 95 000 ₽ Мерзімі: 14 күнге дейін Тапсырыс беру | Highload архитектурасы Дерекқор репликациясы, кілтке дейін көлденең масштабтау 180 000 ₽-ден бастап Мерзімі: 20 күннен бастап Талқылау |
|---|---|---|---|
| Оңтайландырылатын SQL-сұраныстардың саны | 30 ауыр сұранысқа дейін | 70 сұранымға дейін + кэштеу | ДҚ құрылымы мен сұрауларын толық қайта өңдеу |
| Redis-кэштеуді интеграциялау | Блоктарды базалық кэштеу | Redis Sentinel үлестірілген кэші | |
| Бэкенд кодын профильдеу (Blackfire / Node) | Базалық профильдеу | Тар жерлерді терең рефакторингтеу | |
| Репликацияны баптау (Master-Slave) | Read/Write ағындарын бөлу | ||
| Стресс-тестілеу (k6 / wrk) | 1 000 RPS дейінгі тест | Есебімен бірге 10 000+ RPS дейінгі тестілер | |
| Серверлер мен ДББЖ конфигурацияларын баптау | my.cnf/postgresql.conf баптауы | ЖЖҚ буферлерін оңтайландыру | ОЖ ядросын, Nginx және ДҚ кешенді баптау (тюнинг) |
Серверіңіз үнемі шамадан тыс жүктелген бе, ал пайдаланушылар сайттың баяулығына шағымдана ма? Бізге жазыңыз — біз жүктеме слепкілерін түсіріп, миллисекундтар қайда жоғалатынын көрсетеміз.
Өтінім қалдырыңыз — біздің Highload-сәулетшілеріміз сайтыңызды жүздеген мың келушілердің ағынына дайындайды, сұраныстарды оңтайландырады, кэштеуді баптайды және жүктеме кезінде тұрақты жұмысты кепілдендіреді.
Бэкендті жүктемеге қарай оңтайландыру