结构化与非结构化网络 非结构化的P2P网络是指网络节点之间不存在组织关系,节点之间完全是对等的,比如第一代P2P网络Napster。 结构化的P2P网络与非结构化恰好相反,我们认为网络在逻辑上存在一个人为设计的结构,比如Chord假定网络是一个环,Kadelima则假定为一颗二叉树。有了这些逻辑结构,就给我们资源查找引入了更多的算法和思路。 引言 我们在 计算机网络–详解P2P对等网络(一)—BitTorrent协议 这一篇博客中讲述了BT下载的过程:在对等用户拿到种子文件的时候,首先会联系tracker服务器,然后加入用户集群,并在用户集群中寻找自己所需的内容,最后与拥有内容的对等用户进行联系。 从BT下载的过程中引出本节所要讨论的问题:如何高效的从用户集群中找出哪些对等用户拥有你正在寻求的具体内容? 在历史中有三种比较典型的模型来解决这个问题: Napster:使用一个中心服务器接收所有的查询,服务器告知去哪下载其所需要的数据。存在的问题是中心服务器单点失效导致整个网络瘫痪。 继续阅读 >>


董恒毅 18/06/28 21:24:59
注:本篇博客只是讲述了一致性哈希的思想,我们会在之后讲述分布式哈希表以及一致性哈希的一种实现(Chord算法)。 什么是一致性哈希算法? 引用自维基百科: 一致性哈希是一种特殊的哈希算法。在使用一致哈希算法后,哈希表槽位数(大小)的改变平均只需要对 K/n个关键字重新映射,其中K是关键字的数量,n是槽位数量。然而在传统的哈希表中,添加或删除一个槽位几乎需要对所有关键字进行重新映射。 总结:一致性哈希算法主要关注的是在分布式架构中,当节点数目发生变化的时候(增加/删除),怎样使再哈希的数据量最少。 一致性哈希的引出 在分布式系统中,节点的宕机、某个节点加入或者移出集群是常事。对于分布式存储而言,假设存储集群中有10台机器(node),如果采用传统Hash方式对数据分片(item)(即数据根据哈希函数映射到某台机器上存储),哈希函数应该是这样的:hash(item) % 10。根据上面的介绍,当node数发生变化(增加、移除)后,数据会被重新“打散”,导致大部分数据不能落到原 继续阅读 >>


董恒毅 18/06/26 21:06:58
一致性哈希的原理: 作者:championhengyi 发表于 2018/06/26 11:12:58 原文链接 https://blog.csdn.net/championhengyi/article/details/80812517 阅读:10 继续阅读 >>


董恒毅 18/06/26 11:12:58
注:本篇文章内容借鉴自:浅入浅出BitTorrent协议,其中加入了博主的部分原创,感谢,侵删~ 对等网络的概念 以下定义主要摘抄自维基百科与中科院计算技术研究所: 对等式网络(peer-to-peer,简称P2P),又称点对点技术,是无中心服务器、依靠用户群(peers)交换信息的互联网体系。它的作用在于,网络的参与者共享他们所拥有的一部分硬件资源(处理能力、存储能力、网络连接能力、打印机等),这些共享资源通过网络提供服务和内容,能被其它对等节点(Peer)直接访问而无需经过中间实体,减低以往网路传输中的节点,以降低资料遗失的风险。与有中心服务器的中央网络系统不同,对等网络中的每个用户端既是资源(服务和内容)提供者(Server),又是资源获取者(Client),任何一个节点无法直接找到其他节点,必须依靠其用户群进行信息交流。 对等网络的模型 P2P网络的简易模型图如下: 如图,我们可以总结出P2P网络的一些特征: 非中心化:P2P是全分布式系统,网络中的资源和服务 继续阅读 >>


董恒毅 18/06/21 11:15:10
注:本文内容摘抄自CDN详解 — 不挑食的程序员,博主在其基础上进行了少量修改并加入了部分原创,感谢,侵删~ 之前我们已经学习过缓存机制以及Web代理,但对于大型网站的构建,这些还远远不够。要想真正的构建一个流行的网站,内容分发网络(Content Delivery Network)简称CDN,是一项不可或缺的技术。 什么是CDN? 以下内容摘自维基百科: 内容分发网络(CDN)是指一种通过互联网互相连接的计算机网络系统,利用最靠近每位用户的服务器,更快、更可靠地将音乐、图片、视频、应用程序及其他文件发送给用户。 如果对整个CDN系统做一个简单的描述: CDN系统主要由4大部分组成,每部分都由集群所构成。这4部分分别由CDN专属DNS服务器、全局负载均衡设备、区域负载均衡设备、CDN缓存服务器(边缘节点)构成。除过CDN专属DNS服务器,其他3部分集群都有源服务器上对应资源的全部或部分副本。CDN系统通过各部分的负载均衡算法,最终指示客户端使用附近最优的边缘节点中的一台缓存 继续阅读 >>


董恒毅 18/06/18 20:35:04
版权声明:本文出自“丁胖胖的BLOG”,请务必保留此出处:http://z00w00.blog.51cto.com/515114/1031287。 引言 我们在之前的Web缓存机制一文中提到,缓存服务器就可以作为一种代理服务器。 代理分为正向代理、反向代理、透明代理等等。今天我们着重介绍这三种代理方式。 什么是代理?什么是代理服务器? 在正式开始前,我们先对标题中的概念进行定义,以下摘自维基百科: 代理(英语:Proxy):也称网络代理,是一种特殊的网络服务,允许一个网络终端(一般为客户端)通过这个服务与另一个网络终端(一般为服务器)进行非直接的连接。一些网关、路由器等网络设备具备网络代理功能。一般认为代理服务有利于保障网络终端的隐私或安全,防止攻击。 代理服务器(英文:Proxy Server):提供代理服务的计算机系统或其它类型的网络终端。 正向代理(Forward Proxy) 一般情况下,如果没有特别说明,代理技术默认说的是正向代理技术 继续阅读 >>


董恒毅 18/06/12 21:36:18
序言 对于大多数人来说,我想,接触的第一个电子邮箱应该都是QQ邮箱。我也不例外,从第一次接触QQ邮箱开始,就对这种有别于传统邮箱的软件产生了一些兴趣,却由于种种原因一直都没有去探究它。前段时间刚好在找实习,期间凸显了电子邮箱的重要性,刚好最近也有了一些空闲的时间,遂在了解了电子邮件的基本工作原理之后,将其整理为这篇博客。 使用电子邮件的好处 很多人还不清楚使用电子邮件的好处,我贴一下。内容节选自:为什么要使用Email及如何用好Email 写Email跟用笔写信是一样的,你可以经过深思熟虑,将语言精心组织之后再写下来,也就是说,在工作中使用它更加正式,而且可以留下记录作为证据。长期使用Email会锻炼你的写作能力和语言组织能力; 如果我们都习惯使用“回复”或“全部回复”,通过一个邮件就可以看到关于一个项目全部的沟通信息; 上级经常不知道我们打电话或者发IM消息给客户到底在谈些什么,而发Email时“抄送”给他,通常情况下他都会很乐意接收,当然你也可以“抄送”或者“密送”给其他你希望看到 继续阅读 >>


董恒毅 18/06/08 14:34:36
借由这个问题,今天我们就把 32 位 CPU、64 位 CPU、32 位操作系统、64 位操作系统之间的区别与联系彻底搞清楚。对于这个问题,博主也是一知半解了好长时间啊~ 基本概念 32位的CPU与64位CPU 以下内容摘自维基百科: 64 位 CPU 是指 CPU 内部的通用寄存器的宽度为 64 比特,支持整数的 64 比特宽度的算术与逻辑运算。那么 32 位 CPU 同理。 一个 CPU,联系外部的数据总线与地址总线,可能有不同的宽度;术语“64位”也常用于描述这些总线的大小。不过这一术语也可能指电脑指令集的指令长度,或其它的数据项。去掉进一步的条件,“64位”电脑架构一般具有 64 位宽的整数型寄存器,它可支持 64 位“区块”的整数型数据。 64 位架构无疑可应用在需要处理大量数据的应用程序,如数字视频、科学运算、和早期的大型数据库。 那么 32 位 CPU 与 64 位 CPU 到底有什么区别? 数据处理能力增强:64 位 CPU 通用寄存器的 继续阅读 >>


董恒毅 18/05/25 23:20:56
注:本文中的部分内容摘抄自他人博客,如有侵权,请联系我,侵删~ 本篇博客主要讲述 synchronized 关键字的实现原理以及 JDK 1.6 后对 synchronized 的种种优化。synchronized 的使用不再赘述。 博主目前依旧存在的疑惑 请在阅读完此篇博客之后,帮助博主回答这三个问题: 多线程争夺 Monitor 的具体过程是怎样的?是根据 ObjectMonitor 中的 _count 值判断当前 Monitor 是否被锁定吗? JVM 如果检测到在单线程环境下执行同步代码(StringBuffer),是会进行锁消除呢,还是会使用偏向锁? 对于偏向锁的撤销过程及膨胀过程,博主只是在一些博客的基础上给出了自己的理解!不权威,建议阅读源码,博主对这部分知识的讲解持怀疑态度,如果在阅读的过程中发现博主对偏向锁的撤销与膨胀理解有误,请指出,感激不尽~(网上基本上没有从源码角度分析的,对于偏向锁撤销与升级的详细过程也是众说纷纭) 引言 我们先来看一份代码: 继续阅读 >>


董恒毅 18/04/27 11:38:27
注:感谢 美团点评技术团队 的分享~~,博客部分内容摘抄自其中。侵删! 今天我们来探究一下 HashMap 的内部实现机制。 明确 JDK 1.8 中的 HashMap 使用数组 + 链表 + 红黑树的结构进行实现。 HashMap 的底层思想主要是哈希表,我们来看看 Java 的设计者们是怎么使用数组 + 链表 + 红黑树设计出 HashMap 的。 HashMap的基本属性 既然是用哈希表进行实现,那么基本的数据结构就是数组了,HashMap 部分源码如下: public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable { transient Node<K,V>[] table; // HashMap 底层数据结构(Node 数组) transient int size; 继续阅读 >>


董恒毅 18/04/20 21:55:40