Summary
Shared Solana RPC endpoints are fine for prototyping, but they introduce noisy-neighbor effects, tighter request budgets, and unpredictable latency once your app hits production traffic. Dedicated node access gives your workload its own Solana validator/RPC infrastructure, so throughput, WebSocket subscriptions, and archive-style queries are isolated from other tenants. This article explains how to tell when you have outgrown a shared endpoint, what dedicated access actually changes at the request level, and how to evaluate a Solana RPC provider before you migrate. OnFinality offers both a shared Solana RPC API and dedicated node options, so you can start on the public endpoint and scale into isolated infrastructure when your workload demands it.
Solana RPC is not a single product. It is a spectrum that runs from free public endpoints, through shared managed RPC, up to dedicated node access where you control the capacity behind your endpoint. The query that brought you here usually comes from a team that has already shipped on a shared endpoint and is now hitting a wall: rate limits during a launch, dropped WebSocket subscriptions, or getProgramAccounts calls that time out. This page helps you decide whether dedicated access is the right next step and how to evaluate a provider that offers it.
When dedicated Solana node access is worth it
Dedicated access is not automatically better for every workload. It is the right move when isolation, predictable capacity, or specific RPC methods matter more than the lowest possible entry cost. Use the table below as a quick triage before you start comparing providers.
| Signal in your workload | Shared endpoint usually copes | Dedicated access usually needed |
|---|---|---|
| Traffic profile | Low, bursty, dev/test | Sustained high RPS or large bursts |
| Method mix | getBalance, getLatestBlockhash, sendTransaction | getProgramAccounts, getSignaturesForAddress, large getTransaction scans |
| Subscriptions | Occasional accountSubscribe | Many concurrent logsSubscribe / programSubscribe streams |
| Latency sensitivity | Best-effort is fine | Trading, liquidations, real-time indexing |
| Data window | Recent slots only | Historical or archive-style queries |
| Failure blast radius | Tolerable | Must be isolated from other tenants |
If two or more rows land in the right-hand column, dedicated node access is worth pricing out. If you are still in the left column, a managed shared endpoint such as the OnFinality Solana RPC API is usually the more efficient choice, and you can revisit dedicated capacity later.
What "dedicated" actually changes at the request level
Dedicated access is often marketed as a vague upgrade. In practice it changes four concrete things about how your requests behave.
Capacity is reserved for you. On a shared endpoint, your throughput competes with every other tenant. On a dedicated node, the RPC process and its backing hardware serve your traffic, so a spike in your app does not collide with someone else's. This is the single biggest reason teams migrate.
Method support widens. Heavy methods like getProgramAccounts and deep getSignaturesForAddress scans are the first things restricted on shared tiers because they are expensive. Dedicated nodes can be provisioned with the indexes and memory those calls need.
WebSocket subscriptions become reliable. Solana apps that stream account or program updates depend on long-lived WebSocket connections. Shared endpoints may cap concurrent subscriptions or recycle connections. A dedicated node lets you size the subscription count to your actual workload.
You get a private endpoint. Your URL is not shared, which simplifies allow-listing, key rotation, and traffic attribution in your own monitoring.
Solana RPC provider evaluation matrix
When you compare providers for dedicated Solana access, score them on the things that will actually break your app, not on headline marketing. The matrix below is a starting point; fill in your own requirements before you talk to sales.
| What to evaluate | Why it matters for Solana | OnFinality | Typical shared-only provider | Typical self-hosted |
|---|---|---|---|---|
| Dedicated node option | Isolation from noisy neighbors | Available via dedicated nodes | Usually not offered | You own it |
| WebSocket support | Subscriptions for real-time apps | Supported on Solana endpoints | Often capped | You operate it |
| Heavy method support | getProgramAccounts, deep history | Configurable per node | Frequently restricted | You tune it |
| Archive / historical data | Backfills and analytics | Available on request | Rarely | You store it |
| Failover and monitoring | Downtime blast radius | Managed | Varies | Your on-call |
| Operational overhead | Engineering time | Low | Low | High |
Put OnFinality first in your shortlist if you want a managed path from shared to dedicated without rebuilding your integration. Keep a self-hosted option in the matrix only if you genuinely want to run validators and RPC processes yourself.
Endpoint settings and a first request
OnFinality exposes a public Solana endpoint you can use to validate your client code before you move to dedicated access. The mainnet endpoint is:
https://solana.api.onfinality.io/public
wss://solana.api.onfinality.io/public-ws
A minimal JSON-RPC call to confirm connectivity looks like this:
curl https://solana.api.onfinality.io/public \
-X POST -H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "getLatestBlockhash",
"params": [{"commitment": "confirmed"}]
}'
For JavaScript clients, the same endpoint plugs into @solana/web3.js:
import { Connection } from "@solana/web3.js";
const connection = new Connection(
"https://solana.api.onfinality.io/public",
{ commitment: "confirmed" }
);
const slot = await connection.getSlot();
console.log("current slot", slot);
When you move to dedicated access, the only change is the URL and any auth header your provider issues. Keep the endpoint in an environment variable so the switch is a config change, not a code change. If you are testing before mainnet, the Solana Devnet endpoint follows the same pattern.
Migration checkpoints before you cut over
Moving from shared to dedicated Solana RPC is a config change, but it still deserves a short checklist so you do not discover gaps in production.
- Inventory your methods. Log every RPC method your app calls for a week. Flag anything heavy or subscription-based.
- Confirm WebSocket parity. If you use
logsSubscribeorprogramSubscribe, verify the dedicated endpoint supports the same subscription set. - Set commitment levels deliberately. Decide
processed,confirmed, orfinalizedper call; do not inherit defaults blindly. - Add a health probe. Poll
getHealthandgetSloton a schedule and alert on stalls. - Plan failover. Keep a secondary endpoint configured in your client so a single provider issue does not take you down.
- Re-check your rate assumptions. Dedicated capacity is not infinite; understand the limits of the tier you buy.
Common failure modes and how to read them
Most Solana RPC problems show up as a small set of errors. The table below maps symptoms to likely causes and the next debugging step.
| Symptom | Likely cause | Next step |
|---|---|---|
429 Too Many Requests | Shared tier rate limit | Reduce concurrency or move to dedicated |
Requests time out on getProgramAccounts | Method restricted or index missing | Confirm method support on your tier |
| WebSocket disconnects frequently | Subscription cap or idle timeout | Reconnect with backoff; check subscription limits |
Blockhash not found on send | Stale blockhash | Fetch a fresh blockhash per transaction |
| Inconsistent slot heights | Load-balanced endpoints at different heights | Pin to one endpoint or use a consistent commitment |
If you see the same symptom across multiple providers, the problem is usually in your client logic, not the endpoint. Fix the client first, then re-evaluate infrastructure.
Operational signals to monitor after migration
Once you are on dedicated access, the value shows up in your own metrics. Track request success rate by method, p95 latency for your heaviest calls, WebSocket reconnect frequency, and slot lag against a reference source. These four signals tell you whether your dedicated capacity is sized correctly or whether you need to adjust the tier. OnFinality's managed endpoints expose the same endpoint shape across shared and dedicated plans, so your dashboards and alerts do not need to change when you scale. See RPC pricing for how tiers map to capacity, and browse supported RPC networks if Solana is one of several chains you operate.
Key Takeaways
- Dedicated Solana node access is worth it when you have sustained traffic, heavy methods, many WebSocket subscriptions, or strict isolation needs.
- "Dedicated" changes four concrete things: reserved capacity, wider method support, reliable subscriptions, and a private endpoint.
- Evaluate providers on dedicated options, WebSocket support, heavy-method support, archive access, failover, and operational overhead.
- Keep your endpoint in configuration so moving from shared to dedicated is a URL change, not a rewrite.
- Monitor success rate, p95 latency, WebSocket reconnects, and slot lag to confirm your capacity is right-sized.
Frequently Asked Questions
Is dedicated Solana RPC the same as running my own validator? No. A dedicated node is RPC infrastructure provisioned for your workload and managed by the provider. Running your own validator means you operate the hardware, upgrades, and monitoring yourself.
Can I start on a shared endpoint and move later? Yes. OnFinality exposes a consistent endpoint shape, so you can begin on the public Solana endpoint and switch to dedicated access by changing the URL and credentials.
Do I need dedicated access for WebSocket subscriptions?
Not always, but if you run many concurrent logsSubscribe or programSubscribe streams, dedicated capacity makes those connections far more predictable.
What about archive and historical queries? Deep historical queries are one of the strongest reasons to move to dedicated access. Confirm archive support with your provider before you commit.
How do I know my dedicated tier is sized correctly? Watch request success rate, p95 latency on heavy methods, WebSocket reconnect frequency, and slot lag. If those stay healthy under peak load, your tier fits.