1.3 網路編程模型與服務治理 服務治理和服務劃分密不可分。服務之間既然進行了劃分,那麼服務之間就要進行通信。當今服務整個鏈路中最耗時的不是鏈路節點本身,而是節點間的通信。理解網路編程模型可以更好的進行服務治理。 網路編程模型的選擇與服務治理關心的性能指標,各種參數的配置,維護的上下游之間是怎樣的關 ...
1.3 網路編程模型與服務治理
服務治理和服務劃分密不可分。服務之間既然進行了劃分,那麼服務之間就要進行通信。當今服務整個鏈路中最耗時的不是鏈路節點本身,而是節點間的通信。理解網路編程模型可以更好的進行服務治理。
網路編程模型的選擇與服務治理關心的性能指標,各種參數的配置,維護的上下游之間是怎樣的關係都密切相關。
1.3.1 網路模型的分類
偶爾自己燉個湯,一條活魚分成幾個部分,頭部用來燉湯。將雞切塊配上豆腐,冬瓜等時蔬入鍋蔥薑一起先炒後加水燉,只放水豆豉,不放其他調料。將魚頭放入笊籬中,入鍋一起燉,千滾豆腐萬滾魚,燉到魚頭爛入鍋中,將笊籬中剩下的魚骨拿出即可。
世界上最遙遠的距離是魚與飛鳥的距離,一個翱翔天際,一個卻深潛海底。我卻偏偏想讓它們在一起。
大家可能直覺的認為服務治理是一個更為巨集觀的概念,與網路模型的概念,和魚和飛鳥一樣風馬牛不相及。其實服務治理很大方面是要處理服務與服務的銜接和通信。瞭解網路編程模型對服務治理有重大意義。
在Java支持非同步I/O之前的很長一段時間里,高性能服務端開發領域一直被C++和C長期占據。
先來看看UNIX網路編程對I/O模型的分類,UNIX提供了5種I/O模型。
1. 阻塞I/O模型
最常用的I/O模型就是阻塞I/O模型,預設情形下,所有文件操作都是阻塞的。我們以套接字介面為例來講解此模型:在進程空間中調用recvfrom,其系統調用直到數據包到達且被覆制到應用進程的緩衝區中或者發生錯誤時才返回,在此期間一直會等待,進程在從調用recefrom開始到它返回的整段時間內都是被阻塞的,因此被稱為阻塞I/O模型。
2. 非阻塞I/O模型
recvfrom從應用層到內核時,如果該緩衝區沒有數據的話,就直接返回一個EWOULDBLOCK錯誤,一般都對非阻塞I/O模型進行輪詢檢查這個狀態,看內核是不是有數據到來。
3. I/O復用模型
Linux提供select/poll,進程通過將一個或多個fd傳遞給select或poll系統調用,阻塞在select操作上,這樣select/poll可以幫我們偵測多個fd是否處於就緒狀態。select/poll是順序掃描fd是否就緒,而且支持數量有限,因此它的使用受到了一些制約。Linux還提供了一個epoll系統調用,epoll使用基於事件驅動方式代替順序掃描,因此性能更高。當有fd就緒時,立即回調函數rollback。
4. 信號驅動I/O模型
首先開啟套介面信號驅動I/O功能,並通過系統調用sigaction執行一個信號處理函數(此系統調用立即返回,進程繼續工作,它是非阻塞的)。當數據準備就緒時,就為該進程生成一個SIGIO信號,通過信號回調通知應用程式調用recvfrom來讀取數據,並通知主迴圈函數處理數據。
5. 非同步I/O
告知內核啟動某個操作,並讓內核在整個操作完成後(包括將數據從內核覆制到用戶自己的緩衝區)通知我們。這種模型與信號驅動模型的主要區別是:信號驅動I/O由內核通知我們何時可以開始一個I/O操作;非同步I/O模型由內核通知我們I/O操作何時已經完成。
再來整理一下這五種網路編程模型。
根據不同的業務場景和技術發展水平,選擇合適的網路編程模型。模型的不同,會涉及性能不同的網路閃斷、客戶端重覆接入,客戶端安全認證,消息編解碼查看,半包讀寫等情況。生產環境中發生問題,往往會導致跨節點的服務調用中斷,嚴重的可能會導致整個集群環境都不可用,這些都是服務治理要考慮的問題。
靜兒心語:
水豆豉有些辣。書上說感受辣的和痛的是一組神經,我卻偏偏喜歡。大概我從未愛過你的人,只是愛上你給的痛。
思考時間:
最近在梳理近兩年的規劃。從硬實力到軟實力。要做的事情太多了。硬實力上:我需要學習spring boot相關的源碼,linux底層技術和C語言。越底層的東西才是經典的內功。
我技術是很差的。
我的簡歷投出去有兩種,一種是根本不會給我打電話約面試的:如我找的獵頭而不是內推,還有百度和亞馬遜。百度和亞馬遜是C語言為主。純JAVA的不需要牛人,名額也很有限。
其他公司基本上是看到我的簡歷就會很快給我打電話的。如阿裡和騰訊。騰訊名額很少,Java我實在話覺得面試官面不出來這個人的實力。阿裡是能面出來的,但是我基本上技術面試能過的也就是杭州的職位。不是說杭州不好哈,主要是杭州HC多,更缺人。北京相對會更嚴一些。我現在靠短期努力也就是將將能拿到offer這種的,根本沒有談薪資的資本。
說實在話,現在雖然在美團也挺好的。但是我根本就沒打算來美團,這是我最後沒辦法的最後的後備方案。我來這邊面試,是因為剛剛我在樂視做的工作被分到其他部門去了,雖然領導說我可以自己選自己可以乾什麼,做架構師也行,做項目也行。但是我還是覺得自己沒有實際的價值了,挺尷尬的。所以我只是聽說美團的搶人大戰挺有意思,不體驗一把可惜了(側面體現出我們求賢若渴,如果想來請聯繫我,要求:Java後臺開發,211以上本科,2年以上工作經驗)。我還專門挑完全沒有熟人的部門面的。不過還是被熟人發現了。主要也是自己說的,人家問我之前人人網領導是誰,我就說了。於是我的簡歷就到前領導那邊了。其實我是很想完全靠自己的,所以最後也不是和前領導一個組。
但是來美團只能說是卧薪嘗膽。我不是說美團不好。我覺得我之前的同事很多都來美團了,都乾管理很多年了,都很厲害。但是我是一個純搞技術的,做了十年的開發,都不打算以管理為主業的。我周圍的同事都沒有我這樣的,大多工作7,8年就開始做管理的。還有一些3,4年就開始做管理的。除了我家男神,一邊開發一邊管理,兩手抓兩手都硬。我這麼多年技術還是這樣,是挺尷尬的。特別是來到這個熟人特別多的地方,說話聲音都低了很多。其實哈,人追求不一樣,先天條件也不一樣,我也沒什麼羡慕別人的,只是對自己不滿意。
我去阿裡面試,JVM方面倒是難不住我的。但是其他方面我都不算深。再加上業務複雜度不高。實際面試的時候很不占優勢。阿裡基本上需要掌握兩門以上的語言。PHP是不算的,JS如果沒有到達react層面也是不算的。演算法和源碼是必須的。不過阿裡還算是容易過的。如果要去一些真正高薪的外企,面試要十幾面。面試結果不重要,但是其中得到的一些總結卻是收益終身的。
硬實力是不能放鬆的,除了純技術,還有業務,格局。軟實力也有很多要修煉的。
比如說我自己感覺特別明顯,我著急的時候說話會很快。我覺得這是不太禮貌的。與人溝通要讓別人覺得舒服。另外我對自己的職業規劃一直也不是很清晰。我總是一段時間做這個,一段時間做那個。沒有持續長遠的規劃。而且實在話,之前的危機感也不是很強烈,基本是為了好玩。給自己弄了一大攤子,想要把之前做的事情連接起來織成網,需要非常多的工作和努力。
跑題時間:
我家男神昨天終於看我博客了。要是我是我家男神,估計看到我的博客,要氣的夠嗆,說不定就不過了。但是我家男神還好。說了這麼一句,我們就聊別的了。並沒有特別生氣。只是,當我稍稍有些抱怨的時候,基本上都是我很累。
前幾天我跟我家男神說:“私活老找我有新需求,我推不掉。我很累,求抱抱。”我家男神說要量力而行。我說:“我推不掉,你去幫我推掉去。”他就生氣了。跟我說:“勸我好好休息已經夠體貼的了,別跟我嘰歪了。”哥哥,活兒是你接的,說的是一起做,結果讓我一個人做,你有本事接,沒本事推。覺得是我給你找麻煩了,你可有理了。而且幫我接活讓我做,已經不是想了一年兩年了。好多年前就開始跟我提。你自己不忙的時候你也沒給自己接過活兒啊,你覺得麻煩,做你媳婦就再苦再累都是應該的?我要是說給別人聽,別人還以為我嫁了個渣男呢好不好。
說了別人可能都不可思議。他做這些不是因為他自私或者怎樣,只是他真的不知道什麼是對的。我家男神不愛讀文學書,也很少看電視劇,要看也就是看點足球,娛樂節目。他缺少一些常識。形成他這一點的,除了家庭的教育以外。還有就是,他也就談過我一個女朋友。所以他遇到的矛盾很少,思考也很少。剛在一起的時候,我們有了矛盾,我從來也不跟他吵,只是安靜坐在一旁,背著那首“氓之嗤嗤,抱布貿絲”。他大概從來沒想過我在說的是一個痴情女子負心漢的故事。
像大多數最好的夫妻一樣:我真的想過要跟他離婚,覺得他底子太差了,太讓人寒心了。但是又不忍心,這麼多年,他都在有意識無意識的按照我理想的模樣在成長。他是為我量身打造的,我卻不要他了。
我家男神是特別天真的人,別人說什麼他都信。去年聖誕節,他去我公司找我吃飯,我們牽手走路的時候,他說:“你手怎麼這麼熱啊”。我說:“這是我對你的熱情點燃了我心中的火焰”。我家男神說:“拉倒吧,你說這個我都不信!”大家可以自行腦補我當時的表情。
但是只有一件事。我有一次很認真的跟他說:“我不愛你”。他說他不信。我當時覺得是我這麼多年教他信任我教的太好了,後來仔細想想,他是不願意相信。這麼多年支撐他一直努力的,是他對我的愛。他愛我勝過他自己,他把我的事業看的比他自己的更重要。沒有我的愛,我想他會迷失,不知道該怎麼生活。
這兩年,他進步很快。各方面的。和我也有關係,和小鮮肉慢慢長大,他有時間思考了也有關係。他現在公司里有好幾個清華的,平時耳聞目染,對他的熏陶也有關係。但是,關係最大的,是他從來沒有停止過想變成我理想的樣子。
兩個人在一起,有缺點不怕,有困難不怕。最讓人寒心的是一個人在努力,另一個卻不願前進了。平時兩個人彼此鼓勵。但是也不要把對對方的意見全都埋在心裡,不然對方怎麼知道該怎麼努力。我心裡是不藏事兒的,不能痛快當時說出來,怕對方不太容易接受,我寫還不行嘛。心裡沒有積怨,反而久處不累。
後來我發現覺得我家男神底子差是多麼錯誤的一件事情。一個人都會有些錯誤觀念,想糾正都很困難。但是至少我家男神是服我的。比明明自己是錯的,自己覺得自己太完美了,什麼都錯不了強多了。春節的時候,我們做1天1夜的火車去婆家。我問他:“你坐到什麼位置會不娶我”。他想了想說:“我是總裁肯定也娶你。是主席也會娶你。嗯,應該都會娶你。不對,如果我是古代的皇帝就不娶你了。不對,也可以納你為妾。”於是我們一路我都在描述我用各種手段怎麼弄死他所有的妃子。他表示再娶,又被我弄死。直到下火車,我想我家男神深刻理解了什麼叫“最毒婦人心”。
如果我說小鮮肉哪點像他,他就會特別不安。他會找各種理由,覺得和他不一樣。我要是說像我,他就像未來有了保障一樣特別踏實。
我從小生活條件就不錯,不愁吃穿,父母工作體面,受人尊敬。所以也很自我為中心。一般女孩子在結婚生子後會經歷一個從唯心主義到唯物主義的轉變。可是我到現在一直也還是愛做夢。這就說明我沒嫁錯人。
男神說他在考慮來望京工作,以後我就有專車接送上下班了。現在我家男神技術已經非常不錯,各方面都有長進。最重要的是:沒有停止過努力。人生最快樂的不是每天都過著最好的日子,因為習慣了也就那樣了。日子一天天變得更好,今天有快樂,明天有期盼。有你在,我不怕變老。