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

Боттарды қалай тоқтаттық: Cloud Dataflow және Pub/Sub көмегімен нақты уақытта скликингті (Click Fraud) анықтау жүйесін құру

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

2024 жылдың басында бізге үлкен e-commerce клиенті классикалық мәселемен жүгінді: Google Ads-тегі жарнамалық бюджет бірнеше сағат ішінде таусылып, ал нақты конверсиялар мүлде болмады. Біз аудит жүргізіп, нақты пайдаланушылар ретінде жасырынған ботнеттердің (click fraud) ауқымды шабуылын анықтадық. Бұл мақалада біз Google Cloud (Pub/Sub, Dataflow, Cloud Armor) негізінде клиентке ондаған мың долларды үнемдеуге көмектескен нақты уақыттағы (real-time) қорғаныс жүйесін қалай құрғанымызды айтып береміз.

Click Fraud дегеніміз не және постфактум аналитика неге жұмыс істемейді?

Click Fraud — бұл жарнаманы қасақана басу (скликивание). Бот кіреді, басады, шығады. Бюджет жұмсалады.

Бұрын біз мұндай боттарды Google Analytics арқылы немесе күннің соңында BigQuery-дегі логтарды талдау арқылы ұстауға тырысатынбыз. Бірақ мәселе мынада: бұл постфактум аналитика. Сіз ақшаңыз ұрланғанын ақшаңыз кетіп қалғаннан кейін ғана білесіз. Бұл ұрлық болғаннан кейін бір күннен соң қоңырау шалатын дабыл жүйесін орнатқанмен бірдей.

Бізге алаяқтарды қылмыс үстінде, дәл сол секундта ұстайтын жүйе қажет болды. Осы кезде сахнаға Stream Processing (деректерді ағындық өңдеу) шығады.

Шешім архитектурасы: Pub/Sub + Dataflow

Кликтерді нақты уақыт режимінде өңдеу үшін біз келесі архитектураны жобаладық:

  1. Load Balancer (Cloud CDN): Барлық кіріс сұрауларды қабылдайды. Барлық хиттердің логтары автоматты түрде Pub/Sub-қа ағынмен (stream) жіберіледі.
  2. Pub/Sub: Хабарлама брокері рөлін атқарады. Ол трафиктің ең жоғары шегін (секундына миллиондаған хабарлама болса да) оңай қабылдайды және құламайды.
  3. Cloud Dataflow (Apache Beam): Біздің жүйеміздің жүрегі. Ол Pub/Sub-тан деректер ағынын алады, IP мекенжайлары бойынша кликтерді топтастырады (терезе функциялары — Windowing көмегімен) және аномалияларды іздейді.
  4. Cloud Functions + Cloud Armor: Dataflow бір IP-ден 10 секунд ішінде 50 клик келгенін анықтаған бойда, Cloud Function-ды іске қосатын (trigger) оқиға жібереді. Бұл функция IP мекенжайды бірден балансировщиктегі Cloud Armor қара тізіміне (blacklist) қосады.

Неге дәл Dataflow?

Dataflow — бұл Apache Beam пайплайндарын орындауға арналған Google Cloud-тағы fully-managed сервис. Ол ағындық өңдеу үшін өте қолайлы, өйткені ол жүктемеге байланысты автоматты түрде масштабталады (auto-scaling). Kafka немесе Flink үшін қанша нода (түйін) көтеру керектігін ойлаудың қажеті жоқ. Сіз логиканы жазасыз — Google Cloud қалғанын өзі жасайды.

Міне, Sliding Windows (сырғымалы терезелер) арқылы Python (Apache Beam) көмегімен кликтерді қалай топтастыратынымыздың мысалы:

import apache_beam as beam
from apache_beam.transforms.window import SlidingWindows

# Pub/Sub-тан ағынды өңдеу пайплайны
def run():
    with beam.Pipeline(options=pipeline_options) as p:
        (
            p
            | 'ReadFromPubSub' >> beam.io.ReadFromPubSub(subscription=my_sub)
            | 'ExtractIP' >> beam.Map(lambda msg: (msg.attributes['client_ip'], 1))
            | 'WindowInto' >> beam.WindowInto(SlidingWindows(size=10, period=5))
            | 'CountPerIP' >> beam.CombinePerKey(sum)
            | 'FilterAnomalies' >> beam.Filter(lambda kv: kv[1] > 50)
            | 'TriggerBlock' >> beam.ParDo(BlockIPFunction())
        )

Бұл кодта біз Pub/Sub-тан оқимыз, IP-ді шығарамыз, ағынды 10 секундтық терезелерге (олар әр 5 секунд сайын жылжып отырады) бөлеміз. Егер бір IP-ден кликтер саны 50-ден асса — біз блоктауды іске қосамыз. Калашников автоматы сияқты қарапайым әрі сенімді.

Кейс: Демалыс күндері $20,000 қалай сақтап қалдық

Біздің бір клиентіміз жұма күні кешке ауқымды кампания бастады. Басталғаннан кейін бірден мониторингтегі графиктер шарықтап кетті: CTR (Click-Through Rate) аспанға ұшты, ал конверсия — нөл. Трафик мыңдаған түрлі IP мекенжайлардан келді.

Егер оларда ескі жүйе (логтарды сағатына бір рет талдау) болса, олар сенбі күні таңертең кампанияның бүкіл бюджетін жұмсап жіберер еді. Бірақ біздің Pub/Sub + Dataflow байламы мінсіз жұмыс істеді.

Жүйе аномалды паттерндерді анықтай бастады: IP мекенжайлар әртүрлі болғанымен (DDoS/ботнет), олар бірдей ескі User-Agent пайдаланды және 1.5 секундтық тең интервалмен клик жасап отырды. Біз Dataflow пайплайнын (стримнің жаңа нұсқасын шығару арқылы) жедел жаңартып, сүзгіні тек IP бойынша ғана емес, сонымен қатар IP + User-Agent + BehaviorPattern комбинациясы бойынша да қостық.

Нәтижесінде Cloud Armor 2 минут ішінде ботнеттен келген 40,000-нан астам IP мекенжайды бұғаттады. Шабуыл тоқтатылып, клиенттің бюджеті сақталып қалды.

Инсайттар және Кеңестер (Tips & Tricks)

  • Windowing-тен қорықпаңыз: Терезе функцияларын (Fixed, Sliding, Session windows) түсіну — бұл дата-инженердің суперкүші. Session Windows пайдаланушы сессияларын талдау үшін тамаша, ал Sliding Windows — жүктеменің спайктерін (шыңдарын) анықтау үшін қолайлы.
  • Watermarks (Ватермарктар): Стримингте деректер жиі кешігіп келеді. Желіде "тұрып қалған" кликтерді жоғалтпау үшін Apache Beam-де дұрыс Watermarks және Late Data өңдеу механизмдерін баптаңыз.
  • Dataflow құны: Егер сіз әрбір ұсақ-түйекті стримдесеңіз, ол қымбатқа түсуі мүмкін. Пайплайндарды оңтайландырыңыз: қоқысты ең ерте кезеңдерде (Pub/Sub-тан оқығаннан кейін бірден) сүзіп тастаңыз.
  • Cloud Armor: Load Balancer-мен бірге тамаша жұмыс істейді. Қолданба деңгейінде (кодта) IP-ді бұғаттауға тырыспаңыз — бұл сіздің CPU-ды өлтіреді. Желінің шетінде (Edge) бұғаттаңыз.

Метрикалар мен Бенчмарктер

Графиктерге назар аударайық. Біз ескі жүйенің (batch processing) және жаңа жүйенің (stream processing) реакция уақытын салыстырдық.

Шабуылға реакция уақыты (Сек)

Ескі batch-жүйені (Cron + BQ) және жаңа stream-жүйені (Dataflow) салыстыру.

Графиктен көрініп тұрғандай, стримингтік архитектура шабуылға реакцияның орташа уақытын 60 минуттан (батчтарды талдау) таңғажайып 1.5 секундқа дейін төмендетті. Ботнет елеулі қаржылық зиян келтіріп үлгермей тұрып бұғатталады.

Төменде инцидент кезінде бұғатталған сұраулардың статистикасы берілген. Cloud Armor алғашқы минуттарда зиянды трафиктің 99%-ын қалай кесіп тастағанын көре аласыз.

Бұғатталған боттар саны

Шабуылдың алғашқы минуттарында Cloud Armor-да күдікті IP-лерді бұғаттау динамикасы.

Қорытынды

Stream processing — бұл жай ғана әдемі баззворд емес. Бұл ботнеттер күннен күнге ақылдырақ болып жатқан заманауи вебтегі қажеттілік. Pub/Sub + Dataflow + Cloud Armor байламы — бұл алғашқы күрделі шабуыл кезінде-ақ өзін ақтайтын enterprise-grade шешім.

Егер сіздің бюджетіңіз скликингке байланысты еріп жатса, ал аналитика жауап бермесе — стримингке көшетін кез келген шығар. ОЗАТ зертханасына хабарласыңыз, біз сіздің бизнесіңіз үшін сенімді қалқан құрамыз!

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

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

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

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

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

Пікірлер (0)