* 服务化框架:

  • 内部模块服务化 rpc
  • alibaba HSF dubbo(Java)
  • Facebook thrift (C++, Java, Python, ruby, php)
  • google grpc
  • twitter finagle
  • php swool

* 为什么要自己造轮子

  • 简单可控,自成体系: 采用标准数据格式: URL + JSON
  • 高性能要求和追求
  • 只有rpc还不够

* PSF 架构示意图

php高性能服务化框架_吹牛系列

* 架构解读

  • service center服务注册和服务发现 负载均衡
  • 多台service center机器相互独立
  • client直连和service机器连接和通信
  • 基于连接数的负载均衡

* PSF server工作机制

php高性能服务化框架_运维_02

* 工作机制解读

  • client和service通过socket通信
  • manager进程和worker进程通过pipe通信
  • manager进程为C进程
  • worker进程为php进程。用C实现基于pipe通信的处理框架,调用php处理函数

* PSF特点: 高效灵活

  • powered by C: 用C实现php rpc应用服务器, C接管了网络连接和网络IO, 性能好,框架层面不存在性能瓶颈
  • 改变php运行方式: php以后台daemon方式高效运行
  • 简介高效的协议: 采用IP直连的长连接

* PSF对比web server优势明显

  • daemon vs request
  • 不需要负载均衡层
  • 不需要域名解析
  • 协议非常简洁,协议头只有10字节。没有臃肿的http header, 如 accept、host、content-type、Content-Length etc.

* PSF IO性能优势

  • linux epoll 封装, 支持FreeBSD 和Solaris
  • 每个链接预分配buffer
  • 网络超时管理使用时间轮
  • 日志定时刷到硬盘

* PSF依赖的基础库

  • libfastcommon
  • libserverframe

* PSF 程序以及php扩展

  • psf-server: psf_server_managerd, psf_service_centerd
  • psf-tool: psf_stat, psf_server_stat, psf_client_call
  • psf_server_worker
  • psf_client_sdk
  • psf-tsar-module: tsar插件

* PSF 原生service编写

<?php

$start = $argc - 4;
$read_fd = $argv[$start];
$write_fd = $argv[$start + 1];
$handle = psf_worker_init($read_fd, $write_fd, function($service_uri, $data) {
    // ...
});
psf_worker_loop($handle);

* service 中使用全局变量

  • 尽可能兼顾web程序开发方式
  • 支持url方式,注入$_REQUEST自动识别body中的URL encoded数据
  • 支持HTTP header, 注入$_SERVER

* PHP RPC 框架

psf_php_client_sdk_call('driver', ‘auth/ checkSession?user_id=12345&sid=888888’, ‘’, 30);

class file:Driver/Service/Auth/Auth.php

class Auth {

public static function checkSession($params, $data) {

// ...

}

}

* PSF发展历程

2014年9⽉月发布第⼀一个版本

• 使⽤用PSF的模块(10+):

1. 设备认证 2. ⻛风控系统 3. 消息中⼼心 4. 设备中⼼心 5. 新订单 6. 新派单

 

* 订单和派单系统重构

• 使⽤用PHP 7.0
• PHP服务进程数40-80

• PHP本地缓存:ConfigCache • 后端资源全部采⽤用⻓长连接

   DB:DBConnection & DB & PartitionDB

   Cache:PartitionRedis

 

* DBConnection简介

• 连接复⽤用:连接基于DB机器,⽽而不是database
• DBConnectionCache

 

* PartitionRedis简介

• 采⽤用 M * N⽅方式,配置简单

• 数据分⽚片,按key求模

• failover机制:所有机器构成⼀一个 环,后为前备

• 数据预热加载机制:onConnected 回调函数

* 性能表现

• 设备中⼼心:单机峰值QPS达到 20k,

平均RT不到0.5ms
• 新⽼老订单系统对⽐比:

RT:30ms vs 3ms 机器数:20台 vs. 5台

 

SoftCon2016 PHP