Web层
- 主体架构可以基于 Struts 1.X/2.X,当然有很多更好的控制层框架供选择,以快速敏捷为准则吧。
- 抽象出核心库封装 控制器和中间层 的操作。
- 在大规模集群环境下,session复制会引起严重的性能问题。考虑用 集群缓存 + cookie验证 代替session实现权限控制吧。
Cache层
- 配置 Memcache 组成集群缓存
- 对 Memcache 客户端进行封装
- Memcached 节点组成池,调用示意:opList (BizName, 策略 ...)
中间层
“中间层”可以理解为基于应用和数据之间的层次。它被设计用来为Web应用提供:数据缓存 和 对应用透明的数据访问——即应用不需要考虑数据表拆分的问题。以服务的方式提供对存储层的高性能调用以及分布式计算。可供选择的框架:
- ICE
- Hadoop
- 直接基于Memcache开发(减少复杂度,推荐)
- 小规模:一个 data table 维护存储服务器阵列,内容 -> mount ……
-
大规模:Master-Slave模式+MySQL Proxy,实现数据库读写分离。在中间层的包装下,可做如下扩展,以支持更大规模的数据存取:
- 数据库/表水平拆分,例 User -> User33% + User33% + User34%
- 数据库/表垂直拆分,例 User -> UserBaseInfo + UserAddrInfo
也可考虑使用 LongStore (龙存) 解决方案,由龙存管理存储阵列……
部署
- 划分子域名,每个子域名一个Web应用包,互不干扰
- 静态资源(css, js, image ...)使用专门的静态服务器
负载均衡
小规模:DNS轮询。大规模:F5, 2*X 台F5服务器,F5是L4/L7层交换机,每台至少可处理200万连接(与服务器内存有关)。
Ngnix是L7层交换,LVS负载均衡也是一种方案
Web中间件选择
- Tomcat - 最高400并发
- Apache - 最高2000并发
- Ngnix - 优于Apache
- Resin提供更为快速的servlet引擎 - 选择Resin。
- gzip问题 - Resin在单独处理gzip时存在内存溢出的隐患,因此要加一层 Ngnix。
- Ngnix 能减少单独使用Resin时的内存占用 - Resin建立1000个连接使用1000个线程;加Ngnix后,透过其“异步连接”、“建立长连接”机制使Resin内存压力大大减小。
- Ngnix 针对Linux系统有性能优化措施 - 0 Copy, send file ...
因此采用:1 Ngnix + 1 Resin,一对一。
静态服务器采用:Squid + Apache, why? because Squid has cache ability ...
新变化 - Nginx从0.7.48版本开始,支持了类似Squid的缓存功能。这个缓存是把URL及相关组合当作Key,用md5编码哈希后保存在硬盘上,所以它 可以支持任意URL链接,同时也支持 404/301/302 这样的非200状态码。虽然目前官方的Nginx Web缓存服务只能为指定URL或状态码设置过期时间,不支持类似Squid的PURGE指令,手动清除指定缓存页面,但是,通过一个第三方的Nginx 模块,可以清除指定URL的缓存。Nginx的Web缓存服务主要由proxy_cache相关指令集和fastcgi_cache相关指令集构成,前者用于反向代理时,对后端内容源服务器进行缓存,后者主要用于对FastCGI的动态程序进行缓存。两者的功能基本上一样。最新的Nginx 0.8.31版本,proxy_cache和fastcgi_cache已经比较完善,加上第三方的ngx_cache_purge模块(用于清除指定 URL的缓存),已经可以完全取代Squid。有的网站已经在生产环境使用了 Nginx 的 proxy_cache 缓存功能超过两个月,十分稳定,速度不逊于 Squid。在功能上,Nginx已经具备Squid所拥有的Web缓存加速功能、清除指定URL缓存的功能。而在性能上,Nginx对多核CPU的利用, 胜过Squid不少。另外,在反向代理、负载均衡、健康检查、后端服务器故障转移、Rewrite重写、易用性上,Nginx也比Squid强大得多。这 使得一台Nginx可以同时作为"负载均衡服务器"与"Web缓存服务器"来使用。以下是配置片段供参考:
- http
- {
- ...
- client_body_buffer_size 512k;
- proxy_connect_timeout 5;
- proxy_read_timeout 60;
- proxy_send_timeout 5;
- proxy_buffer_size 16k;
- proxy_buffers 4 64k;
- proxy_busy_buffers_size 128k;
- proxy_temp_file_write_size 128k;
- ...
- #注:proxy_temp_path和proxy_cache_path指定的路径必须在同一分区
- proxy_temp_path /data0/proxy_temp_dir;
- #设置Web缓存区名称为cache_one,内存缓存空间大小为200MB,1天清理一次缓存,硬盘缓存空间大小为30GB。
- proxy_cache_path /data0/proxy_cache_dir levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;
- }
- server
- {
- ...
- location /
- {
- #如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移。
- proxy_next_upstream http_502 http_504 error timeout invalid_header;
- proxy_cache cache_one;
- #对不同的HTTP状态码设置不同的缓存时间
- proxy_cache_valid 200 304 12h;
- proxy_cache_valid 301 302 1h;
- #以域名、URI、参数组合成Web缓存的Key值,Nginx根据Key值哈希,存储缓存内容到二级缓存目录内
- proxy_cache_key $host$uri$is_args$args;
- proxy_set_header Host $host;
- proxy_set_header X-Forwarded-For $remote_addr;
- proxy_pass http://backend_server;
- expires 1d;
- }
- #用于清除缓存,假设一个URL为http://192.168.1.44/test.txt,通过访问http://192.168.4.44/purge/test.txt就可以清除该URL的缓存。
- location ~ /purge(/.*)
- {
- #设置只允许指定的IP或IP段才可以清除URL缓存。
- allow 127.0.0.1;
- allow 192.168.0.0/16;
- deny all;
- proxy_cache_purge cache_one $host$1$is_args$args;
- }
- #扩展名以.php、.jsp、.cgi结尾的动态应用程序不缓存。
- location ~ .*/.(php|jsp|cgi)?$
- {
- proxy_set_header Host $host;
- proxy_set_header X-Forwarded-For $remote_addr;
- proxy_pass http://backend_server;
- }
- }
同时,对于影响页面展现的静态资源,例如:css, js 等可以放在具有优质带宽的IDC(IDC=互联网数据中心,优质/高速的带宽也比较贵,正所谓一份价钱一分货);其他的静态资源,如图片等可以放在价格相对低廉的IDC中,以域名区分两种静态资源,节省每一分钱。
网络拓扑图
/ Ngnix - 1:1 - Resin
F5 --
/ Squid - 1:n - Apache
监控统计平台
- 业务统计 - 用户访问统计
- 软件性能 - 应用系统监控,例如:请求响应时间……
- 硬件/网络性能 - Ganglia监控
其它要点
- IE浏览器对同一域名(包括子域名)只能建立2个连接,连接多了只能排队……
- 双F5架构,两台职能划分不同,镜像,心跳接管……
- Raid存储阵列……
- Linux操作系统及其优化……
相关推荐
本方案主要探讨的是基于Java技术的系统软件设计,旨在创建一个既能创造客户价值又能提供良好用户体验的软件产品。设计理念上,公司着重于用户友好性和功能实用性,兼顾成本控制、可管理性和安全性。设计中采用了各种...
《淘宝技术架构——基于Java构建的淘宝》这篇文章深入剖析了淘宝这一知名电商平台背后的技术体系,主要探讨了如何利用Java技术栈构建大型、高并发、高可用的电子商务系统。以下是该文章可能涵盖的关键知识点: 1. *...
Java技术在软件开发架构中扮演着核心角色,其丰富的库和框架使得开发高效、可扩展的应用成为可能。本文主要探讨了两种基于Java的...开发者需权衡各种优缺点,合理选择适合的架构方案,以确保系统的稳定性和可扩展性。
x3850 的设计采用了 IBM X3 架构(源于大型机的第三代 IBM 企业级 X-架构技术)和 64 位英特尔至强处理器 MP。x3850 可推动包括企业资源计划、数据库服务、客户开发和基于 Java? 技术的应用程序(如 IBM WebSphere?...
【基于JAVA技术的综合性大学Web网站设计方案】 Java技术在当今互联网行业中扮演着至关重要的角色,尤其在构建大型、复杂和高性能的Web应用方面。对于综合性大学的Web网站来说,Java技术能够提供稳定、安全和可扩展...
### 基于Java三层架构的网络文件传输系统的关键知识点 #### 1. Java三层架构的概念及特点 - **概念**:Java三层架构是一种模块化的软件设计思想,它将整个业务系统划分为三个独立的层次:界面交互层、业务逻辑层和...
基于Java的采购订单管理系统是使用Java语言开发的采购订单管理系统,旨在提供一个综合的采购订单管理解决方案。下面是该系统的知识点总结: 一、开发技术 * Java语言: Java是一种面向对象的编程语言,广泛应用于...
总结来说,基于Java的Web网上书城方案设计涵盖了从基础的网络编程到复杂的Web应用架构。通过Java、Servlet、JSP和Struts的组合,开发者可以构建出高效、稳定且易于扩展的在线图书销售平台,满足用户在互联网上的购书...
该项目是一款基于Java架构的大型电商平台——谷粒商城的设计源码。源码包含共计35个文件,其中Java源文件22个,XML配置文件6个,属性文件5个,Git忽略文件1个,并附带LICENSE文件。谷粒商城系统旨在提供一个完整的...
Java的普及程度可以从以下几个方面看出:全球约有300万Java开发者,70%的大型企业信息系统采用Java,每年有近2万人参加世界Java开发者大会,超过1000个应用软件基于Java技术,其中400多个获得100%纯Java认证。...
总的来说,基于JAVA的办公自动化系统(OA)是一个采用Java技术栈、Swing和AWT构建GUI、利用MSSQL存储数据的企业级解决方案。它提供源码,为开发者提供了深入学习和二次开发的机会。通过理解和使用这套系统,不仅可以...
基于Java的人事管理系统通常采用三层架构:表现层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据访问层(Data Access Layer)。表现层负责用户交互,业务逻辑层处理业务规则和流程,数据访问层...
在IT行业中,基于Java开发的酒店管理系统是一种常见的企业级应用,它集成了多种功能,旨在提高酒店服务效率和管理水平。本系统以Java编程语言为核心,利用其强大的面向对象特性、稳定性和跨平台兼容性,为酒店日常...
虽然提供的部分内容重复提及了一个网站链接,并未提供具体的知识点内容,但基于标题和描述,我们可以展开丰富的讨论。 ### Java Web系统设计 Java Web系统设计是构建现代Web应用的核心技术之一。它涉及到如何利用...
综上所述,基于Java开发的考勤管理系统是一个综合运用Java语言、JDBC以及数据库技术的项目,涵盖了软件开发的多个层面,从需求分析、设计、编码到测试,都体现了开发者对IT技术的深入理解和实践能力。通过这样的系统...
以上知识点涵盖了基于Java的教务管理系统方案的主要技术要素,从数据库选型、系统架构、开发技术到功能实现等不同层面进行了深入探讨。这些知识点的详细说明和理解,对于构建一个高效、稳定且易用的教务管理系统至关...
基于Apache Tomcat的一站式Java应用服务器解决方案,包括系统整体架构设计以及监控运维管理平台Open Tomcat的构建。Open Tomcat通过松散耦合的方式对各应用节点进行管理,并集成了开源监控工具PsiProbe,同时为了...
**基于Java的在线考试系统方案** 在线考试系统是一种利用互联网技术实现远程考试的软件系统,旨在提高教学效率,减轻教师工作负担,同时方便学生随时随地进行学习和自我测试。本文档将详细阐述一个基于Java的在线...
【标题】"JAVA小区门户网站(源代码+论文)"是一个基于Java技术实现的社区门户系统,主要服务于居民,提供丰富的信息和服务。此项目不仅包含了完整的源代码,还有一篇详细的论文,用于阐述系统的架构、设计原则以及...