自己設想的一個IM伺服器的架構(續一)
按照裡面評論者的意見,我做了一些修改,見圖.
做了幾處修改:
1) 暴露在外部與客戶端直接相連的伺服器有登入伺服器, 資料伺服器, 訊息伺服器, 線上狀態伺服器,增加了一個session伺服器, 不直接面向客戶端.客戶端在登入的時候,驗證密碼之類的合法性檢查通過之後, 登入伺服器將向session伺服器申請一個新的sessionid, 以後客戶端與這些伺服器進行通訊的時候協議包都需要帶上這個sessionid以驗證協議包是否合法.
在這裡, 登入伺服器做的事情簡化為驗證登入使用者合法性, 返回為登入使用者申請的sessionid, 以及登出使用者同時通知session伺服器登出該使用者的sessionid.
2)訊息伺服器與線上狀態伺服器保持連線,客戶端傳送訊息的時候, 首先訊息伺服器要去查詢使用者是否線上, 如果不線上就存入為離線訊息.
3)線上狀態伺服器與客戶端每隔一段時間都要傳送心跳包保持連線.注意這裡由客戶端主動傳送, 而不是伺服器傳送, 這樣某種程度上可以避免線上伺服器宕機帶來的影響.
4)這幾個暴露在外面的伺服器只是簡單的對外介面, 底下可能還有很多內部使用的伺服器, 請見第一篇架構的說明, 當用戶量上來時, 還需要考慮擴容的問題.
如果還有不妥的地方,請繼續討論,謝謝指教.
相關推薦
自己設想的一個IM伺服器的架構(續一)
第一個架構模型在這裡按照裡面評論者的意見,我做了一些修改,見圖.做了幾處修改:1) 暴露在外部與客戶端直接相連的伺服器有登入伺服器, 資料伺服器, 訊息伺服器, 線上狀態伺服器,增加了一個session伺服器, 不直接面向客戶端.客戶端在登入的時候,驗證密碼之類的合法性檢查通過之後, 登入伺服器將向s
自己設想的一個IM伺服器的架構
續一在這裡:http://www.cppblog.com/converse/archive/2009/01/14/71993.html可能不太成熟,歡迎討論.客戶端需要的功能: 登入, 獲取資訊(如自己的資料, 好友的線上狀態,好友資料如簽名, 圖片, 其它資料等), 客戶之間傳送訊息
如何快速讓自己成為一個優秀的架構師,而不是碼農
我所從事的工作 我目前從事分散式服務架構的設計與開發工作,在阿里的大資料平臺上進行應用程式開發。我們整個系統架構採用了“前後端分離”的思想,前端關注資料展現,後端關注資料生產,通過 REST服務將前後端整合起來,所有的應用都是無狀態的,可以做到水平擴充套件。我們將整個系統拆分成許多“
高效能伺服器架構思路(一)——緩衝策略
在伺服器端程式開發領域,效能問題一直是備受關注的重點。業界有大量的框架、元件、類庫都是以效能為賣點而廣為人知。然而,伺服器端程式在效能問題上應該有何種基本思路,這個卻很少被這些專案的文件提及。本文正式希望介紹伺服器端解決效能問題的基本策略和經典實踐,並分為幾個部分來說明:
分散式高併發IM伺服器從零架構思想 (一)
寫在前面:我寫本系列部落格的目的是自己打算研發一款基於JAVA的IM伺服器,文章用來記錄自己平時領悟到的一些設計思想,防止到開發的時候遺忘, 如對大家有幫助,同樣歡迎留言探討 (作者 孔令寬 2012年畢業於山科 從事Android原生/混合開發、前端VUE富客戶端開發、
【一步一個腳印】Tomcat+MySQL為自己的APP打造伺服器(1)伺服器環境搭建
做 Android 開發一年多了,雖然不敢說有多精通,但也相對熟悉。做久了就會發現 Android 在行外人眼中是多麼高深(包括 IOS 也一樣),但是我們自己知道其實 Android 和 Web 前
【一步一個腳印】Tomcat+MySQL為自己的APP打造伺服器(3-1)Android 和 Service 的互動之GET方式
好久沒更新了,罪過罪過。最對不起的人莫過於那些支援和等待在下拙文的諸位,在此道一聲抱歉。管窺之見,僥倖博得各位認同,給了我莫大的鼓勵。 話休絮煩,文接前章。 到【一步一個腳印】Tomcat+MySQL為自己的APP打造伺服器(2-3)Se
【一步一個腳印】Tomcat+MySQL為自己的APP打造伺服器(3-2)Android 和 Service 的互動之POST方式
今天是聖誕節,雖說我本人對這個西方節日沒什麼感覺,但畢竟還是有很多小年輕人(自認為已然脫離年輕人的航道)挺在意這個節日的,在這裡祝大家聖誕快樂吧(要是湊巧你也沒什麼感覺,那就預祝元旦快
【一步一個腳印】Tomcat+MySQL為自己的APP打造伺服器(4)完結篇
在這個系列的前幾篇文章中,從最初簡單的伺服器環境搭建、MySQL資料庫的安裝、Servlet 的原理及使用、資料庫的連線及CURD操作、Android和伺服器GET/POST資料互動,到最後JSon格式報文的使用,我們已經將這個過程完整的走完一遍,但是其中
一文讀懂tomcat元件--一個web伺服器的架構演化史
1. tomcat是誰? 2. tomcat可以做什麼? tomcat是一個web容器,可以將web應用部署到tomcat,由它提供web服務,一個web容器中可以部署多個web應用,這些web應用可以是同一個域名,也可以是多個域名的服
搭建一個自己的部落格網站——前端(一
前臺頁面搭建 前臺頁面 前臺頁面 前臺的頁面,主要使用bootstrap和jq。在靜態頁面開發中使用了gulp。gulp功能多多嘛,雖然我用的sublime,很多功能不用gulp也能做到,不過還是有很多東西用
java基礎學習總結(二十一):自己寫一個java.lang.reflect.Proxy代理的實現
動態代理裡面用到了一個類就是java.lang.reflect.Proxy,這個類是根據代理內容為傳入的介面生成代理用的。本文就自己寫一個Proxy類出來,功能和java.lang.reflect.Proxy一樣,傳入介面、代理內容,生成代理。  
寫一個屬於自己的PHP的MVC框架(一)
最近想做個PHP的個人部落格作為學習用,但是發現儘管把PHP函式用得很熟悉了,按照常規的辦法,寫一個頁面處理一個請求,僅僅一個部落格就可能有很多個頁面,而且php程式碼和html程式碼都結合的非常緊密,如果想要實現更換面板的功能,就顯得非常無力。在網上找了好多framework框架,但似乎又要開始學
一文詳解高效能伺服器架構設計
引言 本文從一個簡單的伺服器架構,通過討論出現的問題,進行一步一步優化,最後進化成高效能分散式伺服器架構。 初始情況:一個典型的伺服器結構 新增資料訪問層DAL,解決超出連線次數的問題 新增快取,減少與資料庫建立連線 即使添加了DAL,但是資料
如何自己實現一個scrapy框架——框架雛形(一)
#一、瞭解框架 ##1、首先明確一下,什麼是框架: 框架是為了為解決一類問題而開發的程式,框架兩個字可以分開理解,框:表示指定解決問題的邊界,明確要解決的問題;架:表達的是能夠提供一定的支撐性和可擴充套件性;從而實現解決這類問題達到快速開發的目的。 ##2、實現
爬取有驗證碼的網站,(爬之前最好看一下君子協定)robots.txt,以人人網為例,每爬100條資料需要驗證一次(需要自己購買一個驗證碼破解會員,不是很貴,我這裡選擇的是超級鷹),簡版
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/10/15 14:03 # @Author : zhangz # @File : day4_yanzhengma.py # @Software: Py
一個高可擴充套件的基於非阻塞IO的伺服器架構
目錄 執行緒體系結構 反應堆模式 元件架構 接收器 分配器 分配器級別事件處理器 應用程式級別事件處理器 總結 參考資料 如果你被要求去寫一個高可擴充套件性的基於JAVA的伺服器,你很快就會決定使用JAVA NIO包。為了讓伺服器跑起來,你可能會花很多時間閱讀部落格和教程來了解執行緒同
一個分散式伺服器叢集架構方案
0x01.大型網站演化 簡單說,分散式是以縮短單個任務的執行時間來提升效率的,而叢集則是通過提高單位時間內執行的任務數來提升效率。 叢集主要分為:高可用叢集(High Availability Cluster),負載均衡叢集(Load Balance Cluster,nginx即可實現),科學計算叢
自己開發簡單web伺服器一(C++開源庫websocketpp實現)
簡要 Web伺服器主要處理的是HTTP請求(這裡忽略HTTPS),HTTP協議建立在TCP上。如果自己實現,無非就是網路程式設計(socket接受、傳送),資料解析(HTTP欄位解析),返回HTTP協議字串給客戶端等。說起來簡單,要做到跨平臺和高效,不得不介紹幾個有名的開源
一種經典的網路遊戲伺服器架構
@飯中淹 多謝樓主解答,不過還是有一些疑問,我說一下自己對這個架構的理解。 從使用者登入開始,使用者登入連線閘道器,發資料到loginserver校驗賬戶密碼,如果areaDB中沒有賬戶資訊,向資料中心要賬戶密碼,插入areaDB,以後校驗賬戶就可以直接在區域DB中做了,如果賬戶密碼