9.4.5.1 توضیحات #
الگو Drop یک الگو مهم برای انجام خدمات سنگین می باشد. خدماتی که مواقعی باعث می شود حجم درخواست هایش بیش از ظرفیت موجود باشد و این درخواست ها بواسطه این الگو می تواند Drop شود. به عنوان مثال سرویس های DNS باید از این الگو استفاده کنند.
9.4.5.2 دیاگرام #
9.4.5.3 نمونه کد #
1package main
2
3import (
4 "fmt"
5)
6
7func main() {
8 in := make(chan int, 5)
9 out := make(chan int, 5)
10
11 go func() {
12 for {
13 select {
14 case in <- 1:
15 default:
16 fmt.Println("Dropping data")
17 }
18 }
19 }()
20
21 go func() {
22 for {
23 select {
24 case data := <-in:
25 select {
26 case out <- data:
27 default:
28 fmt.Println("Dropping data")
29 }
30 }
31 }
32 }()
33
34 for i := 0; i < 10; i++ {
35 fmt.Println(<-out)
36 }
37}
1$ go run main.go
2Dropping data
3Dropping data
4Dropping data
5Dropping data
61
7Dropping data
8
9Dropping data
10Dropping data
111
121
131
141
151
161
17Dropping data
18Dropping data
19Dropping data
20Dropping data
21Dropping data
22Dropping data
231
241
251
در کد فوق ما ۲ تا کانال داریم به نام in/out که بافر شده هستند حال کانال in داده را دریافت می کند و پس از آن داده را به کانال out میفرستد. در اینجا اگر حجم داده ای که دریافت شده بیشتر از اندازه کانال in باشد آن بخش زیاد Drop می شود و همچنین کانال out هم همان شرایط را دارد و سعی می کند داده را به اندازه ظرفیت معین شده مدیریت و پردازش کند.
9.4.5.4 کاربردها #
- Rate limiting: هنگامی که با حجم بالای داده های ورودی سروکار دارید، ممکن است لازم باشد برخی از داده ها را حذف کنید تا حجم پردازش ثابتی حفظ شود.
- Logging: هنگام ثبت دادهها، ممکن است لازم باشد که ورودیهای گزارش را حذف کنید اگر سیستم قادر به هماهنگی با سرعت تولید آنها نباشد.
- Queue: هنگام برخورد با صفی که توسط یک کانال پشتیبانی می شود، ممکن است به جای مسدود کردن فرستنده، لازم باشد داده های دریافتی را در صورت پر بودن صف حذف کنید.
- کنترل ترافیک: هنگام مواجهه با حجم بالای ترافیک ورودی، ممکن است لازم باشد مقداری از ترافیک ورودی را حذف کنید تا حجم پردازش ثابتی حفظ شود.
- سیستم های بلادرنگ (Real-time system): در سیستمهای بلادرنگ که دادهها باید در یک بازه زمانی خاص پردازش شوند، ممکن است لازم باشد که برخی از دادههای دریافتی حذف شوند، اگر سیستم قادر به هماهنگی با سرعت تولید دادهها نباشد.