限流算法
令牌,漏桶,滑动窗
实现机制
核心还是实现Filter接口
官方已经自带redis限流(lua实现),单机限流。
求其上,得其中;求其中,得其下,求其下,必败
集群内部,对外的统一出口
可以做路由,限流,负载均衡等
基本概念
https://kubernetes.io/zh/docs/concepts/services-networking/ingress/
限流配置:
https://www.modb.pro/db/214722
不要轻易改nginx ingress的yaml,将出发 nginx reload,导致长链接故障
Apache APISIX ingress controller
nginx ingress controller
K8S对外接口,响应声明等一切交互。
一般不需要,此API一般内网访问
https://qingwave.github.io/k8s-rate-limit/#%E8%83%8C%E6%99%AF
https://www.huweihuang.com/article/kubernetes/core-principle/kubernetes-core-principle-api-server/
大数据相关组件更新快,技术栈变化快。但最终都会落地到SQL。
1.各类数据处理由各类数据库完成。
数据传输通过hdfs或者对象存储,数据转换通过datax,清洗,加工任由数据库编写SQL完成。
2.深度绑定spark,flink
作为批处理和流处理的,计算引擎。数据交互通过spark组件,flink组件。
3.星环,WeDataSphere之类
在大数据层中间,加上一层,上层统一SQL开发,屏蔽底层细节。
1.技术栈能力低,能满足大数据初级用户。产品不能形成门槛。
2.需要针对spark,flink深度绑定,开发人员昂贵,一荣俱荣模式。
3.产品门槛高,需要对大数据组件深度二次开发,引入中间层增加复杂度。
非80端口做反向代理
需要特别注意:proxy_set_header Host $host:$server_port;
nginx接收到浏览器请求后修改请求头中的host信息,然后再把请求转发给后端真实服务节点,服务节点响应后把返回信息传送给nginx,而由于nginx是使用的非80端口做代理,后端服务节点却依然以为nginx是80端口,所以响应信息没有正确的返回给nginx的非80端口。
p_hash 会尽量保障Session的统一性
https://www.cnblogs.com/yanggb/p/10895326.html
1 |
|
https://www.xncoding.com/2018/03/12/fullstack/nginx-websocket.html
重试策略涉及核心流量转发,配置不当可出现以下(不限):
1.订单重复提交
2.恶意攻击导致no live upstreams
3.业务正常耗时被当成超时
https://zhuanlan.zhihu.com/p/127959800
1.top >> 观察占用CPU或者MEN(内存)使用情况最高的进程,记录PID;
2.top -p PID >> 观察该PID对应进程的占用情况,
shift + h >> 开启线程显示,观察CPU/Men占用较高的线程有哪些,记录对应TID;
3.jstack PID > jstack.txt >> 查看该线程的堆栈信息
4.printf “%x\n” TID >> 将线程对应PID转为 16进制数(TID16);
5.cat jstack.txt | grep TID16 >> 查看当前占用内存高的线程具体在做什么操作,分析原因
6.jmap -histo:live PID >> 查看当前堆内存中存在哪些存活对象
单机多docker配合部署
比如kafka(2.8-)的安装等
https://docs.docker.com/compose/install/
https://www.runoob.com/docker/docker-compose.html
K8S本身会占用比较多资源,如果没有相关运维能力,建议docker-compose部署(资源占用少)
1.分区是提高 topic 读写负载
2.0拷贝(客户端和服务端版本差异会导致非0拷贝,增加时间戳)
3.全局时序性,只能一生产,一分区,一消费4.Kafka最好部署集群,避免丢消息,topic至少2个副本