涉及到的技术及工具:java,springmvc,ibatis,freemarker,mysql,mongdb,memcached,ehcache,maven。css
一个网站不可能说一开始就是要设计一个可以考虑全部状况的完美架构,一个成熟的架构都是随着需求的变化,流量的增高来随之变化的。html
基本架构:前端
web服务器:ngnix+apache作负载均衡java
技术架构: freemarker+springMVC+ibatis(myIbatis)+memcache+mysqlmysql
这样的架构通常的网站日均UV在几万十几万的状况下,部署个几台web机器基本就能够知足了。程序员
1、随着流量的增长,首页想到要优化的就是数据库web
一、分库 能够根据业务模块的划分进行分库,用来减轻单库压力。spring
二、分表 对个别数据量很是大的表,进行分表,减小单表数据量,提升查询速度。sql
三、分库以后,对于核心数据库,能够进行主/从库处理,将查询与更新分离,提升插入速度。数据库
四、梳理业务,对于像动态之类的写量很是大,写后并不更新这类特征的数据,能够采用mongdb,得到更高的性能和更简单的业务处理。
数据库作到这个层面上,基本上就差很少了,新的业务进来,数据库能够从容的进行水平扩展。
2、随着业务渐渐复杂,数据库又分库分表,可能有一些业务流程就很是的长,致使应用程序须要去N个库查询或者更新N张表,这样客户端的响应就很是慢了,这个时候就须要异步登场了。
推荐:JMS,使用activeMQ,这些spring都有很好的实现。
3、缓存服务器,网站有一些基本信息,例如:网站配置信息、登陆用户信息等等,这类核心数据,差很少每次请求都要去读取,可是这些数据是不怎么会变的,每次还要去memcache缓存服务器上去读取,服务器间通讯也是要时间的,能够考虑本地缓存。
推荐:EhCach。它是一个纯Java的进程内缓存框架,具备快速、精干等特色。
4、静态化。网站首页、还有二级域名首页等相似首页性质的页面,访问量都比较大,静态化掉。能够定时任务几分钟生成一次。
推荐:Quartz。开源的做业调度框架。(其实这个一开始就应该集成进去,由于你的网站确定会有相似的定时任务的需求,Quartz是当仁不二的选择)。
5、静态文件优化。
一、这个是html和js还有静态图片等,这些的优化方案就比较多了,js组件化,按需加载,css sprite等等,前端优化博大精深,这里就不说了,网上有不少方案,这是一个长期的优化和任务。
二、静态文件存储,分布式文件存储,开源的解决方案也有不少,MogileFS、HDFS
6、业务解耦。随着系统愈来愈复杂,它就像一个庞大的机器,全部的功能师都在上面开发,新手,老鸟,不关是谁,除了个别资深程序员和架构师之外,其余人未必能理解整个系统,很容易形成bug,而发布就变成了噩梦,只要有我的的功能有问题,整个系统就不能发布,全部人都得停下来等,形成大量资源浪费,加班严重。此阶段,必然须要系统拆分,将系统按照业务进行划分,例如用户模块、博客模块、图片模块等等。各个模块之间经过外部接口进行通信,各个模块能够单独开发单独部署,互不影响。