Dengan populariti seni bina perkhidmatan mikro, bilangan dan trafik antara muka API juga telah meningkat, dan pengurusan serta kawalan trafik API telah menjadi isu yang sangat kritikal. Artikel ini akan memperkenalkan cara melaksanakan pengurusan trafik API berdasarkan rangka kerja mikro perkhidmatan go-zero untuk memastikan prestasi dan kestabilan sistem.
1 Apakah itu pengurusan trafik API
Pengurusan trafik API merujuk kepada kawalan dan pengurusan trafik antara muka API, termasuk mengehadkan kekerapan akses, menetapkan dasar mengehadkan semasa dan mengawal akses kepada satu IP. kekerapan, memastikan ketersediaan tinggi sistem, dsb. Pengurusan trafik API boleh menghalang serangan berniat jahat secara berkesan, di samping memastikan prestasi dan kestabilan sistem.
2. Pengenalan kepada rangka kerja go-zero
go-zero ialah rangka kerja mikro berasaskan Golang, yang boleh membina sistem mikroperkhidmatan berprestasi tinggi dan boleh dipercayai. go-zero menyediakan pelbagai fungsi, termasuk get laluan API, perisian tengah yang diedarkan, cache, ORM, dll., membolehkan pembangun membina aplikasi perkhidmatan mikro dengan lebih mudah. Artikel ini akan menumpukan pada fungsi get laluan API dan fungsi middleware go-zero, yang digunakan untuk melaksanakan pengurusan trafik API.
3. Kawalan aliran dalam get laluan API
Gerbang API ialah modul berfungsi yang memproses permintaan API secara berpusat dan bertanggungjawab untuk penghalaan permintaan, penukaran protokol, pengesahan keselamatan, kawalan aliran, dsb. Dalam rangka kerja go-zero, sangat mudah untuk menggunakan get laluan API untuk melaksanakan pengurusan trafik API. Gerbang API boleh mengawal trafik dengan mengehadkan kekerapan akses API untuk mengelakkan sistem daripada ranap disebabkan terlalu banyak permintaan. Berikut menerangkan cara melaksanakan kawalan aliran berdasarkan get laluan API.
1. Konfigurasikan kawalan aliran
Dalam go-zero, anda boleh menggunakan perisian tengah pembatas kadar untuk melaksanakan kawalan aliran API. Kod sampel adalah seperti berikut:
r := router.NewRouter() var limiter *limiter.Limiter if conf.RateLimiter.On { limiter = limiter.NewLimiter(conf.RateLimiter.QPS) } apigroup.RegisterRouter(r, limiter)
Dalam kod di atas, conf.RateLimiter.On digunakan untuk menentukan sama ada kawalan aliran API diperlukan dan conf.RateLimiter.QPS digunakan untuk menetapkan permintaan yang dibenarkan sesaat . Jika kawalan aliran API diperlukan, buat contoh melalui limiter.NewLimiter dan hantarkannya sebagai parameter kepada kaedah RegisterRouter.
2. Laksanakan kawalan aliran
Dalam kod di atas, ratelimiter middleware digunakan untuk melaksanakan kawalan aliran API. Dalam pakej middleware, go-zero menyediakan pelbagai pelaksanaan middleware yang boleh digunakan untuk mengendalikan permintaan. Perisian tengah pembatas kadar boleh mengawal trafik API dengan menetapkan bilangan permintaan yang dibenarkan sesaat Contoh kod adalah seperti berikut:
func NewLimiter(qps int) *Limiter { limiter := rate.NewLimiter(rate.Limit(qps), qps*3) return &Limiter{limiter} } func (l *Limiter) Handle(next http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { if l.allow() == false { http.Error(w, "Too Many Requests", http.StatusTooManyRequests) return } next(w, r) } } func (l *Limiter) allow() bool { return l.limiter.Allow() }
Dalam kod di atas, contoh pengehad dibuat melalui kadar.NewLimiter, di mana kadar.Had. (qps) Ia digunakan untuk menetapkan bilangan permintaan yang dibenarkan sesaat, dan qps*3 digunakan untuk menetapkan pecah (iaitu, bilangan maksimum permintaan serentak dalam sekelip mata). Dalam kaedah Handle, l.allow digunakan untuk menentukan sama ada akses dibenarkan untuk permintaan semasa Jika bilangan permintaan melebihi, ralat http.StatusTooManyRequests dikembalikan.
4. Middleware melaksanakan kawalan aliran
Selain kawalan aliran dalam get laluan API, go-zero juga boleh melaksanakan kawalan aliran API melalui middleware. Middleware ialah fungsi yang dilaksanakan sebelum atau selepas pemprosesan API Ia boleh memintas, mengesahkan, menukar dan operasi lain atas permintaan. Dalam go-zero, ia juga sangat mudah untuk menggunakan middleware untuk melaksanakan kawalan aliran API. Berikut menerangkan cara melaksanakan kawalan aliran berasaskan perisian tengah.
1. Cipta middleware
Dalam go-zero, anda boleh menggunakan middleware.HandlerFunc untuk mentakrifkan fungsi middleware dan menambahkannya pada pemproses API. Berikut ialah contoh perisian tengah:
func RateLimiter(qps int) middleware.HandlerFunc { limiter := ratelimit.NewLimiter(ratelib.NewBucketWithQuantum(time.Second, int64(qps), 1)) return func(c *context.Context) { if !limiter.Allow() { c.JSON(http.StatusTooManyRequests, &model.Error{ Code: model.ErrorCodeTooManyRequests, Message: model.ErrorMsgTooManyRequests, }) c.Abort() return } c.Next() // 调用后续中间件或处理器 } }
Dalam kod di atas, pengehad kadar ditakrifkan dengan memanggil ratelib.NewBucketWithQuantum dan dihantar ke RateLimiter. Dalam fungsi RateLimiter, tentukan sama ada permintaan semasa membenarkan akses dengan menentukan sama ada limiter.Allow() adalah benar Jika tidak, kembalikan ralat http.StatusTooManyRequests.
2. Memanggil middleware
Memanggil middleware dalam pemproses API adalah sangat mudah, anda hanya perlu menambahkannya pada rantai pemproses. Kod sampel adalah seperti berikut:
// API处理器 func apiHandler(c *context.Context) { // 处理API请求 } // 注册API r.GET("/api", apiHandler, middleware.RateLimiter(1000))
Dalam kod di atas, perisian tengah RateLimiter dipanggil melalui perisian tengah.RateLimiter(1000) untuk mengawal kadar akses API.
5. Ringkasan
Artikel ini memperkenalkan cara melaksanakan pengurusan trafik API berdasarkan rangka kerja mikroperkhidmatan go-zero. Melalui pelaksanaan get laluan API dan perisian tengah, kawalan aliran API boleh direalisasikan dengan mudah untuk memastikan prestasi dan kestabilan sistem. Saya harap artikel ini dapat membantu pembaca melaksanakan kawalan aliran API dalam pembangunan sebenar.
Atas ialah kandungan terperinci Amalan pengurusan trafik API perkhidmatan mikro berdasarkan go-zero. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!