长连接

关于Keepalive的那些事

匿名 (未验证) 提交于 2019-12-02 23:48:02
服务端很多同学包括自己对keepalive理解不清晰,经常搞不清楚,TCP也有keepalive,HTTP也有keepalive,高可用也叫keepalive,经常混淆这几个概念。做下这几个概念的简述,尽管名字基本上是一样的,但是所表示意义和范畴却大相径庭。 Keepalived是一个基于VRRP协议来实现的服务高可用方案,可以利用其来避免IP单点故障。它的作用是检测服务器的状态,如果有一台服务器宕机,或出现故障,Keepalived将检测到,使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中。 Keepalived一般不会单独出现,而是与其它负载均衡技术(如lvs、haproxy、nginx)一起工作来达到集群的高可用。 一个简单的使用例子,将域名解析到一台负载均衡机器上,然后负载均衡反向代理到WEB机器上。中间的负载均衡只有一台,没法做到高可用,至少需要做到两台,那配置成两台机器之后,Keepalived就可以保证服务只有一个对外的虚拟IP,如果MASTER的负载均衡出现故障的时候,自动切换到BACKUP负载均衡上,服务不受任何影响。Keepalived来保证这些。 我们以前有过一套稍显复杂的服务配置,Keepalived给HAProxy提供高可用,然后HAProxy给Twemproxy提供高可用和负载均衡

记一次httpclient Connection reset问题定位

匿名 (未验证) 提交于 2019-12-02 23:43:01
问题:某业务系统在运行一段时间后,某个API一定概率偶现Connection reset现象。 问题定位: 首先想到的是要本地复现出这个问题,但一直复现不出来。 2、查询了线上配置,lvs、引擎集群的系统参数配置,均是net.ipv4.tcp_tw_recycle=0,net.ipv4.tcp_timestamps=1,不具备出现1描述问题的条件。 4、在开发测试环境模拟多个客户端(5)个同时压测,jmeter长/短连接、Timeout时间、HttpClient版本,也未复现该问题,将客户端的配置改成net.ipv4.tcp_tw_recycle=1,net.ipv4.tcp_timestamps=1,来压测,排查下是否是客户端系统参数引起的,看下是否能重现,也未重现该问题。 5、通过httpclient编写api定时访问接口,短链接下未复现。 6、通过httpclient编写api访问接口,使用httpclient连接池,长连接下复现,每次任务sleep 随机0-60s。(考虑服务端keepalive_timeout时间是60s)。发现出现同样问题。判断是长连接情况下导致。 7、研究了下http连接池的长连接原理,默认策略如下。设置的客户端默认超时时间为-1,即永远不失效,重写该方法,设置时间为20s。发现不会出现该问题。 8、但考虑服务端有设置60s的超时时间

http长轮询&短轮询

匿名 (未验证) 提交于 2019-12-02 23:43:01
2019独角兽企业重金招聘Python工程师标准>>> http 协议介绍: http 协议是请求/响应范式的, 每一个 http 响应都是由一个对应的 http 请求产生的; http 协议是无状态的, 多个 http 请求之间是没有关系的. http 长连接: 目前 http 协议普遍使用的是 1.1 版本, 之前有个 1.0 版本, 两者之间的一个区别是 1.1 支持 http 长连接 , 或者叫持久连接.1.0 不支持 http 长连接, 每次一个 http 请求响应后都关闭 tcp 连接, 下个 http 请求会重新建立 tcp 连接. 所谓 http 长连接, 就是多个 http 请求共用一个 tcp 连接; 这样可以减少多次临近 http 请求导致 tcp 建立关闭所产生的时间消耗. http 1.1 中在请求头和相应头中用 connection字段标识是否是 http 长连接, connection : keep-alive, 表明是 http 长连接; connection:closed , 表明服务器关闭 tcp 连接 与 connection 对应的一个字段是 keep-live , http 响应头中出现, 他的格式是 timeout=30, max=5, timeout 是两次 http 请求保持的时间(s), , max 是这个 tcp 连接最多为几个

一条SQL查询语句是如何执行的?

匿名 (未验证) 提交于 2019-12-02 22:06:11
本篇文章将通过一条 SQL 的执行过程来介绍 MySQL 的基础架构。 首先有一个 user_info 表,表里有一个 id 字段,执行下面这条查询语句: select * from user_info where id = 1 ; 返回结果为: +----+----------+----------+--------+------+---------------------+---------------------+ | id | username | password | openid | role | create_time | update_time | +----+----------+----------+--------+------+---------------------+---------------------+ | 1 | 武培轩 | 123 | 1 | 1 | 2019 - 08 - 29 00 : 29 : 08 | 2019 - 08 - 29 00 : 29 : 08 | +----+----------+----------+--------+------+---------------------+---------------------+ 下面给出 MySQL 的基本架构示意图,可以看出 SQL 语句在 MySQL 的各个模块中的执行过程

Nginx 长连接

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-02 15:28:48
默认情况下,Nginx 通过 upstream 模块与后端服务器建立的是TCP短连接,使用 HTTP/1.0 协议,并设置 proxy_set_header connection close。 Nginx 通过 upstream keepalive 与后端服务器建立长连接。可以复用长连接,提高服务性能,加快响应速度。 upstream http_backend { server 172.18.10.12:8080; keepalive 16; } server { ... location /http/ { proxy_set_header Connection ""; proxy_http_version 1.1; proxy_pass http://http_backend; ... } } 来源: https://www.cnblogs.com/yutb/p/11751732.html

极光推送技术原理:移动无线网络长连接

穿精又带淫゛_ 提交于 2019-12-02 14:54:20
移动互联网应用现状 因为手机平台本身、电量、网络流量的限制,移动互联网应用在设计上跟传统 PC 上的应用很大不一样,需要根据手机本身的特点,尽量的节省电量和流量,同时又要尽可能的保证数据能及时到达客户端。 为了解决数据同步的问题,在手机平台上,常用的方法有2种。一种是定时去服务器上查询数据,也叫Polling,还有一种手机跟服务器之间维护一个 TCP 长连接,当服务器有数据时,实时推送到客户端,也就是我们说的 Push。 从耗费的电量、流量和数据送达的及时性来说,Push 都会有明显的优势,但 Push 的实现和维护成本相对较高。在移动无线网络下维护长连接,相对也有一些技术上的难度。本文试图给大家介绍一下我们 极光推送 在 Android 平台上是如何维护长连接。 移动无线网络的特点 因为 IP v4 的 IP 量有限,运营商分配给手机终端的 IP 是运营商内网的 IP,手机要连接 Internet,就需要通过运营商的网关做一个网络地址转换(Network Address Translation,NAT)。简单的说运营商的网关需要维护一个外网 IP、端口到内网 IP、端口的对应关系,以确保内网的手机可以跟 Internet 的服务器通讯。 图片源自 cisco.com. NAT 功能由图中的 GGSN 模块实现。 大部分移动无线网络运营商都在链路一段时间没有数据通讯时,会淘汰

长连接与短连接

空扰寡人 提交于 2019-12-02 03:02:54
Http的长连接和短连接本质上是Tcp的长连接和短连接。Http是应用层协议,在传输层使用Tcp协议,在网络层使用Ip协议。Ip协议主要解决网络层的路由和寻址问题。Tcp协议主要解决如何可靠地在网络层传输数据。 Http协议是建立在Tcp协议之上的协议,Http负责如何包装数据,Tcp层负责如何传输数据。 1 在http1.0协议中,客户端每次请求都需要建立一个单独的连接,请求处理完成之后,释放连接,这种连接就是"短连接"。 2 在http1.1协议中,可以在一次连接中处理多个请求,不必等到一个请求处理完成后再处理另外一个请求,这种连接就是"长连接"。在http1.1的请求头中设置connection:keep-alive,就表示请求一个长连接,服务器端的返回头中带上connection:keep-alive,表明该连接是一个长连接。 来源: https://www.cnblogs.com/mydesky2012/p/11727780.html

WebSocket

匆匆过客 提交于 2019-12-01 22:04:20
WebSocket 是什么? WebSocket 协议在2008年诞生,2011年成为国际标准。所有浏览器都已经支持了。 WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。 WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端。 它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。 其他特点包括: (1)建立在 TCP 协议之上,服务器端的实现比较容易。 (2)与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。 (3)数据格式比较轻量,性能开销小,通信高效。 (4)可以发送文本,也可以发送二进制数据。 (5)没有同源限制,客户端可以与任意服务器通信。 (6)协议标识符是ws(如果加密,则为wss),服务器网址就是 URL。 为什么需要 WebSocket ? 了解计算机网络协议的人,应该都知道:HTTP 协议是一种无状态的、无连接的、单向的应用层协议。它采用了请求/响应模型。通信请求只能由客户端发起,服务端对请求做出应答处理。 这种通信模型有一个弊端:HTTP

面经整理01

时光怂恿深爱的人放手 提交于 2019-12-01 16:51:52
数据结构、计算机网络、操作系统、linux shell脚本、数据库、Java基础、编程题目(数据结构) 一、面试经验 在真正面试的时候,不要和面试官一问一答模式,总体感觉把自己知道的扩展着回答效果会好很多,比如:问一个算法的时间复杂度,直接回答结果,还是把最好时间复杂度和最坏时间复杂度分析后得出时间复杂度告诉面试官的效果好? 二、数据结构 1. 二叉树的遍历 递归和非递归 2. 直接插入排序(时间复杂度) 快速排序(奇数和偶数) 3. 快排的缺点,解决办法。什么情况下快排时间复杂度为O(n^2) 4. 八种排序算法、思路、时间复杂度、最好/最坏。是否是稳定排序。空间复杂度。各自的应用场景。 5. 链表是否有环、怎样找环入口 6. 中序遍历递归和非递归 7. 求一个栈的最大元素 8. 两个栈实现一个队列 9. 判断很多单词是否能构成环 用到栈 10. 算法思想有 11. 字符串翻转 12. 一个数组求出现奇数次的数字 13. 哈夫曼编码和译码 14. 哈夫曼算法 15. 哈希表解决地址冲突的方法 16. 知道哪些链表结构、哪些树结构 17. 手写单例模式 三、操作系统 1. 多线程通信 2. 实现线程的方式和线程安全问题 3. c/s 和 b/s的区别和联系 4. 知道什么锁 5. 死锁 6. 信号量,信号量与互斥量的区别 7. 说下计算机体系结构,可以说操作系统 8. 进程线程区别

Jetty源码学习9-WebSocket

痴心易碎 提交于 2019-12-01 10:33:14
引言 通过NIO+Continunation+HttpClient可以使Jetty具有异步长连接的功能,但有些应用场景确需要服务器“推”的功能,比如说:聊天室、实时消息提醒、股票行情等对于实时要求比较高的应用,能想到的实时推送的解决方案大致可以分为下面几种: 1、轮询:前台ajax轮询实时消息。 2、applet:已经OUT了不是~而且亦有安全方面的问题 3、长连接:在一次TCP的连接上发送多次数据,除非手动close,但需要在HTTP协议的基础上做协议的转换并应用在客户端和服务端,这些工作需要自己来实现。 我最初接触到websocket是设计一个资源远程加载的平台。设想你在本地开发web应用,你只需要告诉平台你的应用在本地的地址。第三方的人员(主管或者运营人员,亦或是一个项目组的同事)可以随时通过访问平台看到你工作的成果,因为是实时的,所以沟通会更加有效。 本文描述的websocket就是一个非Http的双向连接(其实也跟Http息息相关,下文有详解),有了它你不需要没事去轮询实现推的功能;有了它你可以对注册到平台上的计算机做一些事情(确实有安全隐患,不过都是开发环境也就无所谓了)。 一个简单的实例 为了研究websocket需要搭建一个功能环境,修改了网上的一段实例并调试无误,贴出来主要代码,需要完整工程的同学请留言。 实例流程如下: A