Mysql 锁

锁是计算机协调多个进程或线程并发访问某一资源的机制。Mysql 是一个支持插件式存储引擎的数据库系统,不同的存储引擎的锁机制会有较大区别。MySQL 中锁的种类很多,有常见的表锁行锁,也有新加入的 Metadata Lock 等等。比如,MyISAM 和 MEMORY 存储引擎采用的是表级锁(table-level locking);BDB 存储引擎采用的是页面锁(page-level locking),但也支持表级锁;InnoDB 存储引擎既支持行级锁(row-level locking),也支持表级锁,但默认情况下是采用行级锁。

Yii2 实现 RESTful 原理

Yii 从版本 Yii2 开始提供了一整套用来简化实现 RESTful 风格的 Web Service 服务的 API,这让我们借助于 Yii2 框架能非常容易的去实现一个 RESTful 风格的 API 。而要能够实现这个功能,就需要做到请求接收,解析请求提取出 verb 和参数,对请求进行路由,授权验证,访问限制,访问和操作资源,对返回结果格式化等功能的支持。

php5.3 升级到 php5.6

项目中因要用到 Yii2 框架,而 Yii2 框架中的一些特性是在 php5.3 之后(php5.4.0+)才开始支持的。故需要将 php 做一次升级。而之前的 php 项目(比较重)为了统一版本标准也打算一并升级到 PHP5.6,5.6 相对于 PHP5.3 而言有巨大的改进。为了能顺利完成这次版本升级,需要解决对升级过程过程可能遇到的兼容问题。

进程、线程、协程

概述

先了解并发和并行的区别:

  1. —并发(concurrency):逻辑上具备同时处理多个任务的能力。
  2. 并行(parallesim):物理上在同一时刻执行多个并发任务,依赖多核处理器等物理设备。

多线程或多进程是并行的基本条件,但单线程也可用协程做到并发。通常情况下,用多进程来实现分布式和负载平衡,减轻单进程垃圾回收压力;用多线程抢夺更多的处理器资源;用协程来提高处理器时间片利用率。现代系统中,多核 cpu 可以同时运行多个不同的进程或者线程。

Ioc 是什么东西?

Ioc 即控制反转(Inversion of Control)。是一个重要的面向对象编程的法则,通过对“控制权进行反转”来实现解耦。它遵循于依赖倒置原则。而实现控制反转最广泛的就是依赖注入(Dependency Injection,简称 DI)设计模式,常见的还有另外一种叫做“依赖查找”(Dependency Lookup)。本文将主要关注依赖注入设计模式。代码使用 DI 设计模式就可以实现 Ioc 从而也就遵循了依赖倒置原则,而依赖倒置原则在实践中被证明是一种有效的策略。

更好地使用 MongoDB 索引

MongoDB 是类似于关系型数据库的非关系型数据库,同样 MongoDB 的索引在概念上和大多数关系型数据库如 MySQL 是一样的。但在一些细节也存有差异,在使用 MongoDB 索引时需要谨慎,否则容易掉坑!本文将在索引方面把容易产生误解、误用的一些地方整理出来,使得我们能更畅快地使用 MongoDB。

谈谈 PHP 代码规范

我向往这样一个 php 世界,里面没有代码规范之争。你我都一样,都遵循着一套如宪法般的规范,就像 golang 世界一样。统一的命名法则,统一的缩进方式。而现实世界却让人落差很大,每个不同的团队就像不同的国家,都颁布有自己的法律。穿梭于 N 个团队之间你就得去适应 N 套规范。

LNMP 架构网站全链路调优

在基于 lnmp 架构做网站或者提供应用接口时,在生产环境能正常工作后我们就会面对永无止境的优化,优化,再优化处境。一个网站慢的原因五花八门,每一处技术的使用不当都可能是响应时间不理想的罪魁祸首。接下来将从一个用户点开一个链接或打开一个应用到与服务端的交互的一个链路来整理那些我们能轻松做到的调优方法。

分别使用 Memcached、Redis、Mysql 实现分布式锁

我们有时会遇到这么一种情况:某个接口只能同时一个用户或者同一个用户不能同时访问。也就是防并发请求问题。这种场景在实现上可以通过锁的方式,就是在 php 接到请求后执行业务代码前加上锁,执行完成后释放锁。

简单理解 RPC

RPC(Remote Procedure Call Protocol)—— 远程过程调用协议。这个概念术语在上世纪 80 年代由 Bruce Jay Nelson 提出。它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC 协议假定某些传输协议的存在,如 TCP 或 UDP,为通信程序之间携带信息数据。在 OSI 网络通信模型中,RPC 跨越了传输层和应用层。RPC 使得开发包括网络分布式多程序在内的应用程序更加容易。

RPC 采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。

在 php 中使用 strace、gdb、tcpdump 调试工具

在 php 中我们最常使用调试方式是输出打印方式,比如通过 echo、var_dump 输出信息到终端或者通过 fwrite、file_put_contents 将信息写入到文件中。这种普通方式能帮我们解决绝大部分调试问题。但仍然有些问题是需要借助其他工具来分析的,比如死循环,程序执行时间超预期,占用 cpu 过高,php 内核或者扩展错误等场景,这时如果借助 strace、gdb、tcpdump 这样的工具就能很好的去帮助我们定位问题。