Summary
Solana's throughput and account model put unusual pressure on RPC infrastructure, so teams that outgrow shared endpoints usually move to a dedicated node. A dedicated Solana node gives you isolated compute and bandwidth for your own workload instead of competing with other tenants on a shared pool. This article explains how to evaluate providers that offer dedicated Solana nodes, what to test before committing, and how to run a safe migration. OnFinality provides Solana RPC API access and dedicated node infrastructure you can compare against other options using the checklist below.
Solana RPC is not a generic EVM endpoint. The chain produces blocks continuously, account state changes constantly, and many applications depend on WebSocket subscriptions rather than one-off reads. That combination means a shared public endpoint can work for a prototype but often stops being the right fit once you have real users, background indexers, or trading logic. A dedicated Solana node changes the economics: you get isolated resources for your own traffic instead of sharing a pool with other tenants.
This article focuses on how to evaluate providers that offer dedicated Solana nodes, not on listing a single winner. The right provider depends on your workload shape, your tolerance for operational work, and how much control you need over the node itself.
When a dedicated Solana node is the right fit
Before comparing providers, decide whether you actually need a dedicated node. A dedicated node is usually justified when one or more of these is true:
- Your application sends a high and predictable volume of requests, and shared rate limits are the bottleneck.
- You rely on WebSocket subscriptions such as
accountSubscribe,logsSubscribe, orprogramSubscribeand need stable connection behavior. - You run indexers, backfill jobs, or analytics that scan large ranges of history.
- You need consistent behavior during network congestion, when shared endpoints may throttle or degrade.
- You want a private endpoint that is not exposed to the public internet and can be allowlisted.
A dedicated node is usually not the first step if you are still validating an idea, running a low-traffic dApp, or only reading occasional account balances. In those cases a managed shared RPC API is cheaper and simpler. OnFinality offers both models, so you can start on a shared RPC API and move to a dedicated node when the workload justifies it.
What "dedicated" actually means across providers
The word "dedicated" is used loosely. Two providers can both advertise dedicated Solana nodes and deliver very different things. Ask what is actually isolated:
| Layer | Shared RPC API | Dedicated node |
|---|---|---|
| Compute and memory | Shared across tenants | Reserved for your workload |
| Request throughput | Pooled limits | Sized to your plan |
| WebSocket connections | Shared gateway | Direct to your node |
| Endpoint visibility | Public or keyed URL | Private, often allowlisted |
| Node version control | Provider-managed | Provider-managed, sometimes configurable |
| Failure blast radius | Affects all tenants | Limited to your node |
A genuinely dedicated Solana node should give you your own process and your own connection budget. If a provider only gives you a private URL that still routes through a shared backend, you are buying a private label, not isolation.
Provider evaluation matrix for Solana dedicated nodes
Use this matrix to compare providers on the dimensions that matter for Solana specifically. Fill it in per provider rather than relying on marketing pages.
| Evaluation area | What to verify | Why it matters on Solana |
|---|---|---|
| Node type | Full vs archive, and whether historical state is available | Backfills and analytics need older slots |
| Method coverage | Support for getProgramAccounts, getSignaturesForAddress, getTransaction with full encoding | Many apps depend on these for indexing |
| WebSocket support | accountSubscribe, logsSubscribe, programSubscribe, slotSubscribe | Real-time features break without stable subscriptions |
| Transport | HTTP and WebSocket endpoints, TLS, private networking options | Different clients need different transports |
| Rate and connection limits | Requests per second, concurrent connections, subscription caps | Determines whether the plan fits your traffic |
| Failover | Whether you can run a second node or endpoint for redundancy | Single points of failure are a production risk |
| Observability | Metrics, logs, and alerting exposed to you | You cannot operate what you cannot see |
| Support model | Response channels and escalation path | Node issues need fast human response |
| Migration path | How endpoint changes are rolled out | Avoids downtime during cutover |
OnFinality appears first here because it offers both a managed Solana RPC API and dedicated node infrastructure, so you can evaluate the same vendor across both models. Compare other providers against the same rows rather than against a feature list.
Solana-specific methods and limits to test
Solana's JSON-RPC surface is broad, and some methods are far more expensive than others. Before you commit to a provider, test the methods your application actually uses. A minimal connectivity check looks like this:
curl -s 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 a dedicated node, repeat the same call against your private endpoint and then test the heavier methods:
curl -s "$SOLANA_DEDICATED_ENDPOINT" \
-X POST -H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 2,
"method": "getSignaturesForAddress",
"params": ["<ACCOUNT_PUBKEY>", {"limit": 100}]
}'
Pay attention to how the provider handles getProgramAccounts with filters, since this method can be expensive and is often rate-limited differently from simple reads. Also confirm whether transaction responses include full metadata or only signatures, because indexers usually need the full form.
WebSocket behavior is where many providers differ
Real-time Solana applications often depend on subscriptions more than on HTTP calls. Test WebSocket behavior explicitly:
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: "logsSubscribe",
params: [{ mentions: ["<PROGRAM_ID>"] }, { commitment: "confirmed" }]
}));
});
ws.on("message", (data) => {
const msg = JSON.parse(data.toString());
if (msg.method === "logsNotification") {
console.log("slot", msg.params.result.context.slot);
}
});
Things to check with any provider:
- Does the connection stay open under load, or does it drop and require reconnection logic?
- Are subscription limits per connection or per account?
- Is there a documented reconnection and replay strategy?
- How are missed slots or gaps surfaced to the client?
If a provider cannot answer these clearly, treat that as a risk for any real-time feature.
Migration checkpoints before you cut over
Moving from a shared endpoint to a dedicated Solana node is a configuration change, but it touches every client. Plan the cutover:
- Inventory every place an RPC URL is configured, including frontend wallets, backend services, cron jobs, and CI.
- Add the new endpoint alongside the old one so both are reachable during the transition.
- Run a shadow period where a non-critical service reads from the dedicated node and you compare responses.
- Verify commitment levels match between environments, since
processed,confirmed, andfinalizedbehave differently. - Update WebSocket clients and confirm reconnection logic works against the new endpoint.
- Keep the old endpoint available as a fallback until you are confident in the new one.
A simple environment-based configuration keeps this manageable:
const SOLANA_RPC =
process.env.SOLANA_RPC_URL ?? "https://solana.api.onfinality.io/public";
const SOLANA_WS =
process.env.SOLANA_WS_URL ?? "wss://solana.api.onfinality.io/public-ws";
For wallet or app network configuration, keep the chain identity consistent with Solana mainnet: native currency SOL with 9 decimals, and the explorer at https://explorer.solana.com. If you are testing first, use Solana Devnet and keep devnet and mainnet configuration separate.
Cost and operations tradeoffs
Dedicated nodes shift cost from per-request pricing toward reserved capacity. That is usually favorable when your traffic is steady and high, and less favorable when it is spiky or low. Consider:
- Reserved capacity is predictable but you pay for it even during quiet periods.
- Shared RPC APIs scale down to zero cost when idle, which suits early-stage projects.
- Running your own Solana node gives maximum control but adds significant operational work: hardware, upgrades, monitoring, and incident response.
- A managed dedicated node sits between those extremes: you get isolation without owning the full operations burden.
For most teams, the practical sequence is shared RPC API first, then a dedicated node once traffic and reliability requirements are clear. Review RPC pricing to compare models, and check supported RPC networks if you also need other chains.
Operational checklist after go-live
Once the dedicated node is serving production traffic, keep these in place:
- Monitor request latency, error rates, and WebSocket connection counts.
- Alert on slot lag so you notice when the node falls behind the cluster.
- Track subscription churn to catch clients that reconnect too often.
- Keep a documented fallback endpoint and test it periodically.
- Review node version and upgrade windows with your provider.
A lightweight monitoring probe can catch regressions early:
#!/usr/bin/env bash
set -euo pipefail
RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" "$SOLANA_DEDICATED_ENDPOINT" \
-X POST -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"getHealth"}')
echo "solana rpc http status: $RESPONSE"
Key Takeaways
- A dedicated Solana node is justified by steady high traffic, WebSocket dependence, indexing workloads, or a need for private endpoints.
- "Dedicated" varies by provider; verify what is actually isolated before comparing prices.
- Test Solana-specific methods such as
getProgramAccountsandgetSignaturesForAddress, not just simple reads. - WebSocket subscription behavior is often the deciding factor for real-time apps.
- Plan migration with a shadow period and a fallback endpoint rather than a hard cutover.
- OnFinality offers both a Solana RPC API and dedicated node infrastructure, so you can match the model to your workload.
Frequently Asked Questions
Do I need a dedicated Solana node for a small dApp?
Usually not. A managed shared RPC API is a better starting point until traffic, WebSocket usage, or reliability requirements justify reserved capacity.
What is the difference between a dedicated node and a private RPC endpoint?
A private endpoint can still route through shared backend infrastructure. A dedicated node gives your workload its own compute and connection budget, which is what actually reduces contention.
Which Solana methods should I benchmark before choosing a provider?
Test the methods your app depends on, especially getProgramAccounts, getSignaturesForAddress, getTransaction, and any subscription methods used by your real-time features.
Can I use the same endpoint for HTTP and WebSocket?
No. Solana uses separate HTTP and WebSocket URLs. OnFinality exposes both, and you should configure each transport explicitly in your clients.
How do I avoid downtime when migrating to a dedicated node?
Run the new endpoint alongside the old one, shadow traffic from a non-critical service, verify commitment levels and WebSocket behavior, then cut over with a fallback still in place.
Where can I see which networks OnFinality supports?
See supported RPC networks for the current list, and RPC pricing for plan details.