数据库选择
-
MySQL[43]是一个快速的、多线程、多用户和健壮的SQL数据库服务器,支持关键任务、重负载系统的使用,是最受欢迎的开源数据库管理系统,是Linux下网站开发的首选。它由MySQL AB开发、发布和提供支持。
-
MySQL数据库能为网站提供:
-
高性能。MySQL支持海量,快速的数据库存储和读取。还可以通过使用64位处理器来获取额外的一些性能,因为MySQL在内部里很多时候都使用64位的整数处理。
-
易用性。MySQL的核心是一个小而快速的数据库。它的快速连接,快速存取和安全可靠的特性使MySQL非常适合在互联网站上使用。
-
开放性。MySQL提供多种后台存储引擎的选择,如MyISAM, Heap, InnoDB,Berkeley Db等。缺省格式为MyISAM。 MyISAM 存储引擎与磁盘兼容的非常好[44]。
-
支持企业级应用。MySQL有一个用于记录数据改变的二进制日志。因为它是二进制的,这一日志能够快速地将数据的更改从一台机器复制(replication)到另一台机器上。即使服务器崩溃,这一二进制日志也能够保持完整。这一特性通常被用来搭建数据库集群,以支持更大的流量访问要求[30]
-
还不支持触发器,参照完整性,子查询和数据表视图等,但这些功能都在开发者的TO-DO列表当中。这就是开源的力量:你永远可以期待更好。
国外的Yahoo!,国内的新浪,搜狐等很多大型商业网站都使用MySQL 作为后台数据库。对于一般的网站系统,无论从成本还是性能上考虑,MySQL应该是最佳的选择。
1.
高并发网站架构
1.
图片服务器分离
apache
服务器
Lighttpd->Squid->Apache
静态资源和动态内容分离
,
,
合并
js
css
图
片等资源,减少请求次数,图片是最消耗资源的,于是我们有必要将图片与页面进行分离,
这是基本上大型网站都会采用的策略,
他们都有独立的图片服务器,
甚至很多台图片服务器。
这样的架构可以降低提供页面访问请求的服务器系统压力,
并且可以保证系统不会因为图片
问题而崩溃。另外,在处理静态页面或者图片、
js
等访问方面,可以考虑使用
lighttpd
代
替
Apache
,它提供了更轻量级和更高效的处理能力。
2.
HTML
静态化
3.
数据库集群和库表散列
MySQL
提供的
Master/Slave
也是类似的方案
,
主库和从库分开,主库负责写和更新,
从库只读,从库从主库同步数据。
库表散列是常用并且最有效的解决方案。我们在应用程序中安装业务和应用或者功能模
块将数据库进行分离,不同的模块对应不同的数据库或者表,再按照一定的策
略对某个页
面或者功能进行更小的数据库散列,比如用户表,按照用户
ID
进行表散列,这样就能够低
成本的提升系统的性能并且有很好的扩展性。
sohu
的论坛
就是采用了这样的架构,将论坛
的用户、设置、帖子等信息进行数据库分离,然后对帖子、用户按照板块和
ID
进行散列数
据库和表,最终可以在配置文件中进行简
单的配置便能让系统随时增加一台低成本的数据
库进来补充系统性能。
数据库分布,
mysql
提供主从
(master-slave)
的方式,即数据库有一个主服务器,可以有许
多从服务器,
slave
从
master
同步数据,
网站服务器请求时从
slave
来查询,
减轻
master
压力。
也可以按数据业务切分,
将不同的数据放在不同的服务器上,
这样也会减轻数据请求
的压力
(
但同
时要访问多台数据库服务器,又增加了一些开销
)
。
mysql
的主从同步原理是
binlog
,通过同步主服务器的操作命令过程,来实现在从服务器上重建数
据。同时这种模
式也实现了读写分离,写的时候在
master
上写,读的时候在
slave
上读。防止大并发时受
写入速度影响读取速度