Инженерлік блог

Қалай біз Скауттар Академиясын құрдық: Технологиялар, SMS, Күнтізбе және ОЗАТ-қа жұмысқа орналасу

28.07.2026
Шарафутдинов Р.

Сәлем, әріптестер және болашақ өсу хакерлері! Қазіргі IT нарығында дайын мамандарды табу — шөл даладан су іздегенмен бірдей. Тәжірибелі инженерлер мен техникалық сатушылар (technical sales) өздерінің жайлы орындарында отыр, ал жаңа бастаған мамандар теориялық курстардың тұңғиығында адасып жүр. Біз ОЗАТ командасында бұл мәселені түбегейлі шешуді ұйғардық. Бізге жай ғана қызметкерлер емес, нарықтың тамырын басып, бизнестің ауруын таба алатын және оған ең озық бұлттық шешімдерді ұсына алатын скауттар қажет болды. Осылайша ОЗАТ Скаут Академиясы жобасы дүниеге келді.

Бірақ біз қарапайым жолмен жүрмедік. Google Forms пен қарапайым WordPress лендингін біріктіре салу біздің инженерлік амбициямызға сай келмеді. Біз толыққанды, қауіпсіз, масштабталатын және толығымен автоматтандырылған LMS (Learning Management System) экожүйесін жасадық. Бұл мақалада мен сіздерді біздің платформаның капотының астына алып барып, архитектуралық шешімдерімізбен, код үзінділерімен және техникалық қиындықтарды қалай жеңгенімізбен бөлісемін.

Академияның архитектурасы: Серверсіз шешімдердің күші

Платформаны жобалау кезінде біздің алдымызда бірнеше маңызды міндеттер тұрды: жоғары қауіпсіздік (security), нақты уақыт режиміндегі деректер синхронизациясы (real-time sync) және пайдаланушы интерфейсінің мінсіз жылдамдығы (UI responsiveness). Осы мақсатта біз серверсіз (serverless) архитектураны таңдадық. Біздің бүкіл инфрақұрылымымыз Google Cloud Platform (GCP) және Firebase негізінде құрылған. Бұл бізге инфрақұрылымды қолдауға кететін уақытты үнемдеуге және тікелей өнімді дамытуға назар аударуға мүмкіндік берді.

Төмендегі диаграммада біздің жүйенің негізгі компоненттері мен олардың өзара әрекеттесу сызбасы көрсетілген. Бұл біздің студенттер мен әкімшілер үшін деректердің қалай қауіпсіз және жылдам тасымалданатынын түсінуге көмектеседі:

Академиядағы студенттердің өсу воронкасы

Тіркелген сәттен бастап алғашқы сәтті келісімшартқа дейінгі студенттер санының динамикасы (ағымдағы кохорта)

1. Дерекқор және Firebase Firestore негізіндегі бэкенд

Біздің жүйеміздің жүрегі — Cloud Firestore. Бұл құжатқа бағытталған NoSQL дерекқоры, ол бізге деректер құрылымын икемді түрде өзгертуге және пайдаланушыларға нақты уақыт режимінде жаңартуларды жеткізуге мүмкіндік береді. Әрбір скауттың оқу үлгерімі, тапсырған үй тапсырмалары және жеке ақпараты жеке құжаттарда сақталады.

Бірақ қауіпсіздікті қалай қамтамасыз еттік? Әрине, Firestore Security Rules арқылы. Біз пайдаланушылардың тек өздеріне тиесілі деректерді ғана оқи және жаза алуын қамтамасыз ететін ережелерді жаздық. Мысалы, төмендегі код үзіндісі пайдаланушының профилін қорғау ережесін көрсетеді:

service cloud.firestore { match /databases/{database}/documents { match /users/{userId} { allow read, update: if request.auth != null && request.auth.uid == userId; allow create: if request.auth != null; } match /modules/{moduleId} { allow read: if request.auth != null; allow write: if request.auth.token.admin == true; } } }

Бұл ережелер база деңгейінде жұмыс істейді, сондықтан фронтендте (frontend) қандай да бір қателік кетсе де, зиянкестер басқа пайдаланушылардың деректеріне қол жеткізе алмайды. Барлық деректер алмасу gRPC протоколы арқылы өтеді, бұл деректерді тасымалдау жылдамдығын барынша арттырады.

2. SMS-аутентификация және Қауіпсіздік

Пайдаланушы тәжірибесін (UX) жақсарту үшін біз дәстүрлі логин/құпия сөз жұбынан бас тарттық. Оның орнына Firebase Authentication арқылы іске асырылған SMS OTP (One-Time Password) жүйесін енгіздік. Бұл шешімнің бірнеше артықшылығы бар: құпия сөзді ұмытып қалу қаупі жоқ және тіркелген телефон нөмірі нақты пайдаланушыға тиесілі екеніне кепілдік бар.

Фронтендте біз телефон нөмірлерін дұрыс енгізу үшін IMask кітапханасын қолдандық. Бұл пайдаланушылардың қате форматта нөмір жазуына жол бермейді. Алайда, SMS жіберу қымбатқа түсуі мүмкін, әсіресе біздің жүйеге DDoS немесе SMS-flooding шабуылдары жасалса. Осының алдын алу үшін біз Firebase App Check жүйесін қостық. Ол тек біздің ресми қолданбамыздан келген сұраныстарды ғана қабылдайды.

Сонымен қатар, біз Cloud Functions арқылы әрбір IP мекенжай мен телефон нөміріне шектеу (rate limiting) қойдық. Егер пайдаланушы 1 минут ішінде 3 реттен көп код сұраса, жүйе оны уақытша бұғаттайды. Төменде осы функцияның негізгі логикасы берілген:

const functions = require('firebase-functions'); const admin = require('firebase-admin'); admin.initializeApp(); exports.limitSmsRequests = functions.https.onCall(async (data, context) => { const phoneNumber = data.phoneNumber; const ipAddress = context.rawRequest.ip; const limitRef = admin.firestore().collection('sms_limits').doc(phoneNumber); const doc = await limitRef.get(); if (doc.exists && (Date.now() - doc.data().lastRequested < 60000)) { throw new functions.https.HttpsError('resource-exhausted', 'Сұраныс тым жиі жіберілді. Сәл күте тұрыңыз.'); } await limitRef.set({ lastRequested: Date.now(), ip: ipAddress }); return { success: true }; });

3. Интерактивті Күнтізбе және Фронтендті Оңтайландыру

Біздің мақсатымыз — оқу процесін барынша интерактивті ету. Ол үшін бізге күнтізбе қажет болды. Дайын Google Calendar iframe шешімдері бізге келмеді, себебі олар стильді теңшеуге мүмкіндік бермейді және беттің жүктелу жылдамдығын (PageSpeed) айтарлықтай төмендетеді. Біз React негізінде кастомды күнтізбе компонентін жаздық. Ол Firestore-дағы /events топтамасымен тікелей байланысқан.

Күнтізбедегі әрбір оқиға (вебинарлар, дедлайндар, жеке кездесулер) нақты уақытта жаңарып отырады. Фронтендтің өнімділігін арттыру үшін біз келесі әдістерді қолдандық:

  • React.memo: Күнтізбедегі күн ұяшықтарын (day cells) тек олардың ішіндегі деректер өзгергенде ғана қайта рендерлеу (re-render) үшін қолданылды.
  • Date-fns: Салмағы ауыр Moment.js кітапханасының орнына жеңіл әрі заманауи date-fns кітапханасын пайдаландық. Бұл біздің bundle size-ды 45%-ға азайтты.
  • Lazy loading: Күнтізбе бетін пайдаланушы сол бөлімге өткенде ғана жүктейтіндей етіп React.lazy және Suspense арқылы бөліп қойдық.

4. Сабақтар Платформасы және Стейт Менеджмент

Оқу платформасында біз Zustand кітапханасын стейт менеджмент (state management) үшін қолдандық. Ол өте жеңіл және Redux-пен салыстырғанда артық кодты (boilerplate code) қажет етпейді. Студент сабақ видеосын көргенде немесе тест тапсырғанда, оның прогресі лезде Zustand store-да жаңартылып, асинхронды түрде Firestore-ға жіберіледі.

Бұл пайдаланушы интерфейсінің ешқандай кідіріссіз (lag-free) жұмыс істеуін қамтамасыз етеді. Тіпті интернет байланысы нашар болса да, Firestore Offline Persistence мүмкіндігінің арқасында деректер жергілікті жерде сақталып, байланыс қалпына келгенде автоматты түрде синктелінеді.

Бұл Академия кімдерге арналған?

Біздің академия тек қана теорияны жаттайтын орын емес. Бұл — нақты практикалық дағдыларды меңгеретін алаң. Біз келесі санаттағы адамдарды күтеміз:

  • IT-ге жаңадан қадам басқандар: Егер сіз "екі аптада бағдарламашы бол" деген бос уәделерден шаршасаңыз, біз сізге нақты нарықтық құндылықты үйретеміз. Сіз бизнестің техникалық мәселелерін анықтауды және оларды Google Cloud арқылы шешуді үйренесіз.
  • Сейлз-менеджерлер: Қарапайым заттарды сатудан жалықтыңыз ба? Күрделі инфрақұрылымдық жобаларды, AI шешімдерді және бұлттық миграцияны сатуды үйреніңіз. Бұл — нарықтағы ең жоғары ақы төленетін дағдылардың бірі.
  • Техникалық энтузиастар: Заманауи технологиялардың қалай жұмыс істейтінін түсініп, өз жобаларын іске қосқысы келетіндер үшін таптырмас мүмкіндік.

Нақты мысал: Клиенттің инфрақұрылымын оңтайландыру

Біздің скауттардың басты міндеті — клиенттердің веб-ресурстарын талдап, олардың тиімділігін арттыруға көмектесу. Мысалы, жақында біздің бір студентіміз ескі физикалық серверде (legacy server) жұмыс істейтін жергілікті электронды коммерция сайтын тапты. Сайттың жүктелу жылдамдығы өте төмен болды, бұл клиенттердің кетуіне және сатылымның азаюына әкеп соқты.

Студент біздің әдістемеміз бойынша сайтқа экспресс-аудит жүргізіп, оны Google Cloud Run және Cloud CDN-ге көшіруді ұсынды. Миграциядан кейін сайттың өнімділігі мен жүктелу уақыты қалай өзгергенін төмендегі график арқылы көре аласыз:

Веб-ресурсты Google Cloud-қа көшіргеннен кейінгі өнімділік өзгерісі

Беттің жүктелу жылдамдығы (миллисекундпен, төмен болған сайын жақсы)

Бұл нәтиже клиентті таң қалдырды. Ол жүктелу уақытының қысқаруы арқылы конверсияны 25%-ға арттырды, ал біздің скаут осы сәтті келісімшарттан өз пайызын алды. Оқудың құны осындай 1-2 келісімнен-ақ толық өтеледі.

Неліктен бұл сіздің мансабыңыздағы ең жақсы таңдау?

Біріншіден, біздің Gemini Pro негізіндегі AI-менторымыз сізге 24/7 режимінде көмектесуге дайын. Ол Google Vertex AI API арқылы жұмыс істейді және кез келген күрделі техникалық сұраққа лезде жауап бере алады. Екіншіден, ең үздік түлектерді біз тікелей ОЗАТ штатына жұмысқа қабылдаймыз. Сіз дайын тапсырыстар ағыны мен біздің мықты инженерлердің қолдауын аласыз.

Қорытынды

ОЗАТ Скаут Академиясы — бұл жай ғана білім беру платформасы емес, бұл жаңа буын IT мамандарын даярлайтын қуатты экожүйе. Біз бұл өнімді жасау үшін жүздеген сағат код жаздық, интерфейсті барынша ыңғайлы еттік. Егер сіз заманауи технологиялар әлеміне еніп, нақты жобаларда жұмыс істегіңіз келсе және өз мансабыңызда ең үлкен pull request жасауға дайын болсаңыз — біз сізді күтеміз. Тіркеліңіз, SMS арқылы растаңыз және бізбен бірге жаңа биіктерді бағындырыңыз!

Рустам Шарафутдинов

Рустам Шарафутдинов

Инженерлік блог авторы

Google Cloud архитектурасы саласындағы сарапшы және 15 жылдан астам тәжірибесі бар Senior Full-Stack әзірлеушісі. Ақауға төзімді архитектураларға, жоғары жүктемелі жобаларды оңтайландыруға және AI (Vertex AI) интеграциясына маманданған.

Сараптама: GCP, Kubernetes, Микросервистер, React, Node.js

Пікірлер (0)