

AWS Layanan Modernisasi Mainframe (Managed Runtime Environment experience) tidak lagi terbuka untuk pelanggan baru. Untuk kemampuan yang mirip dengan Layanan Modernisasi AWS Mainframe (pengalaman Lingkungan Runtime Terkelola), jelajahi Layanan Modernisasi AWS Mainframe (Pengalaman yang Dikelola Sendiri). Pelanggan yang sudah ada dapat terus menggunakan layanan ini seperti biasa. Untuk informasi selengkapnya, lihat Perubahan [AWS ketersediaan Modernisasi Mainframe](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html).

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Konfigurasikan batasan laju untuk AWS Transform untuk Runtime mainframe
<a name="ba-runtime-rate-limiting"></a>

AWS Transform for mainframe Runtime mencakup fungsionalitas pembatas laju bawaan untuk melindungi aplikasi gapwalk dari permintaan yang berlebihan dan potensi penyalahgunaan. Sistem pembatas laju menggunakan algoritma Token Bucket untuk menyediakan kapasitas burst dan pembatasan laju berkelanjutan.

**Topics**
+ [Ikhtisar pembatasan tarif](#ba-runtime-rate-limiting-overview)
+ [Properti konfigurasi](#ba-runtime-rate-limiting-config)
+ [Aktifkan pembatasan tarif](#ba-runtime-rate-limiting-enable)
+ [Identifikasi klien](#ba-runtime-rate-limiting-client-id)
+ [Header batas nilai](#ba-runtime-rate-limiting-headers)
+ [Manajemen memori](#ba-runtime-rate-limiting-memory)

## Ikhtisar pembatasan tarif
<a name="ba-runtime-rate-limiting-overview"></a>

Sistem pembatas laju menyediakan fitur-fitur berikut:

**Algoritma Bucket Token**  
+ Memungkinkan lalu lintas burst hingga kapasitas burst yang dikonfigurasi
+ Isi ulang token dengan kecepatan tetap berdasarkan permintaan per menit
+ Memberikan pembatasan tingkat kelancaran tanpa memblokir lonjakan lalu lintas yang sah

**Identifikasi Klien**  
+ Mengidentifikasi klien dengan alamat IP dengan dukungan proxy
+ Dukungan X-Forwarded-For dan X-Real-IP header
+ Menangani penyeimbang beban dan skenario proxy terbalik

**Automatic Memory Management**  
+ Secara otomatis membersihkan ember batas tarif kedaluwarsa
+ Interval pembersihan yang dapat dikonfigurasi dan waktu kedaluwarsa
+ Mencegah kebocoran memori dalam aplikasi yang berjalan lama

**Integrasi HTTP**  
+ Mengembalikan HTTP 429 (Terlalu Banyak Permintaan) ketika batas terlampaui
+ Termasuk header batas tarif standar dalam tanggapan
+ Memberikan informasi retry-after untuk klien

## Properti konfigurasi
<a name="ba-runtime-rate-limiting-config"></a>

Konfigurasikan pembatasan laju dalam `application-main.yaml` file Anda:

```
gapwalk:
  ratelimiting:
    enabled: true                                        # Enable/disable rate limiting
    requestsPerMinute: 1000                              # Sustained rate limit per minute
    burstCapacity: 1500                                  # Maximum burst requests allowed
    includeHeaders: true                                 # Include X-RateLimit-* headers
    cleanupIntervalMinutes: 5                            # Cleanup interval for expired buckets
    bucketExpiryHours: 1                                 # Hours after which unused buckets expire
    errorMessage: "Too many requests. Try again later."  # Custom error message
    whitelistIps: ""                                     # Comma-separated IPs to bypass limiting
    perEndpointLimiting: false                           # Apply limits per endpoint (not implemented)
```

### Deskripsi properti
<a name="ba-runtime-rate-limiting-config-properties"></a>

**diaktifkan**  
Sakelar utama untuk mengaktifkan atau menonaktifkan fungsionalitas pembatas laju. Default: `false`

**requestsPerMinute**  
Jumlah permintaan yang diizinkan per menit untuk pembatasan tarif berkelanjutan. Ini mewakili tingkat isi ulang token. Default: `1000`

**Kapasitas Burst**  
Jumlah maksimum permintaan yang diizinkan dalam burst sebelum pembatasan tarif berlaku. Harus lebih tinggi daripada `requestsPerMinute` memungkinkan lonjakan lalu lintas. Default: `1500`

**IncludeHeaders**  
Apakah akan menyertakan header batas tingkat standar (`X-RateLimit-Limit`,`X-RateLimit-Remaining`,`X-RateLimit-Reset`) dalam tanggapan HTTP. Default: `true`

**cleanupIntervalMinutes**  
Interval dalam hitungan menit antara pembersihan otomatis ember batas tarif kedaluwarsa. Membantu mencegah kebocoran memori. Default: `5`

**bucketExpiryHours**  
Waktu dalam beberapa jam setelah ember batas tarif yang tidak digunakan dianggap kedaluwarsa dan memenuhi syarat untuk pembersihan. Default: `1`

**errorMessage**  
Pesan kesalahan kustom dikembalikan dalam respons JSON ketika batas tingkat terlampaui. Default: `"Too many requests. Try again later."`

**Whitelistips**  
Daftar alamat IP yang dipisahkan koma yang memintas batas laju sepenuhnya. Berguna untuk pemeriksaan kesehatan atau sistem tepercaya. Default: `empty`

**perEndpointLimiting**  
Apakah akan menerapkan batas tarif terpisah per titik akhir, bukan per klien saja. Saat ini tidak diimplementasikan. Default: `false`

## Aktifkan pembatasan tarif
<a name="ba-runtime-rate-limiting-enable"></a>

Untuk mengaktifkan pembatasan laju dengan pengaturan default:

```
gapwalk:
  ratelimiting:
    enabled: true
```

## Identifikasi klien
<a name="ba-runtime-rate-limiting-client-id"></a>

Sistem pembatas tarif mengidentifikasi klien menggunakan urutan prioritas berikut:

1. **X-Forwarded-For header** (IP pertama jika dipisahkan koma)

1. **X-Real-IP sundulan**

1. **Alamat jarak jauh** dari permintaan HTTP

Ini memastikan identifikasi klien yang tepat ketika aplikasi berada di belakang:
+ Penyeimbang beban
+ Membalikkan proxy
+ CDNs
+ Gerbang API

### Contoh identifikasi klien
<a name="ba-runtime-rate-limiting-client-id-example"></a>

```
# Direct connection
Client IP: 192.168.1.100

# Behind load balancer with X-Forwarded-For
X-Forwarded-For: 203.0.113.45, 192.168.1.100
Client IP: 203.0.113.45 (first IP used)

# Behind reverse proxy with X-Real-IP
X-Real-IP: 203.0.113.45
Client IP: 203.0.113.45
```

## Header batas nilai
<a name="ba-runtime-rate-limiting-headers"></a>

Ketika `includeHeaders` diaktifkan, header berikut ditambahkan ke respons HTTP:

**X- RateLimit -Batas**  
Batas batas tarif untuk klien (permintaan per menit)

**X- RateLimit -Tersisa**  
Jumlah permintaan yang tersisa di jendela batas tarif saat ini

**X- RateLimit -Setel Ulang**  
Waktu di mana jendela batas laju disetel ulang (stempel waktu Unix)

### Contoh header respon
<a name="ba-runtime-rate-limiting-headers-example"></a>

```
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 847
X-RateLimit-Reset: 1640995200
```

### Batas nilai melebihi respons
<a name="ba-runtime-rate-limiting-headers-exceeded"></a>

Ketika batas kurs terlampaui, sistem mengembalikan:

**Status HTTP**  
429 Terlalu Banyak Permintaan

**Content-Type**  
aplikasi/json

**Coba Ulang-Setelah**  
Jumlah detik untuk menunggu sebelum mencoba lagi

```
{
  "error": "Rate limit exceeded",
  "message": "Too many requests. Try again later.",
  "retryAfter": 60,
  "timestamp": 1640995140000
}
```

## Manajemen memori
<a name="ba-runtime-rate-limiting-memory"></a>

Sistem pembatas laju secara otomatis mengelola memori untuk mencegah kebocoran dalam aplikasi yang berjalan lama:

**Pembersihan Otomatis**  
+ Berjalan setiap `cleanupIntervalMinutes` menit
+ Menghapus ember yang tidak digunakan selama berjam-jam `bucketExpiryHours`
+ Aktivitas pembersihan log untuk pemantauan

**Efisiensi Memori**  
+ Menggunakan struktur data bersamaan untuk keamanan utas
+ Pembuatan ember malas (hanya bila diperlukan)
+ Implementasi token bucket yang efisien

### Memantau aktivitas pembersihan
<a name="ba-runtime-rate-limiting-memory-monitoring"></a>

Periksa log untuk pesan pembersihan:

```
INFO  RateLimitingService - Cleaned up 15 expired rate limiting buckets
```