java网站架构设计
涉及到的技术及工具: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组件化,按需加载,css sprite等等,前端优化博大精深,这里就不说了,网上有很多方案,这是一个长期的优化和任务。
2、静态文件存储,分布式文件存储,开源的解决方案也有很多,MogileFS、HDFS
六、业务解耦。随着系统越来越复杂,它就像一个庞大的机器,所有的功能师都在上面开发,新手,老鸟,不关是谁,除了个别资深程序员和架构师以外,其他人未必能理解整个系统,很容易造成bug,而发布就变成了噩梦,只要有个人的功能有问题,整个系统就不能发布,所有人都得停下来等,造成大量资源浪费,加班严重。此阶段,必然需要系统拆分,将系统按照业务进行划分,例如用户模块、博客模块、图片模块等等。各个模块之间通过外部接口进行通讯,各个模块可以单独开发单独部署,互不影响。
java网站架构设计的更多相关文章
- 优酷、YouTube、Twitter及JustinTV视频网站架构设计笔记
本文是整理的关于优酷.YouTube.Twitter及JustinTV几个视频网站的架构或笔记,对于不管是视频网站.门户网站或者其它的网站,在架构上都有一定的参考意义,毕竟成功者的背后总有值得学习的地 ...
- 高性能网站架构设计之缓存篇(5)- Redis 集群(上)
集群技术是构建高性能网站架构的重要手段,试想在网站承受高并发访问压力的同时,还需要从海量数据中查询出满足条件的数据,并快速响应,我们必然想到的是将数据进行切片,把数据根据某种规则放入多个不同的服务器节 ...
- java网站架构演变过程
网站架构演变过程. .传统架构.传统的SSH架构,分为三层架构web控制层.业务逻辑层.数据库访问层..传统架构也就是单点应用,就是大家在刚开始初学JavaEE技术的时候SSH架构或者SSM架构,业务 ...
- (札记)Java应用架构设计-模块化模式与OSGi
本书主要模块化模式的优点.模块化方法与模式.OSGi简单使用等内容.分3大部分: 第一部分介绍了模块化概念.为什么要模块化,以及一些模块化要考虑的东西,如模块粒度,依赖关系,重用性灵活性等. 第二部分 ...
- Java应用架构设计模块化模式与OSGI摘录
在Java中,最适合模块化的单元就是Jar文件. 代码层面我们关注的太多了,熟练的开发人员现在很少争论使用模式的好处,也不再识别哪个模式适合当前需要,因为都能够本能地使用各种设计原则和模式,从GoF的 ...
- Web网站架构设计
目录 [隐藏/显示] 1 - Web负载均衡 1.1 - 使用商业硬件实现 1.2 - 使用开源软件 1.3 - 使用windows自带的互载均衡软件 1.4 - 总结2 - 静态网站 ...
- ASP.NET 构建高性能网站 架构设计
Web前端系统 为了达到不同应用的服务器共享.避免单点故障.集中管理.统一配置等目的,不以应用划分服 务器,而是将所有服务器做统一使用,每台服务器都可以对多个应用提供服务,当某些应用访问量升高时,通过 ...
- 高性能网站架构设计之缓存篇(6)- Redis 集群(中)
昨天晚上钓鱼回来,大发神经,写了篇概括程序员生活现状的文章,没想到招来众多人的口诛笔伐,大有上升到政治层面的趋势. 我也许不会再发表任何冲击心灵的文章,我希望给大家带来更多的正能量,所以那篇文章已被我 ...
- 高性能网站架构设计之缓存篇(4)- Redis 主从复制
Redis 的主从复制配置非常容易,但我们先来了解一下它的一些特性. redis 使用异步复制.从 redis 2.8 开始,slave 也会周期性的告诉 master 现在的数据量.可能只是个机制, ...
随机推荐
- /etc/hosts 详解
/etc/hosts:主机名查询静态表,是ip地址与域名快速解析的文件.ip地址与主机名之间的映射,包括主机的别名. 通常将常用的域名和ip地址映射加入到hosts文件中,实现快速方便的访问. 如果没 ...
- Spring一套全通4—持久层整合
百知教育 - Spring系列课程 - 持久层整合 第一章.持久层整合 1.Spring框架为什么要与持久层技术进行整合 1. JavaEE开发需要持久层进行数据库的访问操作. 2. JDBC Hib ...
- 在线编辑Word——插入图表
在Word中可插入图表,配合使用表格能够更加全方位的展示数据的可信度并增加数据的可读性.本文将通过使用在线编辑器 Spire.Cloud Word 演示如何来插入图表,并设置相关格式化操作.具体步骤如 ...
- idea查看方法在哪里被调用
方法一 选中方法名,右键选择Find Usages 方法二 选中方法快捷键ctrl + alt + h查看Hierarchy Callers
- [hiho1952]运算数
可以发现如果将根的结果写成多项式,可以发现只需要预处理出f[i][j]表示以i为根的子树j次项有多少个,g[i]表示从n个数中选取i个数相乘的和,就可以通过\sum_{i=1}^{n}f[1][i]\ ...
- final关键字、抽象类、抽象类和接口的区别
1.final关键字 1.1.final修饰的类无法继承. 1.2.final修饰的方法无法覆盖. 1.3.final修饰的变量只能赋一次值. 1.4.final修饰的引用一旦指向某个对象,则不能再重 ...
- 【Tool】IntelliJ IDEA 使用技巧
IntelliJ IDEA 使用技巧 2019-11-06 20:51:43 by冲冲 1.快捷键 Ctrl+w //括出相关范围 Ctrl+shift+f //按照代码段在全局搜索 Ctrl+f ...
- 互联网java面试宝典
1.为什么使用消息队列啊? 答题: 消息队列的核心功能就是:解耦合,异步,流量削峰解耦:接口调用发送,那如果E系统也要这个数据呢?那如果C系统现在不需要了呢?现在A系统又要发送第二种数据了呢?A系统负 ...
- Treevalue(0x03)——函数树化详细解析(下篇)
好久不见,再一次回到 treevalue 系列.本文将基于上一篇treevalue讲解,继续对函数的树化机制进行详细解析,并且会更多的讲述其衍生特性及应用. 树化方法与类方法 首先,基于之前的树化函数 ...
- 目前国内UI设计师的发展现状如何?
在分析这个问题之前,我们先来说说如何优秀的UI设计师所需要具备的素质是什么,只有做到了以下几点,才有资格在这个行业生存下去的能力,也才有机会展望行业的未来前景. 一位合格的UI设计师必须做到以下3点: ...