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 引入的集群资源管理系统.用户可以将各种服务框架部署 ...
随机推荐
- 安装Eclipse activity插件 报异常 Cannot complete the install because one or more required items could not be
下载插件:Activiti Designer 5.17 2)安装过程中错误处理 a.错误: Cannot complete the install because one or more requir ...
- Vue系列教程(一)基础介绍
什么是Vue.js Vue.js 是目前最火的一个前端框架,React是最流行的一个前端框架(React除了开发网站,还可以开发手机App,Vue语法也可以进行手机App的开发,需要借助Weex) V ...
- angular之模块开发一
模块化开发 概述 什么是模块化开发 将软件产品看作为一系列功能模块的组合 通过特定的方式实现软件所需模块的划分.管理.加载 为什么使用模块化开发 https://github.com/seajs/se ...
- nginx的四个主要组成部分
1.nginx二进制可执行文件 · 由各模块源码编译出的一个文件 2.nginx.conf配置文件 · 控制nginx的行为 3.access.log访问日志 . 记录每一条http请求信息 4.er ...
- Day of Week
题目1043:Day of Week 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1544 解决:609 题目描述: We now use the Gregorian style of ...
- Codeforces_849
A.只要考虑分成一个串的情况就可以了. #include<bits/stdc++.h> using namespace std; ]; int main() { ios::sync_wit ...
- BZOJ 3343 教主的魔法(分块)
题意: 有一个1e6的数组,t次操作:将[l,r]内的值增加w,或者查询[l,r]内的值大于等于add的 思路: 分块,块大小为sqrt(n),每次只需要暴力头尾两块,中间的整块打标记, 对于查询查操 ...
- 2018icpc南京现场赛-I Magic Potion(最大流)
题意: n个英雄,m个怪兽,第i个英雄可以打第i个集合里的怪兽,一个怪兽可以在多个集合里 有k瓶药水,每个英雄最多喝一次,可以多打一只怪兽,求最多打多少只 n,m,k<=500 思路: 最大流, ...
- MapReduce清洗数据进行可视化
继上篇第一阶段清洗数据并导入hive 本篇是剩下的两阶段 2.数据处理: ·统计最受欢迎的视频/文章的Top10访问次数 (video/article) ·按照地市统计最受欢迎的Top10课程 (ip ...
- Android 7.0新特性“Nougat”(牛轧糖)。
1.Unicode 9支持和全新的emoji表情符号 Android Nougat将会支持Unicode 9,并且会新增大约70种emoji表情符号.这些表情符号大多数都是人形的,并且提供不同的肤色, ...