随着网站运营时间的增长,用户量、数据量和访问量都在不断地增长,于是大的访问量、大的存储量和大的数据量,大的负载和网络环境快速部署都会出现。于是网站运营问题可以总结为一下四点:
1. 大的访问量
2. 大的存储量
3. 访问速度
4. 服务器监控
5. 网络环境的快速部署
解决方案:负载均衡和冗余技术。
负载均衡:让网络服务器的压力均衡到不同的设备。
负载均衡技术方案:Cisco以太网通道,windows的NLB技术,linux的lvs技术和F5等负载均衡器
Linux的LVS方案:
冗余技术方案:Cisco HSRP热备份路由,windows集群技术,linux的HA技术,IBM的AIX技术。
冗余技术:避免出现单点故障,实现故障切换,由此引申出集群技术。
集群就是指将多个服务器集中起来一起同时的进行同一种服务,在客户看来只有一个服务器工作。
集群的特点:只有一台服务器提供服务,其他的服务器处于休眠状态,如果这台服务器出现问题,其他的服务器将被激活,保证服务的不间断性。只有负载均衡和冗余技术结合在一起,才能真正达到超级计算机功能。
主流数据库类型:Mysql(中小型数据库),oracle(甲骨文公司),DB2(IBM大型数据库),Nosql(非关系型数据库,目前很火)。
对于大数据存储我们一般可以使用主从复制和分区分表技术来解决。
Mysql主从复制原理图:Binary log:记录数据的增删改日志,不记录查询服务。通过日志进行数据的同步。
Mysql还有另外一种扩展方式,Mysql读取小表的速度更快。于是就引入了分表的概念,分表分为垂直分表和水平分表,一般遇到最多的还是水平分表,mysql5.1引进了分区分表技术。分区分表是不改变表名,将表切成不同分区。
下面引入一种非关系型数据mongoDB,最近很火。
MongoDB是一个机遇分布式文件存储的数据库,有C++语言编写,是一个介于关系数据库和非关系数据之间的产品。它最大的特点是支持的查询语言非常强大,几乎可以完成类似关系数据的绝大部分操作,还支持对数据库建立索引。
目前主要实现方案:Squid代理缓存技术,页面静态化缓存,Memcache和Sphinx搜索加速。
Squid可以实现缓存代理和数据的动静分离,将静态数据存储起来,只有需要请求服务器的文件才到真正的服务器上去读取,大大提高访问速度。
页面静态化:主要是通过模版实现,如Thinkphp,Brophp,smarty模版等。
Memcache:是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一巨大的hash表,它能存储各种格式的数据,包括图像、视频、文件等。简单的说,就是讲数据调用到内存中,然后从内存读取数据,从而大大提高读取速度。
缺点:遇到断电,服务器宕机,会造成数据的丢失。尤其是对于网站数据重要性高的网站不适合。
Sphinx全文检索:sphinx是一个机遇SQL的全文检索引擎,可以结合Mysql,PostgreSQL做全文检索,他可以提供比数据本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。Sphinx单一索引,最大可以包含1亿条记录,全文检索速度1000万条只需3-4分钟,创建1000万条索引在50分钟完成。
1.4服务监控:
apache服务监控,mysql服务监控,磁盘空间监控,流量监控。
警报:邮件警报,Postfix发邮件系统,sendmail发邮件系统和dovecot收邮件系统。电子邮件发是由SMTP(25端口),收邮件是由POP3协议(110端口)完成的。
网络环境的快速部署变得越来越容易,在快速部署中如果可以用主机管理面板,这样对于主机的管理变得越来越方便。
Windows可以使用plesk面板,linux可以使用cpanel面板。
Apache压力测试软件ab,是由httpd-2.2.3-43.e15.centos软件提供,可能要创建很多文件然后删除。
Mysql压力测试:mysql5.1.4开始带有一个压力测试工具mysqlslap,通过模拟多个并发客户端访问mysql来进行测试。