惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Application and Cybersecurity Blog
Application and Cybersecurity Blog
T
Threat Research - Cisco Blogs
Latest news
Latest news
Project Zero
Project Zero
TaoSecurity Blog
TaoSecurity Blog
Cyberwarzone
Cyberwarzone
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Google DeepMind News
Google DeepMind News
P
Privacy & Cybersecurity Law Blog
T
Troy Hunt's Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
AWS News Blog
AWS News Blog
Hacker News: Ask HN
Hacker News: Ask HN
S
Security @ Cisco Blogs
C
Cisco Blogs
Help Net Security
Help Net Security
I
Intezer
W
WeLiveSecurity
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
腾讯CDC
S
Secure Thoughts
MyScale Blog
MyScale Blog
Recorded Future
Recorded Future
G
GRAHAM CLULEY
L
LINUX DO - 热门话题
A
About on SuperTechFans
C
CXSECURITY Database RSS Feed - CXSecurity.com
IT之家
IT之家
J
Java Code Geeks
The Hacker News
The Hacker News
阮一峰的网络日志
阮一峰的网络日志
Scott Helme
Scott Helme
Recent Announcements
Recent Announcements
AI
AI
Cisco Talos Blog
Cisco Talos Blog
B
Blog RSS Feed
V
Vulnerabilities – Threatpost
C
Check Point Blog
Security Latest
Security Latest
S
SegmentFault 最新的问题
T
The Exploit Database - CXSecurity.com
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
M
MIT News - Artificial intelligence
T
The Blog of Author Tim Ferriss
Attack and Defense Labs
Attack and Defense Labs
PCI Perspectives
PCI Perspectives
Recent Commits to openclaw:main
Recent Commits to openclaw:main
T
Tailwind CSS Blog
Apple Machine Learning Research
Apple Machine Learning Research

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant Common SOC 2 Failures (Real World) Stop Vibe-Checking Your AI App: A Practical Guide to Evals How to Use SonarQube and SonarScanner Locally to Level Up Your Code Quality Your Next To-Do App Is Dead — I Replaced Mine with an OpenClaw AI Sign a Nostr event in 60 lines of Python using coincurve — no nostr-sdk, no nbxplorer, no rust toolchain ITGC Audit Explained Like You’re in Big 4 Patch Tuesday abril 2026: Microsoft parcha 163 vulnerabilidades y un zero-day en SharePoint Stop scraping everything: a better way to track competitor price changes Listing on MCPize + the Official MCP Registry while routing payments OUTSIDE the marketplace — how I kept 100% of my x402 revenue Building an AI-Powered Risk Intelligence System Using Serverless Architecture Why We Ripped Function Overloading Out of Our AI Toolchain Testing AI-Generated Code: How to Actually Know If It Works SaaS Churn Is Killing Your Business. Here Is What to Do About It (Without a Support Team) The Speed of AI Is No Longer Linear - And Self-Improving Models Are Why How to Implement RBAC for MCP Tools: A Practical Guide for Engineering Teams From Standard Quote to Persuasive Proposal: AI Automation for Arborists I built a CLI that scaffolds complete multi-tenant SaaS apps Axios CVE-2025–62718: The Silent SSRF Bug That Could Be Hiding in Your Node.js App Right Now The dashboard that ended our friendship Data Pipelines Explained Simply (and How to Build Them with Python) The Hidden Cost of AI Systems Nobody Talks About. undefined vs undeclared, and how typeof behaves Switching from file-based jobs to NATS/Kafka in Rust without changing code io_uring Adventures: Rust Servers That Love Syscalls Why Agentic AI is Killing the Traditional Database The POUR principles of web accessibility for developers and designers Quantum Neural Network 3D — A Deep Dive into Interactive WebGL Visualization How To Install Caveman In Codex On macOS And Windows Automation Pipeline Reliability: Why Your Workflow Breaks When Nobody Is Watching I Built an 'Open World' AI Coding Agent — It Works From ANY Folder From Freelancing to Product: A Tech Service Company's SaaS Transformation China's AI Giants: Adding Tencent Hunyuan & ByteDance Doubao to AI University (74 Providers) On the Vibe Coders and Their Lies clerk: Auto-Summarize Your Claude Code Sessions AI Weekly — 2026/04/10–04/17 | The Model Lockdown Is Here, but the Toolchain Is the Real Battleground AI 週報 — 2026/04/10–2026/04/17 模型封鎖潮來了,但工具鏈才是真戰場 Maybe this is how Open-Source apps are born... 🚀 Fine-Tune LLMs with LoRA and QLoRA: 2026 Guide tRPC v11 + Next.js App Router: End-to-End Type Safety Without the Boilerplate ShadCN UI in 2026: Why I Stopped Installing Component Libraries and Started Owning My Components SaaS Billing in React Server Components: Stripe + Supabase Without a Single `useEffect` Join our DEV Weekend Challenge — $1,000 in Prizes Across TEN winners! Submissions Due April 20 at 6:59 AM UTC. Implementing FSRS Spaced Repetition in Flutter + Supabase — Adding Memory Science to an AI Learning App "I Texted My Localhost From the Train — Claude Code Fixed the Bug Before I Got Home" I Built a Sales Prep AI and It Went Deeper Than Expected Design to Code #2: One JSON, Eleven Outputs Solving the 100M-Row Problem: A Summary Table Pattern for High-Volume Push Notification Logs Flutter Web With Wasm: What Actually Changes For Developers I Built 50 Royalty-Free Soundtracks for My Side Project in a Weekend Using AI Music Generation The Vibe Coding Security Checklist: 7 Things to Check Before You Ship Stop Letting Googlebot Guess Fix Your React App's SEO Right Desconstruindo o Streaming do LinkedIn: Como Criar um Engine de Extração de Vídeo de Alta Performance com HLS e FFmpeg (EDA Part-1) EDA (Exploratory Data Analysis) Explained With Real Life — Why Looking at Your Data Is the Most Important Step in Machine Learning Brand Relationship Management at Scale: Our 4-Touch Outreach System for 200+ Brands Why String.fromEnvironment() Might Return an Empty String in Dart JGuardrails 1.0.0 — Hardening Java LLM Apps Against Jailbreaks, Toxicity, and Prompt Injection Plan and Schedule a Full Week of Threads Content From One Claude Conversation Coding Cat Oran Ep3, Five Tables Changed Everything Updated: BFF Pattern I'm done watching freelancers get buried by 200 proposals. So I'm building the alternative. This is my first post BFS Algorithm in Java Step by Step Tutorial with Examples Tracking LLM Pricing Monthly: An Open Dataset for 22 AI Models How We Measure Content ROI on a Comparison Site: Revenue Attribution Without Perfect Data Introducing Nova AI Ops: The AI-Native Operating System for SRE Teams I built a free desktop video downloader for Windows — Grabbit How Talkie OCR Helps Vision-Impaired & Dyslexic Users Read the World Around Them VRCFaceTracking安装和iPhone面捕配置教程,有bug Even CrowdStrike Can't See Your Agents The Automation Gold Rush: What n8n Workflows and Claude Are Opening Up for Developers Right Now
Benchmarking AI Gateways: GoModel vs LiteLLM vs Portkey vs Bifrost
Andrew S. Bandy · 2026-06-27 · via DEV Community

In October 2025 I tried to build my startup on top of LiteLLM.

At first it looked like the obvious choice. It supported many providers, it had
an OpenAI-compatible API, and it was already used by a lot of people. I did not
want to write an AI gateway. I wanted to build the product behind it.

Then I started running it on the hot path.

My opinion changed there.

A gateway is not a dashboard or integration glue you call once in a while. It
sits on every request, every retry, every stream, every tool call, every
fallback, every timeout.

A heavy gateway charges rent forever.

Most AI gateway comparisons miss that part. They talk about provider count,
dashboards, tracing, and "support for 1000+ models". Those things matter, but
they are not free. Before the gateway calls OpenAI, Anthropic, Gemini, vLLM, or
anything else, it has already spent your CPU, memory, cold-start time, and
operational budget.

I am not comparing full product maturity here. I am comparing how these gateways
behave on the hot path.

So I started writing GoModel: a small
open-source AI gateway and AI control plane in Go, with an OpenAI-compatible API
and explicit provider adapters.

When I launched GoModel on Hacker News,
I promised a real, reproducible benchmark. This article is that follow-up.

The benchmark question is simple:

How lean is each AI gateway when it sits on the request path?

That question runs through the whole benchmark: GoModel vs LiteLLM vs Portkey vs
Bifrost, measured by latency, throughput, memory, CPU, cold start, and image
size rather than landing pages or feature matrices.

The runtime footprint matters

Latency gets the easiest arguments. It rarely tells the whole story.

Most real LLM calls are dominated by inference time. If a model takes 2000 ms
to answer, the difference between 5 ms and 15 ms of proxy overhead is not
the main story.

The main story is the deployment envelope:

  • How much RAM does the gateway need under load?
  • How much CPU does it burn per request?
  • How many requests can it serve per core?
  • How fast does it cold-start?
  • How large is the Docker image?
  • Can you run it as a sidecar, on a small VM, in serverless, or near local models?
  • Is the core gateway actually open-source?

Those numbers decide whether the gateway can run where you want it to run.

A 372 MB compressed image (1.2 GB unpacked) that idles around gigabytes of
RAM and takes 25 s to cold-start is a different operational thing than a
16 MB image that peaks at 37 MB of RAM and is serving traffic 0.56 s after
launch.

So I care about the runtime footprint.

What this benchmark does not prove

This benchmark does not prove that one gateway is best for every company.

I am not measuring:

  • bug counts or overall correctness
  • semantic cache quality
  • tracing UI quality
  • guardrail quality
  • admin dashboards
  • long-term provider maintenance
  • every possible provider-specific feature
  • total provider count

Those things matter. Some of them matter a lot.

LiteLLM in particular has more integrated providers and more gateway features
than GoModel today. If your first requirement is maximum provider coverage right
now, LiteLLM has a real advantage. This benchmark does not erase that. It
measures the runtime footprint of putting each gateway on the request path. In
practice, many smaller or newer providers already expose an OpenAI-compatible
API, so provider count is not always the same as practical routing coverage.

The benchmark measures one narrower thing: runtime and deployment overhead on
the request path
.

That still matters, because the gateway is on the hot path. If you run high
request volume, local models, serverless workloads, edge workloads, or many small
model calls, the overhead stops being theoretical.

AI gateway benchmark setup

I tested four AI gateways people actually compare:

  • GoModel
  • LiteLLM
  • Portkey
  • Bifrost

Every gateway talked to the same instant mock backend, on purpose. I did not
want to benchmark OpenAI, Anthropic, AWS networking, or random internet jitter.
I wanted to isolate the gateway itself.

Each gateway ran one at a time, in Docker, on an AWS c7i.large with
2 vCPU and 4 GiB RAM, running the latest Amazon Linux 2023 AMI. The whole
thing is Terraform'd, runs with one command, and tears itself down afterwards.

I first ran this on a free-tier t2.micro. That was cheap and easy to
reproduce, but unfair to the heavier gateways. A 1 GiB machine cannot hold a
gateway that wants gigabytes of memory, so it starts swapping. At that point you
are benchmarking the host being too small.

So I moved to c7i.large: still small, but non-burstable and large enough that
nothing swaps. It also makes the LiteLLM setup more honest. LiteLLM recommends
one worker per vCPU, and this machine has 2 vCPUs, so LiteLLM gets 2
workers. That gives it the multi-core access it is supposed to have instead of
pinning it to a single worker on a tiny box.

The test covered six workloads:

  • chat completions, non-streaming
  • chat completions, streaming
  • Responses API, non-streaming
  • Responses API, streaming
  • Anthropic messages, non-streaming
  • Anthropic messages, streaming

Each workload used 8,000 requests at concurrency 10, across two trials
with randomized gateway order
. Latency is the median across trials, and I
report p99 with its min-max range so one noisy window cannot tell the whole
story.

I would not call this a statistically exhaustive study. It is a reproducible
engineering benchmark, and the harness is public so people can rerun it, change
the machine, or add their own workloads.

A few details matter if you want to reproduce or criticize the numbers:

  • Throughput is measured, not inferred. The latency runs report completed-req/s at fixed concurrency, but real capacity comes from a separate concurrency sweep that drives each gateway to saturation.
  • Every dialect is warmed up before measurement. LiteLLM lazily imports some per-dialect translation code on first use. A chat-only warmup made its Responses and Messages paths look worse than they should. I warmed up all dialects to avoid that.
  • Retries are disabled for all gateways. I also disabled GoModel's circuit breaker for this benchmark. In production, rejecting traffic after upstream trouble is the right behavior. In a saturation benchmark, it would make the throughput number unfairly low.
  • LiteLLM runs with its recommended worker count. A LiteLLM worker is effectively single-threaded, and its production guidance is one worker per vCPU. On this box that means 2 workers.
  • Streaming uses terminal-marker or idle-gap detection. If a gateway streams content but never sends a terminal event, the harness measures to last byte instead of hanging forever.

GoModel vs LiteLLM vs Portkey vs Bifrost

Representative latency is chat completions, non-streaming. All resource figures
are measured under load on the same box.

Metric GoModel Bifrost Portkey LiteLLM
Runtime Go Go Node.js Python
Latency overhead p50 1.8 ms 2.5 ms 9.7 ms 30.6 ms
Latency p99 6.9 ms 18.3 ms 30.5 ms 39.3 ms
Throughput (sustained) 4900 req/s 3100 req/s 950 req/s 324 req/s
Peak RAM under load 37 MB 143 MB 112 MB 2.3 GB
Efficiency (req/s per CPU %) 52 25 8.2 2.6
Cold start to first request 0.56 s 7.1 s 1.1 s 25.5 s
Docker image (compressed pull) 16 MB 77 MB 59 MB 372 MB
Workload coverage 6/6 6/6 4/6 6/6
Vendor-neutral core Yes Partial † Yes Yes
Core source available Yes ‡ Partial ‡ Partial ‡ Yes

What stood out

GoModel had the lowest median latency and the tightest tail: 1.8 ms p50 and
6.9 ms p99.

Bifrost was close on median latency at 2.5 ms, which is a good result. The
gap opened at the tail and in memory: 18.3 ms p99 and 143 MB peak RAM under
load.

Portkey was heavier than I expected for this narrow proxy benchmark. It served
950 req/s sustained and used 112 MB peak RAM under load. In this setup it did
not serve the Anthropic /v1/messages dialect, so it gets 4/6 workload
coverage. Treat that as a setup limitation, not a claim that Portkey cannot
support Anthropic in a fuller virtual-key configuration.

LiteLLM was the outlier. At its recommended worker count, it used about
2.3 GB of RAM, cold-started in 25.5 s, and sustained 324 req/s.

Not because Python is morally bad. The language matters only when it changes the
deployment envelope. Here it does: memory floor, image size, cold-start time,
dependency graph, and throughput per core.

The later supply-chain incident around LiteLLM
also made me more confident in GoModel's design direction. A small Go binary
with a standard-library-heavy dependency tree is structurally less exposed to
that class of problem than a large Python dependency graph.

What AI gateway benchmarks do not capture

Forwarding JSON is not the hard part.

The hard part is provider drift.

OpenAI, Anthropic, Gemini, AWS Bedrock, Azure OpenAI, Groq, xAI, Cerebras, vLLM,
and local servers all disagree in small ways. Then they change those ways. Tool
calling changes. Streaming changes. Reasoning parameters change. Image inputs
change. Error formats change. Rate-limit semantics change.

An AI gateway or AI control plane has to absorb that without becoming magic.

GoModel's bet is not "support every model name on the internet".

The bet is:

  • support the providers people actually deploy
  • keep provider adapters explicit
  • accept OpenAI-compatible requests generously
  • translate only what needs translation
  • pass through what should stay provider-specific
  • return conservative OpenAI-compatible responses

For the same reason, GoModel starts as a small OpenAI-compatible gateway, not as
a dashboard with a proxy attached.

Why this matters for local models and vLLM

If all your traffic goes to a cloud model that takes several seconds to answer,
gateway overhead can look academic.

Local models change the math.

If you are routing through an AI gateway to vLLM, Ollama, LM Studio, llama.cpp,
or small specialized models on your own network, the model call can be much
faster. Then gateway overhead, cold starts, memory, and sidecar size matter more.

One reason I want GoModel to stay small: a gateway should be cheap enough to put
near the workload.

Notes on neutrality and open source

Bifrost is built by Maxim AI, an LLM
evaluation and observability platform. It routes to many model providers, but
the gateway also sits close to Maxim's eval and observability ecosystem. If you
want to choose your own eval platform, or stay independent from any eval
platform, ask whether Bifrost is the right match for you. Good software can
still have incentives attached. "Vendor-neutral" needs an asterisk here.

"Open-source" also needs care.

Portkey keeps observability storage, dashboard, multi-team RBAC, and at-scale
semantic caching in a closed managed tier. Bifrost's core gateway is Apache-2.0,
but its Enterprise edition adds closed or managed features. LiteLLM's proxy core
is MIT, but enterprise features like SSO, audit logs, and fine-grained access
control sit behind a proprietary commercial license.

GoModel is open-source today. Some enterprise-grade AI control plane features may
stay private. The core gateway is intended to remain useful without those private
features.

Reproduce it yourself

The benchmark is built to be self-verifiable. It provisions the AWS instance,
runs every gateway against the same backend, prints the tables, and destroys the
infrastructure.

Reproduce it yourself:

./run.sh

One caveat: it runs on paid AWS infrastructure, not the free tier. A
c7i.large is about $0.09/hour and the run self-destructs within an hour or
two, so budget under $1 per run to be safe.

If you pass KEEP=1 or teardown fails, you keep paying until you destroy the
box, so double-check the teardown.

Conclusion

I did not start GoModel because I wanted another AI gateway in the world.

I started it because the gateway I wanted to use became part of the problem. It
sat on the hot path, but did not feel like hot-path software: too heavy, too
slow to start, too expensive to keep around, too large for the job.

This benchmark is the result of turning that frustration into numbers.

The numbers say GoModel is small in the places I care about: 16 MB image,
37 MB peak RAM, 0.56 s cold start, 1.8 ms p50, 6.9 ms p99, and
4900 req/s sustained throughput on a small AWS box.

LiteLLM still has more providers and more features today. Portkey and Bifrost
have their own strengths. But if the gateway is going to sit between your users
and every model call, I think it should first be cheap, predictable, and boring
to run.

GoModel is my attempt to build that kind of gateway.