c语言sscanf函数的用法是什么
255
2022-11-30
nginx+lua+storm的热点缓存的流量分发策略自动降级
1、在storm中,实时的计算出瞬间出现的热点。
某个storm task,上面算出了1万个商品的访问次数,LRUMap
频率高一些,每隔5秒,去遍历一次LRUMap,将其中的访问次数进行排序,统计出往后排的95%的商品访问次数的平均值
比如说,95%的商品,访问次数的平均值是100
从最前面开始,往后遍历,去找有没有瞬间出现的热点数据
1000,95%的平均值(100)的10倍,这个时候要设定一个阈值,比如说超出95%平均值得n倍,5倍
我们就认为是瞬间出现的热点数据,判断其可能在短时间内继续扩大的访问量,甚至达到平均值几十倍,或者几百倍
当遍历,发现说第一个商品的访问次数,小于平均值的5倍,就安全了,就break掉这个循环
热点数据,热数据,不是一个概念
有100个商品,前10个商品比较热,都访问量在500左右,其他的普通商品,访问量都在200左右,就说前10个商品是热数据
统计出来
预热的时候,将这些热数据放在缓存中去预热就可以了
热点,前面某个商品的访问量,瞬间超出了普通商品的10倍,或者100倍,1000倍,热点
2、storm这里,会直接发送java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Map.Entry;import org.apache.org.apache.org.apache.org.apache.org.apache.org.apache.org.apache.org.apache.org.apache.org.apache.class HttpClientUtils { /** * 发送GET请求 * @param url 请求URL * @return 响应结果 */ @SuppressWarnings("resource") public static String sendGetRequest(String url) { String = null; HttpClient = null; InputStream is = null; BufferedReader br = null; try { // 发送GET请求 = new DefaultHttpClient(); HttpGet = new HttpGet(url); HttpResponse response = // 处理响应 HttpEntity entity = response.getEntity(); if (entity != null) { is = entity.getContent(); br = new BufferedReader(new InputStreamReader(is)); StringBuffer buffer = new StringBuffer(""); String line = null; while ((line = br.readLine()) != null) { buffer.append(line + "\n"); } = buffer.toString(); } } catch (Exception e) { e.printStackTrace(); } finally { try { if(br != null) { br.close(); } if(is != null) { is.close(); } } catch (Exception e2) { e2.printStackTrace(); } } return } /** * 发送post请求 * @param url URL * @param map 参数Map * @return */ @SuppressWarnings({ "rawtypes", "unchecked", "resource" }) public static String sendPostRequest(String url, Map
private class HotProductFindThread implements Runnable { @SuppressWarnings("deprecation") public void run() { List
流量分发local uri_args = ngx.req.get_uri_args()local product_id = uri_args["productId"]local cache_ngx = ngx.shared.my_cachelocal hot_product_cache_key = "hot_product_"..product_idcache_ngx:set(hot_product_cache_key, "true", 60 * 60)后端应用local uri_args = ngx.req.get_uri_args()local product_id = uri_args["productId"]local product_info = uri_args["productInfo"]local product_cache_key = "product_info_"..product_idlocal cache_ngx = ngx.shared.my_cachecache_ngx:set(product_cache_key,product_info,60 * 60)
math.randomseed(tostring(os.time()):reverse():sub(1, 7))math.random(1, 2)local uri_args = ngx.req.get_uri_args()local productId = uri_args["productId"]local shopId = uri_args["shopId"]local hosts = {"192.168.31.187", "192.168.31.19"}local backend = ""local hot_product_key = "hot_product_"..productIdlocal cache_ngx = ngx.shared.my_cachelocal hot_product_flag = cache_ngx:get(hot_product_key)if hot_product_flag == "true" then math.randomseed(tostring(os.time()):reverse():sub(1, 7)) local index = math.random(1, 2) backend = " local hash = ngx.crc32_long(productId) local index = (hash % 2) + 1 backend = "requestPath = uri_args["requestPath"]requestPath = "/"..requestPath.."?productId="..productId.."&shopId="..shopIdlocal = require("resty.= resp, err = method = "GET", path = requestPath})if not resp then ngx.say("request error: ", err) returnendngx.say(resp.body)httpc:close()
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~