首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Symfony2和Redis正名,基于PHP的10亿请求周网站打造

【编者按】如果你还在Symfony2和Redis使用中存在这样的错误观念:不能使用Redis作为主要存储;Symfony2的功能很多,以至于它的运行很慢,那么不妨看向Octivi的高请求网站打造。...以下为译文: image.png 有人说Symfony2像其它的复杂框架一样,很慢,但是我们认为这一切取决用户的本身。本文将介绍基于Symfony2,每周执行10亿多个请求的应用的软件架构细节。...来自单个程序节点的性能统计: Symfony2实例每秒处理700个请求,每个请求平均响应时间30毫秒 Varnish每秒处理12000多个请求(通过压力测试获得) 注意,如下面所描述的,整个平台包括许多这种节点...因为所有的注释都很好的存储下来了,所以没有什么令人费解的地方—最后所有的东西都是纯PHP代码。...Symfony2监控—Monolog和Stopwatch 应用使用Monolog记录意料之外的行为,捕获错误信息。我们使用多个信道获取不同应用模块的分离的日志。

4.3K50
您找到你想要的搜索结果了吗?
是的
没有找到

『GCTT 出品』PHP 不会死 —— 我们如何使用 Golang 来阻止 PHP 走向衰亡

当一个请求发送时,php-fpm 启动一个 PHP 子进程,并且将请求内容作为进程状态的一部分(_GET,_POST 和 _SERVER等)。...当然,所有用户输入数据都可以方便地放在一个对象(Symfony/HttpFoundation 或 PSR-7)。框架用起来是那么得心应手! 但任何事都有两面性。...你刚刚启动的所有代码现在变得无用,并且永远不能拿来处理另一个请求。若是说给任何使用 PHP之外的开发人员听,他们一定会对此满脸困惑,不能理解。...最终实现看起来流程如下: ---- 介绍 RoadRunner- 一个高性能的 PHP 应用服务器 我们最初的测试用例是一个用于后端的API,它经常难以预测的出现突发请求的次数比平时高出许多倍的情况。...虽然在大多数情况下 nginx 可以帮忙处理,但是出现 502 错误的情况会频繁发生,因为我们无法预料到什么时候负载增加,做不到在负载增加之前快速地平衡系统。

60230

PHP 不会死 —— 我们如何使用 Golang 来阻止 PHP 走向衰亡

当一个请求发送时, php-fpm 启动一个 PHP 子进程,并且将请求内容作为进程 状态的 一部分( _GET , _POST 和 _SERVER 等)。...当然,所有用户输入数据都可以方便地放在一个对象( Symfony/HttpFoundation 或 PSR-7 )。框架用起来是那么得心应手! 但任何事都有两面性。...你刚刚启动的所有代码现在变得无用,并且永远不能拿来处理另一个请求。若是说给任何使用 PHP 之外的开发人员听,他们一定会对此满脸困惑,不能理解。...介绍 RoadRunner- 一个 高性能的 PHP 应用服务器 我们最初的测试用例是一个用于后端的 API,它经常难以预测的出现突发请求的次数比平时高出许多倍的情况。...虽然在大多数情况下 nginx 可以帮忙处理,但是出现 502 错误的情况会频繁发生,因为我们无法预料到什么时候负载增加,做不到在负载增加之前快速地平衡系统。

1.2K10

nginx rewrite 规则的配置

nginx、Apache 提供了强大的 rewrite 功能,在实际使用中,也十分的方便,比如消息的转发或网站默认页面或出错页面的处理等。...nginx 配置中可以出现的变量,同时也可以通过 set 指令创建变量。 可以通过第三方模块 echo-nginx-module 查看配置中 相应变量的值。...request_completion 如果请求成功,设为"OK";如果请求未完成或者不是一系列请求中最后一部分则设为空 request_method 这个变量是客户端请求的动作,如GET或POST request_uri...,则说明在 rewrite 后去掉原请求所有参数。 rewrite ^/users/(.*)$ /show?user=$1? last; 3.7. set 指令 创建自定义变量。...PHP 框架隐藏入口 php 下面这个配置来源于 php 框架 Symfony 手册,用来隐藏作为入口的 app.php。 所有请求全部被重定向到 app.php 下。

3.4K20

接口设计的18条军规

这样第三方平台就知道是API接口出现了内部问题,但不知道具体原因,他们可以找我们排查问题。 我们可以在内部的日志文件中,把堆栈信息、数据库信息、错误代码行数等信息,打印出来。...也就是说要支持在极短的时间内,第三方平台用相同的参数请求API接口多次,第一次请求数据库会新增数据,但第二次请求以后就不会新增数据,但也会返回成功。 这样做的目的是不会产生错误数据。...通常情况下,建议一次请求中的参数,最多支持传入500条记录。 如果用户传入多余500条记录,则接口直接给出提示。 建议这个参数做成可配置的,并且要事先跟第三方平台协商好,避免上线后产生不必要的问题。...接口文档中需要包含如下信息: 接口地址 请求方式,比如:post或get 请求参数和字段介绍 返回值和字段介绍 返回码和错误信息 加密或签名示例 完整的请求demo 额外的说明,比如:开通ip白名单。...请求头 对于一些公共的功能,比如:接口的权限验证,或者接口的traceId参数。 我们在设计接口的时候,不用把所有的参数,放入接口的请求参数中。 有些参数可以放到Header请求头中。

10710

前端架构带你 封装axios,一次封装终身受益!

前言(为何做) 过去的一段时间,我认为 接口请求 封装是前端的必修课。只要是写过生产环境前端代码的人,应该脱离不了异步接口请求,那么 接口请求 的 封装 是必经之路。...我才发现她们代码中的 接口请求 ,都是没有任何的封装,直接采用以下方式进行: axios.post(`/api/xxxx/xxxx?...这其中可以归为两类, 一类是 针对单独接口的处理 二类是 针对所有接口需要的内容 针对单独接口的处理 请求前的参数处理 请求后的返回值处理 针对所有接口的处理 Post Get Put Del 拦截器...开发顺序 随着我们要做的内容越来越多,我们希望它有一个顺序以便于我们按部就班的开发(相信大家对开发中出现的不确定性深恶痛绝)。 以便于我们按照流程,无意外、无惊喜 的完成此次封装。...在我们的开发中,我们基本要遵循先处理通用内容在处理个性化内容的逻辑: 针对所有接口的处理(Get) 请求拦截 响应拦截 针对单独接口的处理 封包处理 针对所有接口的处理(Post、Put、Del) tips

4.2K20

Nginx 502错误触发条件与解决办法汇总

一些运行在Nginx上的网站有时候会出现“502 Bad Gateway”错误,有些时候甚至频繁的出现。...在upstream配置里有这么一项配置:proxy_next_upstream,这个配置指定了nginx在从一个后端主机取数据遇到何种错误时会转到下一个后端主机,里头写上的就是会出现502的所有情况拉,...http_500指定后端返回500错误时会转一个主机,后端的jsp出错的话,本来会打印一堆stacktrace的错误信息,现在被502取代了。...因为php是把请求轮询给每个children,在大流量下,每个childre到达max_requests所用的时间差不多,这样就造成所有的children基本上在同一时间被关闭。...6、request_terminate_timeout 如果主要是在一些post或者数据库操作的时候出现502这种情况,而不是在静态页面操作中常见,那么可以查看一下php-fpm.conf设置中的一项:

2.5K30

Laravel源码解析之Request

Illuminate\Http\Request类在Laravel框架中就是对客户端请求的抽象,它是构建在 Symfony框架提供的Request组件基础之上的。...Symfony Request 实例的创建是通过PHP中的超级全局数组来创建的,这些超级全局数组有 $_GET, $_POST, $_COOKIE, $_FILES, $_SERVER涵盖了PHP中所有与...HTTP请求相关的超级全局数组,创建Symfony Request实例时会根据这些全局数组创建Symfony Package里提供的 ParamterBag ServerBag FileBag HeaderBag...实例,这些Bag都是Symfony提供地针对不同HTTP组成部分的访问和设置API, 关于Symfony提供的 ParamterBag这些实例有兴趣的读者自己去源码里看看吧,这里就不多说了。...Laravel应用中我们就能方便的应用它提供的能力了,在使用Request对象时如果你不知道它是否实现了你想要的功能,很简单直接去 Illuminate\Http\Request的源码文件里查看就好了,所有方法列在了这个源码文件里

2.3K20

面试题五期-中高级测试工程师基础知识必备之selenium篇

URL的编码格式采用的是ASCII编码,而不是uniclde,即是说所有的非ASCII字符都要编码之后再传输。 POST请求POST请求会把请求的数据放置在HTTP请求包的包体中。...13.公司内一直在使用的测试系统(B/S架构)突然不能访问了,需要你进行排查并恢复,说出你的检查方法 答: 一.网站输入域名直接无法访问,网站之前还正常,突然就无法访问 1....二.访问报404错误(无法找到该页)。说明是网站内容正常是程序出现问题,看看程序是否完整。...三.访问网站出现MySQL Server Error 这个是数据库链接错误,查看数据库连接文件和数据库是不是错误。 四.访问网站出现500错误。 1....如果空间且FTP程序目录没有缺失文件或刚刚安装就出现500错误,请确认空间已开启scandir()函数,查看是不是禁止了这个函数。 14.webdriver client的原理是什么?

85910

EasyWeChat初体验

], ]; 经常出现的一些问题(如CA认证): 在微信公众平台开发的道路上,遍布着各种大大小小的坑,有的人掉坑里,几经折腾又爬出来了,然后拍拍屁股走人。...所有实际调起微信支付请求的页面都必须要所配置的支付授权目录之下。...这种情况下如果你尝试反复停用和启用服务器配置,可能突然间惊奇地了现,问题莫名其妙的解决了。...请开发者理解服务器 TOKEN 验证原理(官方文档有说明)并谨记服务器验证时使用 GET 方式访问,而公众平台向你的服务器发送消息/数据则使用 POST 方式,所以服务器验证成功之后,在某些启用了 CSRF...在使用了 Xdebug 的环境下可能出现这个问题。这是由于 Xdebug 限制函数嵌套的最大层级数(默认为100),当嵌套次数达到该值便会触发 Xdebug 跳出嵌套并报此错误

3.7K70

使用HAProxy、PHP、Redis和MySQL支撑10亿请求每周架构细节

状态: 服务器 3个应用程序节点 2个MySQL+1个备份 2个Redis 应用程序 应用程序每周处理10亿请求 峰值700请求每秒的单Symfony2实例(平均工作日约550请求每秒) 平均响应时间...这样一来我们可以保持服务的足够简单,在处理扩展和代码相关问题时具有巨大的优势,可谓各司其职,完美无缺。...在一年的维护之后,API方法中发生了数不尽的变化。...比如,请求信息在调用前会传送给一个外部Web服务;事情发生后从API调用响应。 Error,当错误发生时请求流并未被终止,比如第三方API错误响应。 Critical,应用程序崩溃的瞬间。...系统中有一个主日志文件,记录了所有应用程序级错误,以及各个channel的短日志,从单独的文件中记录了来自各个channel的详细日志。

2.8K60

前端构建 DevOps - 搭建 DevOps 基础平台(中)

后端模块 DevOps - Gitlab Api使用(已完成,点击跳转) DevOps - 搭建 DevOps 基础平台(已完成 50%)基础平台搭建上,点击跳转 DevOps - Gitlab CI...如图每个工程共享一个 version 版本号,分支创建分为版本升级、特性更新、修订补丁三种模式,强制项目所有分支创建的命名规则都会升级,不会出现重复跟降级。 ?...上述流程的优点: 工程使用固定的版本锁死,版本对应需求流程,上线质量得到保障 每个开发分支只能部署到测试环境,必须合并到合并到对应的版本分支之后才能上生产 所有合并到 master 或者 relase...错误的详细错误内容不返回给客户端,因为可能包含敏感信息 error.code = 500; error.errsInfo = status ===...,添加错误中间件拦截全局异常,如果出现自定义异常抛出的时候,则处理全局异常,否则统一抛出 500 错误,去除敏感信息。

1.2K21

API OWASP 标准

requests 没有请求正文 POST 用于创建和更新数据?...HTTP 状态码 404 用于错误的 URL 400 -responses 有特定错误的附加信息(例如缺少必需的属性) 当 API 使用者使用错误的凭证时使用 401 -response 403 使用有效但请求...API 使用者无法访问的端点或尝试使用他们不允许执行的操作 500 - 当存在 API 使用者无法通过更改请求来解决的内部处理问题时响应 500 -responses 具有特定于应用程序的错误代码...有效负载本地化支持或可通过 API 访问的本地化值? 支持错误消息本地化吗? 额外的安全性 所有端点至少受到客户端特定 API 密钥的保护,即使它们是公开可用的(反农业)?...规范包含标准格式的请求和响应示例,API 文档根据规范、模式和示例自动生成 POST, PUT: 201 为创建新资源而创建 来自客户端的 400 个错误请求,例如缺少必需的查询参数 白名单:POST

2.6K20

程序员入职避免挨骂小知识-RESTful风格

,可能会出现以下几种API接口设计,且发送的请求方式以及响应结果也比较可能随意 : http://localhost/employee/save http://localhost/employee/add...这意味着,所有资源的状态保存在服务器端。因此,如果客户端想要操作服务器,须使用HTTP方法去促使服务器端资源发生状态改变。...400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。...410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。 422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。...500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。

59430
领券