大话网站---从Hello World到高并发网站
偶得一空闲时,开始整理一些东西来与大家共享,为这个世界上IT苦旅的人节省一些时间。因为涉及较多内容,我会渐渐补充内容
一,选择:
首先选择网站技术架构,如果我们不是做面向服务型,电子商务型网站或管理网站,我们一般不用考虑J2EE,SSH等方案,一般选择前端部分主要为PHP框架,后端采用多种语言及组件的混合结构来提供服务。
二,基本结构:
1. Web服务:
网上有很多关于Web服务器的选择,如果为将来的扩展及高并发做准备,最好是前端用Nginx,Nginx在反向代理,高并发的资源消耗上是很少的,而且文档虽没有Apache完善,但也至少比Lighttpd的文档多些,当然,Lighttpd性能在静态文件方面占优势,这里就不说太多这方面的分析了,容易让一般人产生困惑,这里就选择Nginx做Web服务,(随站网站流量增加,它会改变职能为前端代理及部分缓存工作,如果你采用AS式服务集群,它还会被当成主控服务器.进行一些负载策略的工作)
2. 数据服务:
如果我们不想花银子,用不起Oracle那些昂贵的方案(如Data Guard, Real Application Clusters, MAA(Maximum Availablity Architecture),但我们又想要较复杂的商务数据功能,那MySQL当然是首选了,不过不知道被oracle收购后,这样的日子还能过多久,不用担心,我们还有ProgreSQL,至于如今炒得火热的NoSQL数据库,大家不必报太高期望,我用过一些,这些数据库一般都是无事务机制,关系Join等功能都较弱,一般处理一些海量的非事务性数据还行.一般适合高 发网站里混合数据中心的一个存贮方式.
3.数据备份
不同的数据有不同的备份方式,一般要用脚本开发一些自动备份工具.定期备份,因为一开始还没有用到分布式的数据库系统,简单的周期性备份是必须的.一般数据库都有冷备份,热备份的命令,但还是要工具化它们,因为随着系统增长,维护工作越来越多,等到专门的维护小组成立时,可能一切都晚太多了.
经过以上的方案分析与构建,一般会形成一个简单可运维的网站了.
三,第一次优化:
1.代理:
随着网站访问量上升,随之而来有很多问题出现:比如安全问题 ,有恶意攻击,垃圾式的访问, 还有网站主动安全策略SSL给服务器带来性能消耗过大问题.为了解决这些问题,同时我们还在灵活处理对高并发访问的分发,或者访问跳转,也就是常说的负载均衡策略的灵活实施,我们要在网站服务器上加上反向代理服务器,一般反向代理服务器能处理高并发的连接,性能优越,Nginx是较优选择.Nginx同时也支持高效的缓存机制.
2.缓存:
网站的访问一般资源可以分为静态化资源,动态化资源.静态化资源不是指静态网页,而提指最终响应数据变化周期长的资源.比如静态网页,比如一些索引目录性数据,比如通过动态网页访问的一些不常变化的资源,比如图片,音视频等素材性数据,旧的报表,字典性数据等,都可以看成静态化数据,这些数据完全不必每次都经过网站服务器去数据库里查找,再经过IO读取(当然,操作系统会对数据文件,及普通文件有OS级是的缓存,这个要等到后面分析),所以需要对这些数据进行缓存,缓存分为服务器式缓存及应用逻辑中的缓存两类,
服务器式缓存就是代理的方式把静态资源生成后放到缓存服务器上,客户端直接从这些缓存服务器上取得数据,缓存服务器有很多开源实现,有老牌的Squid,Nginx也支持不错的缓存.缓存服务器一般都是在网站前端进行.这是缓存策略的一部分
应用逻辑的缓存是在网站服务器的应用逻辑中.对一些数据进行缓存,以方便在逻辑处理中重复从数据库或存贮中去取得这些数据.这个层次缓存一般利用 memcached,Ncache,ehCache,OSCache等等.
3.静态化:
四,第二次优化:
1.分布式服务器集群
2.分布式存贮
a. 分布式文件
b.分布式多媒体
c.分布式数据库(Sharding,Cluster或集群)
五,第三次优化
1.优化缓存及分布方式
2.混合其它方案。
六,第四次
1.日志分析。
2.数据仓库
3.搜索引擎,SEO
七,多层次运维: