- 博客(23)
- 资源 (4)
- 收藏
- 关注
原创 高可用架构(转)
一、可用性度量与考核 首先,不得不说:要保证一个网站永远完全可用几乎是一件不可能完成的任务(Mission Impossible,是不是有点碟中谍的感觉)。 (1)如何度量网站可用性? 一个神奇的数字—9!你有几个9,就代表了你的可用性。例如QQ可用性达到了4个9:99.99% ①2个9=基本可用 ②3个9=较高可用 ③4个9=具有自动恢复能力的高可用 ④5个9=极高可用->...
2018-06-22 17:51:49 16870
原创 大网站架构
此处我说的HTTP服务主要指如访问京东网站时我们看到的热门搜索、用户登录、实时价格、实时库存、服务支持、广告语等这种非Web页面,而是在Web页面中异步加载的相关数据。这些服务有个特点即访问量巨大、逻辑比较单一;但是如实时库存逻辑其实是非常复杂的。在京东这些服务每天有几亿十几亿的访问量,比如实时库存服务曾经在没有任何IP限流、DDos防御的情况被刷到600多万/分钟的访问量,而且能轻松应对。支撑如...
2018-06-22 17:12:51 305
原创 电商网站商品详情架构
本章以京东商品详情页为例,京东商品详情页虽然仅是单个页面,但是其数据聚合源是非常多的,除了一些实时性要求比较高的如价格、库存、服务支持等通过AJAX异步加载加载之外,其他的数据都是在后端做数据聚合然后拼装网页模板的。http://item.jd.com/1217499.html 如图所示,商品页主要包括商品基本信息(基本信息、图片列表、颜色/尺码关系、扩展属性、规格参数、包装清单、售后保障等)、商...
2018-06-22 17:10:18 3292
原创 Laravel Container (容器) 深入理解 (下)
本文大部分翻译自 DAVE JAMES MILLER 的 《Laravel’s Dependency Injection Container in Depth》 。原文自:https://segmentfault.com/a/1190000011560253上文介绍了 Dependency Injection Containers (容器) 的基本概念,现在接着深入讲解 Laravel 的 Con...
2018-06-19 19:15:27 4167
原创 《Laravel Dependency Injection (依赖注入) 概念详解》
本文翻译自 Symfony 作者 Fabien Potencier 的 《Dependency Injection in general and the implementation of a Dependency Injection Container in PHP》 系列文章。Part 1: What is Dependency Injection?Part 2: Do you need a ...
2018-06-19 19:14:06 631
原创 互联网架构“高可用” “高并发”
什么是高可用高可用 HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。如何保障系统的高可用冗余(多个节点) + 自动故障转移什么是高并发高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。如何提升系统的并发能力垂直扩展:提升单...
2018-06-19 11:02:58 2036
原创 红黑树 之 原理和算法详细介绍
概要目录1 红黑树的介绍2 红黑树的应用3 红黑树的时间复杂度和相关证明4 红黑树的基本操作(一) 左旋和右旋5 红黑树的基本操作(二) 添加6 红黑树的基本操作(三) 删除 作者:Sky Wang 于 2013-08-08 概述:R-B Tree,又称为“红黑树”。本文参考了《算法导论》中红黑树相关知识,加之自己的理解,...
2018-06-14 11:32:09 320
原创 红黑树详解(二)
上一篇文章史上最清晰的红黑树讲解(上)对Java TreeMap的插入以及插入之后的调整过程给出了详述。本文接着以Java TreeMap为例,从源码层面讲解红黑树的删除,以及删除之后的调整过程。如果还没有看过上一篇文章,请在阅读本文之前大致浏览一下前文,以方便理解。寻找节点后继对于一棵二叉查找树,给定节点t,其后继(树种比大于t的最小的那个元素)可以通过如下方式找到:t的右子树不空,则t的后继是...
2018-06-14 11:29:41 322
原创 红黑树详解(一)
本文以Java TreeMap为例,从源代码层面,结合详细的图解,剥茧抽丝地讲解红黑树(Red-Black tree)的插入,删除以及由此产生的调整过程。总体介绍Java TreeMap实现了SortedMap接口,也就是说会按照key的大小顺序对Map中的元素进行排序,key大小的评判可以通过其本身的自然顺序(natural ordering),也可以通过构造时传入的比较器(Comparator...
2018-06-14 11:28:13 392
原创 PHP相关题目
一公司:1、@当将其放置在一个PHP表达式之前有什么作用?2、用foreach把$arr=array(1,2,3,4)每个values值乘2输出;3、PHP定界符如何使用?4、说出mysql_connect()和mysql_pconnect()区别?5、用php打印出前一天的时间,格式是2006-5-10 22:21:22;6、请写出PHP5的构造函数和析构函数,构造函数和析构函数可以接受参数吗?...
2018-06-13 19:24:46 2319
原创 一致性哈希算法
在了解一致性哈希算法之前,最好先了解一下缓存中的一个应用场景,了解了这个应用场景之后,再来理解一致性哈希算法,就容易多了,也更能体现出一致性哈希算法的优点,那么,我们先来描述一下这个经典的分布式缓存的应用场景。场景描述假设,我们有三台缓存服务器,用于缓存图片,我们为这三台缓存服务器编号为0号、1号、2号,现在,有3万张图片需要缓存,我们希望这些图片被均匀的缓存到这3台服务器上,以便它们能够分摊缓存...
2018-06-12 19:13:29 232
原创 Redis相关总结
1,Redis丰富的数据结构(Data Structures)字符串(String)Redis字符串能包含任意类型的数据一个字符串类型的值最多能存储512M字节的内容利用INCR命令簇(INCR, DECR, INCRBY)来把字符串当作原子计数器使用使用APPEND命令在字符串后添加内容列表(List)Redis列表是简单的字符串列表,按照插入顺序排序你可以添加一个元素到列表的头部(左边:LPU...
2018-06-12 19:05:54 197
原创 跳表基础
最近小伙伴分享redis时,讲到redis 数据结构(Redis sorted set)中有跳表。这里记录下跳表。 储存数据时,数组容量有限且有序数组增加元素时效率比较低,所以存储数据时常选用链表。但是链表的查询效率O(n)。 有没有可以提高链表查找效率的方式呢?跳表就是这样一种结构。利用空间换时间的方式,提高查询效率。 跳跃表的结构是多层的,通过从最高维度的表进行检索再逐渐降低维度从而达到对任何...
2018-06-08 16:02:52 715
原创 MySQL索引背后的数据结构及算法原理(八)
InnoDB的主键选择与插入优化在使用InnoDB存储引擎时,如果没有特别的需要,请永远使用一个与业务无关的自增字段作为主键。经常看到有帖子或博客讨论主键选择问题,有人建议使用业务无关的自增主键,有人觉得没有必要,完全可以使用如学号或身份证号这种唯一字段作为主键。不论支持哪种论点,大多数论据都是业务层面的。如果从数据库索引优化角度看,使用InnoDB引擎而不使用自增主键绝对是一个糟糕的主意。上文讨...
2018-06-08 11:49:46 294
原创 MySQL索引背后的数据结构及算法原理(七)
索引选择性与前缀索引既然索引可以加快查询速度,那么是不是只要是查询语句需要,就建上索引?答案是否定的。因为索引虽然加快了查询速度,但索引也是有代价的:索引文件本身要消耗存储空间,同时索引会加重插入、删除和修改记录时的负担,另外,MySQL在运行时也要消耗资源维护索引,因此索引并不是越多越好。一般两种情况下不建议建索引。第一种情况是表记录比较少,例如一两千条甚至只有几百条记录的表,没必要建索引,让查...
2018-06-08 11:49:03 312
原创 MySQL索引背后的数据结构及算法原理(六)
最左前缀原理与相关优化高效使用索引的首要条件是知道什么样的查询会使用到索引,这个问题和B+Tree中的“最左前缀原理”有关,下面通过例子说明最左前缀原理。这里先说一下联合索引的概念。在上文中,我们都是假设索引只引用了单个的列,实际上,MySQL中的索引可以以一定顺序引用多个列,这种索引叫做联合索引,一般的,一个联合索引是一个有序元组,其中各个元素均为数据表的一列,实际上要严格定义索引需要用到关系代...
2018-06-08 11:48:15 243
原创 MySQL索引背后的数据结构及算法原理(五)
InnoDB索引实现虽然InnoDB也使用B+Tree作为索引结构,但具体实现方式却与MyISAM截然不同。第一个重大区别是InnoDB的数据文件本身就是索引文件。从上文知道,MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。而在InnoDB中,表数据文件本身就是按B+Tree组织的一个索引结构,这棵树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键...
2018-06-08 11:47:21 275
原创 MySQL索引背后的数据结构及算法原理(四)
MyISAM索引实现MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。下图是MyISAM索引的原理图:图8这里设表一共有三列,假设我们以Col1为主键,则图8是一个MyISAM表的主索引(Primary key)示意。可以看出MyISAM的索引文件仅仅保存数据记录的地址。在MyISAM中,主索引和辅助索引(Secondary key)在结构上没有任何区别,只是...
2018-06-08 11:46:41 721
原创 MySQL索引背后的数据结构及算法原理(三)
为什么实用B-Tree(B+Tree)上文说过,红黑树等数据结构也可以用来实现索引,但是文件系统及数据库系统普遍采用B-/+Tree作为索引结构,这一节将结合计算机组成原理相关知识讨论B-/+Tree作为索引的理论基础。一般来说,索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储的磁盘上。这样的话,索引查找过程中就要产生磁盘I/O消耗,相对于内存存取,I/O存取的消耗要高几个...
2018-06-08 11:45:15 453
原创 MySQL索引背后的数据结构及算法原理(二)
B-Tree和B+Tree目前大部分数据库系统及文件系统都采用B-Tree或其变种B+Tree作为索引结构,在本文的下一节会结合存储器原理及计算机存取原理讨论为什么B-Tree和B+Tree在被如此广泛用于索引,这一节先单纯从数据结构角度描述它们。B-Tree为了描述B-Tree,首先定义一条数据记录为一个二元组[key, data],key为记录的键值,对于不同数据记录,key是互不相同的;da...
2018-06-08 11:44:20 781
原创 MySQL索引背后的数据结构及算法原理(一)
索引的本质MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。提取句子主干,就可以得到索引的本质:索引是数据结构。我们知道,数据库查询是数据库的最主要功能之一。我们都希望查询数据的速度能尽可能的快,因此数据库系统的设计者会从查询算法的角度进行优化。最基本的查询算法当然是顺序查找(linear search),这种复杂度为O(n)的算法在数据量很大时显然是糟糕的,...
2018-06-08 11:43:07 397
原创 MySQL的InnoDB索引原理详解
摘要: 本篇介绍下Mysql的InnoDB索引相关知识,从各种树到索引原理到存储的细节。 InnoDB是Mysql的默认存储引擎(Mysql5.5.5之前是MyISAM,文档)。本着高效学习的目的,本篇以介绍InnoDB为主,少量涉及MyISAM作为对比。 这篇文章是我在学习过程中总结完成的,内容主要来自书本和博客(参考文献会给出),过程中加入了一些自己的理解,描述不准确的地方烦请指出。 ...
2018-06-08 10:59:19 250
转载 PHP源码分析 - PHP-FPM运行原理
我们知道web服务器与PHP应用之间通过SAPI接口进行交互数据。PHP提供了多种SAPI接口,例如 apache2hander、fastcgi、cli等等。当然,php-fpm也是其中一种。相比其他接口,php-fpm运用更加广泛。php-fpm是一种master(主)/worker(子)多进程架构,与nginx设计风格有点类似。master进程主要负责CGI及PHP环境初始化、事件监听、子进程...
2018-06-07 18:27:41 2293
纯PHP代码实现HTML与MarkDown互转
2018-09-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人