TL;DR

Yaf 版本为 2.3.0

本篇主要简单记录了:

  • yaf.c
  • yaf_application.c
  • yaf_bootstrap.c
  • yaf_controller.c
  • yaf_dispatcher.c
  • yaf_exception.c
  • yaf_loader.c
  • yaf_plugin.c
  • yaf_registry.c

源码阅读过程中的一些问题和理解。

阅读全文 »

TL;DR

ES 中的索引想要减小体积,可以尝试通过如下几个方法实现:

  • 使用合适的模板字段映射类型
  • 减少不必要的字段
  • 对无需检索的字段关闭分词

此外索引个数不宜过多,影响集群操作以及集群恢复速度,适当关闭,合并,提前建立索引。

阅读全文 »

TL;DR

PHP实现守护进程可以通过 pcntlposix 扩展实现。

编程中需要注意的地方有:

  • 通过二次 pcntl_fork() 以及 posix_setsid 让主进程脱离终端
  • 通过 pcntl_signal() 忽略或者处理 SIGHUP 信号
  • 多进程程序需要通过二次 pcntl_fork() 或者 pcntl_signal() 忽略 SIGCHLD 信号防止子进程变成 Zombie 进程
  • 通过 umask() 设定文件权限掩码,防止继承文件权限而来的权限影响功能
  • 将运行进程的 STDIN/STDOUT/STDERR 重定向到 /dev/null 或者其他流上

如果要做的更好,还需要注意:

  • 如果通过 root 启动,运行时更换到低权限用户身份
  • 及时 chdir() 防止操作错误路径
  • 多进程程序考虑定时重启,防止内存泄露
阅读全文 »

TL;DR

订单最后都要关联到上层支付系统(如微信/支付宝/Apple Pay)之上,使用 HTTP API 进行操作时会存在未知状态,可以通过实现各个操作之间的幂等接口,结合回调与状态查询,实现各层系统之间状态最终一致。

阅读全文 »