- 博客(12)
- 收藏
- 关注
原创 一致性哈希算法详解及PHP实现
在维基百科中,一致性哈希是这么定义的:一致哈希是一种特殊的哈希算法。在使用一致哈希算法后,哈希表槽位数(大小)的改变平均只需要对 K/n个关键字重新映射,其中K是关键字的数量, n是槽位数量。然而在传统的哈希表中,添加或删除一个槽位的几乎需要对所有关键字进行重新映射。我们从定义中看到一致性Hash算法的基本优势,我们看到了该算法主要解决的问题是:当slot数发生变化时,能够...
2019-07-29 10:48:12 898
原创 带你快速了解微服务
微服务架构在近几年一直很热门,尤其是随着敏捷开发、持续集成交付、DevOps、云技术、虚拟技术docker化等的深入人心,经常能在技术论坛,博客上看到相应的文章推送。正好现在我们公司使用的也是微服务架构,将一个原本巨大的单体应用进行拆分(比如金币服务,用户中心,有提供给PC、客户端、H5的服务等),用RPC框架进行微服务之间的通讯以及服务治理。今天简单的总结一下对微服务架构设计的理解。微服务的...
2019-07-29 10:47:04 325
原创 分布式Web服务架构的快速演变之路
我相信很多文章写过这个主题,我们今天这篇文章之所以要再次写这个主题,一方面是想对现今Web服务架构的各个方面做一个演进的总结,另一方面也是想对自己在Web服务架构方面的经验加以落地,总结旧的经验才能演进更加优越的方案。个人工作以来从事的技术栈主要是PHP及Golang环境的,所以相关的栗子一般也都会以这两种语言为主。单机部署Web服务一上线,服务的访问量有限,我们可能只需要一台单机即可支...
2019-07-28 11:11:54 187
原创 HighCharts图表插件使用实践
最近在公司做用户画像相关的事,各种数据挖掘分析、机器学习一起上,产出标签用来分析用户群体特征、支持产品的方向决策、或是进行精准的运营活动。为了方便不懂技术的运营同学查看分析数据,需要做各种图表用来对大数据做更加形象的展示,先后也尝试过很多开源组件,例如百度的ECharts;功能很强大,但是总觉得不是很顺手、视觉效果上也不尽人意。后来有一天绞尽脑汁终于找到一款称心如意的插件,就是HighCharts...
2019-07-28 11:11:21 169
原创 NodeJs应用场景与实践
前几天看到一篇文章,据说是WordPress4.3将用NodeJs重写,着实让人有点惊讶。后来了解到,其实并不是完全摒弃PHP,而是由NodeJs重写部分核心类。具体文章链接来源,附上链接:WordPress 4.3 将用 Node.js 重写。无论情况是怎样,有一个事实是NodeJs的确逐渐被越来越多的应用到产品来了。下面这段话引自于NodeJs官网。Node.js 是一个基于 Chr...
2019-07-28 11:10:45 170
原创 Redis源码阅读 - 有序集合之跳跃表的设计与实现
跳跃表是一种随机化的数据结构,目前开源软件 Redis 和 LevelDB 都有用到它,它的效率和红黑树以及 AVL 树不相上下,但跳表的原理相当简单,只要你能熟练操作链表,就能轻松实现一个 Skip List。有序表的搜索比如一个有序表:从该有序表中搜索元素 (23, 43, 59 ) ,需要比较的次数分别为 ( 2, 4, 6 ),总共比较的次数为 2 + 4 + ...
2019-07-28 11:09:39 205
原创 Redis源码阅读 - 动态字符串的设计与实现
Redis 是一个开源的使用ANSI C语言编写的KV数据库,它没有直接使用C语言传统的字符串表示,而是自己构建了一种叫做简单动态字符串SDS(Simple Dynamic String )的抽象数据类型,并将SDS用作Redis 的默认字符串表示。举个栗子:我们设置一个KV,name => levin 的新键值对,他们底层是数据结构将会是:键是一个字符串对象,对象的底层实现是一个保存着...
2019-07-28 11:08:30 210
原创 深入理解PHP内核 - 扩展开发的那些事儿
学习PHP的同学都会经历一个这样的过程,从学习手册到实践、再到深入学习源码,以及ZendEngine的运行原理、内核实现。所以必然会接触PHP扩展的开发,甚至是自己尝试开发一些扩展来提升自己的应用的性能。写PHP扩展需要一定的C/C++的基础知识,如果比较欠缺可以去先行了解。在PHP7的诞生以后,PHP的性能是足够的。很多时候我们遇到的性能瓶颈都是出在I/O或者业务逻辑上,而不是PHP本身的执...
2019-07-28 11:07:31 248
原创 初探Javascript模块化开发
随着简单网页逐渐变成交互复杂的网站应用,网页上的Javascript代码也变得越来越庞大,越来越复杂。加之随即而来的多人协作分工的开发方式,每个人只负责其中一个或者几个很小的功能模块,最终必须通过把各个功能模块组合才能变成一个完整的功能。而多个模块又涉及到加载顺序,依赖关系等的影响,当功能模块增加、依赖关系越来越复杂的时候,让人工的去保证这些信息的严格正确性已经变得更加困难了。在这种情况下,产...
2019-07-28 11:06:52 101
原创 Redis源码阅读 - 整数集合的设计与实现
Redis中set结构类似于数学上的集合的概念,它包含的元素无序,且不能重复。Redis里的set结构还实现了基础的集合并、交、差的操作。与Redis对外暴露的其它数据结构类似,set的底层实现,随着元素类型是否是整型以及添加的元素的数目多少,而有所变化。概括来讲,当set中添加的元素都是整型且元素数目较少时,set使用intset作为底层数据结构,否则,set使用dict作为底层数据结构。...
2019-07-28 11:05:17 181
原创 Web安全常见的攻击方式与防范技巧
一个网站搭建起来,如果不注意安全方面的问题,很容易被人找到漏洞进行攻击,导致数据库用户信息被窃取、甚至造成服务瘫痪。因此,安全问题实在不可小觑。下面我们看一下常见的Web安全问题和防止攻击的方法。Xss - 跨站脚本攻击跨站脚本攻击(Cross Site Scripting)是指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的HTML代码,从而盗取用户资...
2019-07-28 11:04:36 527
原创 Redis源码阅读 - 哈希表的设计与实现
今天要介绍的数据结构,是Redis中的哈希表,这种数据结构是Redis中非常重要的一种数据类型,可以方便的处理很多复杂场景的业务需求。哈希表的结构定义在dict.h 文件中,我们抽取代码查看一下:如图所示, 哈希表是一个结构体类型,包含四个成员属性: table是一个数组,数组的每个元素都是一个指向 dict.h/dictEntry 结构的指针; size...
2019-07-28 10:55:46 544
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人