Интеграция с Akash Network (децентрализованные вычисления)
Akash Network — это Cosmos-based marketplace для облачных вычислений. Провайдеры предлагают GPU/CPU мощности, клиенты размещают workload через SDL-манифесты, оплата в AKT. Ключевая особенность относительно конкурентов: поддержка произвольных Docker-контейнеров без кастомного runtime, что резко снижает порог переноса существующих приложений.
Типичные кейсы интеграции: размещение AI-инференс сервисов (LLM, Stable Diffusion) с оплатой в крипте; децентрализованный бэкенд для DApp; бэкапные вычислительные мощности при пиковой нагрузке; размещение blockchain нод и индексеров.
SDL-манифест: детали, которые важны
Stack Definition Language (SDL) — YAML-формат описания деплоя на Akash. На первый взгляд похож на docker-compose, но есть критичные отличия, которые ломают деплой, если не знать о них заранее.
---
version: "2.0"
services:
inference-api:
image: your-org/llm-inference:sha256-abc123 # пинить по digest, не по тегу
expose:
- port: 8080
as: 80
to:
- global: true
env:
- MODEL_PATH=/models/llama-7b
- MAX_CONCURRENT=4
resources:
cpu:
units: 4.0
memory:
size: 16Gi
storage:
- size: 50Gi
attributes:
persistent: true # критично для stateful данных
class: beta3 # NVMe storage на Akash
profiles:
compute:
inference-api:
resources:
cpu:
units: 4
memory:
size: 16Gi
gpu:
units: 1
attributes:
vendor:
nvidia:
- model: rtx3090 # указать конкретную модель
placement:
dcloud:
pricing:
inference-api:
denom: uakt
amount: 1000 # максимальная цена в микро-AKT за блок
deployment:
inference-api:
dcloud:
profile: inference-api
count: 1
Подводные камни SDL:
Атрибут persistent: true для storage обязателен для любых данных, которые должны пережить рестарт контейнера. Без него — эфемерное хранилище, всё теряется при перезапуске. Класс beta3 (NVMe) значительно быстрее beta2 (HDD), разница в IOPS критична для баз данных и моделей ML.
Пиннинг по digest вместо тега — обязательная практика. Провайдеры кэшируют образы, и latest может означать разные версии у разных провайдеров. При использовании тега latest нет гарантий воспроизводимости.
GPU-ресурсы доступны только у части провайдеров. При указании конкретной модели (nvidia rtx3090, a100) пул доступных провайдеров сужается. Если GPU не указан явно — Akash подберёт любой доступный GPU провайдер.
Программная интеграция через Akash SDK
Для автоматизации деплоя из вашего приложения — Akash JavaScript SDK или прямые вызовы через REST API Cosmos-based клиента.
import { Registry, DirectSecp256k1HdWallet } from "@cosmjs/proto-signing";
import { SigningStargateClient } from "@cosmjs/stargate";
import { MsgCreateDeployment } from "@akashnetwork/akash-api/akash/deployment/v1beta3";
const AKASH_RPC = "https://rpc.akashnet.net:443";
const AKASH_DENOM = "uakt";
async function createDeployment(sdlContent: string, walletMnemonic: string) {
const wallet = await DirectSecp256k1HdWallet.fromMnemonic(walletMnemonic, {
prefix: "akash",
});
const [account] = await wallet.getAccounts();
const client = await SigningStargateClient.connectWithSigner(AKASH_RPC, wallet, {
registry: new Registry(/* akash proto types */),
});
// Генерация deployment ID
const dseq = Math.floor(Date.now() / 1000); // block height или timestamp
const msg = {
typeUrl: "/akash.deployment.v1beta3.MsgCreateDeployment",
value: MsgCreateDeployment.fromPartial({
id: {
owner: account.address,
dseq: BigInt(dseq),
},
groups: parseSDLGroups(sdlContent), // парсинг SDL в proto структуры
deposit: { denom: AKASH_DENOM, amount: "5000000" }, // депозит 5 AKT
}),
};
const result = await client.signAndBroadcast(
account.address,
[msg],
{ amount: [{ denom: AKASH_DENOM, amount: "20000" }], gas: "800000" }
);
return { dseq, txHash: result.transactionHash };
}
После создания деплоя — процесс аукциона. Провайдеры делают биды, клиент выбирает оптимальный и создаёт lease. Это асинхронный процесс: нужно подписаться на события блокчейна через WebSocket или polling.
async function watchBidsAndCreateLease(dseq: number, ownerAddress: string) {
// Ждём биды (обычно 15–60 секунд)
const bids = await pollBids(dseq, ownerAddress, { timeoutMs: 120000 });
if (bids.length === 0) throw new Error("No bids received");
// Выбираем провайдера по цене (или по атрибутам)
const bestBid = bids.sort((a, b) =>
Number(a.bid.price.amount) - Number(b.bid.price.amount)
)[0];
// Создаём lease с выбранным провайдером
await createLease(bestBid.bid.bidId, wallet);
// Передаём манифест провайдеру напрямую через его REST API
await sendManifestToProvider(bestBid.bid.bidId.provider, dseq, sdlContent);
}
Управление жизненным циклом деплоя
После создания lease деплой управляется через Provider Service API — это HTTP-эндпоинты провайдера, не транзакции блокчейна. Endpoint провайдера узнаётся из on-chain данных провайдера.
// Получение статуса деплоя
async function getDeploymentStatus(providerAddress: string, dseq: number, owner: string) {
const providerInfo = await queryProviderInfo(providerAddress);
const providerHost = providerInfo.hostUri; // https://provider.example.com:8443
const response = await fetch(
`${providerHost}/lease/${owner}/${dseq}/1/1/status`,
{
headers: { Authorization: `Bearer ${await getProviderToken()}` }
}
);
return response.json();
// Содержит: состояние pods, IP/ports, логи
}
Мониторинг деплоя через Akash Provider API даёт статус контейнеров, форвардинг портов, возможность получить логи. Для production-систем — интеграция с внешним мониторингом (Prometheus/Grafana) через expose endpoints из контейнера.
Особенности для разных типов нагрузки
AI inference сервисы — самый популярный кейс на Akash. Важно: модели весом 7–70B параметров не влезают в memory при запуске, нужен persistent storage и правильное управление загрузкой модели. Рекомендуем: separate init container для скачивания модели, health check с таймаутом 5–10 минут.
Blockchain ноды — Ethereum full node, Cosmos validator. Критично: persistent storage достаточного размера (Ethereum — 1+ TB), поддержка UDP для P2P (Akash поддерживает proto: UDP в expose). Синхронизация с genesis занимает дни — используйте snapshot bootstrap.
Stateless бэкенды — наиболее простой случай. Horizontal scaling через count: N в SDL. Но нет нативного load balancer — нужен внешний (Cloudflare, nginx sidecar в том же деплое).
Базы данных — возможно, но с оговорками. Нет гарантии SLA от провайдеров на Akash — провайдер может уйти офлайн. PostgreSQL с репликацией или использование managed DB вне Akash для критичных данных.
Ценообразование и мониторинг расходов
Стоимость на Akash формируется в uAKT (1 AKT = 1,000,000 uAKT) за блок (~6 секунд). Для оценки до деплоя:
async function estimateCost(sdlContent: string): Promise<string> {
// Используем Akash Console API или парсим активные биды
const response = await fetch("https://api.cloudmos.io/v1/pricing", {
method: "POST",
body: JSON.stringify({ sdl: sdlContent }),
});
const { pricePerBlock, currency } = await response.json();
const dailyCostUAKT = pricePerBlock * (86400 / 6); // блоков в сутки
return `${dailyCostUAKT / 1e6} AKT/day`;
}
Для production — автоматическое пополнение депозита через on-chain триггер или мониторинг balance. Деплой закрывается автоматически когда депозит исчерпан, без предупреждения пользователю.
Интеграция со смарт-контрактами
Для DApp, где оплата вычислений происходит on-chain с условной логикой — EVM контракт может взаимодействовать с Akash через Cosmos IBC или через bridge. Более реалистичный подход: off-chain сервис слушает события EVM контракта и управляет деплоями на Akash.
// Контракт принимает оплату и эмитит событие для off-chain worker
contract ComputeRequest {
event ComputeTaskCreated(
uint256 indexed taskId,
address indexed requester,
bytes sdlHash, // IPFS CID SDL-манифеста
uint256 maxBudgetUSDC
);
function requestCompute(bytes calldata sdlCid) external payable {
uint256 taskId = ++taskCounter;
// lock payment in escrow
emit ComputeTaskCreated(taskId, msg.sender, sdlCid, msg.value);
}
}
Off-chain worker (Node.js/Go) подписывается на события, создаёт деплой на Akash, по завершении вычисления вызывает completeTask() с результатом и разблокирует оплату.
Сроки интеграции
Базовая интеграция (ручной SDL, деплой через CLI) — 1–3 дня. Программная интеграция с автоматическим деплоем и мониторингом — 1–2 недели. Полная интеграция с EVM контрактом, эскроу и автоматическим lifecycle management — 3–5 недель.







