{"id":480811,"date":"2026-05-24T13:50:15","date_gmt":"2026-05-24T13:50:15","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=480811"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=480811","title":{"rendered":"\u0420\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0439\u0442\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b: stackfile"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u0435 Helm chart \u0438 \u043d\u0435 values \u0444\u0430\u0439\u043b. \u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u044d\u0442\u043e Torque stack file. \u0412 \u043d\u0435\u043c \u043e\u043f\u0438\u0441\u0430\u043d \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0446\u0435\u043b\u043e\u0439 fraud \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b: \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0445\u043e\u0441\u0442\u0430, \u0434\u043e\u0441\u0442\u0443\u043f \u043a Kubernetes, \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435, \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, batch \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430, replay \u0438 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f.<\/p>\n<p>Helmfile \u043c\u043e\u0436\u0435\u0442 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e Helm \u0440\u0435\u043b\u0438\u0437\u043e\u0432. Argo CD \u0438 Flux \u043c\u043e\u0433\u0443\u0442 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c Kubernetes \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0441 Git. Terraform \u0438 Pulumi \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443. Argo Workflows \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c jobs. \u0412 \u044d\u0442\u043e\u043c \u0441\u0442\u0435\u043a\u0435 \u0442\u0430\u043a\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0442\u0430\u043c, \u0433\u0434\u0435 \u043e\u043d\u0438 \u0443\u043c\u0435\u0441\u0442\u043d\u044b, \u043d\u043e \u0433\u0440\u0430\u043d\u0438\u0446\u0430 \u0441\u0442\u0435\u043a\u0430 \u0448\u0438\u0440\u0435. \u0420\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e Linux \u0445\u043e\u0441\u0442\u0430, \u0441\u043e\u0437\u0434\u0430\u0435\u0442 k3s lab \u043d\u0430 Firecracker microVM, \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0439 tunnel \u0434\u043b\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a Kubernetes, \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0438\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 S3 bucket, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b, \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442 fraud workloads, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 Spark, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 replay \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043f\u0443\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043d\u0430\u0440\u0443\u0436\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430.<\/p>\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 \u043b\u0435\u0436\u0438\u0442 \u0432 <code>stacks\/fraud-platform<\/code>. \u0412 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u0435\u0441\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 <code>stack.yaml<\/code>, production shaped entrypoint <code>stack-packaged.yaml<\/code> \u0438 profile values, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 <code>values-prod.yaml<\/code>. Lab profile \u043e\u0436\u0438\u0434\u0430\u0435\u0442 <code>TORQUE_LAB_SSH<\/code> \u0434\u043b\u044f \u0446\u0435\u043b\u0435\u0432\u043e\u0433\u043e \u0445\u043e\u0441\u0442\u0430 \u0438 <code>TORQUE_LAB_PUBLIC_IP<\/code> \u0434\u043b\u044f \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0445 endpoint \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a9f\/3da\/660\/a9f3da66046ef3ad2690a591467571fb.png\" width=\"2410\" height=\"1336\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/a9f\/3da\/660\/a9f3da66046ef3ad2690a591467571fb.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a9f\/3da\/660\/a9f3da66046ef3ad2690a591467571fb.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<h3>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b<\/h3>\n<p>\u0423 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0434\u0432\u0430 \u043f\u0443\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u043f\u0443\u0442\u044c \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u044b\u0439. \u041e\u043d \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0432 payments API. \u042d\u0442\u043e \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0432\u0445\u043e\u0434 \u0434\u043b\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u0439. API \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 card payment events, \u043f\u0438\u0448\u0435\u0442 \u043a\u0430\u0436\u0434\u043e\u0435 raw \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u0432 topic <code>payments.raw<\/code> \u0432 Redpanda \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 raw JSON object \u0432 S3. Redpanda \u0432 \u044d\u0442\u043e\u043c \u0441\u0442\u0435\u043a\u0435 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u044c. \u041e\u043d \u0442\u0430\u043a\u0436\u0435 \u0434\u0430\u0435\u0442 schema registry \u0441 subjects \u0434\u043b\u044f raw payment events, risk events \u0438 payment decisions. \u0424\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0447\u0438\u0442\u0430\u0435\u0442 \u044d\u0442\u0438 subjects \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 backward compatibility.<\/p>\n<p>Flink \u0447\u0438\u0442\u0430\u0435\u0442 raw topic \u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 scoring request. Stream processor \u043e\u0442\u0434\u0435\u043b\u0435\u043d \u043e\u0442 model service. Ray Serve \u0434\u0435\u0440\u0436\u0438\u0442 model endpoint \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 score. Flink \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 decision \u0432 ClickHouse \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 risk output \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0447\u0435\u0440\u0435\u0437 Redpanda. ClickHouse \u0437\u0434\u0435\u0441\u044c \u0431\u044b\u0441\u0442\u0440\u044b\u0439 operator store. \u0412 \u043d\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c decisions, fraud rates, merchant behavior \u0438 batch summaries \u0431\u0435\u0437 \u0447\u0442\u0435\u043d\u0438\u044f lake files.<\/p>\n<p>\u0412\u0442\u043e\u0440\u043e\u0439 \u043f\u0443\u0442\u044c \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 S3. Argo \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 Spark workflow \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430. Spark \u0447\u0438\u0442\u0430\u0435\u0442 raw payment objects \u0438 risk decisions, \u0441\u0447\u0438\u0442\u0430\u0435\u0442 aggregate fraud features, \u043f\u0438\u0448\u0435\u0442 curated JSON artifact \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 S3, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 batch rows \u0432 ClickHouse \u0438 \u043a\u043e\u043c\u043c\u0438\u0442\u0438\u0442 \u0442\u0440\u0438 Iceberg \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0447\u0435\u0440\u0435\u0437 REST catalog:<\/p>\n<pre><code>raw_paymentsrisk_eventsbatch_feature_summary<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>Trino \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 SQL \u0441\u043b\u043e\u0435\u043c \u043f\u043e\u0432\u0435\u0440\u0445 \u0434\u0432\u0443\u0445 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449. \u041e\u043d \u0447\u0438\u0442\u0430\u0435\u0442 ClickHouse \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u044b\u0445 decisions \u0438 Iceberg \u0434\u043b\u044f lakehouse tables. SigNoz \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 health surface \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 ClickHouse \u043a\u0430\u043a telemetry store.<\/p>\n<p>Kubernetes layout \u0442\u043e\u0436\u0435 \u0447\u0430\u0441\u0442\u044c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b. \u041f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u0440\u0430\u0437\u043c\u0435\u0447\u0430\u0435\u0442 Firecracker \u043d\u043e\u0434\u044b \u043f\u043e \u0440\u043e\u043b\u044f\u043c workloads: control, observability, events, processing, machine learning and batch, analytics. Redpanda \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 namespace <code>data<\/code>. Flink \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 namespace <code>stream<\/code>. Ray \u0438 Spark \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432 namespace <code>ml<\/code>. API \u0438 generator \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432 namespace <code>apps<\/code>. SigNoz \u0438 \u0435\u0433\u043e ClickHouse store \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432 <code>observability<\/code>. Trino \u0438 Iceberg REST \u0432\u044b\u043d\u0435\u0441\u0435\u043d\u044b \u043d\u0430 analytics node, \u0447\u0442\u043e\u0431\u044b SQL \u0434\u043e\u0441\u0442\u0443\u043f \u0431\u044b\u043b \u043e\u0442\u0434\u0435\u043b\u0435\u043d \u043e\u0442 stream processing \u0438 model serving.<\/p>\n<h3>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 Torque stack<\/h3>\n<p>Stack graph \u044f\u0432\u043d\u043e \u0437\u0430\u0434\u0430\u0435\u0442 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439. \u0425\u043e\u0441\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c tunnel. S3 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a workloads \u043f\u043e\u043b\u0443\u0447\u0430\u0442 bucket credentials. Platform services \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b \u0434\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 application workloads. Public access \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0434\u043e batch job \u0438 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a.<\/p>\n<pre><code class=\"yaml\">nodes:  - name: fc-k8s-bootstrap  - name: fc-k8s-tunnel    needs: [fc-k8s-bootstrap]  - name: aws-s3-bootstrap    needs: [fc-k8s-tunnel]  - name: platform-install    needs: [aws-s3-bootstrap]  - name: workloads-install    needs: [platform-install]  - name: replay-backfill    needs: [argo-spark-batch]  - name: verify-e2e    needs: [replay-backfill]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 node \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u0437\u0430 \u0441\u0432\u043e\u0439 \u0442\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b. Bootstrap nodes \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 host commands. Platform node \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 Kubernetes resources \u0438 \u0440\u0430\u0437\u043c\u0435\u0447\u0430\u0435\u0442 \u043d\u043e\u0434\u044b \u0434\u043b\u044f control, events, processing, batch \u0438 analytics workloads. Workload node \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 Redpanda, Flink, Ray, Spark, Trino, Iceberg REST, payments API \u0438 jobs \u0434\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0441\u0445\u0435\u043c. Batch \u0438 replay nodes \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442 Argo workflows. Final node \u044d\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u0430 \u043d\u0435 \u043f\u0443\u043d\u043a\u0442 \u0432 runbook.<\/p>\n<p>Profiles \u0432\u044b\u043d\u043e\u0441\u044f\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0439 \u0438\u0437 command text. Lab profile \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 Firecracker host, public IP checks, NodePort exposure \u0438 generated traffic. Stage \u0438\u043b\u0438 production profile \u043c\u043e\u0436\u0435\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 kubeconfig, pinned images, real ingress \u0438 secret references. \u0413\u0440\u0430\u0444 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0447\u0438\u0442\u0430\u0435\u043c\u044b\u043c, \u0430 operational inputs \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 profile.<\/p>\n<p>\u0423 replay node \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442:<\/p>\n<pre><code class=\"yaml\">host.command.run:  command: scripts\/replay-backfill.sh apply  deleteCommand: scripts\/replay-backfill.sh delete  timeout: 20m<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>Replay node \u0447\u0438\u0442\u0430\u0435\u0442 <code>payments.raw<\/code> \u0441 \u043d\u0430\u0447\u0430\u043b\u0430, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 Spark backfill workflow, \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 Iceberg run id \u0438 \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 Trino, \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043b\u0438 \u0441\u0442\u0440\u043e\u043a\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 stack \u043f\u043e\u043b\u0435\u0437\u043d\u0435\u0435, \u0447\u0435\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u0441 manifests. Deploy step \u0438 data proof \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u043c \u0433\u0440\u0430\u0444\u0435.<\/p>\n<h3>\u0412\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f<\/h3>\n<p>\u0424\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0447\u0438\u0442\u0430\u0435\u0442 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 endpoints: payments API, SigNoz, Ray, Spark, Flink \u0438 Trino. \u0417\u0430\u0442\u0435\u043c \u043e\u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0438 \u0441\u0447\u0438\u0442\u0430\u0435\u0442 raw \u0438 curated objects \u0432 S3, \u0434\u0435\u043b\u0430\u0435\u0442 queries \u043a ClickHouse \u043f\u043e decision \u0438 batch rows, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 Redpanda schema subjects, \u0434\u0435\u043b\u0430\u0435\u0442 Trino queries \u043f\u043e ClickHouse \u0438 Iceberg, \u0430 \u0437\u0430\u0442\u0435\u043c \u0447\u0438\u0442\u0430\u0435\u0442 sample risk message \u0438\u0437 Redpanda.<\/p>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0431\u044b\u043b \u0442\u0430\u043a\u0438\u043c:<\/p>\n<pre><code>s3_raw_objects=4365s3_curated_objects=11trino_payment_decisions=632iceberg_raw_payments=1100iceberg_risk_events=1100iceberg_batch_features=108risk_high_watermark=855backfill_run_id=replay-20260524130620iceberg_backfill_batch_features=36<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u042d\u0442\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0438 \u0435\u0441\u0442\u044c release evidence. Stack \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0441\u0435\u0440\u0432\u0438\u0441\u044b. \u041e\u043d \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u043e\u0448\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 API, \u0434\u043e\u0448\u043b\u0438 \u0434\u043e Redpanda, \u0431\u044b\u043b\u0438 \u043e\u0446\u0435\u043d\u0435\u043d\u044b \u0447\u0435\u0440\u0435\u0437 Flink \u0438 Ray, \u043f\u043e\u043f\u0430\u043b\u0438 \u0432 ClickHouse, \u0431\u044b\u043b\u0438 \u043f\u0435\u0440\u0435\u0441\u0447\u0438\u0442\u0430\u043d\u044b \u0447\u0435\u0440\u0435\u0437 Spark, \u0431\u044b\u043b\u0438 \u0437\u0430\u043a\u043e\u043c\u043c\u0438\u0447\u0435\u043d\u044b \u0432 Iceberg \u0438 \u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 Trino.<\/p>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043c\u0435\u0436\u0434\u0443 \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435\u043c chart \u0438 \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435\u043c platform.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1038700\/\">https:\/\/habr.com\/ru\/articles\/1038700\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u0435 Helm chart \u0438 \u043d\u0435 values \u0444\u0430\u0439\u043b. \u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u044d\u0442\u043e Torque stack file. \u0412 \u043d\u0435\u043c \u043e\u043f\u0438\u0441\u0430\u043d \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0446\u0435\u043b\u043e\u0439 fraud \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b: \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0445\u043e\u0441\u0442\u0430, \u0434\u043e\u0441\u0442\u0443\u043f \u043a Kubernetes, \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435, \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, batch \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430, replay \u0438 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f.Helmfile \u043c\u043e\u0436\u0435\u0442 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e Helm \u0440\u0435\u043b\u0438\u0437\u043e\u0432. Argo CD \u0438 Flux \u043c\u043e\u0433\u0443\u0442 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c Kubernetes \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0441 Git. Terraform \u0438 Pulumi \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443. Argo Workflows \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c jobs. \u0412 \u044d\u0442\u043e\u043c \u0441\u0442\u0435\u043a\u0435 \u0442\u0430\u043a\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0442\u0430\u043c, \u0433\u0434\u0435 \u043e\u043d\u0438 \u0443\u043c\u0435\u0441\u0442\u043d\u044b, \u043d\u043e \u0433\u0440\u0430\u043d\u0438\u0446\u0430 \u0441\u0442\u0435\u043a\u0430 \u0448\u0438\u0440\u0435. \u0420\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e Linux \u0445\u043e\u0441\u0442\u0430, \u0441\u043e\u0437\u0434\u0430\u0435\u0442 k3s lab \u043d\u0430 Firecracker microVM, \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0439 tunnel \u0434\u043b\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a Kubernetes, \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0438\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 S3 bucket, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b, \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442 fraud workloads, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 Spark, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 replay \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043f\u0443\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043d\u0430\u0440\u0443\u0436\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430.\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 \u043b\u0435\u0436\u0438\u0442 \u0432 stacks\/fraud-platform. \u0412 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u0435\u0441\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 stack.yaml, production shaped entrypoint stack-packaged.yaml \u0438 profile values, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 values-prod.yaml. Lab profile \u043e\u0436\u0438\u0434\u0430\u0435\u0442 TORQUE_LAB_SSH \u0434\u043b\u044f \u0446\u0435\u043b\u0435\u0432\u043e\u0433\u043e \u0445\u043e\u0441\u0442\u0430 \u0438 TORQUE_LAB_PUBLIC_IP \u0434\u043b\u044f \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0445 endpoint \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a.\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b\u0423 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0434\u0432\u0430 \u043f\u0443\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0445.\u041f\u0435\u0440\u0432\u044b\u0439 \u043f\u0443\u0442\u044c \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u044b\u0439. \u041e\u043d \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0432 payments API. \u042d\u0442\u043e \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0432\u0445\u043e\u0434 \u0434\u043b\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u0439. API \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 card payment events, \u043f\u0438\u0448\u0435\u0442 \u043a\u0430\u0436\u0434\u043e\u0435 raw \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u0432 topic payments.raw \u0432 Redpanda \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 raw JSON object \u0432 S3. Redpanda \u0432 \u044d\u0442\u043e\u043c \u0441\u0442\u0435\u043a\u0435 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u044c. \u041e\u043d \u0442\u0430\u043a\u0436\u0435 \u0434\u0430\u0435\u0442 schema registry \u0441 subjects \u0434\u043b\u044f raw payment events, risk events \u0438 payment decisions. \u0424\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0447\u0438\u0442\u0430\u0435\u0442 \u044d\u0442\u0438 subjects \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 backward compatibility.Flink \u0447\u0438\u0442\u0430\u0435\u0442 raw topic \u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 scoring request. Stream processor \u043e\u0442\u0434\u0435\u043b\u0435\u043d \u043e\u0442 model service. Ray Serve \u0434\u0435\u0440\u0436\u0438\u0442 model endpoint \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 score. Flink \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 decision \u0432 ClickHouse \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 risk output \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0447\u0435\u0440\u0435\u0437 Redpanda. ClickHouse \u0437\u0434\u0435\u0441\u044c \u0431\u044b\u0441\u0442\u0440\u044b\u0439 operator store. \u0412 \u043d\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c decisions, fraud rates, merchant behavior \u0438 batch summaries \u0431\u0435\u0437 \u0447\u0442\u0435\u043d\u0438\u044f lake files.\u0412\u0442\u043e\u0440\u043e\u0439 \u043f\u0443\u0442\u044c \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 S3. Argo \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 Spark workflow \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430. Spark \u0447\u0438\u0442\u0430\u0435\u0442 raw payment objects \u0438 risk decisions, \u0441\u0447\u0438\u0442\u0430\u0435\u0442 aggregate fraud features, \u043f\u0438\u0448\u0435\u0442 curated JSON artifact \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 S3, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 batch rows \u0432 ClickHouse \u0438 \u043a\u043e\u043c\u043c\u0438\u0442\u0438\u0442 \u0442\u0440\u0438 Iceberg \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0447\u0435\u0440\u0435\u0437 REST catalog:raw_paymentsrisk_eventsbatch_feature_summaryTrino \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 SQL \u0441\u043b\u043e\u0435\u043c \u043f\u043e\u0432\u0435\u0440\u0445 \u0434\u0432\u0443\u0445 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449. \u041e\u043d \u0447\u0438\u0442\u0430\u0435\u0442 ClickHouse \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u044b\u0445 decisions \u0438 Iceberg \u0434\u043b\u044f lakehouse tables. SigNoz \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 health surface \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 ClickHouse \u043a\u0430\u043a telemetry store.Kubernetes layout \u0442\u043e\u0436\u0435 \u0447\u0430\u0441\u0442\u044c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b. \u041f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u0440\u0430\u0437\u043c\u0435\u0447\u0430\u0435\u0442 Firecracker \u043d\u043e\u0434\u044b \u043f\u043e \u0440\u043e\u043b\u044f\u043c workloads: control, observability, events, processing, machine learning and batch, analytics. Redpanda \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 namespace data. Flink \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 namespace stream. Ray \u0438 Spark \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432 namespace ml. API \u0438 generator \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432 namespace apps. SigNoz \u0438 \u0435\u0433\u043e ClickHouse store \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432 observability. Trino \u0438 Iceberg REST \u0432\u044b\u043d\u0435\u0441\u0435\u043d\u044b \u043d\u0430 analytics node, \u0447\u0442\u043e\u0431\u044b SQL \u0434\u043e\u0441\u0442\u0443\u043f \u0431\u044b\u043b \u043e\u0442\u0434\u0435\u043b\u0435\u043d \u043e\u0442 stream processing \u0438 model serving.\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 Torque stackStack graph \u044f\u0432\u043d\u043e \u0437\u0430\u0434\u0430\u0435\u0442 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439. \u0425\u043e\u0441\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c tunnel. S3 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a workloads \u043f\u043e\u043b\u0443\u0447\u0430\u0442 bucket credentials. Platform services \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b \u0434\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 application workloads. Public access \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0434\u043e batch job \u0438 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a.nodes:  &#8212; name: fc-k8s-bootstrap  &#8212; name: fc-k8s-tunnel    needs: [fc-k8s-bootstrap]  &#8212; name: aws-s3-bootstrap    needs: [fc-k8s-tunnel]  &#8212; name: platform-install    needs: [aws-s3-bootstrap]  &#8212; name: workloads-install    needs: [platform-install]  &#8212; name: replay-backfill    needs: [argo-spark-batch]  &#8212; name: verify-e2e    needs: [replay-backfill]\u041a\u0430\u0436\u0434\u044b\u0439 node \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u0437\u0430 \u0441\u0432\u043e\u0439 \u0442\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b. Bootstrap nodes \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 host commands. Platform node \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 Kubernetes resources \u0438 \u0440\u0430\u0437\u043c\u0435\u0447\u0430\u0435\u0442 \u043d\u043e\u0434\u044b \u0434\u043b\u044f control, events, processing, batch \u0438 analytics workloads. Workload node \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 Redpanda, Flink, Ray, Spark, Trino, Iceberg REST, payments API \u0438 jobs \u0434\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0441\u0445\u0435\u043c. Batch \u0438 replay nodes \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442 Argo workflows. Final node \u044d\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u0430 \u043d\u0435 \u043f\u0443\u043d\u043a\u0442 \u0432 runbook.Profiles \u0432\u044b\u043d\u043e\u0441\u044f\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0439 \u0438\u0437 command text. Lab profile \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 Firecracker host, public IP checks, NodePort exposure \u0438 generated traffic. Stage \u0438\u043b\u0438 production profile \u043c\u043e\u0436\u0435\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 kubeconfig, pinned images, real ingress \u0438 secret references. \u0413\u0440\u0430\u0444 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0447\u0438\u0442\u0430\u0435\u043c\u044b\u043c, \u0430 operational inputs \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 profile.\u0423 replay node \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442:host.command.run:  command: scripts\/replay-backfill.sh apply  deleteCommand: scripts\/replay-backfill.sh delete  timeout: 20mReplay node \u0447\u0438\u0442\u0430\u0435\u0442 payments.raw \u0441 \u043d\u0430\u0447\u0430\u043b\u0430, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 Spark backfill workflow, \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 Iceberg run id \u0438 \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 Trino, \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043b\u0438 \u0441\u0442\u0440\u043e\u043a\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 stack \u043f\u043e\u043b\u0435\u0437\u043d\u0435\u0435, \u0447\u0435\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u0441 manifests. Deploy step \u0438 data proof \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u043c \u0433\u0440\u0430\u0444\u0435.\u0412\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f\u0424\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0447\u0438\u0442\u0430\u0435\u0442 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 endpoints: payments API, SigNoz, Ray, Spark, Flink \u0438 Trino. \u0417\u0430\u0442\u0435\u043c \u043e\u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0438 \u0441\u0447\u0438\u0442\u0430\u0435\u0442 raw \u0438 curated objects \u0432 S3, \u0434\u0435\u043b\u0430\u0435\u0442 queries \u043a ClickHouse \u043f\u043e decision \u0438 batch rows, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 Redpanda schema subjects, \u0434\u0435\u043b\u0430\u0435\u0442 Trino queries \u043f\u043e ClickHouse \u0438 Iceberg, \u0430 \u0437\u0430\u0442\u0435\u043c \u0447\u0438\u0442\u0430\u0435\u0442 sample risk message \u0438\u0437 Redpanda.\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0431\u044b\u043b \u0442\u0430\u043a\u0438\u043c:s3_raw_objects=4365s3_curated_objects=11trino_payment_decisions=632iceberg_raw_payments=1100iceberg_risk_events=1100iceberg_batch_features=108risk_high_watermark=855backfill_run_id=replay-20260524130620iceberg_backfill_batch_features=36\u042d\u0442\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0438 \u0435\u0441\u0442\u044c release evidence. Stack \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0441\u0435\u0440\u0432\u0438\u0441\u044b. \u041e\u043d \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u043e\u0448\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 API, \u0434\u043e\u0448\u043b\u0438 \u0434\u043e Redpanda, \u0431\u044b\u043b\u0438 \u043e\u0446\u0435\u043d\u0435\u043d\u044b \u0447\u0435\u0440\u0435\u0437 Flink \u0438 Ray, \u043f\u043e\u043f\u0430\u043b\u0438 \u0432 ClickHouse, \u0431\u044b\u043b\u0438 \u043f\u0435\u0440\u0435\u0441\u0447\u0438\u0442\u0430\u043d\u044b \u0447\u0435\u0440\u0435\u0437 Spark, \u0431\u044b\u043b\u0438 \u0437\u0430\u043a\u043e\u043c\u043c\u0438\u0447\u0435\u043d\u044b \u0432 Iceberg \u0438 \u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 Trino.\u0412 \u044d\u0442\u043e\u043c \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043c\u0435\u0436\u0434\u0443 \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435\u043c chart \u0438 \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435\u043c platform.\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 https:\/\/habr.com\/ru\/articles\/1038700\/<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-480811","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/480811","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=480811"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/480811\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=480811"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=480811"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=480811"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}