1. 程式人生 > >基於netty框架的socket長連線負載均衡解決方案

基於netty框架的socket長連線負載均衡解決方案

前言

物聯網如今是一個大的趨勢,但是概念還比較新穎。大家對這一塊的技術積累也比較匱乏,藉此前段時間摩拜單車出現了大規模癱瘓的現象。我們今天來討論一下物聯網專案的開發方式。

關於tcp/ip 相關的知識點

socket通訊的單機瓶頸

物聯網的專案socket使用方式有兩種:

  1. 短連線的socket請求
  2. 維持socket長連線的請求

對於socket短連結來說就好比是http請求,請求伺服器,伺服器返回資料以後請求管道就關閉了,伺服器與客戶端的連結就釋放了。但是對於socket長連結就不同了,當裝置與伺服器建立連線以後就要一直保持連線,或者說保持較長時間的連結,那麼就會大量消耗伺服器的資源。若存在大量的這樣的請求以後伺服器終究會受不了垮掉。通過對TcpClient/server最大連線數我們得知單機socket服務是存在最大連結數限制。儘管理論值很大,但還要考慮到實際伺服器的記憶體/cpu/頻寬等條件,我們不可能指望單機承載特別大的連結請求。

該如何負載均衡socket長連線的請求

提到負載均衡大家可能會想到很多負載均衡的框架,比如說比較出名的:nginx。但是悲催的是他是基於轉發的方式,不能應用在socket長連結請求上。在這一塊目前還沒有特別優秀的處理框架,而且從技術角度來分析也不可能存在。那我們只能自己想辦法了。

socket分發服務架構圖

1、 裝置請求分發伺服器,分發伺服器返回有效的socket伺服器ip與port,然後斷開連線。
a) 裝置與伺服器建立連線。
b) 伺服器接收到連線請求後,立即將分配好的socket伺服器ip與port資訊響應給裝置。
c) 伺服器主動斷開socket連線。
2、 裝置得到ip與port以後,裝置去連線socket伺服器,然後與其進行協議通訊。
a) 裝置連線到socket伺服器。
b) socket伺服器響應連線成功響應資訊。
c) 裝置與socket伺服器保持長連結通訊。

*. 若裝置未收到連線成功響應則再次嘗試連線,若三次請求依舊沒有成功建立連線,那麼裝置需要去請求分發伺服器然後再重新上述操作。
*. 當裝置在異常情況下連結不上socket伺服器時,依舊嘗試三次若不能成功,則直接請求分發伺服器,然後再重複上述操作。

分發伺服器處理業務

我們來看一下分發伺服器該處理的業務:


    @Override
    public void channelActive(ChannelHandlerContext ctx) throws Exception {

        //todo 根據自己的負載情況獲取相應的socket伺服器資訊
        String ip = "192.168.1.188:2030";

        SocketUtils.send(ctx,ip.getBytes());
        ctx.close();
    }
    

*. ip的獲取需要根據自己的業務來完成。

總結

我們通過這樣的方式就可以輕鬆的解決大量裝置與伺服器通訊的問題,若後面有更多的裝置請求只需新增更多的socket伺服器即可。當然可能大家擔心分發伺服器受不了,其實這是多餘的,因為分發伺服器只做轉發,而且完成處理以後就直接把連結給釋放,並且當裝置拿到socket伺服器的ip地址以後就將不在訪問分發伺服器了,它的壓力是可控的不會特別也不會頻繁。

關於distribute-netty: 該demo僅僅用於說明分發伺服器的工作原理,具體的業務實現還需要根據自己的業務來完成。

對於分發伺服器的設計還可以採用web服務方式,這樣相對容易做成負載均衡。不過這個會增加前端裝置成本,需要先採用http請求獲取業務伺服器ip、埠,再使用socket長連線方式連線業務伺服器。

相關推薦

基於netty框架socket連線負載均衡解決方案

前言 物聯網如今是一個大的趨勢,但是概念還比較新穎。大家對這一塊的技術積累也比較匱乏,藉此前段時間摩拜單車出現了大規模癱瘓的現象。我們今天來討論一下物聯網專案的開發方式。 關於tcp/ip 相關的知識點 socket通訊的單機瓶頸 物聯網的專案socket使用方式

Haproxy + keepalived 高可用負載均衡解決方案

haproxy + keepalived文檔作者:amunlinux文檔版本:Version 1.1修改記錄:2017-04-22系統環境:CentOS 6.8 64 bitIP 信息列表: 名稱 IP -----------------------------------VIP 192.1

企業級開源四層負載均衡解決方案--LVS 高清無密 百度網盤

簡介 進行 規劃 詳細介紹 存在 keepaliv get 服務器 應用 企業級開源四層負載均衡解決方案--LVS 本課程將在Linux環境下,學習配置使用LVS,對Web集群和MySQL集群進行負載均衡,並結合利用Keepalived實現負載均衡器的高可用,實現對後端Re

企業級開源四層負載均衡解決方案--LVS

font apach 價值 舉例 開源 測試 流程 tar 服務器 第1章 課程簡介課程內容的概要介紹,包括需要具備的知識前提、課程內容、面向用戶、課程的價值意義及學習目標 1-1 LVS導學視頻1-2 LVS課程概述第2章 網絡基礎重點講解網絡核心基礎知識,包括OSI七層

spring security oauth2 授權伺服器負載均衡解決方案

1.引言 本文所講的內容是以spring security oauth2 與 spring cloud 為基礎的,在微服務的構建中,將授權伺服器註冊在eureka上面。當客戶端訪問資源伺服器的時候必須攜帶token進行認證和授權。如果我們在資源伺服器上直接硬編碼授權伺服器地

阿里雲的網站負載均衡解決方案

2015年5月,國務院印發了《關於進一步做好新形勢下就業創業工作的意見》,全國範圍內颳起了“大眾創業,萬眾創新”的高潮。於是中關村電子市場悄然改成了創業大街,美食街變成了創業公社,就連公司的地下室也一夜之間成了創業車庫,My God·! 需求描述 我們老闆卓有遠見,抓住時機

Amazon ELB 負載均衡_負載均衡解決方案

Elastic Load Balancing 可以在多個目標(如 Amazon EC2 例項、容器和 IP 地址)之間自動分配傳入的應用程式流量。它可以在單個可用區內處理不斷變化的應用程式流量負載,也可以跨多個可用區處理此類負載。Elastic Load Balancing 提供三種負載均

企業級負載均衡解決方案之二:美團點評四層負載均衡解決方案MGW

一、前言在網際網路廠商業務不斷擴充套件之後,多種服務的入口會導致接入流量的劇增,所以多數基於IPVS或者Nginx等初級負載均衡技術的早期方案都會面臨故障或者失效,所以就像google開發meglev一樣,許多網際網路服務提供商也都紛紛開發自己的分散式軟體負載均衡系統作為對外

基於netty框架Socket傳輸

報文 行業 initial factory 標準 進一步 壓測 hello bin 一、Netty框架介紹 什麽是netty?先看下百度百科的解釋: Netty是由JBOSS提供的一個java開源框架。Netty提供異步的、事件驅動的網絡應用程序框架和工具,

Android實現Socket連線 , OkSocket框架簡單使用

一個Android輕量級Socket通訊框架,既OkHttp後又一力作. 框架開源地址: https://github.com/xuuhaoo/OkSocket OkSocket簡介 Android OkSocket是一款基於阻塞式傳統Socket的一款Socket客戶端整體解決方案.您

實現基於lnmp電子商務網站的負載均衡

lvs一、LVS負載均衡NAT工作模式工作流程(a). 當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IP為CIP,目標IP為VIP(b). PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈(c). IPVS比

實驗:基於lvs-nat類型的負載均衡搭建WordPress

相關 inb 要求 net 修改 刪除 processes pin 文件 一、實驗環境:1.各軟件版本:系統版本:CentOS Linux release 7.4.1708 (Core)php版本:PHP 7.2nginx版本:nginx-1.12.2數據庫版本:Maria

基礎知識概念(1):Socket 連線和短連線的概念

1.短連線 連線->傳輸資料->關閉連線     HTTP是無狀態的,瀏覽器和伺服器每進行一次HTTP操作,就建立一次連線,但任務結束後就中斷連線。短連線是指SOCKET建立連線後 ,傳送後或接收完資料後,就馬上斷開連線。 2.長連線

基於滴滴雲DC2+Nginx搭建負載均衡方案

Nginx是一款輕量級、高效能的Web伺服器,專為高流量應用場景而設計。 本文主要介紹它的健康檢查和負載均衡機制。健康檢查和負載均衡是相輔相成,健康檢查能夠及時標記出服務異常的後端RS,使得資料面負載到可用的RS上,提高系統的可靠性和高可用。 Nginx支援豐富的第三方模組,這裡示例

Socket連線和短連線的區別

TCP/IP TCP/IP是個協議組,可分為三個層次:網路層、傳輸層和應用層。 在網路層有IP協議、ICMP協議、ARP協議、RARP協議和BOOTP協議。 在傳輸層中有TCP協議與UDP協議。 在應用層有:TCP包括FTP、HTTP、TELNET、SMTP等協議 UDP包括DNS

netty實現TCP連線

所用jar包 netty-all-4.1.30.Final.jar 密碼:rzwe NettyConfig.java,存放連線的客戶端 1 import io.netty.channel.group.ChannelGroup; 2 import io.netty.channel.gr

Socket連線,位元組傳送

LogKit.error("IP連線"); Socket socket = new Socket("192.168.1.172", 5001); OutputStream outputStream = socket.getOutputStream(

基於netty框架實現的TCP服務端程式

工程目錄結構 程式碼:NioServer main類 import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.Channel; import io.netty.channel.Channel

Java socket 連線與短連結

 長連線是一旦一個客戶端登陸上伺服器,其與伺服器之間的連線就不關閉,不管他們之間進行了多少次交易,直到客戶端退出登陸或網路出現故障。 這種技術在聯機交易系統實現有利於提高效率。     短連線是客

socket連線

1.服務端需要為每一個客戶端開啟一個執行緒 2.客戶端需要一直給服務端傳送心跳包,如果不發了,就說明連線被斷開了,客戶端也關閉連線,結束執行緒。3.當客戶端被動關閉連線(斷網,訊號不好等情況藉助第二種