当前位置: 首页 > news >正文

dw网站建设的心得体会网站建设律师

dw网站建设的心得体会,网站建设律师,达州科创网站建设公司,长春网长春网站设计站建设在当今的微服务架构和RESTful API主导的时代#xff0c;HTTP接口在各个业务模块之间扮演着重要的角色。随着业务规模的不断扩大#xff0c;接口的访问频率和负载也随之增加。为了确保系统的稳定性和性能#xff0c;接口限速成了一个重要的话题。 1 接口限速的使用场景 接口…在当今的微服务架构和RESTful API主导的时代HTTP接口在各个业务模块之间扮演着重要的角色。随着业务规模的不断扩大接口的访问频率和负载也随之增加。为了确保系统的稳定性和性能接口限速成了一个重要的话题。 1 接口限速的使用场景 接口限速的使用场景主要涉及以下几种情况 防止API滥用在某些情况下如果没有有效的限速机制恶意用户可能会无限制地调用API导致系统过载。通过接口限速我们可以限制每个用户对特定接口的访问频率从而防止API滥用。保护服务稳定性在某些情况下某些高频调用可能会给后端服务带来巨大的压力影响服务的稳定性和性能。通过接口限速我们可以限制对这些接口的访问频率从而保护服务的稳定性。资源合理分配在一些情况下我们需要对系统资源进行合理的分配确保每个用户都能得到公平的资源使用。通过接口限速我们可以根据用户的请求频率进行资源分配从而保证公平性。 2 限速不同与限流 接口限速和限流是两个不同的概念虽然它们都是用来控制流量和保护系统的手段但它们的目的和实现方式有所不同。 **接口限速主要是限制接口的访问速度避免过快的请求频率对系统造成压力。**它关注的是单个接口的访问速率比如每秒可以访问多少次而限流则是关注系统的整体流量限制单位时间内系统的总访问量。 限速通常是通过在接口上设置速率限制来实现的例如使用令牌桶算法或漏桶算法等。它的主要目的是防止单个接口的过快访问以保护系统的稳定性和性能。 **而限流则是通过一系列机制来限制单位时间内系统的总访问量以防止系统过载。**常见的限流算法包括令牌桶算法、漏桶算法和热点参数等。它的主要目的是保护整个系统避免因为访问量过大而出现崩溃或性能下降的情况。 在实现方面限速通常是在应用程序或API网关层面实现的而限流则可能需要涉及到整个系统的架构和设计。 虽然接口限速和限流的目的和实现方式有所不同但它们都是为了控制流量和保护系统的稳定性和性能。在实际应用中我们可以根据实际情况选择合适的限速和限流策略以实现最佳的流量控制效果。 3 Gin框架接口限速实践 基于limiter插件的GitHub地址github.com/ulule/limiter 3.1 基本使用 package mainimport (fmtlognet/httpgithub.com/gin-gonic/gingithub.com/redis/go-redis/v9github.com/ulule/limiter/v3mgin github.com/ulule/limiter/v3/drivers/middleware/ginsredis github.com/ulule/limiter/v3/drivers/store/redis )func main() {// Define a limit rate to 4 requests per hour.rate, err : limiter.NewRateFromFormatted(4-M)if err ! nil {log.Fatal(err)return}// Create a redis client.option, err : redis.ParseURL(redis://localhost:6379/0)if err ! nil {log.Fatal(err)return}client : redis.NewClient(option)// Create a store with the redis client.store, err : sredis.NewStoreWithOptions(client, limiter.StoreOptions{Prefix: limiter_gin_example,MaxRetry: 3,})if err ! nil {log.Fatal(err)return}// Create a new middleware with the limiter instance.middleware : mgin.NewMiddleware(limiter.New(store, rate))// Launch a simple server.router : gin.Default()router.ForwardedByClientIP truerouter.Use(middleware)router.GET(/, index)log.Fatal(router.Run(:8081)) }func index(c *gin.Context) {c.JSON(http.StatusOK, This is my gin api...) }3.2 引入自定义拦截处理器 package mainimport (fmtlognet/httpgithub.com/gin-gonic/gingithub.com/redis/go-redis/v9github.com/ulule/limiter/v3mgin github.com/ulule/limiter/v3/drivers/middleware/ginsredis github.com/ulule/limiter/v3/drivers/store/redis )func main() {rate, err : limiter.NewRateFromFormatted(4-M)if err ! nil {log.Fatal(err)return}option, err : redis.ParseURL(redis://localhost:6379/0)if err ! nil {log.Fatal(err)return}client : redis.NewClient(option)store, err : sredis.NewStoreWithOptions(client, limiter.StoreOptions{Prefix: limiter_gin_example,MaxRetry: 3,})if err ! nil {log.Fatal(err)return}//自定义拦截处理器opt : mgin.WithLimitReachedHandler(ExceededHandler)middleware : mgin.NewMiddleware(limiter.New(store, rate), opt)router : gin.Default()router.ForwardedByClientIP truerouter.Use(middleware)router.GET(/, index)log.Fatal(router.Run(:8081)) }func ExceededHandler(c *gin.Context) {c.JSON(200, This is mu custom ExceededHandler...) }func index(c *gin.Context) {c.JSON(http.StatusOK, This is my gin api...) }返回结果 3.3 不同接口区分速率 我们假设系统有两个接口 /fast : 每分钟允许10次访问/slow : 每分钟允许1次访问 代码实现 package mainimport (fmtlognet/httpgithub.com/gin-gonic/gingithub.com/redis/go-redis/v9github.com/ulule/limiter/v3mgin github.com/ulule/limiter/v3/drivers/middleware/ginsredis github.com/ulule/limiter/v3/drivers/store/redis )var (fastTime 0slowTime 0 )func FastApi(c *gin.Context) {fastTime 1c.JSON(200, fmt.Sprintf(This is fast api... %d, fastTime)) }func SlowApi(c *gin.Context) {slowTime 1c.JSON(200, fmt.Sprintf(This is slow api... %d, slowTime)) }func main() {fastRate, err : limiter.NewRateFromFormatted(10-M)if err ! nil {log.Fatal(err)return}slowRate, err : limiter.NewRateFromFormatted(1-M)if err ! nil {log.Fatal(err)return}option, err : redis.ParseURL(redis://localhost:6379/0)if err ! nil {log.Fatal(err)return}client : redis.NewClient(option)storeFast, err : sredis.NewStoreWithOptions(client, limiter.StoreOptions{Prefix: limiter_gin_example_fast, MaxRetry: 3})if err ! nil {log.Fatal(err)return}storeSlow, err : sredis.NewStoreWithOptions(client, limiter.StoreOptions{Prefix: limiter_gin_example_slow, MaxRetry: 3})if err ! nil {log.Fatal(err)return}//自定义拦截处理器opt : mgin.WithLimitReachedHandler(ExceededHandler)middlewareFast : mgin.NewMiddleware(limiter.New(storeFast, fastRate), opt)middlewareSlow : mgin.NewMiddleware(limiter.New(storeSlow, slowRate), opt)router : gin.Default()router.ForwardedByClientIP truerouter.Use(func(c *gin.Context) {if c.Request.RequestURI /fast {middlewareFast(c)return}if c.Request.RequestURI /slow {middlewareSlow(c)return}})router.GET(/fast, FastApi)router.GET(/slow, SlowApi)log.Fatal(router.Run(:8081)) }func ExceededHandler(c *gin.Context) {c.JSON(200, This is mu custom ExceededHandler...) }4 小总结 接口限速是保护系统稳定性和API的重要手段。在实际应用中我们需要根据实际情况选择合适的限速方法实现对接口的全面限速。通过接口限速我们可以提高系统的稳定性、保护API、提高用户体验等。
http://www.pierceye.com/news/871794/

相关文章:

  • 哪些网站可以做问卷第1063章 自己做视频网站
  • 电子商务网站 费用做p2p网站
  • 网站建设 猴王网络厦门app开发网站开发公司电话
  • 做3d图的网站有哪些比wordpress更好的网站程序
  • 仿做网站可以整站下载器吧网络网站建设公司
  • 网站流量用完wordpress page 父页面
  • 旅游地网站制作有没有做网站的高手
  • 有什么网站可以做一起作业什么网站可以兼职做效果图
  • 工程中标查询网站长沙网站制作作
  • 免费网站下载直播软件企业品牌网站建设类型
  • 建立网站并以此为基础从事经营活动的企业称为什么免费销售网站模板
  • 成都市建设质监站网站微信企业网站html5模板
  • 福建工程建设管理中心网站仙桃做企业网站的
  • 孝感做网站的公司建网站是永久的吗
  • 厦门手机建站php网站开发推荐书籍
  • 属于c2c网站的有哪几个方庄网站制作
  • 建设局网站模板iis 网站没有上传权限
  • 建设网站龙华怎么用自己的电脑搭建网站
  • 分析网站的网站福建交科建设有限公司官方网站
  • 深圳南园网站建设网站域名怎么设置方法
  • 网站的内链是什么意思网页布局有哪几种方法
  • 网站优化公司上海山东电力建设河北分公司网站
  • 甘肃省住房和城乡建设部网站首页专门网页制作工具有
  • 网站用vps做dns做网站的叫什么职位
  • 网站开发业务流程图网站商城与网站区别吗
  • 用新浪微博做网站百度找不到 网站
  • 哪个网站做照片书最好seo投放是什么意思
  • 书店网站开发目的和意义深圳网建公司
  • 餐饮网站方案wordpress 微论坛主题
  • 上海建筑网站设计多用户商城数据库设计