- 博客(46)
- 资源 (1)
- 收藏
- 关注
转载 epoll函数详解
什么是epollepoll是什么?按照man手册的说法:是为处理大批量句柄而作了改进的poll。当然,这不是2.6内核才有的,它是在2.5.44内核中被引进的(epoll(4) is a new API introduced in Linux kernel 2.5.44),它几乎具备了之前所说的一切优点,被公认为Linux2.6下性能最好的多路I/O就绪通知方法。epoll的相关系统调用epoll只有epoll_create,epoll_ctl,epoll_wait 3个系统调用。1.
2021-09-28 15:16:09
2304
原创 thinkphp5数据库分库时model操作支持
使用thinkphp5.0实现业务功能时,遇到一个问题,同表分库场景下,用model类实例无法支持多数据库sql操作。场景如下:db1.testdb2.testdb3.test...当使用:$model = new Test([],'db1');$model->where('id',1)->find();$model = new Test([],'db2');$model->where('id',1)->find();当我们要查询db2的数据表时,查到的
2020-06-20 17:28:31
794
原创 php-rdkafka手动提交偏移量
在项目中使用php-rdkafka的高级消费者时,发现设置了:$topicConf->set('enable.auto.commit', 'false');没有效果,还是会自动提交offset,查了各种资料,正确的应该是这样设置:$conf->set('enable.auto.commit', 'false');相关说明见文档:https://github.com/ed...
2019-02-19 16:19:17
2469
原创 PHP使用RabbitMQ实战
用composer安装rabbitmq客户端库:composer require php-amqplib/php-amqplib生产者:<?phprequire 'vendor/autoload.php';use PhpAmqpLib\Connection\AMQPStreamConnection;use PhpAmqpLib\Message\AMQPMessage...
2019-01-23 10:07:33
964
转载 Linux进程调度原理
Linux进程调度的目标1.高效性:高效意味着在相同的时间下要完成更多的任务。调度程序会被频繁的执行,所以调度程序要尽可能的高效;2.加强交互性能:在系统相当的负载下,也要保证系统的响应时间;3.保证公平和避免饥渴;4.SMP调度:调度程序必须支持多处理系统;5.软实时调度。 操作系统要实现多进程,进程调度必不可少。进程调度是对TASK_RUNNING状态的进程进行调度...
2018-12-27 10:25:50
592
转载 select、poll、epoll之间的区别总结
select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝...
2018-12-27 10:05:05
172
转载 聊一聊,Golang “相对”路径问题
前言Golang 中存在各种运行方式,如何正确的引用文件路径成为一个值得商议的问题以 gin-blog 为例,当我们在项目根目录下,执行 go run main.go 时能够正常运行(go build也是正常的)[$ gin-blog]# go run main.go[GIN-debug] [WARNING] Running in "debug" mode. Switch to "...
2018-10-13 11:26:51
3229
原创 php调试排错技巧大全
做php开发时间不短了,在这里总结下平时常用的调试方法,希望对大家有所帮助。1 代码调试1.1 打印输出使用echo、var_dump 、print_r等方法在需要调试地方进行打印输出,通过输出特定变量的值可以判断程序执行是否正确。1.2 使用debug_backtrace 函数打印调用栈信息:debug_print_backtrace();exit;#0 cli_r...
2018-09-28 17:43:49
2379
原创 poll函数详解
1 poll函数概述select() 和 poll() 系统调用的本质一样,poll() 的机制与 select() 类似,与 select() 在本质上没有多大差别,管理多个描述符也是进行轮询,根据描述符的状态进行处理,但是 poll() 没有最大文件描述符数量的限制(但是数量过大后性能也是会下降)。poll() 和 select() 同样存在一个缺点就是,包含大量文件描述符的数组被整体...
2018-09-17 15:47:18
40548
4
转载 linux下select/poll/epoll机制的比较
select、poll、epoll简介 epoll跟select都能提供多路I/O复用的解决方案。在现在的Linux内核里有都能够支持,其中epoll是Linux所特有,而select则应该是POSIX所规定,一般操作系统均有实现select:select本质上是通过设置或者检查存放fd标志位的数据结构来进行下一步处理。这样所带来的缺点是:1、 单个进程可监视的fd数量被限制,...
2018-09-17 15:08:30
150
转载 linux如何查询进程占用的内存
1. ps aux命令USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDlizhibin 32986 0.0 13.8 916276 534748 ? Ssl 10:12 0:00 /usr/local/php_5.4.45/bin/php -c /usr/local/ph...
2018-09-15 12:21:46
1179
原创 cli执行脚本时出现(2006 MySQL server has gone away) 问题处理
最近有同事问我,有个cli运行的处理脚本经常没执行完就退出了,导致日志表里显示脚本运行状态一直显示在执行中。了解到他的逻辑如下:程序开始时建立两个数据库连接A和B(因为业务数据表和日志表在两个数据库中),连接A用来保存抓取的业务数据,连接B用来保存脚本运行的状态。当抓取的数据保存完后,用连接B将日志表中的脚本运行状态改为已完成。听到这个问题就觉得可能是数据库连接断开引起的,因为mysq...
2018-08-21 16:55:11
285
原创 shell脚本Windows转unix格式
在windows下写的shell脚本,放到linux下运行经常会报以下错误:test.sh: line 5: $'\r': command not foundtest.sh: line 6: syntax error near unexpected token `$'{\r''原因是因为换行符windows和linux不一致引起的。 处理过程如下(以nodepad++为例):...
2018-08-20 17:31:04
10428
转载 深入理解分布式事务,高并发下分布式事务的解决方案
1、什么是分布式事务分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。以上是百度百科的解释,简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。2、分布式事务的产生的原因...
2018-07-30 12:05:55
350
转载 学设计模式要看懂UML类图才行
一、UML类图概念:类图(Class diagram)主要用于描述系统的结构化设计。类图也是最常用的UML图,用类图可以显示出类、接口以及它们之间的静态结构和关系。 下面是《大话设计模式》的UML类图的总结笔记,采用了里面的实例。以下的例子使用Visio2013画的。二、类的表示1、类图第一层:类的名称,如果是抽象类用斜体显示。 第二层:类的属性。 第三层:类的方法。 2...
2018-07-30 11:16:55
264
转载 MySQL主从复制原理、半同步操作步骤及原理
1.1 企业Linux运维场景数据同步方案1.1.1 文件级别的异机同步方案1、scp/sftp/nc 命令可以实现远程数据同步。 2、搭建ftp/http/svn/nfs 服务器,然后在客户端上也可以把数据同步到服务器。 3、搭建samba文件共享服务,然后在客户端上也可以把数据同步到服务器。 http://taokey.blog.51cto.com/4633273/1203553...
2018-07-30 11:12:56
259
转载 Mysql对于事务并发处理带来的问题,脏读、不可重复读、幻读的理解
一、缘由 众所周知MySQL从5.5.8开始,Innodb就是默认的存储引擎,Innodb最大的特点是:支持事务、支持行级锁。既然支持事务,那么就会有处理并发事务带来的问题:更新丢失、脏读、不可重复读、幻读;相应的为了解决这四个问题,就产生了事务隔离级别:未提交读(Read uncommitted),已提交读(Read committed),可重复读(Repeatable read),可序列...
2018-07-30 11:00:35
517
转载 双主模式nginx + keepalived配置(双机互为主备)
配置nginx+keepalived的双主机双机热备,这种配置下有两个Virtual IP,两个机器互为主备,最后我们把域名DNS服务器解析至两个Virtual IP即可。环境介绍两台服务器Server1:192.168.30.61 Server2:192.168.30.62要设置的两个虚拟IPVirtual IP1:192.168.30.51 Virtual IP2...
2018-07-30 10:53:19
1834
转载 微服务--分布式事务的实现方法及替代方案
这两天正在研究微服务架构中分布式事务的处理方案, 做一个小小的总结, 作为备忘. 如有错误, 欢迎指正!概念澄清事务补偿机制: 在事务链中的任何一个正向事务操作, 都必须存在一个完全符合回滚规则的可逆事务. CAP理论: CAP(Consistency, Availability, Partition Tolerance), 阐述了一个分布式系统的三个主要方面, 只能同时择其二进行实现....
2018-07-30 09:59:51
812
转载 Redis 事务
Redis 提供的事务机制与传统的数据库事务有些不同,传统数据库事务必须维护以下特性:原子性(Atomicity), 一致性(Consistency), 隔离性(Isolation), 持久性(Durability),简称ACID。而Redis事务不支持回滚,原子性支持不完整,所以一致性也无法保证。支持隔离性,持久性因为需要开启AOF持久化(每次操作都写),出于性能问题一般不会开启,故持...
2018-07-30 09:44:07
277
转载 MySQL InnoDB引擎 MVCC并发控制
首先,我们来介绍一下什么是MVCC,为什么要使用MVCC,MVCC的原理,然后结合MySQL的事务隔离级别来说一下MVCC的实现。1.MVCC定义MVCC全称Mutli Version Concurreny Control,多版本并发控制,也可称之为一致性非锁定读;它通过行的多版本控制方式来读取当前执行时间数据库中的行数据。实质上使用的是快照数据。2.为什么要使用MVCC消除锁的开...
2018-07-30 09:20:45
122
转载 数据库范式理解
之所以使用范式,往往是设计不规范的数据库表可能造成大量的数据冗余,也可能在发生插入、删除、修改操作后出现各种各样的不合理的问题。1)1NF(第一范式): 数据库表的每一列都是不可分割的基本数据项。 如“电话号码”这个属性可以继续被分割为“办公电话”、“手机号码”等属性,在第一范式的语义下不应该被作为单独的一列出现。 2)2NF(第二范式):必须先满足第一范式。 数据库表中的每一行必须可...
2018-07-30 08:57:22
153
原创 数据库事务与锁
一、事务的概念事务(Transaction),是指访问并可能更新数据库中各种数据项的一个程序执行单元(Unit),通俗点也就是指针对数据库中形形色色的数据,我们进行一些存取操作。 二、事务的特性事务是恢复和并发控制的基本单位。具有四个属性:原子性、一致性、阻离性、持久性,合起来通常被称为ACID特性。 1、原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸...
2018-07-27 14:21:59
176
转载 Redis 为什么使用单进程单线程方式也这么快
Redis 采用的是基于内存的采用的是单进程单线程模型的 KV 数据库,由 C 语言编写。官方提供的数据是可以达到100000+的 qps。这个数据不比采用单进程多线程的同样基于内存的 KV 数据库 Memcached 差。Redis 快的主要原因有:完全基于内存; 数据结构简单,对数据操作也简单; 使用多路 I/O 复用模型;第一、二点不细讲,主要围绕第三点采用多路 I/O 复用技...
2018-07-27 14:07:29
101
原创 PHP分布式路由算法介绍与实现
在我们做负载均衡,分布式部署,数据分表时,需要用到一些分布式路由算法将请求路由到真实的节点上。最常用的有哈希取模,一致性哈希算法等。这里对他们的做一些介绍及提供PHP实现。场景举例:分布式缓存服务器路由1、哈希取模算法对缓存key进行hash得到结果取余数 (hash() mod N):对机器编号从0到N-1,按照自定义的hash()算法,对每个请求的hash()值按N取模,得到余数i...
2018-07-26 16:59:54
1773
1
转载 MySql Sharding:分表、分库、分片和分区
一、ShardingSharding 是把数据库横向扩展(Scale Out)到多个物理节点上的一种有效的方式,其主要目的是为突破单节点数据库服务器的 I/O 能力限制,解决数据库扩展性问题。Shard这个词的意思是“碎片”。如果将一个数据库当作一块大玻璃,将这块玻璃打碎,那么每一小块都称为数据库的碎片(DatabaseShard)。将整个数据库打碎的过程就叫做sharding,可以翻译为分片...
2018-07-26 14:09:33
540
转载 Mysql字段类型与合理选择
字段类型数值MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数。许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且 MySQL 允许我们指定数值字段中的值是否有正负之分(UNSIGNED)或者用零填补(ZEROFILL)。 INT 在 MySQL 中支持的 5 个主要整数类型是 TINYINT,SMALLINT,ME...
2018-07-26 11:54:21
6944
1
原创 TCP/UDP报文的最大负载和报文的最小长度
以太网最大传输单元(MTU)以太网的最大数据帧1518Bytes,以太网的帧头14Bytes,帧尾校验4Bytes以太网最大传输单元(MTU):1518B - 14B - 4B = 1500Bytes以太网最小MTU是576BytesInternet上的标准MTU值为576字节 TCP数据包每次能够传输的最大量(MISS)MSS就是TCP数据包每次能够传输的最大量。...
2018-07-24 17:51:53
10142
1
转载 TCP通信的这些异常,你考虑了吗?
TCP是面向连接的,在传输数据之前要先和对端建立一个连接,建立连接的过程我们通常叫做3次握手。下面通过图片来给大家展示3次握手的过程在数据传输完之后我们可能不再需要这个连接,那么就需要把连接断开。断开连接的过程被称之为4次挥手。关于三次握手和4次挥手的过程,有不明白的可以移步http://www.2cto.com/net/201209/157577.html本篇文章主要讨论以下几种...
2018-07-24 15:03:24
760
转载 TCP/IP的TCP socket通信过程
传统的TCP/IP通信过程依赖于socket,位于应用层和传输层之间,使得应用程序可以进行通信。相当于港口城市的码头,使得城市之间可以进行货物流通。服务器和客户端各有不同的通信流程。一、服务器 1、建立连接阶段调用socket(),分配文件描述符,即监听套接字 调用bind(),将套接字与本地IP地址和端口绑定 调用listen(),监听特定端口,socket()创建的套接字...
2018-07-24 11:51:39
217
转载 PHP新的垃圾回收机制:Zend GC详解
概述 在5.2及更早版本的PHP中,没有专门的垃圾回收器GC(Garbage Collection),引擎在判断一个变量空间是否能够被释放的时候是依据这个变量的zval的refcount的值,如果refcount为0,那么变量的空间可以被释放,否则就不释放,这是一种非常简单的GC实现。然而在这种简单的GC实现方案中,出现了意想不到的变量内存泄漏情况(Bug:http://bugs.php...
2018-07-24 11:26:05
91
转载 使用Nginx+Lua(OpenResty)开发高性能Web应用
在互联网公司,Nginx可以说是标配组件,但是主要场景还是负载均衡、反向代理、代理缓存、限流等场景;而把Nginx作为一个Web容器使用的还不是那么广泛。Nginx的高性能是大家公认的,而Nginx开发主要是以C/C++模块的形式进行,整体学习和开发成本偏高;如果有一种简单的语言来实现Web应用的开发,那么Nginx绝对是把好的瑞士军刀;目前Nginx团队也开始意识到这个问题,开发了nginxSc...
2018-07-20 16:39:14
190
转载 聊聊Linux 五种IO模型
上一篇《聊聊同步、异步、阻塞与非阻塞》已经通俗的讲解了,要理解同步、异步、阻塞与非阻塞重要的两个概念点了,没有看过的,建议先看这篇博文理解这两个概念点。在认知上,建立统一的模型。这样,大家在继续看本篇时,才不会理解有偏差。那么,在正式开始讲Linux IO模型前,比如:同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的。所以先限定一下...
2018-07-20 15:24:46
150
转载 聊聊同步、异步、阻塞与非阻塞
近来遇到了一些常见的概念,尤其是网络编程方面的概念,如:阻塞、非阻塞、异步I/O等等,对于这些概念自己也没有太清晰的认识,只是很模糊的概念,说了解吧也了解,但是要让自己准确的描述概念方面的具体细节,却说的不那么准确,这也是自己在这几个方面也没有细细考究过的原因吧。经过看了些这几个概念的资料,发现同步、异步、阻塞、非阻塞的概念其实也并不难以理解,在此写下此文,欢迎拍砖,希望多多交流。1 同步与异...
2018-07-20 15:22:45
145
转载 我们为什么要用vue,他解决了什么问题,如何使用它?
Vue.js新手入门指南最近在逛各大网站,论坛,以及像SegmentFault等编程问答社区,发现Vue.js异常火爆,重复性的提问和内容也很多,楼主自己也趁着这个大前端的热潮,着手学习了一段时间的Vue.js,目前用它正在做自己的结业项目。在做的过程中也对Vue.js的官方文档以及其各种特性有了许多认识。作为一个之前以PHP+模版引擎为主的开发,从一个从未接触过除HTML+CSS+Jav...
2018-07-20 15:13:37
457
转载 程序员、技术主管和架构师
最近在进一步思考程序员的成长,曾经写过一篇《程序员的成长阶梯和级别定义》 ,里面写了我对程序员主要成长阶段的定义,但在程序员从初级走向资深的过程中,会面临两个支路,一个叫「技术主管」,另一个则是「架构师」。为什么这是两条支路?因为现在回过来看,这两条路从来都不是程序员的自然成长路径,下面我们先从「技术主管」开始吧。技术主管技术主管,有些公司可能又叫「技术经理」,英文一般是 Tech Lea...
2018-07-20 11:29:26
430
转载 使用LVS实现负载均衡原理及安装配置详解
负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群。常用的负载均衡开源软件有nginx、lvs、haproxy,商业的硬件负载均衡设备F5、Netscale。这里主要是学习 LVS 并对其进行了详细的总结记录。一、负载均衡LVS基本介绍 LB集群的架构和原理很简单,就是当用户的请求过来时,会直接分发到Director Server上,然后它把用户...
2018-07-20 11:26:45
119
转载 Nginx 的 TCP 负载均衡介绍
Nginx除了以前常用的HTTP负载均衡外,Nginx增加基于TCP协议实现的负载均衡方法。HTTP负载均衡,也就是我们通常所有“七层负载均衡”,工作在第七层“应用层”。而TCP负载均衡,就是我们通常所说的“四层负载均衡”,工作在“网络层”和“传输层”。例如,LVS(Linux Virtual Server,Linux虚拟服务)和F5(一种硬件负载均衡设备),也是属于“四层负载均衡”。...
2018-07-20 11:24:38
220
转载 PHP 底层的运行机制与原理
PHP说简单,但是要精通也不是一件简单的事。我们除了会使用之外,还得知道它底层的工作原理。PHP是一种适用于web开发的动态语言。具体点说,就是一个用C语言实现包含大量组件的软件框架。更狭义点看,可以把它认为是一个强大的UI框架。了解PHP底层实现的目的是什么?动态语言要像用好首先得了解它,内存管理、框架模型值得我们借鉴,通过扩展开发实现更多更强大的功能,优化我们程序的性能。1. PH...
2018-07-20 10:54:48
140
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人