原创 go使用rocketmq

下載 go get -u -v github.com/apache/rocketmq-client-go/v2 初始化 type MqConf struct { NameServers []string `mapstructure:

原创 go定時任務crontab

下載 go get -u -v github.com/robfig/cron 說明 1.crontab命令見https://www.runoob.com/linux/linux-comm-crontab.html 2.一個比較好用的cro

原创 go如何進行指針運算

package main import ( "fmt" "unsafe" ) type S1 struct { A int32 B int64 } func main() { s := S1{} fmt.Println

原创 接入層的架構漸進歷程,反向代理層,DNS輪詢

反向代理層有什麼用?架構師實現時要注意什麼? 1.作爲服務端唯一入口,屏蔽後端web集羣細節,代表整個web集羣 2.保證web集羣的擴展性,nginx後端可隨時增加web實例 3.保證web集羣的高可用,任何一個web實例掛了,服務都不

原创 抓取微信小程序數據加密內容

 最近又收到個任務,要去抓取別人小程序的內容,通過fiddler抓包,請求和響應數據看的我是一臉懵逼,自己造數據是不可能的,小程序看不到js,根本猜不到怎麼解密和加密的。網上也有文章說小程序的源碼可以通過反編譯下載下來,我反正是沒成功。那

原创 關閉套接字close還是shutdown

close 這個函數會對套接字引用計數-1,一旦發現引用計數到0,就會對套接字進行徹底釋放,並且會關閉tcp兩個方向的數據流。 因爲套接字可以被多個進程共享,你可以理解爲我們給每個套接字都設置了一個積分,如果我們通過fork的方式創建了子

原创 二叉搜索樹,B樹,B+樹,索引

mongodb的默認存儲引擎WiredTiger使用了B樹索引 mysql的默認存儲引擎InnoDB索引使用了B+樹實現,那麼各自爲什麼這樣實現呢? 二叉搜索樹 如上圖是一個簡單的二叉搜索樹,是最爲大家熟知的一種數據結構,它爲什麼不適合

原创 TCP Keep-Alive

在tcp編程的過程中,我們發現在沒有數據讀寫的靜默的連接上,是沒有辦法發現tcp連接是有效的還是無效的。比如客戶端突然崩潰,服務端可能幾天都在維護一個無用的連接。 那麼有沒有辦法開啓類似的輪詢機制,讓tcp告訴我們,連接是不是還“活着”的

原创 linux調度

調度的基本數據結構 1.每個cpu都有自己的一個struct rq, 裏面有一個實時進程的struct rt_rq 和一個普通進程的struct cfs_rq。 在調度時,調度器首先會先去實時進程隊列找是否有實時進程需要運行,如果沒有才

原创 IM——分佈式一致性:讓你的消息支持多終端漫遊

多終端漫遊 是指用戶在任意一個設備登錄後,都能獲取到歷史的聊天記錄 如何實現? 需要兩個前置條件 1.通過設備維度的在線狀態來實現 ,可以讓IM服務端在收到消息後推送給接收方的多臺設備,也推給發送方的其它登錄設備。這樣的話,就要求能夠按照

原创 IM——直播互動場景

  上面的存在一個問題是,在普通的聊天場景中,爲了進行精準投遞避免資源浪費,一般會維護一箇中央的在線狀態,在邏輯層在確定好投遞的接收人後,通過這個在線狀態查詢對應接收人所在的網關機,然後只需要把消息投遞給這臺網關機就好了。 但是對於直播

原创 IM——基本系統架構

1.用戶角度的聊天系統 如果我們站在一個使用者的角度從直觀體驗上來看,一個簡單的聊天系統大概由以下元素組成:用戶賬戶,賬號關係,聯繫人列表,消息,聊天會話。 這個應該不難理解 1.聊天的參與需要用戶,所以需要有一個用戶賬號,用來給用戶提

原创 TIME_WAIT

TIME_WAIT的發生場景 先從一例線上故障說起。在一次升級線上應用服務之後,我們發現該服務的可用性變得時好時壞,一段時間可以對外提供服務,一段時間又不可以,大家都百思不得其解。運維同學登錄到機器上,使用netstat命令查看後才發現,

原创 IM——四個重要特性

實時性 實時性主要解決的問題是:當一條消息發出去後,我們的系統如何確保這條消息最快被接收人感知並獲取到,並且儘量讓耗費的資源較少。這裏關鍵的幾個點是:最快觸達,且耗費資源少。 下面我們來看一看,IM在追求 消息實時性的架構上,所經歷過的幾

原创 IM——爲你的App,加上實時通信功能

如果爲原有的業務系統增加實時消息模塊,在不需要重建賬號體系的前提下,整體上大概包括幾塊內容: 消息存儲 一般來說,大部分即時消息系統爲了便於查看歷史消息或者用於暫存離線消息,都需要對消息進行服務端存儲,因此,我們先來看一下,這些互動過程