实例浅析网站架构的设计和调整

2018-04-03 19:13:47
商丘职业技术学院学报 2018年1期
关键词:页面架构调整

徐 立

(商丘职业技术学院 软件学院,河南 商丘 476100)

软件的架构既是一个软件的骨架,又是其灵魂. David Garlan[1]92-97认为软件架构要解决如下层面的问题:“在计算的算法和数据结构之外,设计并确定系统整体结构成了新的问题.结构问题包括总体组织结构和全局控制结构;通信、同步和数据访问的协议;设计元素的功能分配;物理分布;设计元素的组成;定标与性能;备选设计的选择.”一个合理的架构设计方案,可以使软件开发流程变得顺畅易行;可以使程序员在愉悦的环境下工作;可以使软件在其运行场景内高效地运行;在场景变换时也能具有良好的可扩展性和可维护性.由此可见,软件架构设计至关重要,它决定着一个软件产品的成败.在架构设计时,既要避免“牛刀杀鸡”,又要避免“小马拉大车”,下面将以实例子来浅析软件架构设计.

1 低成本快速开发的架构设计

1.1 应用场景

小创型互联网公司有了好的设计构思后,需要迅速低成本地将其转化为产品,进而验证产品设计的好坏.

1.2 场景分析

有产品的设计,有未来的盈利规划,但由于是创业型公司,依靠的资金来源主要是个人积蓄,在做软件架构设计时要充分考虑以下需求:

第一,上线要快.互联网行业,有了构思,要迅速转换为产品,进而验证其能否成功;第二,投入要少.个人积蓄有限且不知道产品上线后效果如何,能否成功是个未知数,先期投入要尽量少,以最低成本满足特定访问量;第三,设计要灵活.尽量低耦合,扩展性要好.

1.3 架构设计

选用小而美的框架LAMP[2]50-52,LAMP是架构中用到的几种技术及开源软件的首字母缩写.A代表http服务器采用Apache,是最受欢迎的开源web服务器;L代表Linux是开源的操作系统;M代表Mysql,架构选择开源的Mysql数据库用来管理数据,Mysql是多线程、多用户的支持SQL语言的数据库管理系统;P代表PHP,它是一种编程语言,适合快速开发Web系统.由于初期访问量较小,其物理架构也非常简单,Web服务器和数据库以及文件系统(如页面html缓存、图片等)均部署在同一台托管服务器上.

该架构非常轻量,性能稳定,被很多大型互联网公司使用,如Yahoo和维基百科.借助该架构,一般二百人日的工作量即可完成开发,网站就能上线调试运行.

2 访问量剧增时性能成瓶颈

2.1 应用场景

网站上线后,经过积极推广,产品符合用户要求,网站的UI设计用户体验反映良好.网站的注册用户逐日递增,注册用户中活跃用户占比高达30%左右,已经可以争取到专业风投公司的资金.然而,随着用户量的增多,网站运行不如刚上线时流畅,页面常出现白页,而且经常看不到页面上的图片;用户提交表单时,始终提示“正在努力为您提交”,而且偶尔提交成功后,上传的图片却丢失.这是网站的性能出现了问题,也许之前的架构已经“不堪重负”了,到了该改进的时候.

2.2 场景分析

由于之前考虑低成本快速上线的需求,加上前期数据量较少,将文件存储和应用程序及数据库均部署在同一台服务器上.随着注册用户及活跃用户的递增,网站会出现如下问题.

2.2.1 存储压力

网站在运营过程中,用户产生的大量图片需要占用存储空间,页面的内容以html形式存储,也会占用存储空间,虽然对于非大型网站而言,数据存储一般不会对整个系统性能造成影响,但对于目前只有一台服务器的情况,仍然会表现出存储压力.

2.2.2 数据库“写”操作压力

活跃用户在网站上的行为会造成大量的写操作,比如换个头像、写条评论、发表个留言、订购件商品,这些都会对数据库进行写操作.当压力达到一定限度,就会出现数据丢失的现象,用户反映的页面不显示,已上传的图片的问题,就是由于图片已经上传成功但是其存储路径没有成功地写进Mysql数据库造成的.

2.2.3 流量压力主要来自图片

网站上的文章、商品等内容上会有大量的图片,图片是该网站流量压力的最主要贡献者.用户反映的网站加载太慢,跟图片占用大量的流量有很大关系,当然还有其他诸多原因也会造成网站加载太慢.

2.2.4 用于服务器压力

大量用户同时在线,操作网站,系统响应用户的操作要靠应用服务器来完成,应用服务器负载达到极限时会崩溃.网站经常“白页”,就是Web服务器死机造成的.

2.3 架构调整

架构调整的主要措施是增加服务器,这不仅要将应用分拆到专门的服务器上,而且每种应用还要多台服务器来支撑,做出该决策的依据一是目前的经济状况,二是针对以后用户量和流量增速的预测,虽然目前来讲可能有冗余,但这种冗余是值得的.具体调整方案如下.

2.3.1 对数据库调整

有两台服务器一主一从支撑Mysql数据管理,数据库端的设计可以归纳为“主从复制、读写分离”,也就是说,所有写操作由主服务器来完成,数据被复制到从服务器,以达到数据的一致性,所有的读操作由从服务器来完成,将来可以方便地扩展为一主多从,甚至主从均实现集群化.具体主从服务器的搭建步骤如下.

1)保证主从服务器mysql版本一致,修改root密码;

2)修改主从服务器配置: #vi /etc/my.cnf

[mysqld]log-bin=mysql-bin

server-id=222,226//数值唯一,习惯选取IP地址末段;

3)重启主从服务器并在主服务器上授权从服务器

#/usr/local/mysql/bin/mysql -uroot -pmttang

mysql>GRANT REPLICATION SLAVE ON *.* to 'mysync'@'%' identified by '192.168.0.226'; //表示授权给IP为192.168.0.226的从服务器;

4)配置从服务器启动复制功能

mysql>change master to master_host='192.168.0.222',master_user='mysync',master_password='q123456', master_log_file='mysql-bin.000004',master_log_pos=308;

mysql>start slave;

5)编写shell脚本监控主从服务器状态,有问题及时报警.

2.3.2 应用服务器调整

1)增加服务器

由两台服务器负责支撑网站的应用程序,两台服务器根据各自的状况分摊负载,当其中一台死机后,另一台仍然可以正常提供服务,避免了网站“白页”问题.

2)使用Memcache缓存“对象”

Memcache是一款高效的开源分布式对象缓存工具,可以将网站运营中的查询结果生成的对象进行缓存,不仅可以减轻应用服务器的压力,同时减少对数据库的查询,也减轻了Mysql的从服务器压力(从服务器负责读操作).

当然这种调整需要将应用程序做简单的修改,以保证涉及数据库写操作的程序负责通知Memcache缓存对象因数据有变而失效,可能涉及数据库读操作的程序要看是否有缓存以及缓存是否失效来决定数据是从Memcache中取或者是从Mysql中取.

2.3.3 流量方面的调整

由于网站的主要流量压力来自图片,且用户反映存在图片加载缓慢的现象,这就需要将网站所有图片单独放置在网络运营商提供的CDN服务器上[3]26-31,这种服务器流量的费用较低,可以减轻网站流量方面的压力,有利于图片的加载,还可以降低费用.

一般CDN服务器的计费方式有按流量、按峰值和按带宽3种.按流量计费适用于平时流量不大,但是时不时会有短时间内非常高的访问量;按峰值是按单位时间内的最大流量计费,适用于流量不大且变动不大的情况;按带宽计费适用于流量较大的情况,这次调整选用的是按带宽计费方式的某CDN产品.

2.3.4 其他调整

1)页面静态化

静态化是指自己编写程序,把一些经常访问的页面且变动不大的页面或页面的某块内容(比如:主页、商品详细页、文章浏览页等)生成文件,以某种形式比如html代码的形式保存在文件服务器上,当这次高频次被访问的页面被访问时,避免了多次向应用服务器或数据库发起请求,减轻了各个环节的压力.

2)动静分离

使用squid反向代理缓存技术,将静态页面、html、css和JavaScript代码等进行缓存,被访问时会从适合的缓存池中取的,也能避免各个环节的压力.

通过该次大规模的架构调整,新的架构已经具备了服务大型网站的能力,只要没有特殊的业务需求(比如某些业务需要存储海量图片或音视频文件,或者秒杀等业务触发短时间内高并发访问),该架构两三年内不用调整,当性能出现问题时,只需简单地增加服务器即可.

3 结语

进行软件架构设计时,要根据实际情况,不能一味贪大;在运营中,网站出现性能瓶颈后,要能够审时度势地进行架构调整.

本文以实例浅析软件架构的设计和调整只是起到抛砖引玉的作用,限于篇幅,所述虽全,但欠缺深度,实际操作中如果用到可以进入深度研究.

[1] Garlan D,Shaw M.An introduction to software architecture[J].Advances in software engineering and knowledge engineering,1993,1(3).

[2] 余立强.LAMP架构搭建与网站运行实例[J].网络与信息,2011(8).

[3] 李素粉,董 晖,房秉毅,等.面向云化EPC的mobile CDN融合架构研究[J].电信研究,2014(11).

猜你喜欢
页面架构调整
基于FPGA的RNN硬件加速架构
刷新生活的页面
保健医苑(2022年1期)2022-08-30 08:39:14
夏季午睡越睡越困该如何调整
今日农业(2021年14期)2021-11-25 23:57:29
功能架构在电子电气架构开发中的应用和实践
汽车工程(2021年12期)2021-03-08 02:34:30
工位大调整
意林(2020年10期)2020-06-01 07:26:37
沪指快速回落 调整中可增持白马
LSN DCI EVPN VxLAN组网架构研究及实现
电信科学(2017年6期)2017-07-01 15:45:17
一种基于FPGA+ARM架构的μPMU实现
18
同一Word文档 纵横页面并存