시작하기대시보드

아무도 온콜을 서지 않아야 합니다

Polylane은 앱의 이슈를 찾아내 자동으로 고쳐줍니다.

여러분이 신뢰하는 팀들이 우리를 신뢰합니다


Polylane은 이슈에서 수정까지 이끌어 갑니다. 모든 오류와 이상 징후를 조사하고 수정하며, 사용자는 PR을 받습니다.

Restore Hyperdrive pool size in checkout-edge

Imagecoreplane/checkout-edge#142PolylaneCritical severityOpened 3 hours agoCI passing
ImageDismissMerge
Files changedInvestigation
src/hyperdrive/pool.ts
@@ -14,21 +14,29 @@ export class HyperdrivePool {
1414 #inFlight = 0;
1515
16- constructor(private readonly binding: Hyperdrive) {
17- this.#ceiling = DEFAULT_CEILING;
16+ constructor(
17+ private readonly binding: Hyperdrive,
18+ private readonly ceiling = poolCeiling(binding),
19+ ) {
20+ if (this.ceiling < MIN_CEILING) {
21+ throw new PoolMisconfigured(this.ceiling, MIN_CEILING);
22+ }
1823 }
1924
2025 async acquire(signal: AbortSignal): Promise<Connection> {
21- while (this.#inFlight >= this.#ceiling) {
22- await this.#queue.wait();
26+ if (this.#inFlight >= this.ceiling) {
27+ queueDepth.record(this.#queue.size, { binding: this.binding.id });
28+ if (this.#queue.size > this.ceiling * QUEUE_ALARM_RATIO) {
29+ logger.warn("hyperdrive pool saturated", {
30+ ceiling: this.ceiling,
31+ waiting: this.#queue.size,
32+ });
33+ }
34+ await this.#queue.wait(signal);
2335 }
2436 this.#inFlight += 1;
2537 return this.binding.connect();
2638 }
@@ -41,9 +53,13 @@ export class HyperdrivePool {
4153 release(connection: Connection): void {
4254 this.#inFlight -= 1;
43- this.#queue.next();
55+ queueDepth.record(this.#queue.size, { binding: this.binding.id });
56+ this.#queue.next();
4457 }
4558
46- get saturated(): boolean {
47- return this.#inFlight >= this.#ceiling;
59+ get saturated(): boolean {
60+ return this.#inFlight >= this.ceiling;
4861 }
4962}
@@ -58,14 +71,18 @@ function poolCeiling(binding: Hyperdrive) {
58- const configured = binding.maxConnections;
59- if (!configured) return DEFAULT_CEILING;
60- return configured;
71+ const configured = binding.maxConnections ?? DEFAULT_CEILING;
72+ // The binding's ceiling is the contract: a worker that opens more
73+ // connections than the pool allows queues here instead of at the origin,
74+ // which is invisible in origin latency. Fail loudly at boot instead.
75+ return Math.max(configured, MIN_CEILING);
6176}
6277
63-export const DEFAULT_CEILING = 5;
64-export const QUEUE_ALARM_RATIO = 4;
78+export const DEFAULT_CEILING = 50;
79+export const MIN_CEILING = 25;
80+export const QUEUE_ALARM_RATIO = 0.5;
6581
66-const queueDepth = noopCounter();
67-const logger = console;
82+const queueDepth = meter.createHistogram("hyperdrive.queue_depth");
6883
Ask about this pull request

클라우드부터 코드까지, 앱을 완전히 매핑합니다. 모든 서비스, 리포지토리, 제공자를 하나의 컨텍스트 그래프에 담아 모든 것의 기반이 됩니다.

다음과 함께 작동합니다:

  • Image
  • Image
  • Image
  • Image
  • Image
  • Image
  • Image
  • Image
  • Image
  • Image
  • Image
Topology
Search your cloud resources...
Galaxy
Imagecheckout-edgeWorker
CriticalCritical to your architecture.

Issue hotspot: 4 issues in the last 7 days

Change hotspot: 12 changes in the last 7 days

Cloudflare · coreplane · earth·Compute
Imagehd-prodHyperdrive
CriticalCritical to your architecture.

Change hotspot: 7 changes in the last 7 days

Cloudflare · coreplane · earth·Databases
Imageingest-eventsLambda function
StandardImportant to your architecture.

Issue hotspot: 2 issues in the last 7 days

AWS · coreplane-prod · us-east-1·Compute
Imagepayments-dbDatabase
CriticalCritical to your architecture.

Issue hotspot: 1 issue in the last 7 days

Change hotspot: 3 changes in the last 7 days

PlanetScale · coreplane · us-east·Databases

부실한 코드가 프로덕션에 들어가는 것을 막습니다. 봇과 엔지니어가 만든 모든 코드 변경은 실시간 텔레메트리를 기준으로 리뷰됩니다.

github.com/coreplane/orders-api/pull/482

ImageAdd trigram index for order search #482

Openrvidal wants to merge 1 commit into main from order-search-trgm
Conversation1Commits1Checks2Files changed1
polylanebotcommented 2 minutes ago···
Caution

Merging this pull request may degrade production (high impact).

Merging this blocks every write to orders while the index builds. migrations/0114_order_search_trgm.sql:3 adds CREATE INDEX … USING gin (search_text gin_trgm_ops) without CONCURRENTLY, and a plain CREATE INDEX takes a full write lock on orders for the whole build. Checkout sustains ~38 writes/s on that table; each one queues behind the lock until the build finishes.

To make this safe: build the index with CREATE INDEX CONCURRENTLY outside the transactional migration.

orders-db · writes per second · last 48h
02040
-48h-24hnow
every one of these writes blocks while the index builds

Polylane analysed de91b47 for production impact.

Some checks were not successful1 failing and 1 successful check
ci / testSuccessful in 2m 4sDetails
Polylane production impactNon-concurrent index build locks writes on ordersDetails
Merging is blocked

언제든 사용자의 질문에 답할 수 있습니다. 사용자의 앱을 파악하고 지치지 않고 데이터를 파고들어 줍니다.

Image# engineering
MessagesAdd canvasFiles & links
Image
boris2:09 AM

checkout feels slow. is that us or payments-api?

Image
PolylaneAgent2:09 AM

Us. checkout-edge Wall Time P99 is 18× its own baseline and the requests are queuing for a Hyperdrive connection, not on a downstream call.payments-api is answering in 180ms, flat for a week. Deploy 9f3c2a1 at 2:02 AM shrank the hd-prod pool from 50 connections to 5.

👀 2
Image
aleksandr2:11 AM

how long has it been queueing like that?

Image
PolylaneAgent2:11 AM

Nine minutes, since the deploy landed. It never went above 2 before that. I submitted a PR fix and tagged@justin to deploy 2 minutes ago.

hd-prod · pool queue depth · last 30mdeploy 9f3c2a1
02040
-30m-15mnow
every request in that queue is a checkout waiting

Open in PolylaneConfigure

그리고 다른 에이전트와 인사이트를 공유합니다. 코딩 에이전트를 위한 새로운 프로덕션 컨텍스트 레이어로, MCP나 CLI를 통해 제공됩니다.

Imageclaude — ~/checkout-edge

> make region a required field on the checkout request schema

●polylane · searchcallers of POST /checkout

●polylane · runToolqueryLogs · request shapes

⏺Hold on: cart-svc and edge-gateway still send region-less requests,41,200 in the last 24h. Requiring it now would 400 them both.

Safer: default it, migrate the two callers, then require.

Are you okay with this plan?

❯ 1. Yes, default it and migrate both callers

❯ 2. Yes, but require it now and let them 400

❯ 3. No, tell Claude what to do differently (esc)

마이그레이션 없음. 새 SDK 없음. Polylane은 이미 운영 중인 것에 연결됩니다.

온콜을 직접 겪어 온 엔지니어들이 만듭니다. Cloudflare, Webflow, Groq, Twilio, Uber, Robinhood 출신입니다.

CloudflareCloudflareWebflowWebflowGroqGroqTwilioTwilioUberUberRobinhoodRobinhood
"저는 여러 해 동안 관측성 플랫폼을 만들었습니다. Baselime에서, 그다음 Cloudflare에서. 우리의 도구는 여전히 무엇이 고장 났는지 찾는 데 형편없고, 스스로는 아무것도 고치지 못합니다. 온콜은 여전히 망가져 있습니다. 제가 고치고 있습니다."
Boris Tane
Boris Tane
창업자

저희는 소프트웨어가 스스로 운영되게 만들고 있습니다. 함께하세요.

신뢰는 타협할 수 없습니다.

AICPA SOC 2

SOC 2 Type II

독립적으로 감사받은 보안 통제.

ISO 27001

ISO 27001:2022

정보 보안 관리의 국제 표준.

종단 간 암호화

저장 시 AES-256, 전송 시 TLS 1.2+.

데이터 격리

조직별로 완전히 격리됩니다.

트러스트 센터 보기

Polylane 시작하기

Polylane 콘솔

무료로 시작하기

Polylane CLI

자주 묻는 질문.

Polylane은 무엇인가요?

Polylane은 소프트웨어가 스스로 운영되게 합니다. AI 에이전트가 사용자가 운영하는 모든 것을 학습하고, 고칠 수 있는 것은 고치며, 배포 대상 프로덕션을 기준으로 모든 코드 변경을 리뷰하고, 온콜이 받는 질문에 답하며, 코딩 에이전트에게 동일한 프로덕션 컨텍스트를 제공합니다.

Polylane은 이슈를 어떻게 감지하나요?

에이전트는 일정한 주기로 메트릭, 로그, 트레이스를 읽고 각 리소스의 평상시 동작과 비교해 판단합니다. 팀이 이미 차트로 보고 있는 것은 무엇이든 검사가 됩니다.

Polylane이 리뷰 없이 프로덕션을 바꾸나요?

아니요. 모든 쓰기 작업은 정확한 요청 내용을 화면에 표시하고 승인을 기다리며, 코드 변경은 여러분의 리뷰와 CI가 결정하는 풀 리퀘스트로 도착합니다.

Polylane은 무엇과 함께 동작하나요?

AWS, Cloudflare, Vercel, Fly.io, Render, Kubernetes, PlanetScale, Railway, Supabase, Modal, Convex, ClickHouse, Turso, 그리고 GitHub, Slack과 Datadog, Honeycomb, Axiom, Grafana Cloud, Sentry, Better Stack, OpenStatus, Logfire 등 관측성 도구와 함께 작동합니다.

Polylane은 언제 사용할 수 있나요?

지금 가능합니다. 명령어 하나로 CLI를 설치하고, 코딩 에이전트를 연결하며, 계정을 생성합니다. macOS나 Linux에서 curl -fsSL https://polylane.com/setup | bash를 실행하세요.

AI 에이전트가 Polylane을 사용할 수 있나요?

네. api.polylane.com에 REST API가 있고 mcp.polylane.com/mcp에 MCP 서버가 있으며, 이 사이트는 polylane.com/llms.txt에서 기계 판독이 가능합니다.