April 8, 2014
日600亿消息,月4.65亿用户——WhatsApp的Erlang世界[架构设计](最新版)
"来自 High Scalability。相较 上篇,这篇内容更新、更全。 译文 a\n【编者按】在之前我们有分享过HighScalability创始人Tod Hoff总结的 WhatsApp早期架构,其中包括了大量的Erlang优化来支撑单服务器200万并发连接,以及如何支撑所有类型的手机并提供一个完美的用户体验。然而时过境迁,两年后WhatsApp又是如何支撑10倍于之前的流量,以及应用的飞速扩展,这里我们一起看Tod带来的总结。以下为译文:\n两年内的飞跃 天价应用当下的规模显然不能与两年前同日而语,这里总结了一些WhatsApp两年内发生的主要变化:\n**1. **从任何维度上都可以看到WhatsApp的巨变,但是工程师的数量却一直未变。当下,WhatsApp有更多的主机、更多的数据中心、更多的内存、更多的用户以及更多的扩展性问题,然而最引以为豪的却是那支10人工程团队——每个工程师平均负责4000万个用户。当然,这也是云时代的胜利:工程师只负责软件的开发,网络、硬件及数据中心运维全部假手于人。\n**2. **在之前,面对负载的激增,他们必须让单服务器支撑尽可能多的连接数,但是现在他 …"
March 8, 2014
golang中for循环方法的差异
"用for循环遍历字符串时,也有 byte 和 rune 两种方式.第一种试为byte,第二种rune。\ngolang中string rune byte 三者的关系 https://blog.haohtml.com/archives/17646\npackage main import ( \u0026#34;fmt\u0026#34; ) func main() { s := \u0026#34;abc汉字\u0026#34; for i := 0; i \u0026lt; len(s); i++ { fmt.Printf(\u0026#34;%c,\u0026#34;, s[i]) } fmt.Println() for _, r := range s { fmt.Printf(\u0026#34;%cn\u0026#34;, r) } } 输出结果:\na,b,c,æ,±,,å,,, a b c 汉 字 "
February 18, 2014
纽约时报网站改版背后的web技术
"原文地址: “The Technology Behind the NYTimes.com Redesign”\n纽约时报英文网站今年进行了一次改版,这次改版不仅仅是给一艘大船重新刷了遍油漆那么简单,除了外观上的重新设计,我们也对代码进行了大量的重构,采用了新的框架,让网站更快,也为以后代码的维护、升级便利性进行了重新设计。 Reed Emmons,是这次改版的负责人,在这篇文章将分享我们如何让纽约时报这首老船更快更酷。\n很少有机会能够在像纽约时报这么老资格和规模的网站进行一场「从头来过」的重构和设计工作,我这里说的从头来过,不仅仅是视觉设计上的重新设计,更是一个重新发明整个数码传媒平台。纽约时报的上次一次视觉改版是在2006年,但是我们得回溯到2000千禧年才有如此规模的从底层的重构和改版。我们决定重构用户端和服务端以支持我们新的服务、设计和新闻报道,比如说更佳的网站性能、响应式布局等等。尽管有些旧有的代码依旧保留或者进行了深度重构,大部分老的代码都被删除或者仅仅是用来做参考。\n静态页面发布:历史的教训 直到今天为止,纽约时报的大部分网页内容还是静态 html 页面,这些页面储存在我们数 …"
December 23, 2013
git stash和git stash pop的用法
"推荐阅读: http://www.cppblog.com/deercoder/archive/2011/11/13/160007.html\n原文: http://gitbook.liuhui998.com/4_5.html\n一、基本操作\n当你正在做一项复杂的工作时, 发现了一个和当前工作不相关但是又很讨厌的bug. 你这时想先修复bug再做手头的工作, 那么就可以用 git stash 来保存当前的工作状态, 等你修复完bug后,执行’反储藏\u0026rsquo;(unstash)操作就可以回到之前的工作里.\n$ git stash save \u0026#34;work in progress for foo feature\u0026#34; 上面这条命令会保存你的本地修改到储藏(stash)中, 然后将你的工作目录和索引里的内容全部重置, 回到你当前所在分支的上次提交时的状态.\n好了, 你现在就可以开始你的修复工作了.\n… edit and test …\n$ git commit -a -m \u0026#34;blorpl: typofix\u0026#34; 当你修复完bug后, 你可以用git stash apply来回 …"
December 14, 2013
Nginx利用多核cpu提高性能_配置参数worker_cpu_affinity
"上篇文章我们介绍了Nginx 的优化方法,这里主要对worker_cpu_affinity参数详细介绍一下.(官方http://nginx.org/en/docs/ngx_core_module.html#worker_cpu_affinity ) 简介 Nginx默认没有开启利用多核cpu,我们可以通过增加worker_cpu_affinity配置参数来充分利用多核cpu的性能。cpu是任务处理,计算最关键的资源,cpu核越多,性能就越好。\n规则设定 (1)cpu有多少个核,就有几位数,1代表内核开启,0代表内核关闭\n(2)worker_processes最多开启8个,8个以上性能就不会再提升了,而且稳定性会变的更低,因此8个进程够用了\n演示实例 两核cpu,开启两个进程 worker_processes 2; worker_cpu_affinity 01 10; 01表示启用了第一个cpu内核,10表示启用了第二个cpu内核\nworker_cpu_affinity 01 10;表示开启了两个进程,第一个进程对应着第一个cpu内核,第二个进程对应着第二个cpu内核\n两核cpu,开启八 …"
November 22, 2013
redmine与git组合配置
"参考:http://www.redmine.org/projects/redmine/wiki/HowTo_Easily_integrate_a_(SSH_secured)_GIT_repository_into_redmine\n在redmine 的”配置”选项里,填写git仓库位置的时候,一定要在写完整的.git路径,如 /data/www/redmine/repos/agent/.git ,否则redmine会无法发现git仓库.\n相关文章:\nhttp://blog.csdn.net/benkaoya/article/details/8762935"
November 19, 2013
linux下使用iostat和pidstat查看进程使用资源情况
"引言\n在查看系统资源使用情况时,很多工具为我们提供了从设备角度查看的方法。例如使用 iostat 查看磁盘io统计信息:\nlinux:~ # iostat -d 3 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 1.67 0.00 40.00 120 以上显示的是从sda的角度统计的结果。当我们需要从进程的角度,查看每个进程使用系统资源的情况,有什么方法吗?\n使用pidstat工具可以获取每个进程使用cpu、内存和磁盘等系统资源的统计信息,pidstat由sysstat rpm包提供,可在suse11使用。下面我们来看pidstat的具体用法。\n默认输出\n执行pidstat,将输出系统启动后所有活动进程的cpu统计信息:\nlinux:~ # pidstat Linux 2.6.32.12-0.7-default (linux) 06/18/12 _x86_64_ 11:37:19 PID %usr %system %guest %CPU CPU Command …… 11:37:19 11452 0.00 0.00 …"
November 14, 2013
sysctl -P 报错 error: “net.bridge.bridge-nf-call-arptables” is an unknown key 的解决办法
"今天在安装openvz的时候(安装教程: http://blog.haohtml.com/archives/14724),修改完内核参数后,执行\n[shell]sysctl -P[/shell]\n后,提示\n[shell]net.ipv4.ip_forward = 1 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.default.accept_source_route = 0 kernel.sysrq = 1 kernel.core_uses_pid = 1 net.ipv4.tcp_syncookies = 1 error: \u0026ldquo;net.bridge.bridge-nf-call-ip6tables\u0026rdquo; is an unknown key error: \u0026ldquo;net.bridge.bridge-nf-call-iptables\u0026rdquo; is an unknown key error: \u0026ldquo;net.bridge.bridge-nf-call-arptables\u0026rdquo; is an …"
November 12, 2013
使用Vagrant在Windows下部署开发环境[转]
"做Web开发少不了要在本地搭建好开发环境,虽然说目前各种脚本都有对应的Windows版,甚至是一键安装包,但很多时候和Windows环境的相性并不是那么好,各麻烦的问题是实际部署的环境通常是Linux,常常还要面临着开发和部署环境不一致,上线前还要大量的调试。更要命的是,如果有很多机器需要装的话,那就真是一个灾难了。\nWindows下玩Linux少不了虚拟机,但装系统依旧是相当费事。在现在什么都在自动化的今天,Vagrant就是这么一个神器,基于Ruby开发,使用开源 VirtualBox 作为虚拟化支持,可以轻松的跨平台部署。\n今天试着把几台机器的环境都换成Vagrant,很爽很顺畅,于是就试着整理了一下使用小结:\n目前所选用的是当前的最新版本Vagrant 1.2.7 (对应的Vagrantfile V2版),VirtualBox 使用的是 4.2.16 准备工作:\n下载安装 VirtualBox : https://www.virtualbox.org/ 下载安装 Vagrant : http://www.vagrantup.com/\n下载需要使用的 box :\n官方提供的范例: …"
November 11, 2013
使用 Vagrant 打造跨平台开发环境
"Vagrant 是一款用来构建虚拟开发环境的工具,非常适合 php/python/ruby/java 这类语言开发 web 应用,“代码在我机子上运行没有问题”这种说辞将成为历史。\n我们可以通过 Vagrant 封装一个 Linux 的开发环境,分发给团队成员。成员可以在自己喜欢的桌面系统(Mac/Windows/Linux)上开发程序,代码却能统一在封装好的环境里运行,非常霸气。\n安装步骤 1. 安装 VirtualBox 虚拟机还是得依靠 VirtualBox 来搭建,免费小巧。 下载地址: https://www.virtualbox.org/wiki/Downloads\n* 虽然 Vagrant 也支持 VMware,不过 VMware 是收费的,对应的 Vagrant 版本也是收费的\n2. 安装 Vagrant 下载地址: http://downloads.vagrantup.com/ 根据提示一步步安装。\n此外,还得下载官方封装好的基础镜像: Ubuntu precise 32 VirtualBox …"