|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024년 10월에 우리는 AI Gateway를 사용하여 AI 애플리케이션에서 수십억 개의 로그를 저장하는 방법과 Cloudflare의 개발자 플랫폼을 사용하여 이를 수행하는 방법에 대해 이야기했습니다.
In October 2024, we covered how to store billions of logs from your AI application using AI Gateway, and how we used Cloudflare’s Developer Platform to do this.
2024년 10월에는 AI Gateway를 사용하여 AI 애플리케이션에서 수십억 개의 로그를 저장하는 방법과 Cloudflare의 개발자 플랫폼을 사용하여 이를 수행하는 방법을 다루었습니다.
With AI Gateway already processing over 3 billion logs and experiencing rapid growth, the number of connections to the platform continues to increase steadily. To help developers manage this scale more effectively, we wanted to offer an alternative to implementing HTTP/2 keep-alive to maintain persistent HTTP(S) connections, thereby avoiding the overhead of repeated handshakes and TLS negotiations with each new HTTP connection to AI Gateway. We understand that implementing HTTP/2 can present challenges, particularly when many libraries and tools may not support it by default and most modern programming languages have well-established WebSocket libraries available.
AI Gateway는 이미 30억 개가 넘는 로그를 처리하고 급격한 성장을 경험하면서 플랫폼에 대한 연결 수가 꾸준히 증가하고 있습니다. 개발자가 이 규모를 보다 효과적으로 관리할 수 있도록 우리는 지속적인 HTTP(S) 연결을 유지하기 위해 HTTP/2 연결 유지 구현에 대한 대안을 제공하여 AI 게이트웨이에 대한 각각의 새로운 HTTP 연결에 대한 반복적인 핸드셰이크 및 TLS 협상의 오버헤드를 방지하고 싶었습니다. . 우리는 HTTP/2를 구현하면 특히 많은 라이브러리와 도구가 기본적으로 HTTP/2를 지원하지 않고 대부분의 최신 프로그래밍 언어에 잘 확립된 WebSocket 라이브러리가 있는 경우 문제가 발생할 수 있다는 것을 이해합니다.
With this in mind, we used Cloudflare’s Developer Platform and Durable Objects (yes, again!) to build a WebSockets API that establishes a single, persistent connection, enabling continuous communication.
이를 염두에 두고 우리는 Cloudflare의 개발자 플랫폼과 지속형 개체(그렇습니다!)를 사용하여 단일하고 지속적인 연결을 설정하고 지속적인 통신을 가능하게 하는 WebSockets API를 구축했습니다.
Through this API, all AI providers supported by AI Gateway can be accessed via WebSocket, allowing you to maintain a single TCP connection between your client or server application and the AI Gateway. The best part? Even if your chosen provider doesn’t support WebSockets, we handle it for you, managing the requests to your preferred AI provider.
이 API를 통해 AI 게이트웨이가 지원하는 모든 AI 공급자는 WebSocket을 통해 액세스할 수 있으므로 클라이언트 또는 서버 애플리케이션과 AI 게이트웨이 간에 단일 TCP 연결을 유지할 수 있습니다. 가장 좋은 부분은? 귀하가 선택한 공급자가 WebSocket을 지원하지 않더라도 우리는 귀하가 선호하는 AI 공급자에 대한 요청을 관리하면서 이를 처리합니다.
By connecting via WebSocket to AI Gateway, we make the requests to the inference service for you using the provider’s supported protocols (HTTPS, WebSocket, etc.), and you can keep the connection open to execute as many inference requests as you would like.
WebSocket을 통해 AI Gateway에 연결하면 공급자가 지원하는 프로토콜(HTTPS, WebSocket 등)을 사용하여 추론 서비스에 대한 요청이 이루어지며, 사용자는 연결을 열어두고 원하는 만큼 많은 추론 요청을 실행할 수 있습니다.
To make your connection to AI Gateway more secure, we are also introducing authentication for AI Gateway. The new WebSockets API will require authentication. All you need to do is create a Cloudflare API token with the permission “AI Gateway: Run” and send that in the cf-aig-authorization header.
AI Gateway에 대한 연결을 더욱 안전하게 만들기 위해 AI Gateway에 대한 인증도 도입하고 있습니다. 새로운 WebSockets API에는 인증이 필요합니다. 여러분이 해야 할 일은 "AI Gateway: Run" 권한이 있는 Cloudflare API 토큰을 생성하고 이를 cf-aig-authorization 헤더에 보내는 것뿐입니다.
In the flow diagram above:
위의 흐름도에서:
1. When Authenticated Gateway is enabled and a valid token is included, requests will pass successfully.
1. 인증된 게이트웨이가 활성화되고 유효한 토큰이 포함되면 요청이 성공적으로 전달됩니다.
2. If Authenticated Gateway is enabled, but a request does not contain the required cf-aig-authorization header with a valid token, the request will fail. This ensures only verified requests pass through the gateway.
2. 인증된 게이트웨이가 활성화되었지만 요청에 유효한 토큰과 함께 필요한 cf-aig-authorization 헤더가 포함되어 있지 않으면 요청이 실패합니다. 이렇게 하면 확인된 요청만 게이트웨이를 통과하게 됩니다.
3. When Authenticated Gateway is disabled, the cf-aig-authorization header is bypassed entirely, and any token — whether valid or invalid — is ignored.
3. 인증된 게이트웨이가 비활성화되면 cf-aig-authorization 헤더가 완전히 우회되고 유효한지 여부에 관계없이 모든 토큰이 무시됩니다.
How we built it
우리가 그것을 구축한 방법
We recently used Durable Objects (DOs) to scale our logging solution for AI Gateway, so using WebSockets within the same DOs was a natural fit.
최근 DO(내구성 개체)를 사용하여 AI Gateway에 대한 로깅 솔루션을 확장했기 때문에 동일한 DO 내에서 WebSocket을 사용하는 것이 자연스럽게 적합했습니다.
When a new WebSocket connection is received by our Cloudflare Workers, we implement authentication in two ways to support the diverse capabilities of WebSocket clients. The primary method involves validating a Cloudflare API token through the cf-aig-authorization header, ensuring the token is valid for the connecting account and gateway.
Cloudflare 작업자가 새로운 WebSocket 연결을 수신하면 WebSocket 클라이언트의 다양한 기능을 지원하기 위해 두 가지 방법으로 인증을 구현합니다. 기본 방법은 cf-aig-authorization 헤더를 통해 Cloudflare API 토큰을 검증하여 해당 토큰이 연결 계정과 게이트웨이에 유효한지 확인하는 것입니다.
However, due to limitations in browser WebSocket implementations, we also support authentication via the “sec-websocket-protocol” header. Browser WebSocket clients don't allow for custom headers in their standard API, complicating the addition of authentication tokens in requests. While we don’t recommend that you store API keys in a browser, we decided to add this method to add more flexibility to all WebSocket clients.
그러나 브라우저 WebSocket 구현의 제한으로 인해 "sec-websocket-protocol" 헤더를 통한 인증도 지원됩니다. 브라우저 WebSocket 클라이언트는 표준 API에서 사용자 정의 헤더를 허용하지 않으므로 요청에 인증 토큰을 추가하는 것이 복잡해집니다. API 키를 브라우저에 저장하는 것은 권장하지 않지만 모든 WebSocket 클라이언트에 더 많은 유연성을 추가하기 위해 이 방법을 추가하기로 결정했습니다.
After this initial verification step, we upgrade the connection to the Durable Object, meaning that it will now handle all the messages for the connection. Before the new connection is fully accepted, we generate a random UUID, so this connection is identifiable among all the messages received by the Durable Object. During an open connection, any AI Gateway settings passed via headers — such as cf-aig-skip-cache (which bypasses caching when set to true) — are stored and applied to all requests in the session. However, these headers can still be overridden on a per-request basis, just like with the Universal Endpoint today.
이 초기 확인 단계 후에 연결을 지속성 개체로 업그레이드합니다. 즉, 이제 연결에 대한 모든 메시지를 처리하게 됩니다. 새 연결이 완전히 수락되기 전에 임의의 UUID를 생성하므로 지속성 개체에서 수신한 모든 메시지 중에서 이 연결을 식별할 수 있습니다. 연결이 열려 있는 동안 cf-aig-skip-cache(true로 설정된 경우 캐싱을 우회)와 같은 헤더를 통해 전달된 모든 AI Gateway 설정은 저장되어 세션의 모든 요청에 적용됩니다. 그러나 이러한 헤더는 현재 Universal Endpoint와 마찬가지로 요청별로 재정의될 수 있습니다.
How it works
작동 방식
Once the connection is established, the Durable Object begins listening for incoming messages. From this point on, users can send messages in the AI Gateway universal format via WebSocket, simplifying the transition of your application from an existing HTTP setup to WebSockets-based communication.
연결이 설정되면 지속성 개체가 들어오는 메시지를 수신하기 시작합니다. 이 시점부터 사용자는 WebSocket을 통해 AI Gateway 범용 형식으로 메시지를 보낼 수 있으므로 애플리케이션을 기존 HTTP 설정에서 WebSocket 기반 통신으로 쉽게 전환할 수 있습니다.
When a new message reaches the Durable Object, it’s processed using the same code that powers the HTTP Universal Endpoint, enabling seamless code reuse across Workers and Durable Objects — one of the key benefits of building on Cloudflare.
새 메시지가 지속형 개체에 도달하면 HTTP 범용 끝점을 지원하는 동일한 코드를 사용하여 처리되므로 작업자와 지속형 개체 전체에서 원활한 코드 재사용이 가능합니다. 이는 Cloudflare 기반 구축의 주요 이점 중 하나입니다.
For non-streaming requests, the response is wrapped in a JSON envelope, allowing us to include additional information beyond the AI inference itself, such as the AI Gateway log ID for that request.
스트리밍되지 않는 요청의 경우 응답이 JSON 봉투에 래핑되므로 해당 요청에 대한 AI 게이트웨이 로그 ID와 같은 AI 추론 자체 이상의 추가 정보를 포함할 수 있습니다.
Here’s an example response for the request above:
위 요청에 대한 응답 예시는 다음과 같습니다.
For streaming requests, AI Gateway sends an initial message with request metadata telling the developer the stream is starting.
스트리밍 요청의 경우 AI Gateway는 개발자에게 스트림이 시작되고 있음을 알리는 요청 메타데이터가 포함된 초기 메시지를 보냅니다.
After this initial message, all streaming chunks are relayed in real-time to the WebSocket connection as they arrive from the inference provider. Note that only the eventId field is included in the metadata for these streaming chunks (more info on what this new field is below).
이 초기 메시지 이후 모든 스트리밍 청크는 추론 공급자로부터 도착할 때 실시간으로 WebSocket 연결로 릴레이됩니다. 이러한 스트리밍 청크의 메타데이터에는 eventId 필드만 포함됩니다(이 새 필드에 대한 자세한 내용은 아래 참조).
This approach serves two purposes:
이 접근 방식은 두 가지 목적으로 사용됩니다.
부인 성명:info@kdj.com
제공된 정보는 거래 조언이 아닙니다. kdj.com은 이 기사에 제공된 정보를 기반으로 이루어진 투자에 대해 어떠한 책임도 지지 않습니다. 암호화폐는 변동성이 매우 높으므로 철저한 조사 후 신중하게 투자하는 것이 좋습니다!
본 웹사이트에 사용된 내용이 귀하의 저작권을 침해한다고 판단되는 경우, 즉시 당사(info@kdj.com)로 연락주시면 즉시 삭제하도록 하겠습니다.