目录

  • 长连接与短连接:
    • 简介
    • 使用步骤
    • 适用场景
  • 当k8s遇上长连接:
    • 问题描述
    • 解决方案

长连接与短连接:

简介

长连接是指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接;
短连接则是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接,
其实长连接相较于通常的短连接,是长时间保持客户端与服务端的连接状态。

使用步骤

短连接的使用步骤:
建立连接→数据传输→关闭连接
长连接的使用步骤:
连接→数据传输→保持连接→数据传输→保持连接→……→关闭连接;
所以,这就要求长连接在没有数据通信时,定时发送数据包,以维持连接状态,而短连接在没有数据传输时直接关闭即可。

适用场景

对于长连接来说,无疑可以帮用户省去很多TCP连接建立和关闭操作,从而节约时间。所以对于频繁请求资源的客户来说,比较适合用长连接,在长连接的应用场景下,客户端一般不会主动关闭它们之间的连接,客户端与服务端之间的连接如果一直不关闭的话,随着客户端连接越来越多,服务端的性能会受到影响;对于短连接来说,不需要考虑这个问题,因为存在的连接都是有用的连接,但是如果客户请求频繁,那么在TCP的建立和关闭操作上会浪费较多的时间和带宽。
所以长连接适用于请求频繁且连接数不能太多的场景,例如数据库连接;而短连接适用于并发量大且每个客户端不会频繁操作的场景,例如网站的http服务。

当k8s遇上长连接:

问题描述

在k8s中,提供了两种方式来部署应用程序:Services和Deployments,其中:
Deployments描述了需要运行的应用程序的副本数量,每一个应用程序部署为一个pod,并为其分配一个IP地址;
Services则类似于负载均衡器,其旨在将流量分配到一组Pod。如下图所示,可以将Services理解成是一个IP地址集合,每次对Services发出请求时,都会从这个集合中选择其中一个IP地址并将其作为目标地址。客户端发出请求时,无需知道后端服务连接了多少个pod,也不需要知道后端pod的IP地址, 只需要将请求发送到IP地址不变的后端Services地址即可。
但是对与Services来说,其负载均衡策略存在一个问题:在客户端和其中一个后端pod建立连接后,如果这个连接没有断开,客户端就不会再和其他pod建立连接,也就是说Services事实上并没有实现真正意义上的负载均衡,后端pod从而也就失去了横向扩展的能力。

解决方案

目前解决长连接负载均衡问题的方案有:
一、在客户端实现负载均衡
        该方式需要修改客户端程序,这里可以根据具体需求设置一个时间值或者请求量的值,当建立的长连接超过时间阈值或者请求量阈值时,断开连接,再与服务端重新建立连接,从而实现负载均衡;
二、在服务端实现负载均衡
        该方式需要修改服务端程序,这里可以根据具体需求设置一个时间值或者请求量的值,当建立的长连接超过时间阈值或者请求量阈值时,断开连接,客户端会再与服务端建立连接,从而实现负载均衡;
三、使用服务网格实现负载均衡
        Service mesh 其中一个关键功能是负载均衡,具体可参考相关文档;
四、通过nginx实现负载均衡
        对于这种方式,在k8s中有较为简单且方便的实现方式,即为后端pod建立一个ingress,通过配置均衡策略将请求转发到后端pod,默认是轮询策略,经过实验验证,ingress确实可以实现长连接的负载,注意需要确保nginx配置里有proxy_http_version 1.1,因为http长连接的支持是从1.1版本后才有的。

解决k8s中的长连接负载均衡问题相关推荐

  1. socket 获取回传信息_基于netty框架的socket长连接负载均衡解决方案 oswl

    前言 物联网如今是一个大的趋势,但是概念还比较新颖.大家对这一块的技术积累也比较匮乏,借此前段时间摩拜单车出现了大规模瘫痪的现象.我们今天来讨论一下物联网项目的开发方式. 关于tcp/ip 相关的知识 ...

  2. 基于netty框架的socket长连接负载均衡解决方案

    socket通讯的单机瓶颈 物联网的项目socket使用方式有两种: 短连接的socket请求 维持socket长连接的请求 对于socket短链接来说就好比是http请求,请求服务器,服务器返回数据 ...

  3. Nginx中保持长连接的配置

    哎,老转载王了,原博客地址:https://www.cnblogs.com/kevingrace/p/9364404.html 在Nginx中,对于http1.0与http1.1是支持长连接的.htt ...

  4. SpringCloud Ribbon中的7种负载均衡策略!

    作者 | 磊哥 来源 | Java中文社群(ID:javacn666) 转载请联系授权(微信ID:GG_Stone) 负载均衡通器常有两种实现手段,一种是服务端负载均衡器,另一种是客户端负载均衡器,而 ...

  5. Spring Cloud Ribbon 中的 7 种负载均衡策略

    负载均衡通器常有两种实现手段,一种是服务端负载均衡器,另一种是客户端负载均衡器,而我们今天的主角 Ribbon 就属于后者--客户端负载均衡器. 服务端负载均衡器的问题是,它提供了更强的流量控制权,但 ...

  6. Vertica系列: Vertica DB连接负载均衡

    背景 谈到负载均衡, 对于数据库集群需要区分几个概念: 运算的负载均衡, Vertica 本身是 MPP 数据库, SQL 操作自动会利用多台机器来加快处理速度. 数据库连接的负载均衡, Vertic ...

  7. app中的长连接与实现方式

    http://mrpeak.cn/blog/http2/   --- 原文 http2.0的好处不仅仅是multiplexing,请求压缩,优先级控制,server push等等都是亮点.  解决连接 ...

  8. 【SSH】SSH自动断开连接的原因和解决办法|SSH保持长连接方法

    目录 原因 解决方法 即看即用 方法1:手工修改 方法2:shell命令行修改 详细说明 REMOTE HOST IDENTIFICATION HAS CHANGED问题解决 原因 用putty/Se ...

  9. HTTP协议中的长连接和短连接(keep-alive状态)

    什么是长连接 长连接还是短连接 相比于短连接,长连接更节省资源.如果每发送一条消息就要创建链路.发起握手认证.关闭链路释放资源,会损耗大量的系统资源.长连接只在首次创建时或者链路断连重连才创建链路,链 ...

最新文章

  1. conda 和 pip 安装本地包
  2. Receive本地下载安装方法
  3. iOS设计模式四部曲(三):行为型模式 内附Demo
  4. [学习笔记]多项式指数函数
  5. Servlet 请求处理
  6. andorid程序UI线程下开启子线程闪退错误解决
  7. [19/04/23-星期二] GOF23_创建型模式(工厂模式、抽象工厂模式)
  8. AUTOSAR从入门到精通100讲(二十九)-AutoSar中RTE的生成过程
  9. 万字长文 | 淘宝 10年架构演进
  10. 实现三栏布局的几种方法
  11. 【语音编码】基于matlab LPC编解码【含Matlab源码 554期】
  12. linux蓝天模具风扇控制软件,ECView最新版下载-蓝天原厂风扇转速策略调节软件clevo ecview下载 v6.8 通用版-IT猫扑网...
  13. 微信小程序订阅消息 微信公众号模板消息
  14. 单片机智能密码锁c语言程序,基于单片机控制的密码锁设计(含电路图及源程序)...
  15. codeblocks 16.01 汉化包下载地址及方法
  16. 在ubuntu16.04上安装suitecrm
  17. 揭秘小红书的种草套路
  18. 华为nova 2 Plus魔镜版语音助手逗趣玩不停
  19. python《打气球》小游戏(二)
  20. JC-6、OpenCV+Tensorflow入门人工智能图像处理

热门文章

  1. VS生成的解决方案exe文件在其他电脑显示缺失各种dll文件解决办法
  2. 计算机密码是空的怎么重置,电脑忘记开机登录密码怎么办? Windows 密码重置 - 合一学院...
  3. 修改照片为社保照片 358*441
  4. PADS VX2.8 敷铜自动倒角的使用方法
  5. 双路服务器56核系统推荐,华硕发布双路志强主板:最高支持56核,112线程
  6. 海思开发板上添加ftp功能
  7. C语言初步入门学习大略
  8. 网站做竞价推广需要注意什么呢?
  9. python pip在哪个文件夹运行_如何安装python与pip-百度经验
  10. 垂直水平居中的几种实现方式