What is going on

I didn't write blog regularly, most of my thougths are buried in my Evernote. It did cost more time to write it up to post than some random notes. Most great engineers write blog regularly…

名词解释 PHP vs HHVM: PHP指的是php.net(Zend)实现的PHP,而HHVM指的是Facebook开源的PHP实现。 PHP-FPM: (PHP Fastcgi Process Manager) 一个PHP Sapi实现,目前的主流的Web应用使用的方式。基于多进程的模型 HHVM: AdminServer 这是HHVM中为了更好的运维和定位问题实现的一个HTTP操作接口,可以实时的获取和操作HHVM内部状态, 这对于我们是一个非常便利的接口,比如可以打印出内部的队列长度(fpm中也有类似接口,不过灵活性差很多) 多线程下fork()/exec()出现的性能问题 贴吧目前使用的HHVM来运行PHP程序,HHVM采用的是多线程模型, 以前我们使用的是PHP-FPM,PHP-FPM采用的是多进程的模型。 我们通过一个我们上线遇到的问题来看看Linux的写时复制和多线程相关的问题。 上周我们迁移一个服务HHVM运行环境时发现上线后CPU占用飚的非常高…

最近在重构公司的一个交互中间件,在重新设计API及总体架构的时候思考了许多, ,那么什么样的API才算是一个设计良好的API呢? 参考了许多的资料,做一下总结。主要来自这个keynote 什么是API 我们只要是在进行编程我们就需要不停的设计API, API简单来讲可以是一个调用的函数,一个接口。抽象来说:接口是一个内聚系统暴漏给外部的一切信息。 包含但不限于: 调用方式:比如通过lib库或者http接口等 调用约定:比如lib的函数签名或者HTTP的参数,http method或者头信息,长短链接等等。 依赖关系:比如接口的调用需要涉及到第三方或者其他的准备工作等等。 设计良好API的特点 这里探讨的API均为系统边界的API设计,而对于内部API来说不在探讨范围之内。 变动困难 API就像一个人一样,我们和一个API打交道的时候需要了解这个人的特性偏好等, 有的人很好相处,而有的人让人很头疼,尤其是你不得不和他打交道的时候。 和人一样,如果你不得不和他打交道,要改变他的秉性是很痛苦的,人的…

2013 结束了,迎来了新的一年。年复一年,我们在前行,虽然匆忙,也是时候停下来想一想了,回顾一下过去的一年都有哪些收获,规划一下来年。 2013年回顾: 找了一下去年的总结,发现被自己删掉了,因为不完整。原来计划2013年完成TiPHP的实现。这个计划没有做完。学习@胖胖,不找借口,是没有足够的时间。 这一年: 生活 情感上终于跟随自己的内心做自己了,年末的三个月是我所经历过最完美的时光。 运动上,坚持了半年多每周的羽毛球,还有跑步,身体没有以前好,不过后面3个多月运动的少了。 工作 代码量不足,相对以前代码的编写量不足,14年会努力提高代码量和代码质量。 收获 私有云平台的设计实现,对在线业务的运维和支持体系有了新的理解…

最近在线上进行nginx规则的调整的时候遇到一个问题,发现在location匹配时候可能会踩到的一个坑。 location在匹配规则的时候匹配的是归一化之后的URL,比如多个斜杠或者URL中带".", ".."的都会被 归一化。 而在内部rewrite的时候新的URL地址是不会再次被归一化的。这种不一致如果没有留意可能会遇到问题。 比如: if ($request_uri ~ "/api") { rewrite (.*) /newapi/$1; # 斜杠多余了 } location /newapi/api { set $testapi 1; } location /newapi { # ... } 对于上面的配置中,rewrite的时候不小心多写了个斜杠,对于这个配置, 如果用地址:/api访问的话 /newapi/api 这个location是不能被匹配的。 而用地址/newapi…