Pembatasan tarif adalah teknik yang digunakan untuk mengontrol laju permintaan atau operasi yang masuk ke sistem atau API. Hal ini mencegah penggunaan berlebihan atau penyalahgunaan, memastikan alokasi sumber daya yang adil dan menjaga stabilitas sistem. Di C#, pembatasan kecepatan dapat diterapkan untuk melindungi API web, kueri database, atau operasi intensif sumber daya apa pun. Pada artikel ini, kita akan mengeksplorasi konsep pembatasan kecepatan di C# dan memberikan contoh untuk mengilustrasikan penerapannya.

1. Definisi Pembatasan Tarif: Pembatasan tarif adalah proses membatasi jumlah permintaan atau operasi yang dapat dilakukan dalam jangka waktu tertentu. Hal ini mencegah sistem kewalahan oleh lalu lintas yang berlebihan, memastikan bahwa sumber daya yang tersedia digunakan secara efisien dan didistribusikan secara adil di antara pengguna.

2. Contoh Pembatasan Nilai:

A. Pembatasan Kecepatan API Web: Misalkan Anda memiliki API web yang memungkinkan pengguna mengambil data. Untuk mencegah penyalahgunaan dan memastikan penggunaan wajar, Anda dapat menerapkan pembatasan tarif untuk membatasi jumlah panggilan API yang dapat dilakukan oleh satu pengguna atau klien dalam jangka waktu tertentu.

using System;
using System.Collections.Generic;

public class RateLimiter
{
    private Dictionary<string, Queue<DateTime>> requestHistory;
    private int requestLimit;
    private TimeSpan timeWindow;

    public RateLimiter(int limit, TimeSpan window)
    {
        requestHistory = new Dictionary<string, Queue<DateTime>>();
        requestLimit = limit;
        timeWindow = window;
    }

    public bool IsRequestAllowed(string clientId)
    {
        if (!requestHistory.ContainsKey(clientId))
        {
            requestHistory[clientId] = new Queue<DateTime>();
        }

        var now = DateTime.Now;
        var windowStart = now - timeWindow;

        // Remove old requests from the history
        while (requestHistory[clientId].Count > 0 && requestHistory[clientId].Peek() < windowStart)
        {
            requestHistory[clientId].Dequeue();
        }

        if (requestHistory[clientId].Count < requestLimit)
        {
            requestHistory[clientId].Enqueue(now);
            return true;
        }

        return false;
    }
}

Dalam contoh ini, kami mendefinisikan kelas RateLimiter yang mengizinkan sejumlah permintaan tertentu dalam jangka waktu tertentu untuk setiap klien. Metode IsRequestAllowed memeriksa apakah klien telah melampaui batas permintaan dalam jangka waktu tertentu. Jika tidak, ini mengizinkan permintaan dan memperbarui riwayat permintaan.

B. Pembatasan Kecepatan Kueri Basis Data: Dalam skenario ketika Anda memiliki aplikasi dengan lalu lintas tinggi yang mengakses database, Anda dapat menerapkan pembatasan laju untuk mengontrol jumlah kueri yang dieksekusi per detik.

using System.Threading.Tasks;

public class DatabaseQueryRateLimiter
{
    private int queryLimit;
    private TimeSpan timeWindow;
    private int queryCount;

    public DatabaseQueryRateLimiter(int limit, TimeSpan window)
    {
        queryLimit = limit;
        timeWindow = window;
        queryCount = 0;
    }

    public async Task ExecuteQueryAsync()
    {
        if (queryCount >= queryLimit)
        {
            await Task.Delay(timeWindow);
            queryCount = 0;
        }

        // Execute the database query here
        queryCount++;
    }
}

Dalam contoh ini, kelas DatabaseQueryRateLimiter memungkinkan sejumlah query database tertentu dieksekusi per detik. Jika jumlah kueri melebihi batas, hal ini akan menyebabkan penundaan sebelum mengeksekusi kueri berikutnya, memastikan bahwa laju kueri tetap dalam rentang yang diizinkan.

Kesimpulan: Pembatasan nilai adalah teknik yang berharga dalam C# untuk mengontrol akses ke sumber daya dan API, mencegah penyalahgunaan, dan menjaga stabilitas sistem. Dengan menerapkan pembatasan kecepatan pada aplikasi Anda, Anda dapat memastikan alokasi sumber daya yang adil dan memberikan pengalaman pengguna yang lebih baik, terutama selama periode lalu lintas tinggi atau operasi yang membutuhkan banyak sumber daya. C# menawarkan fleksibilitas dalam menerapkan strategi pembatasan tarif, memungkinkan pengembang menyesuaikan logika pembatasan tarif agar sesuai dengan kasus penggunaan spesifik dan persyaratan sistem mereka.