Summary
Shared Solana RPC pools many callers onto the same backend, which keeps costs low and setup simple but makes throughput and latency unpredictable under load. Dedicated Solana nodes give one workload its own infrastructure, so you control capacity, rate limits, and how aggressively you poll or subscribe. This article breaks down the tradeoffs, the workloads that fit each model, and how to evaluate providers before you commit.
Solana's throughput profile is unusual. Blocks land fast, accounts update constantly, and a single busy dApp can generate more RPC traffic than an entire mid-size chain. That is why "shared vs dedicated" matters more on Solana than on most networks: the same endpoint that feels instant during quiet periods can stall when a noisy neighbor starts hammering getProgramAccounts or opening thousands of WebSocket subscriptions.
This page compares the two access models directly, then helps you pick one based on your workload rather than on marketing copy. If you already know you need isolated capacity, dedicated nodes are the relevant option; if you are still weighing providers, start with the Solana network page and RPC pricing.
Quick recommendation: which model fits your workload
Use this as a first filter before reading the rest.
- Shared RPC is usually enough when you are prototyping, running a wallet with modest read traffic, indexing a small program, or serving a dApp where occasional latency spikes are tolerable.
- Dedicated access becomes worth it when you run trading infrastructure, a high-frequency bot, a public dApp with spiky traffic, an indexer that scans large account sets, or anything that depends on stable WebSocket delivery.
- A hybrid setup is common in production: shared endpoints for read-heavy UI calls and a dedicated node for the paths that cannot afford contention.
If you cannot yet describe your peak requests per second, your largest getProgramAccounts call, and your WebSocket subscription count, measure those first. The comparison below only becomes useful once you have rough numbers.
What "shared" and "dedicated" actually mean on Solana
Shared RPC means many customers are served by the same pool of nodes behind a load balancer. You get a URL, a rate limit, and whatever capacity is left after other tenants. It is cheap, fast to set up, and fine for most read patterns. The tradeoff is variance: your latency and success rate depend on aggregate demand.
Dedicated access means the node (or cluster of nodes) is provisioned for your workload. You are not competing for slots in a shared queue, and your rate limits are a function of the hardware you rent rather than a shared quota. OnFinality offers both models as an RPC API and dedicated node infrastructure, so the choice is about matching the model to the workload rather than about availability.
Comparison table: shared vs dedicated Solana RPC
| Dimension | Shared Solana RPC | Dedicated Solana node |
|---|---|---|
| Capacity model | Pooled across tenants | Provisioned for your workload |
| Latency behavior | Good on average, variable at peak | More consistent under sustained load |
| Rate limits | Fixed per plan, shared backend | Tied to your node sizing |
| WebSocket subscriptions | Often capped or contended | Sized to your connection count |
Heavy methods (getProgramAccounts, getSignaturesForAddress) | May be throttled or restricted | Limited mainly by your hardware |
| Archive / historical queries | Depends on provider retention | Configurable with your node |
| Cost profile | Low, predictable monthly | Higher, scales with capacity |
| Ops burden | None | Provider-managed, but you own sizing decisions |
| Best fit | Prototypes, wallets, light dApps | Bots, indexers, high-traffic dApps |
Treat the table as a decision aid, not a guarantee. Actual numbers depend on the provider, the region, and your request mix.
Solana-specific pressure points that change the decision
Solana's RPC surface differs from EVM chains in ways that make shared access riskier for some workloads.
Account scans are expensive. getProgramAccounts can return enormous result sets. On a shared endpoint, providers frequently rate-limit or disable it because one caller can degrade the pool. On a dedicated node, the cost lands on your own capacity.
WebSocket subscriptions are stateful. accountSubscribe, logsSubscribe, and slotSubscribe hold server-side state. Shared pools must cap concurrent subscriptions, so your effective ceiling can drop when other tenants are active.
Slot-level timing matters. Bots that react to slot changes or new blocks need consistent delivery, not just consistent average latency. Contention shows up as jitter, which is harder to work around than a slightly higher baseline.
Commitment levels interact with load. Requests for processed or confirmed data are cheaper than finalized queries that may need deeper state. Under contention, the gap widens.
How to benchmark before you commit
Do not choose a model from a spec sheet. Run the same probe against a shared endpoint and a dedicated node and compare the distribution, not just the mean.
# Measure latency distribution for a common read call
for i in $(seq 1 50); do
curl -s -o /dev/null -w "%{time_total}\n" \
-X POST https://solana.api.onfinality.io/public \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"getSlot","params":[]}'
done
For a more realistic test, replay your own traffic mix. A bot that calls getLatestBlockhash and sendTransaction in a loop stresses the node differently than an indexer running getSignaturesForAddress across many addresses. Capture p50, p95, and p99 latency, plus error rates by method.
If you use WebSockets, test subscription stability separately:
// Minimal WebSocket subscription probe
const ws = new WebSocket("wss://solana.api.onfinality.io/public-ws");
let count = 0;
ws.onopen = () => {
ws.send(JSON.stringify({
jsonrpc: "2.0", id: 1,
method: "slotSubscribe",
params: []
}));
};
ws.onmessage = () => {
count++;
if (count % 100 === 0) console.log(`slots received: ${count}`);
};
ws.onclose = () => console.log("closed after", count, "slots");
Run this for an hour during your peak window. A shared endpoint that drops the socket under load will show it here.
Provider evaluation matrix for Solana
When you compare providers, the questions that matter are operational, not cosmetic. OnFinality appears first here because it is the reference point for this comparison, but the criteria apply to any provider you evaluate.
| Provider | Access models | What to verify |
|---|---|---|
| OnFinality | Shared RPC API and dedicated nodes | Method support, WebSocket limits, dedicated sizing options, regional placement |
| Other managed RPC providers | Usually shared, sometimes dedicated | Whether heavy methods are allowed, subscription caps, retention for historical queries |
| Self-hosted node | Dedicated by definition | Hardware cost, validator/RPC tuning, upgrade cadence, on-call burden |
Ask each provider the same questions: which methods are rate-limited, what the WebSocket ceiling is, how historical data is retained, and what happens during network congestion. Vague answers are a signal.
Cost and risk tradeoffs
Shared RPC is cheaper in absolute terms and has almost no operational overhead. The hidden cost is engineering time spent working around rate limits, retries, and jitter. If your team spends a sprint building backoff logic to survive a shared endpoint, the savings may already be gone.
Dedicated nodes cost more per month but move the constraint from "someone else's quota" to "your hardware sizing." That is a more predictable place to be for production systems, because you can scale deliberately instead of negotiating limits.
Self-hosting is the third option. It gives maximum control but adds hardware procurement, monitoring, upgrades, and incident response. For most teams, a managed dedicated node captures most of the benefit without the on-call load.
Migration checkpoints: moving from shared to dedicated
If you decide to move, do it in stages rather than cutting over in one deploy.
- Inventory your methods. List every RPC call your app makes and flag the expensive ones.
- Stand up the dedicated node and point a staging environment at it.
- Replay production traffic against the new endpoint and compare error rates and latency percentiles.
- Shift read traffic first, then move transaction submission and WebSocket subscriptions.
- Keep a shared endpoint as fallback in your client config so a single node issue does not take down the app.
A simple failover pattern in a client looks like this:
const endpoints = [
"https://your-dedicated-solana-endpoint",
"https://solana.api.onfinality.io/public"
];
async function callRpc(body) {
for (const url of endpoints) {
try {
const res = await fetch(url, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(body)
});
if (res.ok) return res.json();
} catch (e) {
// try next endpoint
}
}
throw new Error("all RPC endpoints failed");
}
Key Takeaways
- Shared Solana RPC is a good default for prototypes, wallets, and light dApps, but capacity is pooled and can vary under load.
- Dedicated nodes suit bots, indexers, high-traffic dApps, and anything that depends on stable WebSocket delivery.
- Solana-specific methods like
getProgramAccountsand stateful subscriptions are the most common reasons teams outgrow shared access. - Benchmark with your own traffic mix and compare p95/p99 latency and error rates, not just average response time.
- A hybrid setup with a shared fallback is a practical production pattern.
- Review RPC pricing and supported networks before committing to a model.
Frequently Asked Questions
Can I start on shared RPC and move to dedicated later? Yes. Most teams do exactly that. Keep your RPC calls behind a small abstraction layer so switching endpoints is a config change, not a refactor.
Does a dedicated node remove all rate limits? No. Limits still exist, but they are tied to the capacity you provision rather than a shared quota. You can size the node to your workload.
Are WebSocket subscriptions better on dedicated nodes? They are generally more stable because subscription state is not competing with other tenants. Test with your own subscription count during peak hours.
Is self-hosting cheaper than a dedicated node? Sometimes on paper, rarely in practice once you account for hardware, monitoring, upgrades, and incident response. Compare total cost, not just the monthly bill.
How do I know which methods my app actually needs? Log your RPC calls for a week. The list is usually shorter than expected, and it tells you exactly which limits to negotiate.
Next steps
If you are still deciding, start with the Solana network page to confirm endpoint and transport details, then review RPC pricing for shared and dedicated options. If your workload already has clear peak numbers, dedicated nodes is the fastest path to isolated capacity. For a broader framework that applies across chains, see how to choose an RPC provider.