/**************************************************************
技术博客
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以及网络压力
将查询请求分配给压力最轻的服务器.