Jerry Bendy 发布于 11月26, 2016

【分享】几种常见的不停机发布方式

何为不停机发布?本文所说的不停机发布,是指在不停止对外服务的前提下完成应用的更新。与热部署的区别在于,热部署关注于应用层面并且以不重启应用为前提,而不停机发布则关注于服务层面。随着摩尔定律逐渐逼近极限和多核时代的到来,分布式应用已经成为事实上的主流。下文首先给出一种通用的适用于分布式应用环境的不停机发布方式,然后再介绍Master/Worker这种常见的适用于单机应用的不停机发布方式。Cluster模式对于运行于集群环境的分布式应用,一般在应用之上都有一层负载均衡(LB)。如果在发布过程中,在更新任一节点(也可以是一组节点)前先关闭该节点对应的负载,更新完再打开负载,即可实现整体服务的不停机发布。在此基础上,为了...

阅读全文 »

Jerry Bendy 发布于 11月24, 2016

【分享】程序员提交代码的 emoji 指南——原来表情文字不能乱用

程序员都爱github,而许多程序员喜欢在github提交代码时加入emoji表情。并不是程序员喜欢故意卖萌,而是添加了emoji表情的提交记录真的能包含很多有用信息,阅读体验非常棒。但是,emoji表情在提交代码的时候也不能乱用,否则容易造成误解。因此开源项目gitmoji专门规定了在github提交代码时应当遵循的emoji规范:🎨-改进结构和代码格式⚡️-优化性能🔥-移除代码或文件🐛-修复bug✨-引入新功能🍎-修复MacOS下的问题📝-写文档🚀-部署新功能✅-添加测试用例🔖-发版/版本标签🔒-修复安全问题🐧-修复Linux下的问题🚨-移除linter的警告🚧-工作在进行中💚-修复C...

阅读全文 »

Jerry Bendy 发布于 11月20, 2016

记录 BYI API 站点的一次重写

BYI_API上线已经两年多了,总计调用量已经超过千万次。虽然名叫API,但其实和API没太大关系,只是一些免费开放使用的辅助接口罢了。两年间共相继开放了favicon图标获取、网站首屏截图、短网址、IP地理位置查询等服务,后来因为维护及服务器原因(个人维护,单台架构,无法承载过多请求,加上被人滥用等)又相继停止了大部分服务,目前仅留了favicon获取服务可以正常使用。网站首屏截图的服务目前没发现国内可用的服务,于是自己写了一套,但这个服务需要抓取目标网站的首页,并在服务器端渲染首页图片,然后再缩小到需要的尺寸,对服务器的开销特别大,于是不得不在开放六个月后关停此项服务。让我决心关停此项服务的最大原因倒不是服务...

阅读全文 »

Jerry Bendy 发布于 11月09, 2016

docker 启动多个 PHP-FPM 容器并配置 nginx 负载均衡

我的API服务已经迁到docker以及美国服务器有一周的时间了,不知道是网络的问题还是docker的问题,迁到美国的服务器后明显感觉并发时不如之前在阿里云时稳定。之前在阿里云部署时一个页面40个请求毫无压力(之前也没用docker,直接LNMP架构部署),但在迁移之后只要并发数量一高,FPM进程准会挂掉。我自己使用的一个工具页面上有四十多个小图标需要调用这个API服务,只要一刷新FPM必挂。尝试过调整docker内FPM进程的子进程数量,效果并不明显,加上服务器配置低,单个FPM进程子进程数不能调太高,否则容易影响其它服务(我猜的)。于是乎想到一个办法:启动两个FPM容器,两个容器拥有相同的配置以及子进程数,两者...

阅读全文 »

Jerry Bendy 发布于 11月07, 2016

【译】巧用 CSS 变量实现自动前缀

原文http://lea.verou.me/2016/09/autoprefixing-with-css-variables/最近,当我在制作markapp.io这个小网站的时候,我想出一个巧妙的技巧用在CSS变量上,我们可以天然地使用它们的动态本质。让我们看一下当你想使用一个属性,但是这个属性有不同的版本,一个无前缀的标准版和一个或多个有前缀的版本的情形。在这里我举一个例子,比如我们使用clip-path,目前需要同时使用无前缀的版本和一个-webkit-前缀的版本,我的这个方法可以适用于这种情况,不管这个CSS属性是什么,有多少种前缀,只要它不论什么前缀的值都是同样的就可以。第一步是在所有元素上定义一个--c...

阅读全文 »

Jerry Bendy 发布于 10月19, 2016

如何在 docker 中使用 PHP FPM

已经有段时间没写过东西了,最近在着手把之前的PHP服务docker化,以方便在两台服务器之间部署。整个学习和使用docker的过程还算顺利吧,但在部署PHPFPM的过程中遇到了一些问题,以下作为记录供遇到同样问题的人参考吧。系统架构因为我可能会经常修改Nginx配置,加上我是自己编译的最新版的Nginx+Openssl(为了启用HTTP/2),所以就懒得把Nginx打包成docker镜像了,而是直接将Nginx装在了宿主机,并开放80和443端口。系统所需的除Nginx以外的其它服务全部由docker提供服务,如PHP和Redis。每一个服务使用一个容器,均为官方镜像。Redis的使用就不说了,比较简单,说下在使...

阅读全文 »

Jerry Bendy 发布于 10月12, 2016

Nginx/Apache 日志分析工具 GoAccess 的安装和基本用法

GoAccess是一款轻量、快速的日志分析工具,可以很方便的用于Nginx/Apache/IIS等的日志分析上,可以直接在控制台中方便的查看分析结果,也可以将结果导出成html、csv、json等格式,甚至还可以支持控制台和html的实时刷新!可谓是非常之强大。安装GoAccess的安装非常之简单,CentOS/Fedore下直接执行yuminstallgoaccess即可,Debian/Ubuntu下使用apt-getinstallgoaccess,OSX可以用brewinstallgoaccess安装。源码编译安装如果需要最新版本可以直接使用源码编译安装。官网下载页面有源码的下载地址和安装方式,以CentOS...

阅读全文 »

Jerry Bendy 发布于 09月07, 2016

【分享】手机淘宝的flexible设计与实现

看到小黑的文章关于webapp中的文字单位的一些捣腾感觉很赞。尤其是,他提到了手机淘宝的meta,所以觉得要讲讲我们这方面的一些实践。手机淘宝从2014年中开始,全面推行flexible设计。什么叫flexible呢?其实flexible就是responsive的低端形态和基础。对我们来说,最直观的感受就是,在超宽屏幕上,网页显示不会两边留白。以前pc时代大家经常讲的流体布局,其实就是一种flexibledesign。只不过,流体的表述角度是实现,flexible的表述角度是结果,为了跟高大上的responsive保持一致,我们这里使用了flexible这个说法。讨论方案之前,需要先了解三个关键概念:单位英寸像素...

阅读全文 »

Jerry Bendy 发布于 08月30, 2016

【译】十个可以使用 ES6 代替的 Lodash 特性

Lodash应该算是目前在npm上被依赖的最多的包了吧,但是如果你使用ES6,也许你不再需要它。在这篇文章中,我们将尝试使用一些ES6的新特性来解决几种常见的问题。1.Map,Filter,Reduce这些方法使转换数据变得轻而易举,而且非常通用。我们可以使用ES6的箭头函数语法,帮助我们用更简短的方式代替Lodash的语法。_.map([1,2,3],function(n){returnn*3;});//[3,6,9]_.reduce([1,2,3],function(total,n){returntotal+n;},0);//6_.filter([1,2,3],function(n){returnn<=...

阅读全文 »

Jerry Bendy 发布于 08月30, 2016

【译】React on ES6+

本文由冰翼博客翻译自babelJs.io原文作者:StevenLuscher(Github)在重新设计InstagramWeb的最近一年里,我们享受到很多使用ES6+新特性写React组件的好处。下面我整理了一些可以方便写React应用语言特性,相信这会使工作变得更轻松愉快。类迄今为止我想在写组件时最能直观看到的变化就是ES6+类的使用。关于ES6的类定义语言可参考这里。现在,我们可以写一个继承自React.Component的类来取代React.createClass的写法。classPhotoextendsReact.Component{render(){return<imgalt={this.prop...

阅读全文 »