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

北京软件网站开发我家云物业管理系统

北京软件网站开发,我家云物业管理系统,科技画4k纸科幻画,给领导发网站建设可行性方案邮件怎么写作者#xff1a;钰诚 简介 基于 wasm 机制#xff0c;Higress 提供了优秀的可扩展性#xff0c;用户可以基于 Go/C/Rust 编写 wasm 插件#xff0c;自定义请求处理逻辑#xff0c;满足用户的个性化需求#xff0c;目前插件已经支持 redis 调用#xff0c;使得用户能够…作者钰诚 简介 基于 wasm 机制Higress 提供了优秀的可扩展性用户可以基于 Go/C/Rust 编写 wasm 插件自定义请求处理逻辑满足用户的个性化需求目前插件已经支持 redis 调用使得用户能够编写有状态的插件进一步提高了 Higress 的扩展能力。 文档在插件中调用 Redis [ 1] 中提供了完整的网关通过插件调用 Redis 的例子包括阿里云 Redis 实例创建与配置、插件代码编写、插件上传与配置、测试样例等流程。接下来本文重点介绍几个基于 Redis 的插件。 多网关全局限流 网关已经提供了 sentinal 限流 [2 ] 能够有效保护后端业务应用。通过 redis 插件限流用户可以实现多网关的全局限额管理。 以下为插件代码示例在请求头阶段检查当前时间内请求次数如果超出配额则直接返回 429 响应。 func onHttpRequestHeaders(ctx wrapper.HttpContext, config RedisCallConfig, log wrapper.Log) types.Action {now : time.Now()minuteAligned : now.Truncate(time.Minute)timeStamp : strconv.FormatInt(minuteAligned.Unix(), 10)// 如果 redis api 返回的 err ! nil一般是由于网关找不到 redis 后端服务请检查是否误删除了 redis 后端服务err : config.client.Incr(timeStamp, func(response resp.Value) {if response.Error() ! nil {log.Errorf(call redis error: %v, response.Error())proxywasm.ResumeHttpRequest()} else {ctx.SetContext(timeStamp, timeStamp)ctx.SetContext(callTimeLeft, strconv.Itoa(config.qpm-response.Integer()))if response.Integer() 1 {err : config.client.Expire(timeStamp, 60, func(response resp.Value) {if response.Error() ! nil {log.Errorf(call redis error: %v, response.Error())}proxywasm.ResumeHttpRequest()})if err ! nil {log.Errorf(Error occured while calling redis, it seems cannot find the redis cluster.)proxywasm.ResumeHttpRequest()}} else {if response.Integer() config.qpm {proxywasm.SendHttpResponse(429, [][2]string{{timeStamp, timeStamp}, {callTimeLeft, 0}}, []byte(Too many requests\n), -1)} else {proxywasm.ResumeHttpRequest()}}}})if err ! nil {// 由于调用redis失败放行请求记录日志log.Errorf(Error occured while calling redis, it seems cannot find the redis cluster.)return types.ActionContinue} else {// 请求hold住等待redis调用完成return types.ActionPause} }插件配置如下 测试结果如下 结合通义千问实现 token 限流 对于提供 AI 应用服务的开发者来说用户的 token 配额管理是一个非常关键的功能以下例子展示了如何通过网关插件实现对通义千问后端服务的 token 限流功能。 首先需要申请通义千问的 API 访问可参考此链接 [3 ] 。之后在 MSE 网关配置相应服务以及路由如下所示 编写插件代码插件中在响应 body 阶段去写入该请求使用的 token 额度在处理请求头阶段去读 redis 检查当前剩余 token 额度如果已经没有 token 额度则直接返回响应中止请求。 func onHttpRequestBody(ctx wrapper.HttpContext, config TokenLimiterConfig, body []byte, log wrapper.Log) types.Action {now : time.Now()minuteAligned : now.Truncate(time.Minute)timeStamp : strconv.FormatInt(minuteAligned.Unix(), 10)config.client.Get(timeStamp, func(response resp.Value) {if response.Error() ! nil {defer proxywasm.ResumeHttpRequest()log.Errorf(Error occured while calling redis)} else {tokenUsed : response.Integer()if config.tpm tokenUsed {proxywasm.SendHttpResponse(429, [][2]string{{timeStamp, timeStamp}, {TokenLeft, fmt.Sprint(config.tpm - tokenUsed)}}, []byte(No token left\n), -1)} else {proxywasm.ResumeHttpRequest()}}})return types.ActionPause }func onHttpResponseBody(ctx wrapper.HttpContext, config TokenLimiterConfig, body []byte, log wrapper.Log) types.Action {now : time.Now()minuteAligned : now.Truncate(time.Minute)timeStamp : strconv.FormatInt(minuteAligned.Unix(), 10)tokens : int(gjson.ParseBytes(body).Get(usage).Get(total_tokens).Int())config.client.IncrBy(timeStamp, tokens, func(response resp.Value) {if response.Error() ! nil {defer proxywasm.ResumeHttpResponse()log.Errorf(Error occured while calling redis)} else {if response.Integer() tokens {config.client.Expire(timeStamp, 60, func(response resp.Value) {defer proxywasm.ResumeHttpResponse()if response.Error() ! nil {log.Errorf(Error occured while calling redis)}})}}})return types.ActionPause }测试结果如下 基于 cookie 的缓存、容灾以及会话管理 除了以上两个限流的例子基于 Redis 可以实现更多的插件对网关进行扩展。例如基于 cookie 来做缓存、容灾以及会话管理等功能。 缓存容灾基于用户 cookie 信息缓存请求应答一方面能够减轻后端服务压力另一方面当后端服务不可用时能够实现容灾效果。会话管理使用 Redis 存储用户的认证鉴权信息当请求到来时先访问 redis 查看当前用户是否被授权访问如果未被授权再去访问认证鉴权服务可以减轻认证鉴权服务的压力。 func onHttpRequestHeaders(ctx wrapper.HttpContext, config HelloWorldConfig, log wrapper.Log) types.Action {cookieHeader, err : proxywasm.GetHttpRequestHeader(cookie)if err ! nil {proxywasm.LogErrorf(error getting cookie header: %v, err)// 实现自己的业务逻辑}// 根据自己需要对cookie进行处理cookie : CookieHandler(cookieHeader)config.client.Get(cookie, func(response resp.Value) {if response.Error() ! nil {log.Errorf(Error occured while calling redis)proxywasm.ResumeHttpRequest()} else {// 实现自己的业务逻辑proxywasm.ResumeHttpRequest()}})return types.ActionPause }总结 Higress 通过支持 redis 调用大大增强了插件的能力使插件功能具有更广阔的想象空间更加能够适应开发者多样的个性化需求如果大家有更多关于 Higress 的想法与建议欢迎与我们联系 相关链接 [1] 在插件中调用 Redis https://help.aliyun.com/zh/mse/user-guide/develop-gateway-plug-ins-by-using-the-go-language?spma2c4g.11186623.0.0.45a53597EVVAC0#5e5a601af18al [2] sentinal 限流 https://help.aliyun.com/zh/mse/user-guide/configure-a-throttling-policy?spma2c4g.11186623.0.i4 [3] 链接 https://help.aliyun.com/zh/dashscope/developer-reference/api-details?spma2c4g.11186623.0.i4#602895ef3dtl1
http://www.dnsts.com.cn/news/64962.html

相关文章:

  • wordpress网站下载网站建设001
  • 金融机构网站建设费用自由策划企业网站管理系统破解版
  • 上海 松江 网站制作网站建设男装定位
  • 成都网站设计创新互联网站建设代理多少钱
  • 石龙镇网站仿做网页是网站吗
  • 网站建设实现后台数据导出excel农夫山泉软文300字
  • 厦门seo网站吉安网站建设收费
  • 网站制作书生东阳app开发
  • 网站建设公司行业现状公司做网站的价格
  • 湘潭学校网站建设 磐石网络网站的页面布局
  • wordpress网站下载文件城阳网站建设哪家好
  • 中国做类似 esty的网站成都建设监理协会网站网址
  • 临沂网站建设怎么样上海市建交人才网
  • 网站的风格与布局的设计方案无锡好的网站公司
  • 如何做网站seo佛山网站优化包年
  • 网站的关键词怎么设置新学校网站建设成果
  • 网站开发名片怎么做wordpress下载管理员
  • 厦门网站建设公司闽icpjsp做手机网站
  • 网站各类模块内容说明百度关键词搜索排名
  • 企业网站宣传建设广州越秀区天气预报
  • 网站怎么做qq的授权登陆商务网站要怎么设计
  • 通化市建设局网站google商店
  • 手机建网站花钱吗国外比较开放的社交软件
  • 工商联网站建设作用最新网络游戏排行榜2021前十名
  • 门户网站建设重建方案重庆优化网站推广
  • 门户网站代做最近的新闻军事最新消息
  • 手机网站设计机构网站加seo需要多少钱
  • 建立网站教程wordpress 添加php文件
  • 网站定位是什么wordpress向登录页面跳转
  • app外包网站seo网站优化做什么