整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

百万pv级PHP网站架构和高并发架构方案,PHP程序员必掌握

了解过世界最大的PHP站点,Facebook的后台技术后,今天我们来了解一个百万级PHP站点的网站架构:Poppen.de。Poppen.de是德国的一个社交网站,相对Facebook、Flickr来说是一个很小的网站,但它有一个很好的架构,融合了很多技术,如 Nigix、MySql、CouchDB、Erlang、Memcached、RabbitMQ、PHP、Graphite、Red5以及Tsung。

Poppen.de目前有200万注册用户数、2万并发用户数、每天20万条私有消息、每天25万登录次数。而项目团队有11个开发人员,两个设计,两个系统管理员。该站点的商业模式采用免费增值模式,用户可以使用搜索用户、给好友发送消息、上载图片和视频等功能。

如果用户想享受不受限制发送消息和上载图片,那么就得根据需要支付不同类型的会员服务,视频聊天及网站其他服务也采用同样的策略。

Nginx

Poppen.de 所有的服务都是基于Nginx服务上的。前端有两台Nginx服务器在高峰期提供每分钟15万次请求的负载,每个机器已经有四年寿命,并且只有一个CPU 和3GB RAM。Poppen.de拥有三台独立的图像服务器,由三台Nginx服务器为*.bilder.poppen.de提供每分钟8万次请求服务。

Nginx 架构中一个很酷的设计就是有很多请求是由Memcached处理的,因此请求从缓存中获取内容而不需要直接访问PHP机器。比如,用户信息页(user profile)是网站需要密集处理的内容,如果把用户信息页全部缓存到Memcached上,那么请求直接从Memcached上获取内容。 Poppen.de的Memcached每分钟可以处理8000次请求。

架构中有三个Nginx图像服务器提供本地图像缓存,用户上载图 像到一个中央文件服务器。当向这三个Nginx之一中请求图像时,如果服务器本地中没有存在该图像,则从中央文件服务器下载到该服务器上作缓存并提供服 务。这种负载均衡的分布式图像服务器架构设计可以减轻主要存储设备的负载。

到了这里可能很多人会觉得这些有些难懂, 没关系,我为大家准备了一套精品PHP教程,里面涵盖Nginx,Memcached学习教程,如果你已经会了,想要精通进阶中高级PHP,我这里也有专注于PHP中高级进阶的教程,点击下方标题链接即可获取方法!

全套laravel框架、ThinkPHP框架全套教程分享,PHP程序员福利!

PHP开发三年只懂增删改查?那是你没有规划好php学习路线

PHP-FPM

该网站运行在PHP- FPM上。共有28台双CPU、6GB内存的PHP机器,每个机器上运行100个PHP-FPM的工作线程。使用启用了APC的PHP5.3.x。 PHP5.3可以降低CPU和内存使用率的30%以上。

程序代码是基于Symfony1.2框架之上开发的。一是可以使用外部资源,二是 能够提高项目开发进度,同时在一个著名的框架上可以让新开发人员更容易加入到团队中来。虽然没有任何事情都是十全十美的,但可以从Symfony框架中得 到很多好处,让团队可以更多的精力放在Poppen.de的业务开发上去。

网站性能优化使用XHProf,这是Facebook开源出来的一个类库。这个框架非常容易个性化和配置,能够可以缓存大部分高代价的服务器计算。

MySQL

MySQL是网站主要的RDBMS。网站又几个MySql服务器:一台4CPU、32GB的服务器存储用户相关信息,如基本信息、照片描述信息等。这台机器已经使用了4 年,下一步计划会使用共享集群来替换它。目前仍基于这个系统上进行设计,以简化数据访问代码。根据用户ID进行数据分区,因为网站中大部分信息都是以用户 为中心的,如照片、视频、消息等。

有三台服务器按主-从-从配置架构提供用户论坛服务。一台从服务器负责网站自定义消息存储,到现在有 2.5亿条消息。另外四台机器为主-从配置关系。另外由4台机器配置成NDB族群专门服务于密集型写操作数据,如用户访问统计信息。

数据表设计尽量避免关联操作,尽可能缓存最多的数据。当然,数据库的结构化规范已经完全被破坏掉了。因此,为了更容易搜索,数据库设计创建了数据挖掘表。大部分表是MyISAM型表,可以提供快速查找。现在的问题是越来越多的表已经全表锁住了。Poppen.de正考虑往XtraDB存储引擎上迁移。

Memcached

网站架构中Memcached应用相当多,超过45GB的高速缓存和51个节点。缓存了Session会话、视图缓存以及函数执行缓存等。架构中有一个系统 当记录被修改时可以自动地把数据更新到缓存中去。未来改善缓存更新的可能方案是使用新的Redis Hash API或者MongoDB。

RabbitMQ

在 2009年中开始在架构中使用RabbitMQ。这是一个很好的消息解决方案,便于部署和集中到这个架构中去,在LVS后运行了两台RabbitMQ服务 器。在上个月,已经把更多的东西集成到该队列中,意味着同一时刻有28台PHP服务器每天要处理50万次请求。发送日志、邮件通知、系统消息、图像上载等 更多的东西到这个队列中。

应用PHP-FPM中的fastcgi_finish_request()函数集成队列消息,可以把消息异步发 送到队列中。当系统需要给用户发送HTML或JSON格式响应时,就调用这个函数,这样用户就没有必要等到PHP脚本清理。

这个系统可以改善架构资源管理。例如,在高峰期服务每分钟可以处理1000次登录请求。这表示有1000并发更新用户表保存用户的登录时间。由于使用了队列机制,可以 按相反的顺序来运行这些查询。如果需要提高处理速度,只需要增加更多的队列处理者即可,甚至可以增加更多的服务器到这集群中去,而不需要修改任何配置和部 署新节点。

CouchDB

日志存储CouchDB运行在一台机器上。在这台机器上可以根据模块/行为进行日志查询 /分组,或者根据错误类型等等。这对定位问题非常有用。在使用日志聚合服务CouchDB之前,不得不逐台登录到PHP服务器上设法日志分析定位问题,这 是非常麻烦的。而现在把所有的日志集中到队列中保存到CouchDB中,可以集中进行问题检查和分析。

Graphite

网站使用Graphite采集网站实时信息并统计。从请求每个模块/行为到Memcached的命中和未命中、RabbitMQ状态监控以及Unix负载等等。Graphite服务平均每分钟有4800次更新操作。实践已经证实要监测网站发发生什么是非常有用的,它的简单文本协议和绘图功能可以方便地即插即 用的方式用于任何需要监控的系统上。

一件很酷的事情是使用Graphite同时监控了网站的两个版本。一月份部署了Symfony框架新 版本,以前代码作为一个备份部署。这就意味着网站可能会面临性能问题。因此可以使用Graphite来对两个版本在线进行对比。

发现新版本上的Unix负载表较高,于是使用XHProf对两个版本进行性能分析,找出问题所在。

Red5

网站为用户也提供了两种类型的视频服务,一种是用户自己上载的视频,另外一种是视频聊天,用户视频互动和分享。到2009年年中,每月为用户提供17TB的流量服务。

Tsung

Tsung 是一个Erlang编写的分布式基准分析工具。在Poppen.de网站中主要用于HTTP基准分析、MySQL与其他存储系统(XtraDB)的对比分 析。用一个系统记录了主要的MySQL服务器的流量,再转换成Tsung的基准会话。然后对该流量进行回放,由Tsung产生数以千计的并发用户访问实验 室的服务器。这样就可以在实验环境中与真实场景非常接近。

文主要简析两个国产的PHP框架ThinkPHP与SpeedPHP。通过学习发现,它俩在很多方面有着相似但又不同的地方:

1.单一入口,二者都是单一入口文件。每个app都需要一个入口文件,且只能有一个入口文件。ThinkPHP生而就有多app支持的功能,比如在根目录下建一个index.php,一个admin.php,其中index.php是前端app的入口,而admin.php则作为后台app的入口。配置方法类似,只是define(‘APP_PATH’,’apppth’)和define(‘APP_NAME’,’appname’)略有不同而已。SpeedPHP尽管默认支持单app,但通过合理配置模板目录也可以实现这样的功能,只是模板自动输出功能就用不上了,只好手动写模板输出代码。

2.模板变量赋值和输出模板。先说ThinkPHP,它给模板变量赋值是这样的:$this->assign(‘var’,$var2),SpeedPHP中给模板变量赋值使用$this->var=$var2,其中两个$var都是模板中要使用的变量,$var2则为控制器中的变量。模板输出两个框架相同,都使用: $this->display(‘templatepath’) .

3.数据模型。两个框架都是在Model中定义,不同的是ThinkPHP在类中几乎不用写任何代码,只要把类名和数据库名保持一致就行,而SpeedPHP则需要手动指定数据库表和主键。使用的时候都要先实例化。

4.模板方面:ThinkPHP支持多种模板,默认使用自已研发的Think模板系统,据说比Smarty要快,这点无从考证;SpeedPHP支持的模板较少,默认使用smarty。

5.数据处理:个人感觉ThinkPHP的数据处理要比SpeedPHP强大的多,不仅表现在查询语言上,而且它支持在多个模型中动态切换且不丢失数据。

6.安全性方面:ThinkPHP自身集成了安全验证功能,SpeedPHP没有,需自己实现。

总之,个人认为SpeedPHP的性能优于ThinkPHP了,因此在项目开发中首选后者较为妥当。

转载来自http://blog.kiccp.com/321.html

本站文章除注明转载外,均为本站原创或翻译

发一个管理后台,工作往往是繁琐而又重复的:用户登录、权限管理、图表展示、控制面板、增删改查等等,同时,需求也是多种多样的:电商系统、问答社区、客服系统、仓库管理等等,五花八门。能不能有一个框架,能直接搭建好项目骨架,让开发者专心于业务开发呢?FastAdmin或许是一个不错的选择。


简介

FastAdmin,是 karson 在 Gitee 上开源的后台开发框架,仓库位于 https://gitee.com/karson/fastadmin,目前版本为 v1.3.3.20220121。

FastAdmin 基于 ThinkPHP+Bootstrap,能够快速进行管理后台的开发。FastAdmin提供了强大的命令行工具,能够一键生成代码、一键管理插件等,提供了丰富的插件选择,基于MVC设计模式,基于模块化设计,共分为:前台、API、后台和公共等四大部分等。


使用

FastAdmin 的特性包括:

  • 基于Auth验证的权限管理系统
  • 支持无限级父子级权限继承,父级的管理员可任意增删改子级管理员及权限设置
    • 支持单管理员多角色
    • 支持管理子级数据或个人数据
  • 强大的一键生成功能
    • 一键生成CRUD,包括控制器、模型、视图、JS、语言包、菜单、回收站等
    • 一键压缩打包JS和CSS文件,一键CDN静态资源部署
    • 一键生成控制器菜单和规则
    • 一键生成API接口文档
  • 完善的前端功能组件开发
    • 基于AdminLTE二次开发
    • 基于Bootstrap开发,自适应手机、平板、PC
    • 基于RequireJS进行JS模块管理,按需加载
    • 基于Less进行样式开发
  • 强大的应用插件扩展功能,在线安装卸载升级应用插件
  • 通用的会员模块和API模块
  • 共用同一账号体系的Web端会员中心权限验证和API接口会员权限验证
  • 二级域名部署支持,同时域名支持绑定到插件
  • 支持大文件分片上传、分片直传、剪切板粘贴上传、拖拽上传,进度条显示,图片上传前压缩
  • 支持列表跨页选择记忆、分页大小记忆、左右固定列
  • 强大的应用模块支持(CMS、简单商城、知识付费问答、在线投票系统、Shopro商城、Fastflow工作流、CRM客户关系管理)
  • 支持CMS、博客、知识付费问答无缝整合Xunsearch全文搜索
  • Uniapp微信小程序支持(CMS小程序、活动报名小程序、民宿酒店预订小程序、问答小程序、简单商城小程序、Shopro商城小程序)
  • 整合第三方短信接口(阿里云、腾讯云短信)
  • 无缝整合第三方云存储(七牛云、阿里云OSS、又拍云)功能
  • 第三方富文本编辑器支持(Summernote、Nkeditor、百度编辑器)
  • 第三方登录(QQ、微信、微博)整合
  • 第三方支付(微信、支付宝)无缝整合,微信支持PC端扫码支付
  • 丰富的插件应用市场


使用FastAdmin,首先进行安装,要求环境如下:

PHP >= 7.1 且 <= 7.3 (推荐PHP7.1版本)
Mysql >= 5.6 (需支持innodb引擎)
Apache 或 Nginx
PDO PHP Extension
MBstring PHP Extension
CURL PHP Extension
Git (用于源代码的版本管理)
Node.js (可选,用于安装Bower和LESS,同时打包压缩也需要使用到)
Composer (可选,用于管理第三方扩展包)
Bower (可选,用于管理前端资源)
Less (可选,用于编辑less文件,如果你需要增改css样式,建议安装上)

下载安装包后,

  1. 将下载的完整包解压到你的站点项目目录,不支持放在二级目录。
  2. 添加站点并绑定到项目中的public目录为运行目录。
  3. 访问你的项目域名进行安装,比如:https://demo.fastadmin.net/install.php 。
  4. 为了安全,安装完成后会在public目录生成随机后台入口,请通过随机后台入口登录管理后台。

安装完成后,就能进入后台了:

FastAdmin基于ThinkPHP5强大的命令行功能扩展了一系列命令行功能,可以很方便的一键生成CRUD、生成权限菜单、压缩打包CSS和JS、启用禁用插件等功能,如

//生成fa_test表的CRUD
php think crud -t test
//生成fa_test表的CRUD且一键生成菜单
php think crud -t test -u 1
//删除fa_test表生成的CRUD
php think crud -t test -d 1
//生成fa_test表的CRUD且控制器生成在二级目录下
php think crud -t test -c mydir/test

在FastAdmin中默认有四个应用模块:admin、api、common、index,你也可以扩展开发自己的应用模块。

  • 后台模块(admin)是FastAdmin中的核心模块,后台模块又分为系统配置、附件管理、分类管理、插件管理等多个功能模块,更多的功能模块可以在插件管理中自由的安装和卸载。后台的前端是基于AdminLTE和Bootstrap进行了大量二次开发,采用RequireJS进行JS模块化管理和加载。
  • 前台模块(index)的结构和后台功能类似,具体请参考后台模块的章节
  • 公共模块(common)是一个特殊的模块,默认是禁止直接访问的,一般用于放置一些公共的类或其它模块的继承基类等。
  • Api模块(api)通常用于对接APP,用于向APP提供接口,目前FastAdmin暂未提供API相关的插件和文档,你可以直接参考ThinkPHP5官方的文档。

FastAdmin插件丰富,提供了插件市场,能够随时获取各类插件,并直接在后台进行安装和管理:


总结

FastAdmin 基于 ThinkPHP+Bootstrap,提供了强大的命令行工具,能够一键生成代码、一键管理插件等,提供了丰富的插件选择,充分利用了ThinkPHP实现了高效可扩展的开发流程,能够快速完成管理后台的开发。