Jack Jiang

          我的最新工程MobileIMSDK:http://git.oschina.net/jackjiang/MobileIMSDK
          posts - 499, comments - 13, trackbacks - 0, articles - 1

               摘要: 本文原題“阿里數(shù)據(jù)庫(kù)十年變遷,那些你不知道的二三事”,來(lái)自阿里巴巴官方技術(shù)公號(hào)的分享。1、引言第十個(gè)雙11即將來(lái)臨之際,阿里技術(shù)推出《十年牧碼記》系列,邀請(qǐng)參與歷年雙11備戰(zhàn)的核心技術(shù)大牛,一起回顧阿里技術(shù)的變遷。今天,阿里數(shù)據(jù)庫(kù)事業(yè)部研究員張瑞,將為你講述雙11數(shù)據(jù)庫(kù)技術(shù)不為人知的故事。在零點(diǎn)交易數(shù)字一次次提升的背后,既是數(shù)據(jù)庫(kù)技術(shù)的一次次突破,也見(jiàn)證了阿里技術(shù)人永不言敗...  閱讀全文

          posted @ 2018-11-06 11:03 Jack Jiang 閱讀(164) | 評(píng)論 (0)編輯 收藏

               摘要: 1、引言Netty 是一個(gè)廣受歡迎的異步事件驅(qū)動(dòng)的Java開(kāi)源網(wǎng)絡(luò)應(yīng)用程序框架,用于快速開(kāi)發(fā)可維護(hù)的高性能協(xié)議服務(wù)器和客戶端。本文基于 Netty 4.1 展開(kāi)介紹相關(guān)理論模型,使用場(chǎng)景,基本組件、整體架構(gòu),知其然且知其所以然,希望給大家在實(shí)際開(kāi)發(fā)實(shí)踐、學(xué)習(xí)開(kāi)源項(xiàng)目方面提供參考。本文作者的另兩篇《高性能網(wǎng)絡(luò)編程(五):一文讀懂高性能網(wǎng)絡(luò)編程中的I/O模型》、《高性能網(wǎng)...  閱讀全文

          posted @ 2018-11-05 13:57 Jack Jiang 閱讀(1288) | 評(píng)論 (0)編輯 收藏

               摘要: 本文來(lái)自騰訊前端開(kāi)發(fā)工程師“ wendygogogo”的技術(shù)分享,作者自評(píng):“在Web前端摸爬滾打的碼農(nóng)一枚,對(duì)技術(shù)充滿熱情的菜鳥(niǎo),致力為手Q的建設(shè)添磚加瓦。”1、GIF格式的歷史GIF ( Graphics Interchange Format )原義是“圖像互換格式”,是 CompuServe 公司在1987年開(kāi)發(fā)出的圖像...  閱讀全文

          posted @ 2018-10-29 12:34 Jack Jiang 閱讀(175) | 評(píng)論 (0)編輯 收藏

               摘要: 本文由作者“假不理”發(fā)表于“編程無(wú)界”公眾號(hào),現(xiàn)重新整理發(fā)布,感謝作者的精彩分享。1、引言十月,金秋季節(jié),本是豐收之時(shí),卻因?yàn)殛懤m(xù)有同事離職,心中多少有些悲涼之意,頓然想起從參加工作到現(xiàn)在。至今五年已過(guò),當(dāng)年青澀懵懂的小年輕,如今出街招搖過(guò)市時(shí),被小孩子看到都會(huì)喊聲大叔。回想這五年,有心酸和無(wú)奈、有快樂(lè)和期待、也有不斷的蛻變和成長(zhǎng)。趁著國(guó)慶長(zhǎng)假,寫(xiě)下...  閱讀全文

          posted @ 2018-10-26 10:42 Jack Jiang 閱讀(452) | 評(píng)論 (0)編輯 收藏

          本文原作者“虞大膽的嘰嘰喳喳”,原文鏈接:jianshu.com/p/8861da5734ba,感謝原作者。

          1、引言

          很多人一提到 HTTPS,第一反應(yīng)就是安全,對(duì)于普通用戶來(lái)說(shuō)這就足夠了;

          但對(duì)于程序員,很有必要了解下 HTTP 到底有什么問(wèn)題?以及HTTPS 是如何解決這些問(wèn)題的?其背后的解決思路和方法是什么?

          本文只做簡(jiǎn)單的描述,力求簡(jiǎn)單明了的闡明主要內(nèi)容,因?yàn)镠TTPS 體系非常復(fù)雜,這么短的文字是無(wú)法做到很詳細(xì)和精準(zhǔn)的分析。想要詳細(xì)了解HTTPS的方方面面,可以閱讀此前即時(shí)通訊網(wǎng)整理的《即時(shí)通訊安全篇(七):如果這樣來(lái)理解HTTPS,一篇就夠了》一文。

          (本文同步發(fā)布于:http://www.52im.net/thread-2027-1-1.html

          2、HTTPS相關(guān)文章

          即時(shí)通訊安全篇(七):如果這樣來(lái)理解HTTPS,一篇就夠了

          一文讀懂Https的安全性原理、數(shù)字證書(shū)、單項(xiàng)認(rèn)證、雙項(xiàng)認(rèn)證等

          HTTPS時(shí)代已來(lái),打算更新你的HTTP服務(wù)了嗎?

          蘋(píng)果即將強(qiáng)制實(shí)施 ATS,你的APP準(zhǔn)備好切換到HTTPS了嗎?

          3、對(duì)HTTPS性能的理解

          HTTP 有典型的幾個(gè)問(wèn)題,第一就是性能,HTTP 是基于 TCP 的,所以網(wǎng)絡(luò)層就不說(shuō)了(快慢不是 HTTP 的問(wèn)題)。

          比較嚴(yán)重的問(wèn)題在于 HTTP 頭是不能壓縮的,每次要傳遞很大的數(shù)據(jù)包。另外 HTTP 的請(qǐng)求模型是每個(gè)連接只能支持一個(gè)請(qǐng)求,所以會(huì)顯得很慢。

          那么 HTTPS 是解決這些問(wèn)題的嗎?

          不是,實(shí)際上 HTTPS 是在 HTTP 協(xié)議上又加了一層,會(huì)更慢,相信未來(lái)會(huì)逐步解決的。同時(shí) HTTPS 用到了很多加密算法,這些算法的執(zhí)行也是會(huì)影響速度的。

          為什么說(shuō) HTTPS 提升了性能呢?因?yàn)橹挥兄С至?HTTPS,才能部署 HTTP/2,而 HTTP/2 協(xié)議會(huì)提升速度,能夠有效減輕客戶端和服務(wù)器端的壓力,讓響應(yīng)更快速。有關(guān)HTTP/2詳細(xì)文章可以看看《從HTTP/0.9到HTTP/2:一文讀懂HTTP協(xié)議的歷史演變和設(shè)計(jì)思路》、《腦殘式網(wǎng)絡(luò)編程入門(mén)(四):快速理解HTTP/2的服務(wù)器推送(Server Push)》,這里只要知道一點(diǎn):HTTP/2 能夠加快速度的主要原因在于多路復(fù)用,同一個(gè)連接能夠并行發(fā)送和接收多個(gè)請(qǐng)求。

          4、傳統(tǒng)HTTP的安全性問(wèn)題

          當(dāng)用戶在瀏覽器輸入一個(gè)網(wǎng)址的時(shí)候,在地址欄上看到小鎖圖標(biāo),就會(huì)安心,潛意識(shí)的認(rèn)為自己的上網(wǎng)行為是安全的,當(dāng)然對(duì)于小白用戶來(lái)說(shuō)可能還不明白,但是未來(lái)會(huì)慢慢改善的(萬(wàn)事開(kāi)頭難嘛)。

          那么 HTTP 到底有什么安全問(wèn)題呢,看幾個(gè)例子:

          1)由于互聯(lián)網(wǎng)傳輸是能夠被攔截的,所以假如你的上網(wǎng)方式被別人控制了(沒(méi)有絕對(duì)的安全),那么你的任何行為和信息攻擊者都會(huì)知道,比如我們連上一個(gè)匿名的 WIFI,當(dāng)你上網(wǎng)的時(shí)候,輸入的網(wǎng)站密碼可能就已經(jīng)泄漏了;

          2)當(dāng)我們?cè)谏弦粋€(gè)網(wǎng)站的時(shí)候,莫名其妙跳出一個(gè)廣告(這個(gè)廣告并不是這個(gè)網(wǎng)站的),那是因?yàn)樵L問(wèn)的頁(yè)面可能被運(yùn)營(yíng)商強(qiáng)制修改了(加入了他自己的內(nèi)容,比如廣告)。

          HTTP 最大的問(wèn)題就在于數(shù)據(jù)沒(méi)有加密,以及通信雙方?jīng)]有辦法進(jìn)行身份驗(yàn)證( confidentiality and authentication),由于數(shù)據(jù)沒(méi)有加密,那么只要數(shù)據(jù)包被攻擊者劫持,信息就泄漏了。

          身份驗(yàn)證的意思就是服務(wù)器并不知道連接它的客戶端到底是誰(shuí),而客戶端也不確定他連接的服務(wù)器就是他想連接的服務(wù)器,雙方之間沒(méi)有辦法進(jìn)行身份確認(rèn)。

          有關(guān)HTTP比較好的文章,可以看看:

          網(wǎng)絡(luò)編程懶人入門(mén)(七):深入淺出,全面理解HTTP協(xié)議

          從HTTP/0.9到HTTP/2:一文讀懂HTTP協(xié)議的歷史演變和設(shè)計(jì)思路

          腦殘式網(wǎng)絡(luò)編程入門(mén)(三):HTTP協(xié)議必知必會(huì)的一些知識(shí)

          5、HTTPS 背后的密碼學(xué)

          為了解決 HTTP 的兩個(gè)核心問(wèn)題,HTTPS 出現(xiàn)了,HTTPS 包含了核心的幾個(gè)部分:TLS 協(xié)議、OpenSSL,證書(shū)。

          什么是 OpenSSL 呢,它實(shí)現(xiàn)了世界上非常重要和多的密碼算法,而密碼學(xué)是解決問(wèn)題最重要的一個(gè)環(huán)節(jié)。

          TLS 最重要的是握手的處理方式。證書(shū)的體系也很大,但是他們背后都是基于同樣的密碼學(xué)。

          1)既然 HTTP 沒(méi)有數(shù)據(jù)加密,那么我們就加密下,對(duì)稱(chēng)加密算法上場(chǎng)了,這種算法加密和解密要使用同一個(gè)密鑰,通信雙方需要知道這個(gè)密鑰(或者每次協(xié)商一個(gè)),實(shí)際上這種方法不太可能,這涉及到密鑰保密和配送的問(wèn)題,一旦被攻擊者知道了密鑰,那么傳輸?shù)臄?shù)據(jù)等同沒(méi)有加密。

          2)這個(gè)時(shí)候非對(duì)稱(chēng)加密算法上場(chǎng)了,公鑰和私鑰是分開(kāi)的,客戶端保存公鑰,服務(wù)器保存私鑰(不會(huì)公開(kāi)),這時(shí)候好像能夠完美解決問(wèn)題了。

          但實(shí)際上會(huì)存在兩個(gè)問(wèn)題,第一就是非對(duì)稱(chēng)加密算法運(yùn)算很慢,第二就是會(huì)遇到中間人攻擊問(wèn)題。

          先說(shuō)說(shuō)中間人攻擊的問(wèn)題,假如使用非對(duì)稱(chēng)加密算法,對(duì)于客戶端來(lái)說(shuō)它拿到的公鑰可能并不是真正服務(wù)器的公鑰,因?yàn)榭蛻舳松暇W(wǎng)的時(shí)候可能不會(huì)仔細(xì)分辨某個(gè)公鑰是和某個(gè)公司綁定的,假如錯(cuò)誤的拿到攻擊者的公鑰,那么他發(fā)送出去的數(shù)據(jù)包被劫持后,攻擊者用自己的私鑰就能反解了。

          3)接下來(lái)如何解決公鑰認(rèn)證的問(wèn)題呢?證書(shū)出現(xiàn)了,證書(shū)是由 CA 機(jī)構(gòu)認(rèn)證的,客戶端都充分信任它,它能夠證明你拿到的公鑰是特定機(jī)構(gòu)的,然后就能使用非對(duì)稱(chēng)加密算法加密了。

          證書(shū)是怎么加密的呢?實(shí)際上也是通過(guò)非對(duì)稱(chēng)加密算法,但是區(qū)別在于證書(shū)是用私鑰加密,公鑰解密。

          CA 機(jī)構(gòu)會(huì)用自己的私鑰加密服務(wù)器用戶的公鑰,而客戶端則用 CA 機(jī)構(gòu)的公鑰解出服務(wù)器的公鑰。聽(tīng)上去有點(diǎn)暈,仔細(xì)體會(huì)下。這方面的知識(shí),可以詳細(xì)閱讀:《即時(shí)通訊安全篇(七):如果這樣來(lái)理解HTTPS,一篇就夠了》。

          4)上面說(shuō)了非對(duì)稱(chēng)加密算法加密解密非常耗時(shí),對(duì)于 HTTP 這樣的大數(shù)據(jù)包,速度就更慢了,這時(shí)候可以使用對(duì)稱(chēng)加密算法,這個(gè)密鑰是由客戶端和服務(wù)器端協(xié)商出來(lái),并由服務(wù)器的公鑰進(jìn)行加密傳遞,所以不存在安全問(wèn)題。

          5)另外客戶端拿到證書(shū)后會(huì)驗(yàn)證證書(shū)是否正確,它驗(yàn)證的手段就是通過(guò) Hash 摘要算法,CA 機(jī)構(gòu)會(huì)將證書(shū)信息通過(guò) Hash 算法運(yùn)算后再用私鑰加密,客戶端用 CA 的公鑰解出后,再計(jì)算證書(shū)的 Hash 摘要值,兩者一致就說(shuō)明驗(yàn)證身份通過(guò)。

          6)HTTPS 解決的第三個(gè)問(wèn)題是完整性問(wèn)題,就是信息有沒(méi)有被篡改(信息能夠被反解),用的是 HMAC 算法,這個(gè)算法和 Hash 方法差不多,但是需要傳遞一個(gè)密鑰,這個(gè)密鑰就是客戶端和服務(wù)器端上面協(xié)商出來(lái)的。

          附錄:更多安全方面的文章

          即時(shí)通訊安全篇(一):正確地理解和使用Android端加密算法

          即時(shí)通訊安全篇(二):探討組合加密算法在IM中的應(yīng)用

          即時(shí)通訊安全篇(三):常用加解密算法與通訊安全講解

          即時(shí)通訊安全篇(四):實(shí)例分析Android中密鑰硬編碼的風(fēng)險(xiǎn)

          即時(shí)通訊安全篇(五):對(duì)稱(chēng)加密技術(shù)在Android平臺(tái)上的應(yīng)用實(shí)踐

          即時(shí)通訊安全篇(六):非對(duì)稱(chēng)加密技術(shù)的原理與應(yīng)用實(shí)踐

          傳輸層安全協(xié)議SSL/TLS的Java平臺(tái)實(shí)現(xiàn)簡(jiǎn)介和Demo演示

          理論聯(lián)系實(shí)際:一套典型的IM通信協(xié)議設(shè)計(jì)詳解(含安全層設(shè)計(jì))

          微信新一代通信安全解決方案:基于TLS1.3的MMTLS詳解

          來(lái)自阿里OpenIM:打造安全可靠即時(shí)通訊服務(wù)的技術(shù)實(shí)踐分享

          簡(jiǎn)述實(shí)時(shí)音視頻聊天中端到端加密(E2EE)的工作原理

          移動(dòng)端安全通信的利器——端到端加密(E2EE)技術(shù)詳解

          Web端即時(shí)通訊安全:跨站點(diǎn)WebSocket劫持漏洞詳解(含示例代碼)

          通俗易懂:一篇掌握即時(shí)通訊的消息傳輸安全原理

          IM開(kāi)發(fā)基礎(chǔ)知識(shí)補(bǔ)課(四):正確理解HTTP短連接中的Cookie、Session和Token

          快速讀懂量子通信、量子加密技術(shù)

          即時(shí)通訊安全篇(七):如果這樣來(lái)理解HTTPS原理,一篇就夠了

          一分鐘理解 HTTPS 到底解決了什么問(wèn)題

          >> 更多同類(lèi)文章 ……

          (本文同步發(fā)布于:http://www.52im.net/thread-2027-1-1.html

          posted @ 2018-10-24 14:05 Jack Jiang 閱讀(232) | 評(píng)論 (0)編輯 收藏

               摘要: 本文由“聲網(wǎng)Agora”的RTC開(kāi)發(fā)者社區(qū)整理。1、概述本文將分享新浪微博系統(tǒng)開(kāi)發(fā)工程師陳浩在 RTC 2018 實(shí)時(shí)互聯(lián)網(wǎng)大會(huì)上的演講。他分享了新浪微博直播互動(dòng)答題架構(gòu)設(shè)計(jì)的實(shí)戰(zhàn)經(jīng)驗(yàn)。其背后的百萬(wàn)高并發(fā)實(shí)時(shí)架構(gòu),值得借鑒并用于未來(lái)更多場(chǎng)景中。本文正文是對(duì)演講內(nèi)容的整理,請(qǐng)繼續(xù)往下閱讀。另外,即時(shí)通訊網(wǎng)整理的直播答題相關(guān)文章有:《近期大熱的實(shí)時(shí)直播答題系統(tǒng)的實(shí)現(xiàn)思...  閱讀全文

          posted @ 2018-10-22 12:43 Jack Jiang 閱讀(213) | 評(píng)論 (0)編輯 收藏

               摘要: 一、引言要實(shí)現(xiàn)一整套能用于大用戶量、高并發(fā)場(chǎng)景下的IM群聊,技術(shù)難度遠(yuǎn)超IM系統(tǒng)中的其它功能,原因在于:IM群聊消息的實(shí)時(shí)寫(xiě)擴(kuò)散特性帶來(lái)了一系列技術(shù)難題。舉個(gè)例子:如一個(gè)2000人群里,一條普通消息的發(fā)出問(wèn)題,將瞬間寫(xiě)擴(kuò)散為2000條消息的接收問(wèn)題,如何保證這些消息的及時(shí)、有序、高效地送達(dá),涉及到的技術(shù)問(wèn)題點(diǎn)實(shí)在太多,更別說(shuō)個(gè)別場(chǎng)景下萬(wàn)人大群里的炸群消息難題了更別說(shuō)個(gè)別場(chǎng)景下萬(wàn)人大群里的炸群消息難...  閱讀全文

          posted @ 2018-10-17 14:31 Jack Jiang 閱讀(527) | 評(píng)論 (0)編輯 收藏

          本文引用了阿豪的微信公眾號(hào)文章分享,感謝原作者的分享。

          1、前言

          隨著社會(huì)的發(fā)展、互聯(lián)網(wǎng)技術(shù)的進(jìn)步,以前的大型機(jī)服務(wù)端架構(gòu)很顯然由于高成本、難維護(hù)等原因漸漸地變得不再那么主流了,替代它的就是當(dāng)下最火的互聯(lián)網(wǎng)分布式架構(gòu)。

          從若干年前大行其道的傳統(tǒng)大型機(jī)到如今的分布式架構(gòu),技術(shù)發(fā)展已經(jīng)經(jīng)歷了好幾個(gè)階段,我們只有弄明白典型互聯(lián)網(wǎng)架構(gòu)在各個(gè)階段的演進(jìn),才能更好地理解和體會(huì)分布式架構(gòu)的好處,從而有助于我們序設(shè)計(jì)適合于自已公司、產(chǎn)品或項(xiàng)目的架構(gòu)(也包括設(shè)計(jì)即時(shí)通訊網(wǎng)專(zhuān)注的IM和消息推送這類(lèi)系統(tǒng),因?yàn)榧夹g(shù)思路的原理都是一脈相承的)。那么本文我們就來(lái)聊聊分布式架構(gòu)的演進(jìn)過(guò)程,希望能給大家?guī)?lái)眼前一亮的感覺(jué)。

          點(diǎn)評(píng):即時(shí)通訊網(wǎng)作為IM和推送技術(shù)研究、學(xué)習(xí)和分享的社區(qū),整理了大量的跟IM和推廣技術(shù)有關(guān)的基礎(chǔ)技術(shù)資料(比如網(wǎng)絡(luò)基礎(chǔ)、通信理論、架構(gòu)基礎(chǔ)等),本文內(nèi)容雖然看起來(lái)跟IM和推送技術(shù)沒(méi)有直接的關(guān)聯(lián)性,但因?yàn)樵O(shè)計(jì)IM和推送系統(tǒng)的技術(shù)思路和原理跟典型大型互聯(lián)網(wǎng)分布式架構(gòu)都是一脈相承的,因而讀懂本文內(nèi)容對(duì)于IM和推送系統(tǒng)的架構(gòu)設(shè)計(jì)同樣大有裨益。

          學(xué)習(xí)交流:

          - 即時(shí)通訊開(kāi)發(fā)交流3群:185926912[推薦]

          - 移動(dòng)端IM開(kāi)發(fā)入門(mén)文章:《新手入門(mén)一篇就夠:從零開(kāi)發(fā)移動(dòng)端IM

          (本文同步發(fā)布于:http://www.52im.net/thread-2007-1-1.html

          2、相關(guān)文章

          如果你已完全掌握本文的相關(guān)知識(shí),請(qǐng)移步繼續(xù)閱讀即時(shí)通訊網(wǎng)整理的另一篇:《騰訊資深架構(gòu)師干貨總結(jié):一文讀懂大型分布式系統(tǒng)設(shè)計(jì)的方方面面》,該文適合對(duì)互聯(lián)網(wǎng)架構(gòu)知識(shí)有一定了解的程序員閱讀和學(xué)習(xí),都是不可能多得的技術(shù)干貨。

          3、技術(shù)背景說(shuō)明

          我們都知道一個(gè)成熟的大型網(wǎng)站的系統(tǒng)架構(gòu)并非一開(kāi)始就設(shè)計(jì)的非常完美,也沒(méi)有一開(kāi)始就具備高性能、高并發(fā)、高可用、安全性等特性,而是隨著用戶量的增加、業(yè)務(wù)功能的擴(kuò)展逐步演變過(guò)來(lái)的,慢慢的完善的。 在這個(gè)過(guò)程中,開(kāi)發(fā)模式、技術(shù)架構(gòu)等都會(huì)隨著迭代發(fā)生非常大的變化。 而針對(duì)不同業(yè)務(wù)特征的系統(tǒng),各自都會(huì)有自己的側(cè)重點(diǎn),例如像淘寶這類(lèi)的網(wǎng)站,要解決的重點(diǎn)問(wèn)題就是海量商品搜索、下單、支付等問(wèn)題; 像騰訊這類(lèi)的網(wǎng)站,要解決的是數(shù)億級(jí)別用戶的實(shí)時(shí)消息傳輸;而像百度這類(lèi)的公司所要解決的又是海量數(shù)據(jù)的搜索。每一個(gè)種類(lèi)的業(yè)務(wù)都有自己不同的系統(tǒng)架構(gòu)。

          為了方便展開(kāi)本文要講解的內(nèi)容,我們來(lái)簡(jiǎn)單模擬一個(gè)架構(gòu)演變過(guò)程: 我們以 javaweb 為例,來(lái)搭建一個(gè)簡(jiǎn)單的電商系統(tǒng),從這個(gè)系統(tǒng)中來(lái)看系統(tǒng)的演變過(guò)程。要注意的是接下來(lái)的演示模型, 關(guān)注的是數(shù)據(jù)量、訪問(wèn)量提升,網(wǎng)站結(jié)構(gòu)的變化, 而不關(guān)注具體業(yè)務(wù)的功能點(diǎn)。其次,這個(gè)過(guò)程是為了讓大家能更好的了解網(wǎng)站演進(jìn)過(guò)程中的一些問(wèn)題和應(yīng)對(duì)策略。

          假如我們要設(shè)計(jì)的互聯(lián)網(wǎng)系統(tǒng)需要具備以下功能:

          1)用戶模塊:用戶注冊(cè)和管理;

          2)商品模塊:商品展示和管理;

          3)交易模塊:創(chuàng)建交易及支付結(jié)算。

          請(qǐng)帶著上述3個(gè)技術(shù)點(diǎn),繼續(xù)深入閱讀本文的正文內(nèi)容。干貨馬上開(kāi)始了。。。

          4、架構(gòu)演進(jìn)階段一:?jiǎn)螒?yīng)用架構(gòu)

          如上圖所示,這個(gè)階段是網(wǎng)站的初期,也可以認(rèn)為是互聯(lián)網(wǎng)發(fā)展的早期,系統(tǒng)架構(gòu)如上圖所示。我們經(jīng)常會(huì)在單臺(tái)服務(wù)器上運(yùn)行我們所有的程序和軟件。 把所有軟件和應(yīng)用都部署在一臺(tái)機(jī)器上,這樣就完成一個(gè)簡(jiǎn)單系統(tǒng)的搭建,這個(gè)階段的講究的是效率。效率決定生死。

          5、架構(gòu)演進(jìn)階段二:應(yīng)用服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器分離

          隨著網(wǎng)站的上線,訪問(wèn)量逐步上升,服務(wù)器的負(fù)載慢慢提高,我們應(yīng)該在服務(wù)器還沒(méi)有超載的時(shí)候就做好規(guī)劃、提升網(wǎng)站的負(fù)載能力。假若此時(shí)已經(jīng)沒(méi)辦法在代碼層面繼續(xù)優(yōu)化提高,那么在單臺(tái)機(jī)器的性能遇到瓶頸的時(shí)候,增加機(jī)器是一個(gè)比較簡(jiǎn)單好用的方式,投入產(chǎn)出比相當(dāng)高。這個(gè)階段增加機(jī)器的主要目的是將 web 服務(wù)器和 數(shù)據(jù)庫(kù)服務(wù)器拆分開(kāi)來(lái),這樣做的話不僅提高了單機(jī)的負(fù)載能力,也提高了整個(gè)系統(tǒng)的容災(zāi)能力。

          這個(gè)階段的系統(tǒng)架構(gòu)如上圖所示,應(yīng)用服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器完全隔離開(kāi)來(lái),相互互不影響,大大減少了網(wǎng)站宕機(jī)的風(fēng)險(xiǎn),此階段我們已經(jīng)開(kāi)始關(guān)注到應(yīng)用服務(wù)器的管理了。 

          6、架構(gòu)演進(jìn)階段三:應(yīng)用服務(wù)器集群

          這個(gè)階段,隨著訪問(wèn)量的繼續(xù)不斷增加,單臺(tái)應(yīng)用服務(wù)器已經(jīng)無(wú)法滿足我們的需求。 假設(shè)我的數(shù)據(jù)庫(kù)服務(wù)器還沒(méi)有遇到性能問(wèn)題,那我們可以通過(guò)增加應(yīng)用服務(wù)器的方式來(lái)將應(yīng)用服務(wù)器集群化,這樣就可以將用戶請(qǐng)求分流到各個(gè)服務(wù)器中,從而達(dá)到繼續(xù)提升系統(tǒng)負(fù)載能力的目的。此時(shí)各個(gè)應(yīng)用服務(wù)器之間沒(méi)有直接的交互,他們都是依賴(lài)數(shù)據(jù)庫(kù)各自對(duì)外提供服務(wù)。

          系統(tǒng)架構(gòu)發(fā)展到這個(gè)階段,各種問(wèn)題也會(huì)接踵而至:

          1)用戶請(qǐng)求交由誰(shuí)來(lái)轉(zhuǎn)發(fā)到具體的應(yīng)用服務(wù)器上(誰(shuí)來(lái)負(fù)責(zé)負(fù)載均衡);

          2)用戶如果每次訪問(wèn)到的服務(wù)器不一樣,那么如何維護(hù)session,達(dá)到session共享的目的。

          那么此時(shí),系統(tǒng)架構(gòu)又會(huì)變成如下方式:

          負(fù)載均衡又可以分為軟負(fù)載和硬負(fù)載。軟負(fù)載我們可以選擇Nginx、Apache等,硬負(fù)載我們可以選擇F5等。而session共享問(wèn)題我們可以通過(guò)配置tomcat的session共享解決。

          7、架構(gòu)演進(jìn)階段四:數(shù)據(jù)庫(kù)壓力變大,數(shù)據(jù)庫(kù)讀寫(xiě)分離

          架構(gòu)演變到上面的階段,并不是終點(diǎn)。通過(guò)上面的設(shè)計(jì),應(yīng)用層的性能被我們拉上來(lái)了, 但數(shù)據(jù)庫(kù)的負(fù)載也在逐漸增大,那如何去提高數(shù)據(jù)庫(kù)層面的性能呢?有了前面的設(shè)計(jì)思路以后,我們自然也會(huì)想到通過(guò)增加服務(wù)器來(lái)提高性能。但假如我們單純的把數(shù)據(jù)庫(kù)一分為二,然后對(duì)于數(shù)據(jù)庫(kù)的請(qǐng)求,分別負(fù)載到兩臺(tái)數(shù)據(jù)庫(kù)服務(wù)器上,那必定會(huì)造成數(shù)據(jù)庫(kù)數(shù)據(jù)不統(tǒng)一的問(wèn)題。 

          所以我們一般先考慮將數(shù)據(jù)庫(kù)讀寫(xiě)分離,如下圖所示。

          這個(gè)架構(gòu)設(shè)計(jì)的變化會(huì)帶來(lái)如下幾個(gè)問(wèn)題:

          1)主從數(shù)據(jù)庫(kù)之間的數(shù)據(jù)需要同步(可以使用 mysql 自帶的 master-slave 方式實(shí)現(xiàn)主從復(fù)制 );

          2)應(yīng)用中需要根據(jù)業(yè)務(wù)進(jìn)行對(duì)應(yīng)數(shù)據(jù)源的選擇( 采用第三方數(shù)據(jù)庫(kù)中間件,例如 mycat )。

          8、架構(gòu)演進(jìn)階段五:使用搜索引擎緩解讀庫(kù)的壓力

          我們都知道數(shù)據(jù)庫(kù)常常對(duì)模糊查找效率不是很高,像電商類(lèi)的網(wǎng)站,搜索是非常核心的功能,即使是做了讀寫(xiě)分離,這個(gè)問(wèn)題也不能得到有效解決。那么這個(gè)時(shí)候我們就需要引入搜索引擎了,使用搜索引擎能夠大大提升我們系統(tǒng)的查詢(xún)速度,但同時(shí)也會(huì)帶來(lái)一 些附加的問(wèn)題,比如維護(hù)索引的構(gòu)建、數(shù)據(jù)同步到搜索引擎等。

          9、架構(gòu)演進(jìn)階段六:引入緩存機(jī)制緩解數(shù)據(jù)庫(kù)的壓力

          然后,隨著訪問(wèn)量的持續(xù)不斷增加,逐漸會(huì)出現(xiàn)許多用戶訪問(wèn)同一內(nèi)容的情況,那么對(duì)于這些熱點(diǎn)數(shù)據(jù),沒(méi)必要每次都從數(shù)據(jù)庫(kù)重讀取,這時(shí)我們可以使用到緩存技術(shù),比如 redis、memcache 來(lái)作為我們應(yīng)用層的緩存。

          另外在某些場(chǎng)景下,如我們對(duì)用戶的某些 IP 的訪問(wèn)頻率做限制, 那這個(gè)放內(nèi)存中就又不合適,放數(shù)據(jù)庫(kù)又太麻煩了,那這個(gè)時(shí)候可以使用 Nosql 的方式比如 mongDB 來(lái)代替?zhèn)鹘y(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)。

          10、架構(gòu)演進(jìn)階段七:數(shù)據(jù)庫(kù)的水平/垂直拆分

          我們的網(wǎng)站演進(jìn)的變化過(guò)程,交易、商品、用戶的數(shù)據(jù)都還在同一 個(gè)數(shù)據(jù)庫(kù)中,盡管采取了增加緩存,讀寫(xiě)分離的方式,但是隨著數(shù) 據(jù)庫(kù)的壓力持續(xù)增加,數(shù)據(jù)庫(kù)的瓶頸仍然是個(gè)最大的問(wèn)題。因此我 們可以考慮對(duì)數(shù)據(jù)的垂直拆分和水平拆分。

          垂直拆分:把數(shù)據(jù)庫(kù)中不同業(yè)務(wù)數(shù)據(jù)拆分到不同的數(shù)據(jù)庫(kù);

          水平拆分:把同一個(gè)表中的數(shù)據(jù)拆分到兩個(gè)甚至更多的數(shù)據(jù)庫(kù)中,水平拆分的原因是某些業(yè)務(wù)數(shù)據(jù)量已經(jīng)達(dá)到了單個(gè)數(shù)據(jù)庫(kù)的瓶頸,這時(shí)可以采取將表拆分到多個(gè)數(shù)據(jù)庫(kù)中。

          11、架構(gòu)演進(jìn)階段八:應(yīng)用的拆分

          隨著業(yè)務(wù)的發(fā)展,業(yè)務(wù)量越來(lái)越大,應(yīng)用的壓力越來(lái)越大。工程規(guī)模也越來(lái)越龐大。這個(gè)時(shí)候就可以考慮將應(yīng)用拆分,按照領(lǐng)域模型將我們的用戶、商品、交易拆分成多個(gè)子系統(tǒng)。

          這樣拆分以后,可能會(huì)有一些相同的代碼,比如用戶操作,在商品和交易都需要查詢(xún),所以會(huì)導(dǎo)致每個(gè)系統(tǒng)都會(huì)有用戶查詢(xún)?cè)L問(wèn)相關(guān)操作。這些相同的操作一定是要抽象出來(lái),否則就是一個(gè)坑。所以通過(guò)走服務(wù)化路線的方式來(lái)解決。

          那么服務(wù)拆分以后,各個(gè)服務(wù)之間如何進(jìn)行遠(yuǎn)程通信呢? 通過(guò) RPC 技術(shù),比較典型的有:dubbo、webservice、hessian、http、RMI 等等。前期通過(guò)這些技術(shù)能夠很好的解決各個(gè)服務(wù)之間通信問(wèn)題,但是, 互聯(lián)網(wǎng)的發(fā)展是持續(xù)的,所以架構(gòu)的演變和優(yōu)化也還在持續(xù)。

          12、本文小結(jié)

          通過(guò)本文,我們通過(guò)一個(gè)電商的案例,就了解到了分布式架構(gòu)的演進(jìn)過(guò)程,一環(huán)套一環(huán),環(huán)環(huán)緊密相扣。都是通過(guò)業(yè)務(wù)量和訪問(wèn)量的提升來(lái)考慮重構(gòu)架構(gòu)設(shè)計(jì),以便能夠適應(yīng)當(dāng)前的環(huán)境。不可一蹴而就,也急不來(lái),初創(chuàng)企業(yè)必須穩(wěn)扎穩(wěn)打,一步一個(gè)腳印的走出一條專(zhuān)屬自己的路。

          本文主要針對(duì)的是零基礎(chǔ)初學(xué)者,如果您想深入了解相關(guān)知識(shí),請(qǐng)繼續(xù)閱讀《騰訊資深架構(gòu)師干貨總結(jié):一文讀懂大型分布式系統(tǒng)設(shè)計(jì)的方方面面》。

          附錄:更多架構(gòu)方面的技術(shù)文章

          淺談IM系統(tǒng)的架構(gòu)設(shè)計(jì)

          簡(jiǎn)述移動(dòng)端IM開(kāi)發(fā)的那些坑:架構(gòu)設(shè)計(jì)、通信協(xié)議和客戶端

          一套海量在線用戶的移動(dòng)端IM架構(gòu)設(shè)計(jì)實(shí)踐分享(含詳細(xì)圖文)

          一套原創(chuàng)分布式即時(shí)通訊(IM)系統(tǒng)理論架構(gòu)方案

          從零到卓越:京東客服即時(shí)通訊系統(tǒng)的技術(shù)架構(gòu)演進(jìn)歷程

          蘑菇街即時(shí)通訊/IM服務(wù)器開(kāi)發(fā)之架構(gòu)選擇

          騰訊QQ1.4億在線用戶的技術(shù)挑戰(zhàn)和架構(gòu)演進(jìn)之路PPT

          微信后臺(tái)基于時(shí)間序的海量數(shù)據(jù)冷熱分級(jí)架構(gòu)設(shè)計(jì)實(shí)踐

          微信技術(shù)總監(jiān)談架構(gòu):微信之道——大道至簡(jiǎn)(演講全文)

          如何解讀《微信技術(shù)總監(jiān)談架構(gòu):微信之道——大道至簡(jiǎn)》

          快速裂變:見(jiàn)證微信強(qiáng)大后臺(tái)架構(gòu)從0到1的演進(jìn)歷程(一)

          17年的實(shí)踐:騰訊海量產(chǎn)品的技術(shù)方法論

          移動(dòng)端IM中大規(guī)模群消息的推送如何保證效率、實(shí)時(shí)性?

          現(xiàn)代IM系統(tǒng)中聊天消息的同步和存儲(chǔ)方案探討

          IM開(kāi)發(fā)基礎(chǔ)知識(shí)補(bǔ)課(二):如何設(shè)計(jì)大量圖片文件的服務(wù)端存儲(chǔ)架構(gòu)?

          IM開(kāi)發(fā)基礎(chǔ)知識(shí)補(bǔ)課(三):快速理解服務(wù)端數(shù)據(jù)庫(kù)讀寫(xiě)分離原理及實(shí)踐建議

          IM開(kāi)發(fā)基礎(chǔ)知識(shí)補(bǔ)課(四):正確理解HTTP短連接中的Cookie、Session和Token

          WhatsApp技術(shù)實(shí)踐分享:32人工程團(tuán)隊(duì)創(chuàng)造的技術(shù)神話

          微信朋友圈千億訪問(wèn)量背后的技術(shù)挑戰(zhàn)和實(shí)踐總結(jié)

          王者榮耀2億用戶量的背后:產(chǎn)品定位、技術(shù)架構(gòu)、網(wǎng)絡(luò)方案等

          IM系統(tǒng)的MQ消息中間件選型:Kafka還是RabbitMQ?

          騰訊資深架構(gòu)師干貨總結(jié):一文讀懂大型分布式系統(tǒng)設(shè)計(jì)的方方面面

          以微博類(lèi)應(yīng)用場(chǎng)景為例,總結(jié)海量社交系統(tǒng)的架構(gòu)設(shè)計(jì)步驟

          快速理解高性能HTTP服務(wù)端的負(fù)載均衡技術(shù)原理

          子彈短信光鮮的背后:網(wǎng)易云信首席架構(gòu)師分享億級(jí)IM平臺(tái)的技術(shù)實(shí)踐

          知乎技術(shù)分享:從單機(jī)到2000萬(wàn)QPS并發(fā)的Redis高性能緩存實(shí)踐之路

          IM開(kāi)發(fā)基礎(chǔ)知識(shí)補(bǔ)課(五):通俗易懂,正確理解并用好MQ消息隊(duì)列

          微信技術(shù)分享:微信的海量IM聊天消息序列號(hào)生成實(shí)踐(算法原理篇)

          微信技術(shù)分享:微信的海量IM聊天消息序列號(hào)生成實(shí)踐(容災(zāi)方案篇)

          新手入門(mén):零基礎(chǔ)理解大型分布式架構(gòu)的演進(jìn)歷史、技術(shù)原理、最佳實(shí)踐

          >> 更多同類(lèi)文章 ……

          (本文同步發(fā)布于:http://www.52im.net/thread-2007-1-1.html

          posted @ 2018-10-15 10:57 Jack Jiang 閱讀(219) | 評(píng)論 (0)編輯 收藏

               摘要: 1、點(diǎn)評(píng)對(duì)于IM系統(tǒng)來(lái)說(shuō),如何做到IM聊天消息離線差異拉取(差異拉取是為了節(jié)省流量)、消息多端同步、消息順序保證等,是典型的IM技術(shù)難點(diǎn)。就像即時(shí)通訊網(wǎng)整理的以下IM開(kāi)發(fā)干貨系列一樣:《IM消息送達(dá)保證機(jī)制實(shí)現(xiàn)(一):保證在線實(shí)時(shí)消息的可靠投遞》《IM消息送達(dá)保證機(jī)制實(shí)現(xiàn)(二):保證離線消息的可靠投遞》《如何保證IM實(shí)時(shí)消息的“時(shí)序性”與“一致性”?...  閱讀全文

          posted @ 2018-10-10 15:16 Jack Jiang 閱讀(188) | 評(píng)論 (0)編輯 收藏

               摘要: 1、引言特別說(shuō)明:本文內(nèi)容僅用于即時(shí)通訊技術(shù)研究和學(xué)習(xí)之用,請(qǐng)勿用于非法用途。如本文內(nèi)容有不妥之處,請(qǐng)聯(lián)系JackJiang進(jìn)行處理!我司有關(guān)部門(mén)為了獲取黑產(chǎn)群的動(dòng)態(tài),有同事潛伏在大量的黑產(chǎn)群(QQ群、微信群)中,干起了無(wú)間道的工作。隨著黑產(chǎn)群數(shù)量的激增,同事希望能自動(dòng)獲取黑產(chǎn)群的聊天信息,并交付風(fēng)控引擎進(jìn)行風(fēng)險(xiǎn)評(píng)估。于是,這個(gè)工作就交給我了,是時(shí)候表現(xiàn)一波了……針對(duì)同事的...  閱讀全文

          posted @ 2018-10-08 11:33 Jack Jiang 閱讀(383) | 評(píng)論 (0)編輯 收藏

          僅列出標(biāo)題
          共50頁(yè): First 上一頁(yè) 38 39 40 41 42 43 44 45 46 下一頁(yè) Last 
          Jack Jiang的 Mail: jb2011@163.com, 聯(lián)系QQ: 413980957, 微信: hellojackjiang
          主站蜘蛛池模板: 天台县| 丘北县| 民勤县| 大方县| 龙海市| 黑龙江省| 凤凰县| 体育| 方正县| 饶河县| 忻城县| 普宁市| 云霄县| 崇义县| 正蓝旗| 博湖县| 呼图壁县| 徐州市| 宁陵县| 南陵县| 二连浩特市| 辛集市| 大化| 开平市| 泗阳县| 洛南县| 乐清市| 冕宁县| 忻州市| 夏津县| 拉孜县| 高淳县| 龙南县| 扶沟县| 高要市| 贵州省| 郴州市| 攀枝花市| 霍城县| 彭山县| 湖南省|