我的日常

登录/注册
您现在的位置:论坛 盖世程序员(我猜到了开头 却没有猜到结局) 运维优化 > java网站架构设计
总共48087条微博

动态微博

查看: 1675|回复: 0

java网站架构设计

[复制链接]

1

主题

0

听众

18

金钱

一袋弟子

该用户从未签到

跳转到指定楼层
楼主
发表于 2015-05-11 20:10:16 |只看该作者 |倒序浏览
java网站架构设计
2015年5月10日 21:16 新浪博客 [url=]删除[/url]


涉及到的技术及工具:java,springmvc,ibatis,freemarker,mysql,mongdb,memcached,ehcache,maven。

一个网站不可能说一开始就是要设计一个能够考虑所有情况的完美架构,一个成熟的架构都是随着需求的变化,流量的增高来随之变化的。

基本架构:

web服务器:ngnix+apache做负载均衡

技术架构: freemarker+springMVC+ibatis(myIbatis)+memcache+mysql

这样的架构一般的网站日均UV在几万十几万的情况下,部署个几台web机器基本就可以满足了。

一、随着流量的增加,首页想到要优化的就是数据库

1、分库 可以根据业务模块的划分进行分库,用来减轻单库压力。

2、分表 对个别数据量非常大的表,进行分表,减少单表数据量,提高查询速度。

3、分库之后,对于核心数据库,可以进行主/从库处理,将查询与更新分离,提高插入速度。

4、梳理业务,对于像动态之类的写量非常大,写后并不更新这类特征的数据,可以采用mongdb,获得更高的性能和更简单的业务处理。

数据库做到这个层面上,基本上就差不多了,新的业务进来,数据库可以从容的进行水平扩展。

二、随着业务渐渐复杂,数据库又分库分表,可能有一些业务流程就非常的长,导致应用程序需要去N个库查询或者更新N张表,这样客户端的响应就非常慢了,这个时候就需要异步登场了。

推荐:JMS,使用activeMQ,这些spring都有很好的实现。

、缓存服务器,网站有一些基本信息,例如:网站配置信息、登录用户信息等等,这类核心数据,差不多每次请求都要去读取,但是这些数据是不怎么会变的,每次还要去memcache缓存服务器上去读取,服务器间通信也是要时间的,可以考虑本地缓存。

推荐:EhCach。它是一个纯Java的进程内缓存框架,具有快速、精干等特点。

四、静态化。网站首页、还有二级域名首页等类似首页性质的页面,访问量都比较大,静态化掉。可以定时任务几分钟生成一次。

推荐:Quartz。开源的作业调度框架。(其实这个一开始就应该集成进去,因为你的网站肯定会有类似的定时任务的需求,Quartz是当仁不二的选择)。

五、静态文件优化。

1、这个是html和js还有静态图片等,这些的优化方案就比较多了,js组件化,按需加载,csssprite等等,前端优化博大精深,这里就不说了,网上有很多方案,这是一个长期的优化和任务。

2、静态文件存储,分布式文件存储,开源的解决方案也有很多,MogileFS、HDFS

六、业务解耦。随着系统越来越复杂,它就像一个庞大的机器,所有的功能师都在上面开发,新手,老鸟,不关是谁,除了个别资深程序员和架构师以外,其他人未必能理解整个系统,很容易造成bug,而发布就变成了噩梦,只要有个人的功能有问题,整个系统就不能发布,所有人都得停下来等,造成大量资源浪费,加班严重。此阶段,必然需要系统拆分,将系统按照业务进行划分,例如用户模块、博客模块、图片模块等等。各个模块之间通过外部接口进行通讯,各个模块可以单独开发单独部署,互不影响。



科帮网 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与科帮网享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、科帮网管理员和版主有权不事先通知发贴者而删除本文


JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

快速回复
您需要登录后才可以回帖 登录 | 立即注册

   

关闭

站长推荐上一条 /1 下一条

发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
快速回复 返回顶部 返回列表