Socket通讯探索(二)-socket集群
前面我们在章节“Socket通讯探索(一)”中如何实现一个tcp连接,但是这仅仅是一个最初级的BIO实现,且没有添加线程池,实际应用中很少采用这种方式,因为不得不考虑当大量的Tcp连接建立的时候,服务端如何安全稳定的运行?为什么呢?
1、BIO实现方式,是阻塞式的(上一节最后面的实现方式虽然无数据的时候,不会阻塞);
2、服务端为每条连接都开辟了一个线程进行处理,而且在连接不断开的情况下,线程不会得到释放;
基于以上情况,当有大量的连接建立的时候,服务端会开辟大量的线程处理并得不到释放,而线程会占用系统资源,这样就会导致系统资源耗尽,没有系统资源的连接请求将会等待处理,更甚至程序直接崩溃,所以最直接的方式是添加线程池防止程序崩溃,大量的连接的处理则还还需要另想他法。
大家都知道当web应用面临大量的请求时,我们会对其进行集群或分布式等方式部署,同理,我们也可以对socket服务端进行多处部署。
通常,由于Tcp连接中客户端需要知道服务端的IP跟端口,那么这就意味着客户端需要知道所有的目标服务器的地址和端口,如果有那么一台主机专门用于对我们的服务器进行负载均衡,然后将负载均衡完成后选择的地址跟端口返回给客户端,然后客户端再发起真实的连接请求。具体的请求过程如下图(详细请参考:https://wenku.baidu.com/view/d5769f85d4d8d15abe234e7c):

以上图中的virtual server实际上就是一个负载均衡用的服务器,所有客户端都会优先连接此服务器得到真实服务器连接(real server);该模型具体的通信流程如下:
①client向处于侦听的vs发SYN包;
②VS按照调度策略选择一个RS,并向RS发SYN包;
④RS响应VS的SYN请求,将SYN ACK包返回给VS;
④VS将收到的SYN ACK包发给client;
④client将5次握手的最后一个ACK包直接发给RS,此时client进入已建立连接状态,RS在收到ACK包后也进入已建立连接状态
⑥client和RS直接通信,此过程与VS无关。
通过以上模型即可完成TCP服务端集群部署,至于具体的实现过程,不在本篇的范畴之内,就目前来说,我只了解这一种实现方式,如果还有其他的方案,大家可以相互交流……
Socket通讯探索(二)-socket集群的更多相关文章
- Elasticsearch(二)--集群原理及优化
一.ES原理 1.索引结构ES是面向文档的 各种文本内容以文档的形式存储到ES中,文档可以是一封邮件.一条日志,或者一个网页的内容.一般使用 JSON 作为文档的序列化格式,文档可以有很多字段,在创建 ...
- java socket通讯(二)处理多个客户端连接
通过java socket通讯(一) 入门示例,就可以实现服务端和客户端的socket通讯,但是上一个例子只能实现一个服务端和一个客户端之间的通讯,如果有多个客户端连接服务端,则需要通过多线程技术来实 ...
- zookeeper学习与实战(二)集群部署
上一篇介绍了单机版zookeeper安装,这种情况一般用于开发测试.如果是生产环境建议用分布式集群部署,防止单点故障,增加zookeeper服务的高可用. [环境介绍] 三台机器:192. ...
- Kubernetes 二进制部署(二)集群部署(多 Master 节点通过 Nginx 负载均衡)
0. 前言 紧接上一篇,本篇文章我们尝试学习多节点部署 kubernetes 集群 并通过 haproxy+keepalived 实现 Master 节点的负载均衡 1. 实验环境 实验环境主要为 5 ...
- Dubbo+zookeeper构建高可用分布式集群(二)-集群部署
在Dubbo+zookeeper构建高可用分布式集群(一)-单机部署中我们讲了如何单机部署.但没有将如何配置微服务.下面分别介绍单机与集群微服务如何配置注册中心. Zookeeper单机配置:方式一. ...
- Dubbo学习(二) Dubbo 集群容错模式-负载均衡模式
Dubbo是Alibaba开源的分布式服务框架,我们可以非常容易地通过Dubbo来构建分布式服务,并根据自己实际业务应用场景来选择合适的集群容错模式,这个对于很多应用都是迫切希望的,只需要通过简单的配 ...
- Zookeeper(二) zookeeper集群搭建 与使用
一.zookeeper集群搭建 鉴于 zookeeper 本身的特点,服务器集群的节点数推荐设置为奇数台.我这里我规划为三台, 为别为 hadoop01,hadoop02,hadoop03 1. ...
- 转载:【Oracle 集群】RAC知识图文详细教程(二)--Oracle 集群概念及原理
文章导航 集群概念介绍(一) ORACLE集群概念和原理(二) RAC 工作原理和相关组件(三) 缓存融合技术(四) RAC 特殊问题和实战经验(五) ORACLE 11 G版本2 RAC在LINUX ...
- Hadoop 学习之路(二)—— 集群资源管理器 YARN
一.hadoop yarn 简介 Apache YARN (Yet Another Resource Negotiator) 是hadoop 2.0 引入的集群资源管理系统.用户可以将各种服务框架部署 ...
随机推荐
- 线程池之 ThreadPoolExecutor
线程池之 ThreadPoolExecutor + 面试题 线程池介绍 线程池(Thread Pool):把一个或多个线程通过统一的方式进行调度和重复使用的技术,避免了因为线程过多而带来使用上的开销. ...
- 十二、sed文本处理
一.概述 1.sed 是一款流编辑工具,用来对文本进行过滤与替换工作,特别是当你想要对几十个配置文件做统计修改时,你会感受到 sed 的魅力!sed 通过输入读取文件内容,但一次仅读取一行内容进行某些 ...
- 浅谈C语言的数据存储(二)
作者:冯老师,华清远见嵌入式学院讲师. 静态区是一个抽象笼统的概念,在实际的Linux/C的可执行程序中并没有静态区这个区域,具体来讲它主要由两个段组成:.data段和.bss段.其中.data段就是 ...
- SpringBoot使用ELK日志收集ELASTIC (ELK) STACK
1:资源 # 文档向导 # logstash https://www.elastic.co/guide/en/logstash/current/index.html #kibana https://w ...
- Redis Cluster 集群扩容与收缩
http://blog.csdn.net/men_wen/article/details/72896682 Redis 学习笔记(十五)Redis Cluster 集群扩容与收缩 标签: redis集 ...
- 校招必看硬核干货:C++怎么学才能进大厂
目录 关于小猿 如何找资料 自我定位 岗位需求 学习路线及时间安排 资料获取方式 C++语言在历史舞台上出现了不短的时间,虽然一直面临着Python,Go等新语言的挑战,但它在基础架构和大型软件上的优 ...
- RFC笔记,IPv6 Node Requirements
Request for Comments: 6434,IPv6 Node Requirements 路由器节点必须能够生成链路本地地址 5.9.2. IPv6 Stateless Address Au ...
- Linux恢复删除的文件
linux恢复删除的文件 先介绍下一些文件的基本概念: · 文件实际上是一个指向inode的链接, inode链接包含了文件的所有属性, 比如权限和所有者, 数据块地址(文件存储在磁盘 ...
- [CSS]important提升直选标签优先级
<style> #identity{ color: purple; } p { color: yellowgreen !important; } </style> <!- ...
- [RHEL8]开启BBR
# sysctl net.ipv4.tcp_congestion_control net.ipv4.tcp_congestion_control = cubic # sysctl net.ipv4.t ...