title: 个人网站架构设计(二) categories:
CPU: 1核
内存: 512MB
数据盘: 40G
带宽: 1Mbps
<p>买一年省俩月的钱,总共是七百多。选用的 Ubuntu 12.04, 64位系统。不过呢,我并没有一次性买一年的,先花几十块钱买了一个月,试用,反正以后续费还是原价(不像域名那样坑爹,续费就涨价)。域名我是一次性买的十年的,55/年,这东西不贵,多买几年,省事儿。然后进入阿里云的流程,正在备案中...</p>
<p>回到重点,为啥看重后端,看到上面的配置,相比大家也知道了,搞一个实时通信的网站,每个连接后端都需要内存来处理,而且这个内存在链接断开之前是不会释放的(socket连接),目测同时在线超过30个人,系统就要卡住了。内存是一个很大的瓶颈,然后就是带宽了,1M真的很低。其实买个配置高点的主机,一年也就一两千,这次故意买个最低配置是为了让自己培养珍惜流量意识,希望编程可以考虑到每个 byte 的消耗,等这种意识(或者技术)养成了,再提高主机的配置。</p>
<p>第二个原因就是熟悉后端,数据库方面的处理一直是自己的弱项,如果不试着提高下,以后工作中遇到坎就会很难受了。这段时间在阿里实习,经常会感觉有些知识不够用了,希望返校继续加强学习。</p>
<h3>2. 前端也是重点</h3>
<p>前端有一个很大胆的尝试,\数据在前端"。</p>
<p>打开一个网页,浏览器发送请求到服务器,服务器从数据库里获取数据,经过后台脚本的拼装处理,然后输出到前端,这是最常见的方式。这种方式的缺点就是,频繁的读取数据库,然后还有一大堆经过HTML标签包装过的数据传到前端,期间的冗余消耗是特别大的。于是有人就想到了,后端的数据全部使用JSON方式输出,到了前端再渲染数据,这种方式获得了一定的优化效果,前端端的分离似乎也很明显,但是前端负担就太重了,数据的处理和渲染都是前台,也就是承担了Controller和Views的角色,前台很累,他累了也会发脾气,比如:数据到了,要半天之后才解析完毕,再花半天将其渲染出来。同时这种处理方式也不利于SEO。</p>
<p>现在的尝试是,前端就是一个数据库,每个用户都有数据库数据的一个备份。</p> +----------+
| |
| Database |
| |
+-----|----+
|
+---------|----------+
/| |\
/ | Server | \
/ | | \
/ +----|----------|----+ \
/ | | \
+---------/+ +------|---+ +---|------+ +\---------+
| | | | | | | |
| Client |..| Client |..| Client |..| Client |
| | | | | | | |
+-----|----+ +-----|----+ +-----|----+ +-----|----+
| | | |
+-----|----+ +-----|----+ +-----|----+ +-----|----+
| | | | | | | |
| Local | | Local | | Local | | Local |
| Storage | | Storage | | Storage | | Storage |
| | | | | | | |
+----------+ +----------+ +----------+ +----------+
<p>浏览器每次连接到服务器,都会将服务器的数据同步到本地,打开页面,第一件事是呈现当前LocalStorage的数据,然后发送一个请求询问服务器,\是否有数据更新啊?",每次只拉去更新的数据。</p>
<p>有人会觉得这种方式不可取,本地存不了这么多东西啊。当然存不了这么多,一篇文章有作者、标题、日期、概要还有内容,我们可以在本地储存除内容之外的所有东西,就算有100篇文章,其缓存的量也不过几百KB,试想你加载个 JQ 是不是也得上百KB啊~那么每次我们从后端拉取的数据量就十分小了。</p>
<p>至于本地储存的实现方式,这个好处理,LocalStorage、IndexDB、UserData等等,方式很多,还有一些其他比较 hack 的方式,我以后再介绍。</p>
<h3>3. 前后端之间的屏障</h3>
<p>后端会有很多的服务,比如邮件、HTTP、HTTPS、socket等等,再比如:A域名、B域名、A子域名、B子域名的处理等等。为了处理伪静态,安全,缓存,动静页面分离等多个问题,决定在昨天考虑的架构上再加一层 Nginx。</p> +------------------+ +------------------+
| Front-End | | Browser |
| 前端处理 | +--------------+ |
| |←---→| LocalStorage | |
+--↑-----↑-----↑---+ +--------------+---+
| | |
| | |
| | |
+------------------+
| Nginx |
+---- 请求/代理 ---------------------------+
| | | |
| +------------------+ |
| | | | |
| | | | |
| +--↓-----↓-----↓---+ |
| | NodeJS | +-------------+ |
+-->| 处理I/O | | Database | |
| | |←-+-→| | |
| +-----|-----↑------+ | | | |
| | | | | | |
| +-----↓-----|------+ | +----------+ | |
| | PHP | | | | | |
+-->| 处理数据 |←-+-→| cache | | |
| | | | | | |
| +------------------+ +----------+--+ |
| |
+------------------------------------------------+
<p>东西越多,维护成本越高,不过我竟然觉得添加一层会有更多的乐趣...</p>
<p>后续会继续记录建站过程。</p>