CN115633081A - 一种基于Eureka心跳连接的优化方法 - Google Patents
一种基于Eureka心跳连接的优化方法 Download PDFInfo
- Publication number
- CN115633081A CN115633081A CN202211254545.6A CN202211254545A CN115633081A CN 115633081 A CN115633081 A CN 115633081A CN 202211254545 A CN202211254545 A CN 202211254545A CN 115633081 A CN115633081 A CN 115633081A
- Authority
- CN
- China
- Prior art keywords
- client
- server
- connection
- socket
- eureka
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/14—Session management
- H04L67/143—Termination or inactivation of sessions, e.g. event-controlled end of session
- H04L67/145—Termination or inactivation of sessions, e.g. event-controlled end of session avoiding end of session, e.g. keep-alive, heartbeats, resumption message or wake-up for inactive or interrupted session
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L43/00—Arrangements for monitoring or testing data switching networks
- H04L43/10—Active monitoring, e.g. heartbeat, ping or trace-route
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/161—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields
- H04L69/162—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields involving adaptations of sockets based mechanisms
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Health & Medical Sciences (AREA)
- Cardiology (AREA)
- General Health & Medical Sciences (AREA)
- Computer Security & Cryptography (AREA)
- Computer And Data Communications (AREA)
Abstract
一种基于Eureka心跳连接的优化方法,1)在服务端增加一个Socketserver的定时任务;2)服务端每接收到一个Socket就建立一个新的线程来处理连接请求;3)服务端跟客户端建立好连接之后,从中读取客户端发过来的信息;4)如果服务端未接收到客户端的心跳包,服务端主动发送询问请求至客户端,如果发送失败则断开连接;5)在客服端增加一个Socketclient的定时任务,配置服务端的地址及监听端口,建立与服务端的连接,连接完成后发送数据;6)客户端开启线程,负责读取服务端的数据;7)服务端改为SocketServer连接;8)客户端检测socket是否连接。
Description
技术领域
本发明涉及负载均衡socket微服务架构,尤其是Eureka架构心跳连接的优化方式。
背景技术
分布式技术:随着各种大型网站的各种高并发访问、海量数据处理等场景越来越多,传统的WEB应用已经不能满足日益增量的用户访问量,系统经常卡死等问题,如何实现网站的高可用、易伸缩、可扩展、安全等目标就显得越来越重要。为了解决这样一系列问题,大型网站的架构也在不断发展。提高大型网站的高可用架构,不得不提的就是分布式系统。
负载均衡技术:Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,服务续约操作由Service Provider定期调用,类似于heartbeat。目的是隔一段时间客户端发送心跳包给服务端,告知Eureka Server的其自身状态还在使用中,通俗的说就是它们俩之间的心跳检测,避免服务提供者被剔除掉,Eureka主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。
心跳连接方式现状:客户端Eureka client每隔默认30秒会向Eureka Server发起renew续约操作(即发送心跳包),服务失效时间默认90秒,如果Eureka Server在90秒内没有接收到来自Eureka client的Renew(续约)操作,就会把Eureka client从服务列表中删除。Eureka Client发送心跳包到Eureka Server,Eureka Server接收到心跳包,返回状态。现有技术流程如图1。Eureka目前是基于REST的服务,然而在高并发量的情况下REST方式已经不能满足要求。
目前Eureka架构心跳连接REST的方式在高并发情况下的缺点和不足如下:
1、服务器感应差。REST连接是一种短连接,要保持客户端程序的在线状态,需要不断地向服务器发起连接请求。通常的做法即使不需要获得任何数据,客户端也保持每隔一段固定的时间向服务器发送一次心跳包的请求,服务器在收到该请求后对客户端进行回复,表明知道客户端在线。若服务器长时间无法收到客户端的请求,则认为客户端下线,若客户端长时间无法收到服务器的回复,则认为网络已经断开,如果客户端服务挂了或者客户端网络等问题,服务器不能立即感知到,要等客服端在默认时间内发送心跳包来检查客户端是否正常。
2、REST方式没有重新连接机制,如果客户端出现异常断开连接,则需要人为干预。
本提案提出在高并发量的情况下Eureka心跳的连接方式改为Socket长连接的方式,可以解决上述问题并实现可伸缩性更强、可用性更高的技术效果。
发明内容
发明目的:为解决Eureka架构心跳连接REST的方式在高并发情况下,REST短连接方式服务器感应差,在出现客户端异常断开连接后,REST方式无法重新连接机制两个问题。
本发明的技术方案是,一种基于Eureka心跳连接的优化方法,
1)在服务端增加一个Socket server的定时任务。
2)服务端采用异步处理与客户端通信的方式,每接收到一个Socket就建立一个新的线程来处理连接请求。
3)服务端跟客户端建立好连接之后,我们就可以获取Socket的InputStream,并从中读取客户端发过来的信息。
4)如果服务端未接收到客户端的心跳包,服务端主动发送询问请求至客户端,如果发送失败则断开连接。
5)在客服端增加一个Socket client的定时任务,配置服务端的地址及监听端口,建立与服务端的连接,连接完成后发送数据。
6)客户端开启线程,负责读取服务端的数据。
7)服务端Eureka Server修改PeerEurekaNode类中sendHeartBeat发送心跳方法,在高并发情况下原方法REST连接方式已不能满足业务需求,故改为Socket Server连接。
8)客户端Eureka Client修改DiscoveryClient类中定时任务,由REST连接改为Socket客户端连接并且修改HeartbeatThread(心跳检测线程)为每3秒发送一次心跳;其次,检测socket是否连接,如果连接没有断开则继续检测,如果连接已经断开,则判断是否有数据传输如果没有则客户按照策略重新连接服务端。
本发明提出的关于一种基于Eureka心跳连接的优化方法及实现,主要是:
1)Eureka心跳连接方式由REST方式优化成Socket长连接的方式。
2)Eureka服务端与客户端断开后的Socket重连机制。
有益效果:
本发明的一种基于Eureka心跳连接的优化方法及系统技术优点归纳如下:
1、减少资源浪费。在高并发情况下,客户端和服务端操作次数频繁,如果此时用短连接频繁的通信会造成Socket错误,而且频繁的Socket创建也是一种浪费资源现象。
2、可用性好。每隔一段时间客户端会向服务器端发送心跳数据,如果数据不能发送成功则说明socket已经断开,此时释放服务端和客户端的资源,建立一个新的Socket连接减少人为干预。
3、效率高。客户端一旦出现故障,服务端能迅速响应并发现客户端的故障情况。
附图说明
图1是心跳连接方式现有技术流程;
图2本发明Eureka心跳连接的优化系统流程图。
具体实施方式
网络连接中,每次TCP的连接的三步握手都需要一些时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多,所以每个操作完成后都不断开,下次处理时直接发送数据包就可以了,不用再次建立TCP连接。
在长连接的情况下,有可能很长一段时间都没有数据交互,理论上说,这个连接应该是一直保持连接的,但是实际情况中,如果中间节点出现故障的可能性难以预测,更重要的是,有的防火墙会自动把一段时间之内没有数据交互的连接断掉减少资源浪费。此时,需要心跳包用于维持长连接,每隔一段时间客户端会向服务器端发送心跳数据,如果数据不能发送成功说明socket已经断开,需要释放服务端和客户端的资源,建立一个新的Socket连接。
(1)在服务端增加一个Socket server的定时任务;
import socketserver#引入socketserver包,创建socketserver服务端程序
class Server(socketserver.BaseRequestHandler):
def handle(self):
#创建一个链接,继承于socketserver中的BaseRequestHandler类conn=self.request
#发送登录提示
conn.sendall(b"Welcome to login...")
print("Client connect...")
while True:
该定时任务实时监测客户端心跳包,服务端监听未接收到客户端的心跳包时,根据
message=self.data=self.request.recv(1024),
print(message.decode('utf-8'))
#收到exit就退出
If message=="exit":
break
判断连接是否丢失。
在判断客户端未在线时,通过
self.request.sendall(self.data.upper().encode('utf-8'))#发送消息方式主动发送询问请求至客户端,询问链接情况,如果发送失败则断开连接。
(2)在客户端增加一个Socket client的定时任务
#引入socket包,创建Socket client客户端程序
import socket;
sock=socket.socket();
#连接服务端,配置服务端的地址及监听端口,建立与服务端的连接。
client.connect(('localhost',9999));
login=sock.recv(1024);#发起客户端登录操作,建立服务端连接print(login.decode('utf-8'));
采用异步处理与客户端通信的方式,每接收到一个Socket就建立一个新的线程来处理连接请求。
public class CreateThread(cmd){
Thread threadExtends=new ThreadExtends();
threadExtends.start(client.send(cmd.encode());
client.recv(1024));
print(cmd_res.decode());
}
(3)在Eureka Server修改PeerEurekaNode类中sendHeartBeat发送心跳方法:
该部分内容依靠步骤2中服务端Eureka Server定时任务连接;
(4)重写Eureka Client中DiscoveryClient部分源码initScheduLedTasks();读取eureka注册服务信息,修改HeartbeatThread,设置每3秒发送一次心跳。clientConfig.shouldRegisterWithEureka();
new TimedSupervisorTask(renewalIntervalInSecs,3s)。
Claims (3)
1.一种基于Eureka心跳连接的优化方法及实现其特征在于,其特征是,包括以下步骤:1)在服务端增加一个Socketserver的定时任务;
2)服务端采用异步处理与客户端通信的方式,每接收到一个Socket就建立一个新的线程来处理连接请求;
3)服务端跟客户端建立好连接之后,获取Socket的InputStream,并从中读取客户端发过来的信息;
4)如果服务端未接收到客户端的心跳包,服务端主动发送询问请求至客户端,如果发送失败则断开连接;
5)在客服端增加一个Socketclient的定时任务,配置服务端的地址及监听端口,建立与服务端的连接,连接完成后发送数据;
6)客户端开启线程,负责读取服务端的数据;
7)服务端EurekaServer修改PeerEurekaNode类中sendHeartBeat发送心跳方法,改为SocketServer连接;
8)客户端EurekaClient修改DiscoveryClient类中定时任务改为Socket客户端连接并且修改HeartbeatThread为每3秒发送一次心跳;其次,检测socket是否连接,如果连接没有断开则继续检测,如果连接已经断开,则判断是否有数据传输如果没有则客户按照策略重新连接服务端。
2.根据权利要求1所述的基于Eureka心跳连接的优化方法及实现方法,其特征在于,所述将服务端与客户端通讯方式改为异步,依靠Socketserver处理请求,实现长连接方式。
3.一种基于Eureka心跳连接的优化方法及实现方法,其特征在于,还包括:
所述优化Eureka服务端与客户端断开后的Socket重连机制。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211254545.6A CN115633081A (zh) | 2022-10-13 | 2022-10-13 | 一种基于Eureka心跳连接的优化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211254545.6A CN115633081A (zh) | 2022-10-13 | 2022-10-13 | 一种基于Eureka心跳连接的优化方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115633081A true CN115633081A (zh) | 2023-01-20 |
Family
ID=84904402
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211254545.6A Pending CN115633081A (zh) | 2022-10-13 | 2022-10-13 | 一种基于Eureka心跳连接的优化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115633081A (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105610888A (zh) * | 2015-09-08 | 2016-05-25 | 华南师范大学 | 基于安卓的利用socket推送消息的方法和系统 |
CN109547293A (zh) * | 2018-12-20 | 2019-03-29 | 上海数果科技有限公司 | 心跳数据包发送方法 |
CN109981717A (zh) * | 2017-12-28 | 2019-07-05 | 中国移动通信集团公司 | 一种连接优化方法、装置及计算机存储介质 |
CN112398847A (zh) * | 2020-11-12 | 2021-02-23 | 华侨大学 | 一种基于TCP Socket和改进心跳机制的内网穿透方法和系统 |
-
2022
- 2022-10-13 CN CN202211254545.6A patent/CN115633081A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105610888A (zh) * | 2015-09-08 | 2016-05-25 | 华南师范大学 | 基于安卓的利用socket推送消息的方法和系统 |
CN109981717A (zh) * | 2017-12-28 | 2019-07-05 | 中国移动通信集团公司 | 一种连接优化方法、装置及计算机存储介质 |
CN109547293A (zh) * | 2018-12-20 | 2019-03-29 | 上海数果科技有限公司 | 心跳数据包发送方法 |
CN112398847A (zh) * | 2020-11-12 | 2021-02-23 | 华侨大学 | 一种基于TCP Socket和改进心跳机制的内网穿透方法和系统 |
Non-Patent Citations (1)
Title |
---|
黄永华;: "应用Socket的微服务之间的通讯", 福建电脑, no. 02 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10673938B2 (en) | Method and system for load balancing over a cluster of authentication, authorization and accounting (AAA) servers | |
CN111565229B (zh) | 一种基于Redis的通信系统分布式方法 | |
US7978631B1 (en) | Method and apparatus for encoding and mapping of virtual addresses for clusters | |
US9647954B2 (en) | Method and system for optimizing a network by independently scaling control segments and data flow | |
US20080162703A1 (en) | Dynamic client/server session recovery in a heterogenous computer network | |
AU2006338127B2 (en) | A synchronization method of connection status in data communications and the applied communication node | |
US7606929B2 (en) | Network load balancing with connection manipulation | |
JP3966598B2 (ja) | サーバ選択システム | |
JP4087271B2 (ja) | 代理応答装置およびネットワークシステム | |
US7401114B1 (en) | Method and apparatus for making a computational service highly available | |
WO2004036344A2 (en) | System and method for the optimization of database | |
EP2171600A2 (en) | Assisted peer-to-peer media streaming | |
CN112202872A (zh) | 一种数据转发方法、api网关及消息服务系统 | |
WO2009117946A1 (zh) | 调度服务器的主备实现方法及调度服务器 | |
WO2011015020A1 (zh) | 文件传输方法、系统及客户端 | |
US7564848B2 (en) | Method for the establishing of connections in a communication system | |
CN112671554A (zh) | 一种节点故障处理方法及相关装置 | |
WO2017080335A1 (zh) | 一种基于pppoe网络的拨号方法、拨号系统及路由器 | |
CN113259423A (zh) | P2p系统中客户端联网访问的方法及装置 | |
EP2693691B1 (en) | Method and apparatus for initializing gateway in device management system | |
US20140201376A1 (en) | Method and system for the handling of redundant long poll | |
CN110771117A (zh) | 一种采用面向id的网络的会话层通信 | |
CN115633081A (zh) | 一种基于Eureka心跳连接的优化方法 | |
CN117336346A (zh) | 一种ippbx与pms对接状态转换方法、终端设备及介质 | |
CN111491007A (zh) | Sip中心信令控制服务负载均衡方法及其负载均衡器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |