思路 递归出所有个数是 $gain 的集合 还需要数字个数 与 剩余可用数字个数 作比对防止重复循环 <?php $gain = 3; // 我要从数据中取几个 $data = ['a', 'b', 'c', 'd'…
我是借助一个三方库实现的 有时间再详细挖一挖这个库的源码 composer require flexihash/flexihash $hash = new Flexihash(); // 添加节点 add$hash->addTargets(['cache-1', 'ca…
业务场景近年来B2C、O2O等商业概念的提出和移动端的发展,使得分布式系统流行了起来。分布式系统相对于单系统,解决了流量大、系统高可用和高容错等问题。功能强大也意味着实现起来需要更多技术的支持。例如系统访问层的负载均衡,缓存层的多实例主从复制备份,数据层的分库分表等。我们以负载均衡为例,常见的负载均…
AKF扩展立方体(Scalability Cube),是《架构即未来》一书中提出的可扩展模型,这个立方体有三个轴线,每个轴线描述扩展性的一个维度,他们分别是产品、流程和团队:X轴 —— 代表无差别的克隆服务和数据,工作可以很均匀的分散在不同的服务实例上;Y轴 —— 关注应用中职责的划分,比如数据类型…
内存观察 迭代输出一个从1开始一直到10000的数组,步进为1。 随手一写 <?php $start_mem = memory_get_usage(); $arr = range( 1, 10000 ); foreach( $arr as $item ){ echo $item."\…
服务端SYN_RCV优化 当服务端收到 SYN 包后,服务端会立马回复 SYN+ACK 包,表明确认收到了客户端的序列号,同时也把自己的序列号发给对方。 此时,服务端出现了新连接,状态是 SYN_RCV。在这个状态下,Linux 内核就会建立一个「半连接队列」来维护「未完成」的握手信息,当半连接队列…
TCP协议介绍 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接(连接导向)的、可靠的、 基于IP的传输层协议。 首先来看看OSI的七层模型和互联网协议族TCP/IP按粗粒度的四层划分 在OSI七层模型中,每一层的作用和对应的协议如下 TCP/IP的模…
PHP中把以两个下划线__开头的方法称为魔术方法(Magic methods),这些方法在PHP中充当了举足轻重的作用。 魔术方法包括: __construct(),类的构造函数__destruct(),类的析构函数__call(),在对象中调用一个不可访问方法时调用__callStatic(),用…
分布式ID的特点全局唯一性不能出现有重复的ID标识,这是基本要求。递增性确保生成ID对于用户或业务是递增的。高可用性确保任何时候都能生成正确的ID。高性能性在高并发的环境下依然表现良好。 分布式ID方案唯一ID可以标识数据的唯一性,在分布式系统中生成唯一ID的方案有很多,常见的方式大概有以下三种:依…
简介 Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。它是通过 fork/exec 的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在 supervisor 的配置文件中,把…

