优化与源码
优化与源码1. 优化1.1 扩展序列化算法序列化,反序列化主要用在消息正文的转换上 序列化时,需要将 Java 对象变为要传输的数据(可以是 byte[],或 json 等,最终都需要变成 byte[]) 反序列化时,需要将传入的正文数据还原成 Java 对象,便于处理 目前的代码仅支持 Java 自带的序列化,反序列化机制,核心代码如下 1234567891011// 反序列化byte[] body = new byte[bodyLength];byteByf.readBytes(body);ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(body));Message message = (Message) in.readObject();message.setSequenceId(sequenceId);// 序列化ByteArrayOutputStream out = new ByteArrayOutputStream();new ObjectOutputStream(out)....
k8s环境下,nginx做websocket负载的方案梳理
websocket server websocket server demo:https://github.com/mrniko/netty-socketio-demo Dockerfile 123456FROM maven:3.8.5-openjdk-17 as buildWORKDIR /user/src/appCOPY . .RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ && mvn clean package -DskipTestsCMD mvn exec:java -f pom.xml 部署(保证pod可以被独立访问)statefulset方式 使用statefulset+headless service的方式对pod进行独立访问 DNS: pod名称-编号.headless名称.namespace.svc.cluster.local 123456789101112131415161718192021222324252627282930313233343536...
prometheus推送告警记录
AlertManager 中的几个容易混淆的参数首先在 Prometheus 中有两个全局的参数 scrape_interval 和 evaluation_interval 。 scrape_interval 参数表示的是 Prometheus 从各种 metrics 接口抓取指标数据的时间间隔 evaluation_interval 参数表示的是 Prometheus 对报警规则进行评估计算的时间间隔。 group_by 为了避免连续发送类似的告警通知,可以将相关告警分到同一组中进行告警。分组机制可以将详细的告警信息合并成一个通知,在某些情况下,比如由于系统宕机导致大量的告警被同时触发,在这种情况下分组机制可以将这些被触发的告警合并为一个告警通知,避免一次性接受大量的告警通知: 1group_by: ['alertname', 'job'] group_wait 当一个新的报警分组被创建后,需要等待至少 group_wait 时间来初始化告警。 这样实际上就缓冲了从 Prometheus 发送到 AlertManager 的告警,...
wsl配合docker desktop安装k8s
clone k8s-for-docker-desktop 项目1git clone https://github.com/AliyunContainerService/k8s-for-docker-desktop.git 从阿里云镜像服务下载 Kubernetes 所需要的镜像 如果项目未支持想要的镜像版本, 可以通过修改 images.properties 文件自行加载你自己需要的镜像 如果因为安全策略无法执行 PowerShell 脚本,请在 “以管理员身份运行” 的 PowerShell 中执行 Set-ExecutionPolicy RemoteSigned 命令。 在Windows上,使用 PowerShell 1.\load_images.ps1 开启 Kubernetes,并等待 Kubernetes 开始运行 如果在Kubernetes部署的过程中出现问题 可以在 C:\ProgramData\DockerDesktop下的service.txt 查看Docker日志 在 C:\Users\yourUserName\AppData\Local...
Docker,containerd,CRI,CRI-O,OCI,runc
转自: https://zhuanlan.zhihu.com/p/490585683 自 Docker 开启了使用容器的爆发式增长,有越来越多的工具和标准来帮助管理和使用这项容器化技术,与此同时也造成了有很多术语让人感到困惑。 比如 Docker, containerd, CRI, CRI-O, OCI, runc,本篇将解释容器生态系统是如何在一起工作的。 容器生态系统容器生态系统是由许多令人兴奋的技术、大量的专业术语和大公司相互争斗组成的。 幸运的是,这些公司偶尔会在休战中走到一起合作,商定一些标准,这些标准有助于使这个生态系统在不同的平台和操作系统之间更具互操作性,并减少对单一公司或项目的依赖。 这张图显示了 Docker、Kubernetes、CRI、OCI、containerd 和 runc 在这个生态系统中是如何结合的。 其工作流程简单来说是这样的: Docker,Kubernetes 等工具来运行一个容器时会调用容器运行时(CRI)比如 containerd,CRI-O 通过容器运行时来完成容器的创建、运行、销毁等实际工作 Docker 使用的是 co...
Kafka集群搭建(含ZK模式和Kraft模式)
前言环境介绍虚拟机软件:VirtualBox Linux 发行版本:Ubuntu 20.04.4 虚拟机核心数:1 core 虚拟机内存:2 GB JDK 版本:1.8.0_202 ZK 版本:3.8.0 Kafka 版本:3.2.0 Kafka - ZK 模式Kafka 2.8.0 之前,所有元数据信息都存储在 ZK。 ZK 成为 Kafka 瓶颈。从 2.8.0 开始,可以将元数据信息存储在 Kafka,脱离 ZK。 集群规划 node01 node02 node03 zk zk zk kafka kafka kafka ZK 集群部署可以参考 《Hadoop HA 搭建》 中的 ZK 集群搭建 Kafka 集群部署Kafka 环境变量1234567$ vim /etc/profile# 尾部添加以下内容export KAFKA_HOME=/opt/kafka-3.2.0export PATH=$PATH:$KAFKA_HOME/bin$ xsync $KAFKA_HOME$ xsync /etc/profile 配置 server.properties1...
tcpdump的使用
转自: https://cloud.tencent.com/developer/article/1840203 简介tcpdump 是一款强大的网络抓包工具,它使用 libpcap 库来抓取网络数据包,这个库在几乎在所有的 Linux/Unix 中都有。熟悉 tcpdump 的使用能够帮助你分析调试网络数据,本文将通过一个个具体的示例来介绍它在不同场景下的使用方法。不管你是系统管理员,程序员,云原生工程师还是 yaml 工程师,掌握 tcpdump 的使用都能让你如虎添翼,升职加薪。 基本语法和使用方法tcpdump的常用参数如下: 1tcpdump -i eth0 -nn -s0 -v port 80 -i : 选择要捕获的接口,通常是以太网卡或无线网卡,也可以是 vlan 或其他特殊接口。如果该系统上只有一个网络接口,则无需指定。 -nn : 单个 n 表示不解析域名,直接显示 IP;两个 n 表示不解析域名和端口。这样不仅方便查看 IP 和端口号,而且在抓取大量数据时非常高效,因为域名解析会降低抓取速度。 -s0 : tcpdump 默认只会截取前 96 ...
NIO 基础
NIO 基础non-blocking io 非阻塞 IO 1. 三大组件1.1 Channel & Bufferchannel 有一点类似于 stream,它就是读写数据的双向通道,可以从 channel 将数据读入 buffer,也可以将 buffer 的数据写入 channel,而之前的 stream 要么是输入,要么是输出,channel 比 stream 更为底层 graph LR channel --> buffer buffer --> channel 常见的 Channel 有 FileChannel DatagramChannel SocketChannel ServerSocketChannel buffer 则用来缓冲读写数据,常见的 buffer 有 ByteBuffer MappedByteBuffer DirectByteBuffer HeapByteBuffer ShortBuffer IntBuffer LongBuffer FloatBuffer DoubleBuffer CharBuffer 1.2 Select...
Nginx反向代理中proxy_set_header参数说明
转自: https://www.cnblogs.com/kevingrace/p/8269955.html Nginx proxy_set_header:**即允许重新定义或添加字段传递给代理服务器的请求头。该值可以包含文本、变量和它们的组合。**在没有定义proxy_set_header时会继承之前定义的值。默认情况下,只有两个字段被重定义: 12proxy_set_header Host $proxy_host;proxy_set_header Connection close; 如果启用缓存,来自之前请求的头字段“If-Modified-Since”, “If-Unmodified-Since”, “If-None-Match”, “If-Match”, “Range”, 和 “If-Range” 将不会被代理服务器传递。一个不会变化的“Host”头请求字段可通过如下方式被传递: 1proxy_set_header Host $http_host; 然后,当字段不在请求头中就无法传递了,在这种情况下,可通过设置Host变量,将需传递值赋给Host变量 1proxy...
nginx中$host,$http_host和$proxy_host区别
nginx中$host、$http_host和$proxy_host区别 变量 是否显示端口 值 $host 不显示端口 浏览器请求的ip,不显示端口 $http_host 端口存在则显示 浏览器请求的ip和端口号 $proxy_host 默认80端口不显示,其它显示 被代理服务的ip和端口号(当proxy_pass配置的是upstream, 则$proxy_host是不生效的) 配置反向代理时,接口请求报404问题应用描述:前端应用域名为A(ww.a.com), 后端服务域名为B(www.b.com); 为了解决跨域问题,配置nginx反向代理如下: 1234567...proxy_set_header Host $host;...location ^~ /api/ { rewrite "^/api/(.*)$" /$1 break; proxy_pass http://www.b.com;} 问题:这样配置完成后,接口报404问题。解决:方案一:将proxy_set_header注释掉方案二:修改反向代理配置,...
