/**************************************************************
技術博客
http://blog.csdn.net/stecdeng
技術交流羣
羣號碼:324164944
歡迎c c++ windows驅動愛好者 服務器程序員溝通交流
**************************************************************/
機器重裝 沒有畫圖工具,圖片就將就看吧
考慮記錄自己在學習網絡時遇到的問題和思路。
目前寫一個大綱 後面會用代碼寫一個簡單的模型 進行學習
網絡庫使用開源庫
出於練習考慮 數據結構儘量自己實現
0 數據的收集 這裏使用了之前爬豆瓣讀書的一些資料
爬蟲的文章可以參考我這裏的博客文章
最後整合的數據的效果 前後對比
原文
<li class="subject-item"> <div class="pic"> <a class="nbg" href="https://book.douban.com/subject/1474773/" οnclick="moreurl(this,{i:'0',subject_id:'1474773',from:'book_subject_search'})"> <img class="" src="https://img1.doubanio.com/mpic/s1492518.jpg" width="90"> </a> </div> <div class="info"> <h2 class=""> <a href="https://book.douban.com/subject/1474773/" title="海賊王" οnclick="moreurl(this,{i:'0',subject_id:'1474773',from:'book_subject_search'})"> 海賊王 <span style="font-size:12px;"> : ONE PIECE </span> </a> </h2> <div class="pub"> 尾田榮一郎 / 董科 / 浙江人民美術出版社 / 2007-11 / 7.5 </div> <div class="star clearfix"> <span class="allstar50"></span> <span class="rating_nums">9.5</span> <span class="pl"> (25203人評價) </span> </div> <p>路飛所生長的小村莊裏曾經是一羣以「紅髮香克斯」爲首的海盜們的暫居地,而幼年路飛一直希望可以成爲他們的一員,可在一次意外的情況下,他吃了一種叫做「橡皮果實」的... </p> <div class="ft"> <div class="collect-info"> </div> <div class="cart-actions"> </div> </div> </div> </li>
整理後:
海賊王
出版信息:尾田榮一郎 / 董科 / 浙江人民美術出版社 / 2007-11 / 7.5.評分:9.5.簡介:路飛所生長的小村莊裏曾經是一羣以「紅髮香克斯」爲首的海盜們的暫居地,而幼年路飛一直希望可以成爲他們的一員,可在一次意外的情況下,他吃了一種叫做「橡皮果實」的...
原文
<li class="subject-item"> <div class="pic"> <a class="nbg" href="https://book.douban.com/subject/1231265/" οnclick="moreurl(this,{i:'8',subject_id:'1231265',from:'book_subject_search'})"> <img class="" src="https://img3.doubanio.com/mpic/s2358982.jpg" width="90"> </a> </div> <div class="info"> <h2 class=""> <a href="https://book.douban.com/subject/1231265/" title="遊戲核心算法編程內幕" οnclick="moreurl(this,{i:'8',subject_id:'1231265',from:'book_subject_search'})"> 遊戲核心算法編程內幕 </a> </h2> <div class="pub"> Daniel Sanchez-Crespo / 邱仲潘 / 中國環境科學出版社 / 2004-1 / 58.00元 </div> <div class="star clearfix"> <span class="allstar35"></span> <span class="rating_nums">7.0</span> <span class="pl"> (22人評價) </span> </div> <p>《遊戲核心算法編程內幕》由三部分組成。其中第一部分主要介紹遊戲編程的基本概念;第二部分詳細介紹遊戲編程中的各種技術和算法;第三部分是附錄,介紹遊戲編程中相關... </p> <div class="ft"> <div class="collect-info"> </div> <div class="cart-actions"> </div> </div> </div> </li>
整理後
遊戲核心算法編程內幕
出版信息:Daniel Sanchez-Crespo / 邱仲潘 / 中國環境科學出版社 / 2004-1 / 58.00元.評分:7.0.簡介:《遊戲核心算法編程內幕》由三部分組成。其中第一部分主要介紹遊戲編程的基本概念;第二部分詳細介紹遊戲編程中的各種技術和算法;第三部分是附錄,介紹遊戲編程中相關...
數據整合的所有數據來自豆瓣網站的公開頁面
豆瓣網站 https://www.douban.com/
整理數據 共享 http://pan.baidu.com/s/1gfp5bNH
//============================================
在這裏我只是提出一個簡單的需求模型 並且進行代碼練習 以後可能會有擴充的可能
而真正實際的數據訪問時候 數據查詢與寫入的頻率是會有極大差別的 加上實際的需求與優化的細節
整個的架構是完全不同的 有興趣的同學可以閱讀參考《大型網站技術架構.核心原理與案例分析》
//============================================
假設一個網站,最初開始壓力不大,只有幾千條或者幾萬條數據存儲,約幾百個查詢訪問
那麼一般就是一臺設備應對 數據輸入和查詢 (後繼更新代碼)
訪問模型一 最簡單的訪問服務器
//============================================
隨着用戶的積累 數據增多 就增加服務器存儲數據,分解數據存儲和訪問壓力。
分配器主要對請求查詢和寫入的數據請求進行哈希,將請求發送到實際處理該數據和請求的服務器
注意的是 服務器可能是一臺臺逐漸增加 在代碼設計哈希算法和數據存儲的時候 需要考慮這個因素(在線更新)
圖片來自《大型分佈式網站架構設計與實踐》
但是上圖的問題在於,如果增減服務器 ,需要對全部數據進行重新hash,以便確定數據歸屬哪個服務器。
考慮到頻繁動態增減服務器 可以採用consistent hash,儘可能減少重新hash計算的數據量。
圖片來自《大型分佈式網站架構設計與實踐》
//====================================
考慮到一臺服務器存儲數據可能會丟失或者損壞 所以數據會多臺服務器存儲
比如 輸入的數據 會存儲在5臺服務器中隨機的3臺服務器上,這樣及時有部分服務器損壞也不至於造成數據丟失。
這是一種很樸實的分佈式思路。
難點在於3臺存儲服務器上的數據同步,數據讀寫衝突的解決,數據寫入和查詢的效率保證以及服務器的數目是動態增加的等等等等。
//===============================================
最後是查詢過多對服務器造成的壓力如何平均由多個服務器承擔
解決辦法是分配器記錄每個服務器的內存和CPU以及網絡壓力
將查詢請求分配給壓力最輕的服務器.