基于AWS EC2 & WordPress搭建个人Blog笔记

随着coud computing的发展,越来越多人将自己的平台搬到了云主机上来,尤其是中小、个人站点。对于中小团队以及个人站长而言,对一个云平台的考量,除去价格因素,考虑最多的应该是该云平台的其他配套服务,如海量存储服务、缓存服务、负载均衡服务、邮件服务等。如果只从这两个维度来看,业界的翘楚当推Amazon Web Services (AWS) 「因为总所周知的原因,只能为Google App Engine感到遗憾……」。

两年前就听闻AWS要在天朝建IDC了,可是到现在,也仅仅是上线了中文网站罢了。IDC建在墙内的好处当然是更好快速的访问速度,但是同时也面临着匪夷所思的监管制度。但是这并不影响我们体验AWS提供的优质的服务,从可用性来看,用户过亿的Instagram在墙内使用也是没有什么问题的;从价格上来看,AWS现在注册以后绑定信用卡就可以免费使用一年费使用套餐介绍」,虽然是温水煮青蛙的策略,但是就事情本身来看,还是挺不错的。

下面简单说一下在AWS上使用其EC2建立个人Blog的过程。

1. 建立主机实例

  • 登录管理控制台,进入EC2
  • 选择Launch Instance,我这里选的是亚马逊推荐的Amazon Linux AMI 2013.09.2:

    The Amazon Linux AMI is an EBS-backed, PV-GRUB image. It includes Linux 3.4, AWS tools, and repository access to multiple versions of MySQL, PostgreSQL, Python, Ruby, and Tomcat.

  • 默认是公/私钥认证登录。记得保存好自己下载的私钥。启动主机后,使用默认用户名ec2-user/私钥登录主机:

    ssh -i your_private_key.pem ec2-user@1.1.1.1

    • 亚马逊的控制台自动生成的命令有一个bug,就是他给出的Example连接命令会把你私钥名称中的「空格」直接附上,如果是复制粘贴党,注意自己去除空格。
    • 如果想要通过口令访问主机,可以在通过证书登录后:
      1. 设置ec2-user的密码:sudo passed ect-user
      2. /etc/ssh/sshd_config中将PasswordAuthentication no–>yes
      3. 由于AMI不允许直接使用root登录。如果想允许的话(不推荐这样做,存在安全隐患)可以通过将/root/.ssh/authorized_keys中的如下内容删去:

        command=“echo ‘Please login as the ec2-user user rather than root user.’;echo;sleep 10

      4. 重启ssh服务:service sshd restart

2. 安装apache mysql php

AMI通过yum安装:

yum -y install httpd php mysql mysql-server php-mysql

默认情况下apache和mysql服务不会开机启动。可以通过chkconfig命令设置一下:

chkconfig httpd on
chkconfig mysqld on

3. 设置主机实例的固定IP

最开始使用EC2主机的童鞋可能会觉得亚马逊的“主机每启动一次,主机IP就变化一次”非常坑爹。这个问题可以通过设置Elastic IP与主机实例绑定解决。从细粒度管理角度看,亚马逊这点非但不是缺点,反而提供了良好的带宽接入选择空间和扩展余地。

4. 安装WordPress

WordPress本身的安装非常简单。但是新版的WordPress插件是通过ftp的方式安装的,也就是说你的主机实例需要跑一个ftp server。这里推荐使用vsftp:

yum -y install vsftpd

然后注意设置用户默认ftp目录为WordPress安装目录的顶层目录。编辑/etc/vsftpd/vsftpd.conf,修改local_root=your_path.

WordPress安装插件的时候,如果填写自己的域名无法,那么就填写127.0.0.1。
如果插件下载下来安装失败,那么可能是wp-content/plugins没有写权限,尝试:

chmod -R 777 path_to_your/wp-content/plugins

最后,上线自己的Blog之前别忘了启用gzip压缩提高访问速度,节省带宽。apache可以通过deflate模块实现压缩。向httpd.conf中添加该模块配置信息即可。参考配置:

<IfModule deflate_module>
SetOutputFilter DEFLATE
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript
</IfModule>

启用gzip压缩后,记得重启apache服务。

可以通过Google的网页在线测试工具对比一下启用压缩前后的变化。怎么样,效果还是挺明显的吧?

 3月1日更新

服务器跑了几天以后,发现服务器每隔一天就崩溃一次。后来发现是因为AWS Linux AMI默认swap大小为0造成的(好奇怪的默认值……)。知道原因以后解决方法就简单了,只需要建立一个swap交换空间即可,大小一般为物理内存两倍。

 

$190亿的背后 – WhatsApp架构分析笔记

就架构本身来看,WhatsApp (后简称WA, 哇……)的架构属于“实在是太简单了,没有太多分析的价值”。概括起来就是Erlang on FreeBSD through XMPP.

业务需求决定架构。WA用户从零增长到4.5亿月活的过程中基本没有遇到系统扩展性的问题「昨天宕机三个小时原因也不是系统性能的问题,而是路由器的问题」。一方面由于WA业务比较单一,另一方面也得益于对系统的持续优化。

WA的架构在发展过程中有两个比较有意思的阶段:
1. 从C200K到C2800K「C: 这里特指Connection」。
2. 多媒体处理系统升级与优化。

这两个阶段都是在Rick Reed牵头下完成的。这哥们是个比较有意思的人物:2011年从雅虎跳巢到WA「时机把握得真好!」,当他来到WA的时候,居然不知道Erlang是什么东东。然而,仅仅一年后就交出了一台服务器处理百万并发连接的答卷,两年后已经成为Erlang领域的顶尖专家。这哥们貌似很喜欢足球,两次系统优化都是足球夜激增的流量激发了他upgrade的念想:)。

从C200K到C2800K

优化前,一个节点的连接负载能力约为200K,并面临着用户连接增多时系统过载和失败等问题。系统优化的目标很明确:

  • 将一个节点连接负载能力提高到C1000K
  • 可应对软硬件错误/故障以及突发事件造成的连接激增

所采用的方法详见Rick Reed, Scaling to Millions of Simultaneous Connections, March 30 2012. 简单来说,就是把以前所有系统资源利用不合理以及有更高效解决方式的地方都fix了一遍,然后持续优化和改进。根据Rick Reed的数据,第一轮下来提高到了C1000K,第二轮下来提高到了C2000K,并成功顶住了C2800K的峰值。不过Rick Reed认为承受C3000K也是没有问题的。

一些启示:

  • Erlang拥有良好的SMP扩展性,并行优势很明显(24逻辑核上,>85%的利用率)
  • 系统的资源争用有时候会产生难以置信的内耗。从C200K到C2000K就是通过解决/优化资源争用问题完成的。
  • 对于使用频繁的函数,考虑使用更加高效的实现方式往往能收到”小处大为“的效果(WA中使用更加高效的cpu_timestamp,os:timestamp取代erlang:now。对于一个消息系统来说,这两个函数的优化很有意义)
  • 不要忘了客户端App的优化
  • 整个系统的性能取决于木桶最短的那根。很多时候,语言都很难成为最短的那根。当然,更没有必要因为WA是用Erlang构建的,你要把自己的系统转到Erlang上来。

多媒体处理系统升级与优化

最开始,系统是基于lighttpd + PHP. 为了让这个子系统具有更好的扩展性、稳定性以及用户体验,Rick对他进行了一次Erlang化改造。详细参见Rick Reed, March 21 2013。升级或的架构图如下图所示:

wa_mms

数据存储方面,垂直和水平都做了分片:

wa_db_sharding

新架构下的系统峰值性能:

  • 214M images in a day
  • 8.8K images/sec downloades
  • 29 Gb/sec output bandwidth

 

WA被收购后,Rick在Erlang Factory做了一次分享,这次分享的总结可以参加这篇文章,强烈建议有时间研究一下。

好啦,WA讲述的根本就不是Brian Acton屌丝逆袭的故事。它讲述的是Rick和Erlang的恋爱史。至此,移动端的IM布局基本也就不会发生大的变化了。在一次对Rick的采访中,有一个问题很有意思:

Mirko: Since you are working for the most used messaging system on the planet I have two non-technical questions. What is from your point of view the best thing introduced by digital communications? And on the other side, what do you miss from the “paper and pen” communication era?

Rick: Well we’ve come a long way from my first experience with digital communication, email on the arpanet. Today, I’m just a few taps on my smartphone away from instant communication with my family, friends, and coworkers, no matter where they are.

I think the downside is that because there are so many ways to communicate (phone, voicemail, email, messaging), you almost have to establish a mapping between each of the people and organisations in your life and how best to communicate with them. And if you get the mapping wrong, the mismatch between what you expect and they expect can cause all kinds of trouble.

小龙和企鹅看完会心一笑。

 

参考:How WhatsApp Grew To Nearly 500 Million Users, 11,000 Cores, And 70 Million Messages A Second