- 浏览: 289520 次
- 性别:
- 来自: 北京
最新评论
-
Ann-phei:
wooding老师,有没有出书计划呀,是否方便加我QQ详聊呀 ...
2016年书架整理 -
可乐瓶里的小辣椒:
Storm目录贴 -
可乐瓶里的小辣椒:
...
TCP编号系统 -
woodding2008:
tivan 写道反压的你有进行测试过吗?有做功能测试,没有做性 ...
Storm1.0.x新功能调研 -
tivan:
反压的你有进行测试过吗?
Storm1.0.x新功能调研
文章列表
为了清楚的掌握连接建立,连接终止以及数据传送时发生的所有不同事件,下图以有限状态机的形式来定义。
TCP各种状态
状态 说明
CLOSED 没有连接
LISTEN 收到了被动打开;等待SYN
SYN-SENT 已发送SYN;等待ACK
SYN-RCVD 已发送SYN+ACK;等待ACK
ESTABLISHED ...
源端口(source port)
16位的字段,定义了发送这个报文段的主机中的应用程序的端口号。
目的端口(destination port)
16位的字段,定义了接收这个报文段的主机中的应用程序的端口号。
序列号(sequence number)
32位的字段,定义了指派给本报文段第一个数据字节的编号。为了保证连接性,要发送的每一个字节都要编上号。序号可以告诉终点,报文段中的第一个字节是这个序列中的哪一个字节。在建立连接是,双方使用各自的随机数生成器生产一个初始序号(inital squence number,ISN),通常两个方向上的ISN是不同的。
...
IP头部结构
RFC 751定义了因特网协议,IP是一个无连接的协议,这意味着它将每个IP分组都看成是与其他IP分组无关的独立数据单元。IP不具备通常为了确保数据的认证机制,如果再分组转发过程中发生错误,IP不 ...
前段时间 一台服务器重启过,查看系统日志发现一堆可疑信息,根据这些信息追查到是内核bug。 尝试升级内核版本解决。同一批机器机器中有全部有这个问题。
操作系统
uname -a
Linux a08.hbase.javagc.com 2.6.18-308.el5 #1 SMP Tue Feb 21 20:06:06 EST 2012 x86_64 x86_64 x86_64 GNU/Linux
cat /etc/redhat-release
CentOS release 5.8 (Final)
message信息
Nov 16 16:24 ...
最大传输单元MTU【Maximum Transmission Unit】
以太网和IEEE 802.3对数据帧的长度都有一个限制,其最大值分别是1500和1492字节,链路层的这个特性称作MTU,最大传输单元,不同类型的网络大多数都有一个上限。
如果IP层有一个 ...
TCP/IP的分层
TCP和UDP是两种最为著名的运输层协议,二者都使用IP作为网络协议。虽然TCP使用不可靠的IP服务,但它却提供一种可靠的运输层服务。
封装
当应用程序应用TCP传输数据时,数据被送入协议栈中,然后逐个通过每一层都被当做一串比特流送入网络。其中每一层对收到的数据都要加一些首部信息(有时还需要增加尾部信息)。TCP传给IP的数据单元称作TCP报文段或简称TCP段(TCP segment)。IP传给网络接口层的数据单元称作IP数据报(IP datagram)。通过以太网传输的比特流称作帧(Frame)。
以太网数 ...
百万用户同时在线之Strom任务设计
- 博客分类:
- Storm
在线人数需求
当天总在线人数
同时在线人数
同时在线人数统计周期1分钟
用户心跳数据采集
登陆后前30秒每10秒汇报一次心跳
登陆超过30秒每30秒汇报一次心跳
Max心跳QPS=500W/30s=170W+
Strom任务设计
使用Hyperloglog结构代替HashMap做过滤
spout发送bolt使用localOrShuffleGrouping减少网络传输
spout与bolt数量是worker数量N倍,让worker处理量保持均衡
Kafka partition与worker数量相等消除热点
countbolt使用ticktu ...
Storm Bolt中读取Tuple数据
- 博客分类:
- Storm
Tuple接口有很多方法可以读取从上游组件发送过来的数据,这些方法可以分为2类。
根据下标获取数据
根据字段名获取数据
读取数据方法
public class TupleImpl extends IndifferentAccessMap implements Seqable, Indexed, IMeta, Tuple {
private List<Object> values;
private int taskId;
private String streamId;
private GeneralTopologyC ...
场景回放
A机器的服务请求B机器的服务
短连接请求,动态创建连接端口
A机器服务会主动关闭连接
短时间内高并发请求
A机器的tcpssports被耗尽了
大部分网络连接处time_wait状态
内核配置
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.ip_local_reserved_ports = 5710-5739,15710-15739
端口耗尽
主动调用close()/shutdown()断开连接,收到对方确认后状态变为TIME_WAIT。
TCP协议TIM ...
Storm 反压机制
- 博客分类:
- Storm
反压机制
Storm的反压机制不成熟直接带来的后果是洪峰流量或者流量预估不准确导致任务的worker OOM,频繁漂移。Storm1.0版本已经使用新的反压机制,社区解决方案:https://issues.apache.org/jira/browse/STORM-886
https://github.com/apache/storm/pull/700
反压过程
worker executor的接收队列大于高水位,通知反压线程
worker反压线程通知zookeeper,executor繁忙事件
所有worker监听zookeeper ...
Storm Spout nextTuple策略
- 博客分类:
- Storm
Storm从0.8.1之后,在Spout调用nextTuple方法时,如果没有emit tuple,那么默认需要休眠1ms,这个具体的策略是可配置的,因此可以根据自己的具体场景,进行设置,以达到合理利用cpu资源。
ISpoutWaitStrategy是Spout没有emit时等待策略的接口,目的是合理利用Cpu,默认提供了2个实现,一个什么也没做,一个是sleep 1毫秒,我们可以自己来实现这个接口。
storm策略配置
topology.spout.wait.strategy "backtype.storm.spout ...
在使用kafka high-level的consumer,使用多线程消费数据时报错,简单分析一下原因,ConsumerIterator取不到消息时会阻塞,并且将内部状态置为FAILED,当其他线程访问时就会抛出异常。
def hasNext(): Boolean = {
if(state == FAILED) //处于FAILED状态时,另外线程访问会直接异常
throw new IllegalStateException("Iterator is in failed state")
sta ...
异常导致 Storm Worker 重启
- 博客分类:
- Storm
spout一直报错导致worker重启
2016-10-25 14:00:12 STDIO [ERROR] at com.mysql.jdbc.Util.getInstance(Util.java:386)
2016-10-25 14:00:12 STDIO [ERROR] at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1015)
2016-10-25 14:00:12 STDIO [ERROR] at com.mysql.jdbc.SQLError.createSQLException(SQLError.ja ...
Redis HyperLogLog
Redis 在 2.8.9 版本添加了 HyperLogLog 结构。Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。
...
redismon监控redis集群
- 博客分类:
- Redis
随着redis集群规模的增大,集群目前的运行状况如何,是否需要扩容,以及集群有任何的风吹草动需要追溯历史,小米同学开源的redismon完全满足这方面的需要,支持几十个监控维度。
常用的指标
cpu使用情况
内存使用情况
客户端连接情况
key的相关数据
RedisMon安装
RedisMon默认支持Openfalcon,如果需要志气其他监控系统需要做一些修改,安装比较简单,请直接参考官网。
监控效果