总体:https://segmentfault.com/a/11...。服务化建设,服务多,上线和部署成本高,本文介绍全流程上线部署平台的设计方案。nginx
接入层:nginx攻防(白名单,黑名单,封禁,限流),机房切换。
1).nginx的限流:令牌桶思想git
算法思想是: 令牌以固定速率产生,并缓存到令牌桶中; 令牌桶放满时,多余的令牌被丢弃; 请求要消耗等比例的令牌才能被处理; 令牌不够时,请求被缓存。 ms = (ngx_msec_int_t) (now - lr->last) excess = lr->excess - ctx->rate * ngx_abs(ms) / 1000 + 1000; if ( excess > limit->burst) { busy } 好比1s最多10个、10ms来了一个。突发最大多5, acess=1000- 10*10 = 900 < 5000 11ms来了一个。 acess=900-10*1+1000=1890 12ms access=1890-10+1000=2890 13 3890 14ms 4890 15ms busy 34ms 4890-30*10+1000=4990就能够继续
2).这里的最大并发,brpc有一个自适应限流:https://github.com/apache/inc...
max_concurrency自适应latency公式:
max_concurrency = max_qps ((2+alpha) min_latency - latency)
min_latency是最近一段时间测量到的latency较小值的ema,是noload_latency的估算值。
latency是当前采样窗口内全部请求的平均latency。
max_qps是最近一段时间测量到的qps的极大值(回复的)github
min_latency:每隔一段时间缩小max_concurrency,过一小段时间后( latency * 2)以此时的latency做为noload_latency if latency > min_latency: min_latency = latency * ema_alpha + (1 - ema_alpha) * min_latency else: do_nothing max_qps: if current_qps > max_qps: max_qps = current_qps else: max_qps = current_qps * ema_alpha / 10 + (1 - ema_alpha / 10) * max_qps 将max_qps的ema参数置为min_latency的ema参数的十分之一的缘由是: max_qps 降低了一般并不意味着极限qps也降低了。而min_latency降低了,一般意味着noload_latency确实降低了。
慢启动解决:web
产品线生产数据①以后,调用文件飞线的客户端(图中为orp_scp.sh),指定好数据源,发到服务端(图中为中控机),服务端从ORP的基础设施NamingService读取产品线所在的机器及相关路径,而后进行部署(③④⑤)。产品线用户能够经过查看ORP平台,得到部署的进度和部署的结果(成功或失败)redis
独立计时器触发
,任务平台
去任务集
中取任务部署到任务平台,工做。
平台=》分发集群+zk=》业务机器的agent=》业务sdk算法
架构数据库