海量数据排序
外排序
传统意义上的排序都指的是内排序,针对的是数据可以一次全部载入内存中的情况。但是面对海量数据,不可能一次全部载入内存中,于是要使用外排序。外排序通常采用一种”排序-归并”的策略,首先要对数据分块,对块内数据选择一种高效的内排序策略进行排序,然后采用归并排序的思想对于所有的块进行多路归并,得到所有数据的一个有序序列。
传统意义上的排序都指的是内排序,针对的是数据可以一次全部载入内存中的情况。但是面对海量数据,不可能一次全部载入内存中,于是要使用外排序。外排序通常采用一种”排序-归并”的策略,首先要对数据分块,对块内数据选择一种高效的内排序策略进行排序,然后采用归并排序的思想对于所有的块进行多路归并,得到所有数据的一个有序序列。
基本原理
任何的负载均衡技术都要想办法建立某种一对多的映射机制:一个请求的入口映射到多个处理请求的节点,从而实现分而治之(Divide and Conquer)。
日志系统通常有以下环节
日志采集->日志清洗->日志索引->数据检索及可视化
首先了解一个概念Deadline
net.Conn为Deadline提供了多个方法,如Set[Read|Write]Deadline(time.Time)。Deadline是一个绝对时间值,当到达这个时间的时候,对应的读或写操作会失败,返回超时(timeout)错误。
http1.1引入持久连接,即TCP连接默认不关闭,可以被多个请求复用,不用声明Connection: keep-alive
客户端和服务器发现对方一段时间没有活动,就可以主动关闭连接。不过,规范的做法是,客户端在最后一个请求时,发送Connection: close,明确要求服务器关闭TCP连接。
检测tcp连接是否存活,及时销毁无效的连接,减轻系统压力