Summary
Solana projects hit different bottlenecks than EVM apps: high request volume, WebSocket subscriptions, and heavy getProgramAccounts-style reads can overwhelm shared public endpoints. This article explains how to evaluate RPC services and dedicated node access for Solana, including what to test before you commit, how to configure endpoints, and where dedicated infrastructure fits. OnFinality offers Solana RPC API access and dedicated node options, and you can review supported networks and pricing to match your workload.
Solana projects rarely fail because of a single slow request. They fail when request volume, subscription load, and heavy account reads collide on a shared endpoint that was never sized for that pattern. If you are evaluating an RPC service with dedicated node access for a Solana project, the useful question is not "which provider is best" but "which access model fits my workload, and how do I verify it before I commit?"
This page walks through that decision: what shared and dedicated access actually change for Solana, what to test, how to configure endpoints, and where the common failure modes show up. OnFinality provides Solana RPC API access and dedicated node options, and the same evaluation logic applies whether you use OnFinality or another provider.
Quick recommendation: shared, dedicated, or hybrid
Start by classifying your workload. Solana traffic is not uniform, and the right access model depends on which of these patterns dominates your request mix.
| Workload pattern | Typical access model | Why |
|---|---|---|
| Wallet UI, occasional balance and blockhash reads | Shared RPC API | Low, bursty volume; shared capacity is usually sufficient |
| dApp with steady read traffic and some subscriptions | Shared RPC API with WebSocket, plus a fallback endpoint | Predictable volume, but you still need redundancy |
| Trading bot, indexer, or backend with sustained high RPS | Dedicated node | You need consistent capacity and isolation from other tenants |
Heavy getProgramAccounts / getSignaturesForAddress scans | Dedicated node, often with archive-style access | These calls are expensive and dominate shared capacity |
| Real-time subscriptions at scale (many concurrent accounts) | Dedicated node with WebSocket | Subscription fan-out is the limiting factor, not raw RPS |
A hybrid pattern is common: route latency-sensitive reads and subscriptions to a dedicated node, and keep a shared endpoint as a fallback for non-critical calls. If you are still comparing providers at a high level, the RPC provider selection guide covers the general criteria; this article focuses on the Solana-specific parts.
What dedicated node access changes for Solana
A shared RPC service pools many customers onto a fleet of nodes. A dedicated node gives your project its own node process (or a reserved set of resources) so your traffic does not compete with other tenants.
For Solana, the practical differences are:
- Capacity isolation. Your heavy
getProgramAccountsscan does not degrade another project's traffic, and their traffic does not degrade yours. - Subscription headroom. WebSocket subscriptions (
accountSubscribe,logsSubscribe,slotSubscribe) hold server-side state per connection. Dedicated capacity gives you more room before you hit connection or subscription limits. - Consistent behavior under load. Shared endpoints can show variable latency during network-wide spikes. A dedicated node gives you a more stable baseline, though it is still bounded by Solana network conditions.
- Configuration control. Depending on the provider, dedicated access may allow tuning around indexing, retention, or RPC method availability.
What dedicated access does not do: it does not remove Solana network congestion, it does not make getProgramAccounts cheap, and it does not eliminate the need for failover. Treat it as capacity and isolation, not as a guarantee.
Solana endpoint settings and connection basics
Solana RPC uses JSON-RPC over HTTP and WebSocket. There is no chain ID handshake like EVM networks; you point your client at a URL and call methods. OnFinality's public Solana endpoint is available for testing:
- HTTP:
https://solana.api.onfinality.io/public - WebSocket:
wss://solana.api.onfinality.io/public-ws
A minimal JSON-RPC call 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"}]
}'
In a JavaScript client, the same call through @solana/web3.js:
import { Connection, clusterApiUrl } from "@solana/web3.js";
const connection = new Connection(
"https://solana.api.onfinality.io/public",
{ commitment: "confirmed", wsEndpoint: "wss://solana.api.onfinality.io/public-ws" }
);
const { blockhash, lastValidBlockHeight } =
await connection.getLatestBlockhash("confirmed");
console.log(blockhash, lastValidBlockHeight);
For development and testing, Solana Devnet is available so you can validate your client configuration before pointing at mainnet. The mainnet Solana network page lists the current endpoints and supported transports.
Production readiness checklist
Before you commit to a Solana RPC service or dedicated node, verify these items against your actual workload. Do not rely on published benchmarks alone; test with your own request mix.
| Check | What to verify | Why it matters |
|---|---|---|
| Method coverage | Are the methods you call supported (including getProgramAccounts, getTokenAccountsByOwner, simulateTransaction)? | Some providers restrict expensive methods on shared tiers |
| WebSocket support | Can you open and sustain the number of subscriptions you need? | Subscription limits are often the first constraint you hit |
| Commitment levels | Does the endpoint honor processed, confirmed, and finalized? | Incorrect commitment handling causes inconsistent reads |
| Failover | Can you switch endpoints without redeploying? | Single-endpoint setups fail during provider incidents |
| Rate behavior | What happens when you exceed your plan's limits? | Hard failures vs. throttling change your retry design |
| Observability | Can you see request volume, error rates, and latency? | You cannot tune what you cannot measure |
Run a load test that mirrors your production request mix, including the expensive calls, and watch error rates and latency percentiles rather than averages.
Failure modes to expect and how to debug them
Solana RPC issues tend to cluster into a few recognizable patterns.
- 429 or throttling responses. You are exceeding your plan's request budget or burst capacity. Check whether your client retries with backoff, and whether a dedicated node would give you the headroom you need.
getProgramAccountstimeouts. These calls scan large account sets. If they time out consistently, you likely need dedicated capacity or a narrower filter (for example, filtering by data size or memcmp offsets).- WebSocket disconnects. Long-lived subscriptions drop on network changes or server restarts. Your client should reconnect and re-subscribe automatically, and you should track subscription count per connection.
- Stale or inconsistent reads. Mixing commitment levels across calls produces results that look wrong. Standardize on one commitment level per workflow.
- Blockhash expiry during transaction submission. If your transaction sits too long before submission, the blockhash expires. Fetch a fresh blockhash close to submission time and handle
lastValidBlockHeight.
A simple monitoring probe helps you catch these early:
# Check endpoint health and latest slot
curl -s https://solana.api.onfinality.io/public \
-X POST -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"getSlot","params":[{"commitment":"finalized"}]}'
Run this on a schedule and alert on failures or unexpected slot lag.
How to evaluate a Solana RPC provider
When you compare providers for a Solana project, weight the criteria by your workload rather than by generic feature lists.
| Provider | Access models | Solana-specific considerations |
|---|---|---|
| OnFinality | Shared RPC API and dedicated nodes | Solana HTTP and WebSocket endpoints, dedicated node options for sustained or subscription-heavy workloads |
| Other managed RPC providers | Varies by plan | Check method restrictions on shared tiers and WebSocket limits |
| Self-hosted node | Full control | Highest operational overhead; you own upgrades, monitoring, and failover |
Questions worth asking any provider:
- Which Solana RPC methods are available on each plan, and are any restricted?
- How many concurrent WebSocket subscriptions are supported per connection and per account?
- What is the documented behavior when you exceed rate limits?
- Is there a status page or incident history you can review?
- Can you move from shared to dedicated access without changing your integration?
For pricing and plan structure, see RPC pricing, and for the full list of chains, see supported RPC networks.
Migration checkpoints
If you are moving from a public endpoint or another provider to a dedicated Solana node, sequence the change to avoid downtime.
- Add the new endpoint alongside the old one. Do not replace your current endpoint immediately.
- Route a small percentage of traffic to the new endpoint and compare error rates and latency.
- Move subscriptions first or last, deliberately. WebSocket migrations are the most disruptive; test reconnection logic separately.
- Verify method parity. Confirm every method you call works on the new endpoint before shifting production traffic.
- Keep a fallback endpoint configured. Even with a dedicated node, maintain a secondary endpoint for failover.
- Monitor for a full cycle (at least one week of normal traffic) before decommissioning the old endpoint.
If your project also runs on EVM chains, the same migration discipline applies; the dedicated node page describes how OnFinality structures dedicated access.
Key Takeaways
- Solana RPC performance depends on your workload mix, not just raw request volume. Expensive reads and WebSocket subscriptions are usually the real constraints.
- Shared RPC API access fits low-to-moderate, bursty traffic. Dedicated node access fits sustained high RPS, heavy account scans, and large subscription fan-out.
- Dedicated access provides capacity isolation and configuration control, but it does not remove Solana network congestion or eliminate the need for failover.
- Test with your own request mix before committing, and verify method coverage, WebSocket limits, commitment handling, and rate-limit behavior.
- Always keep a fallback endpoint and monitor endpoint health on a schedule.
Frequently Asked Questions
Do I need a dedicated Solana node for a small dApp?
Usually not. A shared RPC API endpoint handles typical dApp read traffic. Consider dedicated access when you have sustained high request volume, heavy getProgramAccounts usage, or many concurrent WebSocket subscriptions.
Does dedicated node access reduce Solana RPC latency?
It can provide a more stable baseline under load because your traffic is not competing with other tenants, but latency is still influenced by Solana network conditions and your own infrastructure. Test with your workload rather than assuming a fixed improvement.
Can I use the public OnFinality Solana endpoint in production?
The public endpoint is useful for testing and low-volume use. For production workloads, review RPC pricing and consider a plan that matches your request volume and subscription needs.
How do I handle WebSocket disconnects on Solana?
Implement automatic reconnection with re-subscription, track active subscriptions per connection, and avoid opening more subscriptions than your plan supports. Test disconnect behavior deliberately rather than waiting for it to happen in production.
What is the difference between Solana mainnet and devnet endpoints?
Devnet is a separate network for development and testing, with its own endpoints and state. Use Solana Devnet to validate client configuration, then move to the mainnet Solana network endpoints for production.
Next step
Classify your Solana workload using the table at the top of this page, then run a load test against the endpoint model you are considering. If your traffic is sustained or subscription-heavy, review dedicated node options and RPC pricing to see what fits, and check the Solana network page for current endpoint details.