Summary
Solana's high-throughput design puts unusual pressure on RPC infrastructure: shared endpoints can throttle under bursty workloads, and enterprise applications often need predictable capacity, archive access, and WebSocket reliability. Dedicated nodes give a single team its own node resources instead of competing on a shared pool. This article explains when dedicated Solana infrastructure is the right fit, how to evaluate providers, and what to check before migrating production traffic. OnFinality offers Solana RPC API access and dedicated node infrastructure as one option to compare against your current setup.
Solana processes transactions far faster than most EVM chains, and that speed changes what "RPC capacity" actually means. A shared endpoint that works fine for a wallet or a small dApp can become the bottleneck the moment an enterprise application starts polling accounts, streaming logs, or running batch jobs. The query behind this article is a practical one: when does a team move from shared Solana RPC to dedicated nodes, and how do you evaluate that decision without over-buying?
This page answers that directly, then walks through the tradeoffs, the evaluation criteria, and the migration steps.
When dedicated Solana nodes are the right fit
Dedicated nodes make sense when your workload has a shape that shared infrastructure handles poorly. The clearest signals:
- Bursty, high-volume reads. Indexers, portfolio trackers, and analytics pipelines that call
getProgramAccounts,getSignaturesForAddress, orgetTransactionin tight loops. - Persistent subscriptions. Trading systems, liquidation bots, and real-time dashboards that depend on
accountSubscribe,logsSubscribe, orslotSubscribestaying connected. - Archive and historical queries. Compliance reporting, backfills, and audit tooling that need old slots, not just recent ones.
- Predictable throughput for a known user base. If your product has a committed SLA to its own customers, you need capacity you can reason about.
Dedicated nodes are usually the wrong first move when you are still validating product-market fit, when your traffic is genuinely low and spiky-once-a-day, or when you have not yet measured where your current endpoint actually fails. Start with a managed RPC API, instrument it, and let the data tell you when to upgrade.
A useful rule: if you can describe your workload as "many concurrent readers plus a few long-lived subscribers," dedicated infrastructure is worth pricing out. If it is "a few hundred calls per day," it probably is not.
What actually breaks on shared Solana RPC
Solana's failure modes differ from EVM chains, so it helps to name them precisely.
| Symptom | Likely cause | What it means for you |
|---|---|---|
429 Too Many Requests during batch jobs | Per-key or per-IP rate limits on a shared pool | Your throughput ceiling is set by someone else's policy |
| WebSocket disconnects under load | Shared subscription fan-out | You need reconnect logic, or a node that is not shared |
Slow getProgramAccounts on large programs | Heavy scan cost on a busy node | Archive/dedicated nodes with more headroom help |
| Inconsistent latency at peak hours | Noisy-neighbor contention | Capacity is variable, not guaranteed |
| Missing old slots | Non-archive node | Historical queries fail even when the node is healthy |
None of these are Solana bugs. They are the natural consequence of many tenants sharing one node. Dedicated nodes remove the tenant-sharing part; they do not remove the need for good client-side engineering.
Provider evaluation matrix
When you compare dedicated Solana node providers, score them against your actual workload rather than a generic feature list. OnFinality is one option to include; the columns below apply to any provider.
| Evaluation area | What to ask | Why it decides the outcome |
|---|---|---|
| Transport support | HTTP and WebSocket both available? | Solana apps often need both; confirm before you commit |
| Archive depth | How far back do historical queries work? | Determines whether backfills and audits are possible |
| Method coverage | Are getProgramAccounts, getSignaturesForAddress, and subscription methods supported? | Some providers restrict expensive methods |
| Capacity model | Is throughput fixed, burstable, or metered? | Maps directly to your cost and your ceiling |
| Failover | What happens during maintenance or a node restart? | Determines your real availability, not the marketing number |
| Observability | Do you get request metrics, error rates, and logs? | You cannot tune what you cannot see |
| Migration path | Can you start shared and move to dedicated later? | Avoids a costly re-platform if you grow |
OnFinality provides Solana RPC API access and dedicated node infrastructure, so a team can begin on a managed endpoint and move to dedicated capacity as load grows. You can review RPC pricing and the Solana network page to see what is available before you talk to anyone.
Endpoint and connection reference
For development and light testing, OnFinality exposes a public Solana mainnet endpoint. It supports both HTTP and WebSocket.
# HTTP JSON-RPC
curl https://solana.api.onfinality.io/public \
-X POST -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"getHealth"}'
HTTP: https://solana.api.onfinality.io/public
WebSocket: wss://solana.api.onfinality.io/public-ws
A minimal WebSocket subscription in JavaScript looks like this:
import WebSocket from "ws";
const ws = new WebSocket("wss://solana.api.onfinality.io/public-ws");
ws.on("open", () => {
ws.send(JSON.stringify({
jsonrpc: "2.0",
id: 1,
method: "slotSubscribe"
}));
});
ws.on("message", (data) => {
console.log("slot update:", data.toString());
});
Public endpoints are shared by design. They are appropriate for development, prototyping, and low-volume reads. For production traffic with committed users, plan on a managed or dedicated endpoint instead. If you need a test environment, see the Solana devnet network page.
Capacity planning without guessing
The mistake teams make most often is buying dedicated capacity based on a peak they saw once, rather than a distribution they understand. Before you size anything, collect two weeks of data:
- Requests per second, by method.
getProgramAccountscosts far more thangetSlot. Aggregate counts hide this. - Concurrency, not just volume. Ten requests per second spread out is easy; ten at once is a different problem.
- Subscription count and lifetime. How many WebSocket connections stay open, and for how long?
- Error rate by hour. If 429s cluster at a specific time, that is your real bottleneck.
- Historical query depth. What is the oldest slot your application actually asks for?
With those five numbers you can have a specific conversation with any provider, including OnFinality, instead of asking for "enough capacity." If you are still deciding between shared and dedicated, the RPC provider selection guide covers the broader criteria.
Migration checkpoints
Moving from a shared endpoint to a dedicated node is not a rewrite, but it is not a one-line change either. Work through these checkpoints in order.
- Dual-run first. Point a percentage of read traffic at the new endpoint while the old one stays live. Compare error rates and latency.
- Move subscriptions last. WebSocket migrations are the most disruptive; keep them on the old endpoint until HTTP traffic is stable.
- Re-test expensive methods.
getProgramAccountsand archive queries behave differently on a dedicated node. Verify results match. - Confirm failover behavior. Deliberately restart or fail over and watch how your client handles it.
- Update monitoring. Your dashboards should now show the new endpoint's metrics, not just the old one's.
- Keep a rollback path. Do not delete the old configuration until the new one has run through at least one full traffic cycle.
If your application uses a wallet or client config, the change is usually just the RPC URL:
const connection = new Connection(
"https://solana.api.onfinality.io/public",
{ commitment: "confirmed" }
);
For dedicated deployments, replace that URL with the endpoint your provider issues, and keep the same commitment and retry logic.
Operational habits that matter more than the node
Dedicated hardware does not fix a client that retries badly. A few habits pay off regardless of provider:
- Backoff with jitter on 429s and timeouts, rather than immediate retries.
- Idempotent request IDs so a retried call does not double-count.
- Connection pooling for HTTP and a single multiplexed WebSocket where possible.
- Health checks against
getHealthandgetSloton a schedule, not just when something breaks. - Alerting on error rate, not on individual failures, so you are not paged for noise.
These practices are what let a dedicated node actually deliver the scalability you paid for.
Key Takeaways
- Solana's throughput makes RPC capacity a first-class design concern, not an afterthought.
- Dedicated nodes fit workloads with many concurrent readers, long-lived subscriptions, or archive needs.
- Shared endpoints are fine for development and low-volume reads; they are a poor fit for committed production traffic.
- Evaluate providers on transport support, archive depth, method coverage, capacity model, failover, and observability.
- OnFinality offers Solana RPC API access and dedicated node infrastructure as one option among several.
- Migration is mostly configuration, but subscriptions and expensive methods need explicit testing.
- Client-side engineering (backoff, pooling, health checks) matters as much as the node itself.
Frequently Asked Questions
Do I need a dedicated Solana node from day one? No. Start on a managed RPC API, measure your workload, and move to dedicated capacity when you can point to a specific bottleneck.
What is the difference between a shared and a dedicated Solana node? A shared node serves many tenants from one pool, so your throughput depends on others' usage. A dedicated node is reserved for your workload, giving you predictable capacity.
Can I use the public OnFinality Solana endpoint in production? Public endpoints are shared and intended for development and low-volume use. For production traffic, use a managed or dedicated endpoint.
Does a dedicated node include archive data? Not automatically. Archive depth is a separate question; confirm it with your provider before you rely on historical queries.
How do I test a new Solana endpoint before switching? Run both endpoints in parallel, route a percentage of read traffic to the new one, compare error rates and latency, and migrate WebSocket subscriptions last.
Where can I see OnFinality's Solana options? Review the Solana network page, dedicated node details, and RPC pricing, then compare against your current provider using the evaluation matrix above.