高性能服务器架构思路(一)——缓冲策略
【分享】HTTP 状态码 451:基于法律上的原因,我不能向你展示网页内容
几天前GitHub一个repo由于某个原因而无法从国内访问,当我打开ChromeDevTools时,发现了一个新的HTTP状态码——451。我们先看看维基百科对这个状态码的介绍:在电脑网络领域中,HTTP451因法律原因不可用(英语:HTTP451UnavailableForLegalReasons)是一种HTTP协议的错误状态代码,当用户请求访问某个经政府审核等查核方法后认定不合法的来源时,就会显示这个错误代码。451数字来源于1953年由美国作家雷·布莱伯利所著的反乌托邦小说《华氏451度》。故事叙述了一个压制自由的近未来世界,禁止人们阅读、拥有书籍,所谓的消防员的工作不是灭火,而是焚书。文中的主人公,盖·蒙...
【分享】几种常见的不停机发布方式
何为不停机发布?本文所说的不停机发布,是指在不停止对外服务的前提下完成应用的更新。与热部署的区别在于,热部署关注于应用层面并且以不重启应用为前提,而不停机发布则关注于服务层面。随着摩尔定律逐渐逼近极限和多核时代的到来,分布式应用已经成为事实上的主流。下文首先给出一种通用的适用于分布式应用环境的不停机发布方式,然后再介绍Master/Worker这种常见的适用于单机应用的不停机发布方式。Cluster模式对于运行于集群环境的分布式应用,一般在应用之上都有一层负载均衡(LB)。如果在发布过程中,在更新任一节点(也可以是一组节点)前先关闭该节点对应的负载,更新完再打开负载,即可实现整体服务的不停机发布。在此基础上,为了...
【分享】程序员提交代码的 emoji 指南——原来表情文字不能乱用
程序员都爱github,而许多程序员喜欢在github提交代码时加入emoji表情。并不是程序员喜欢故意卖萌,而是添加了emoji表情的提交记录真的能包含很多有用信息,阅读体验非常棒。但是,emoji表情在提交代码的时候也不能乱用,否则容易造成误解。因此开源项目gitmoji专门规定了在github提交代码时应当遵循的emoji规范:?-改进结构和代码格式⚡️-优化性能?-移除代码或文件?-修复bug✨-引入新功能?-修复MacOS下的问题?-写文档?-部署新功能✅-添加测试用例?-发版/版本标签?-修复安全问题?-修复Linux下的问题?-移除linter的警告?-工作在进行中?-修复C...
记录 BYI API 站点的一次重写
BYI_API上线已经两年多了,总计调用量已经超过千万次。虽然名叫API,但其实和API没太大关系,只是一些免费开放使用的辅助接口罢了。两年间共相继开放了favicon图标获取、网站首屏截图、短网址、IP地理位置查询等服务,后来因为维护及服务器原因(个人维护,单台架构,无法承载过多请求,加上被人滥用等)又相继停止了大部分服务,目前仅留了favicon获取服务可以正常使用。网站首屏截图的服务目前没发现国内可用的服务,于是自己写了一套,但这个服务需要抓取目标网站的首页,并在服务器端渲染首页图片,然后再缩小到需要的尺寸,对服务器的开销特别大,于是不得不在开放六个月后关停此项服务。让我决心关停此项服务的最大原因倒不是服务...
docker 启动多个 PHP-FPM 容器并配置 nginx 负载均衡
我的API服务已经迁到docker以及美国服务器有一周的时间了,不知道是网络的问题还是docker的问题,迁到美国的服务器后明显感觉并发时不如之前在阿里云时稳定。之前在阿里云部署时一个页面40个请求毫无压力(之前也没用docker,直接LNMP架构部署),但在迁移之后只要并发数量一高,FPM进程准会挂掉。我自己使用的一个工具页面上有四十多个小图标需要调用这个API服务,只要一刷新FPM必挂。尝试过调整docker内FPM进程的子进程数量,效果并不明显,加上服务器配置低,单个FPM进程子进程数不能调太高,否则容易影响其它服务(我猜的)。于是乎想到一个办法:启动两个FPM容器,两个容器拥有相同的配置以及子进程数,两者...
【译】巧用 CSS 变量实现自动前缀
原文http://lea.verou.me/2016/09/autoprefixing-with-css-variables/最近,当我在制作markapp.io这个小网站的时候,我想出一个巧妙的技巧用在CSS变量上,我们可以天然地使用它们的动态本质。让我们看一下当你想使用一个属性,但是这个属性有不同的版本,一个无前缀的标准版和一个或多个有前缀的版本的情形。在这里我举一个例子,比如我们使用clip-path,目前需要同时使用无前缀的版本和一个-webkit-前缀的版本,我的这个方法可以适用于这种情况,不管这个CSS属性是什么,有多少种前缀,只要它不论什么前缀的值都是同样的就可以。第一步是在所有元素上定义一个--c...
如何在 docker 中使用 PHP FPM
已经有段时间没写过东西了,最近在着手把之前的PHP服务docker化,以方便在两台服务器之间部署。整个学习和使用docker的过程还算顺利吧,但在部署PHPFPM的过程中遇到了一些问题,以下作为记录供遇到同样问题的人参考吧。系统架构因为我可能会经常修改Nginx配置,加上我是自己编译的最新版的Nginx+Openssl(为了启用HTTP/2),所以就懒得把Nginx打包成docker镜像了,而是直接将Nginx装在了宿主机,并开放80和443端口。系统所需的除Nginx以外的其它服务全部由docker提供服务,如PHP和Redis。每一个服务使用一个容器,均为官方镜像。Redis的使用就不说了,比较简单,说下在使...
Nginx/Apache 日志分析工具 GoAccess 的安装和基本用法
GoAccess是一款轻量、快速的日志分析工具,可以很方便的用于Nginx/Apache/IIS等的日志分析上,可以直接在控制台中方便的查看分析结果,也可以将结果导出成html、csv、json等格式,甚至还可以支持控制台和html的实时刷新!可谓是非常之强大。安装GoAccess的安装非常之简单,CentOS/Fedore下直接执行yuminstallgoaccess即可,Debian/Ubuntu下使用apt-getinstallgoaccess,OSX可以用brewinstallgoaccess安装。源码编译安装如果需要最新版本可以直接使用源码编译安装。官网下载页面有源码的下载地址和安装方式,以CentOS...