`
wbj0110
  • 浏览: 1610898 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

基于Java技术的大型网站架构方案

阅读更多

Web层

  • 主体架构可以基于 Struts 1.X/2.X,当然有很多更好的控制层框架供选择,以快速敏捷为准则吧。
  • 抽象出核心库封装 控制器和中间层 的操作。
  • 在大规模集群环境下,session复制会引起严重的性能问题。考虑用 集群缓存 + cookie验证 代替session实现权限控制吧。

Cache层

  • 配置 Memcache 组成集群缓存
  • 对 Memcache 客户端进行封装
  • Memcached 节点组成池,调用示意:opList (BizName, 策略 ...)

中间层

“中间层”可以理解为基于应用和数据之间的层次。它被设计用来为Web应用提供:数据缓存 和 对应用透明的数据访问——即应用不需要考虑数据表拆分的问题。以服务的方式提供对存储层的高性能调用以及分布式计算。可供选择的框架:

  • ICE
  • Hadoop
  • 直接基于Memcache开发(减少复杂度,推荐)

存储

推荐MySQL,理由:免费,经过实践检验,有大量成熟的案例、解决方案、技术支持。

  • 小规模:一个 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
采用方案:Ngnix + Resin ,理由:
  1. Resin提供更为快速的servlet引擎 - 选择Resin。
  2. gzip问题 - Resin在单独处理gzip时存在内存溢出的隐患,因此要加一层 Ngnix。
  3. Ngnix 能减少单独使用Resin时的内存占用 - Resin建立1000个连接使用1000个线程;加Ngnix后,透过其“异步连接”、“建立长连接”机制使Resin内存压力大大减小。
  4. 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缓存服务器"来使用。以下是配置片段供参考:
[c-sharp] view plaincopy
  1. http   
  2. {  
  3.   ...  
  4.   client_body_buffer_size  512k;  
  5.   proxy_connect_timeout    5;  
  6.   proxy_read_timeout       60;  
  7.   proxy_send_timeout       5;  
  8.   proxy_buffer_size        16k;  
  9.   proxy_buffers            4 64k;  
  10.   proxy_busy_buffers_size 128k;  
  11.   proxy_temp_file_write_size 128k;  
  12.   ...  
  13.   #注:proxy_temp_path和proxy_cache_path指定的路径必须在同一分区  
  14.   proxy_temp_path   /data0/proxy_temp_dir;  
  15.   #设置Web缓存区名称为cache_one,内存缓存空间大小为200MB,1天清理一次缓存,硬盘缓存空间大小为30GB。  
  16.   proxy_cache_path  /data0/proxy_cache_dir  levels=1:2   keys_zone=cache_one:200m inactive=1d max_size=30g;  
  17. }  
  18. server  
  19. {  
  20.   ...  
  21.   location /  
  22.   {  
  23.     #如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移。  
  24.     proxy_next_upstream http_502 http_504 error timeout invalid_header;  
  25.     proxy_cache cache_one;  
  26.     #对不同的HTTP状态码设置不同的缓存时间  
  27.     proxy_cache_valid  200 304 12h;  
  28.     proxy_cache_valid  301 302 1h;  
  29.     #以域名、URI、参数组合成Web缓存的Key值,Nginx根据Key值哈希,存储缓存内容到二级缓存目录内  
  30.     proxy_cache_key $host$uri$is_args$args;  
  31.     proxy_set_header Host  $host;  
  32.     proxy_set_header X-Forwarded-For  $remote_addr;  
  33.     proxy_pass http://backend_server;  
  34.     expires      1d;  
  35.   }  
  36.   #用于清除缓存,假设一个URL为http://192.168.1.44/test.txt,通过访问http://192.168.4.44/purge/test.txt就可以清除该URL的缓存。  
  37.   location ~ /purge(/.*)  
  38.   {  
  39.     #设置只允许指定的IP或IP段才可以清除URL缓存。  
  40.     allow            127.0.0.1;  
  41.     allow            192.168.0.0/16;  
  42.     deny            all;  
  43.     proxy_cache_purge    cache_one   $host$1$is_args$args;  
  44.   }      
  45.   #扩展名以.php、.jsp、.cgi结尾的动态应用程序不缓存。  
  46.   location ~ .*/.(php|jsp|cgi)?$  
  47.   {  
  48.     proxy_set_header Host  $host;  
  49.     proxy_set_header X-Forwarded-For  $remote_addr;  
  50.     proxy_pass http://backend_server;  
  51.   }  
  52. }  
同时,对于影响页面展现的静态资源,例如:css, js 等可以放在具有优质带宽的IDC(IDC=互联网数据中心,优质/高速的带宽也比较贵,正所谓一份价钱一分货);其他的静态资源,如图片等可以放在价格相对低廉的IDC中,以域名区分两种静态资源,节省每一分钱。

网络拓扑图

         / Ngnix - 1:1 - Resin
F5 --
         / Squid - 1:n - Apache

监控统计平台

  • 业务统计 - 用户访问统计
  • 软件性能 - 应用系统监控,例如:请求响应时间……
  • 硬件/网络性能 - Ganglia监控

其它要点

  • IE浏览器对同一域名(包括子域名)只能建立2个连接,连接多了只能排队……
  • 双F5架构,两台职能划分不同,镜像,心跳接管……
  • Raid存储阵列……
  • Linux操作系统及其优化……
分享到:
评论

相关推荐

    java系统软件技术架构设计方案.docx

    本方案主要探讨的是基于Java技术的系统软件设计,旨在创建一个既能创造客户价值又能提供良好用户体验的软件产品。设计理念上,公司着重于用户友好性和功能实用性,兼顾成本控制、可管理性和安全性。设计中采用了各种...

    淘宝技术架构-基于Java构建的淘宝

    《淘宝技术架构——基于Java构建的淘宝》这篇文章深入剖析了淘宝这一知名电商平台背后的技术体系,主要探讨了如何利用Java技术栈构建大型、高并发、高可用的电子商务系统。以下是该文章可能涵盖的关键知识点: 1. *...

    基于java技术的软件开发架构总结.pdf

    Java技术在软件开发架构中扮演着核心角色,其丰富的库和框架使得开发高效、可扩展的应用成为可能。本文主要探讨了两种基于Java的...开发者需权衡各种优缺点,合理选择适合的架构方案,以确保系统的稳定性和可扩展性。

    基于Java应用的电子商务解决方案

    x3850 的设计采用了 IBM X3 架构(源于大型机的第三代 IBM 企业级 X-架构技术)和 64 位英特尔至强处理器 MP。x3850 可推动包括企业资源计划、数据库服务、客户开发和基于 Java? 技术的应用程序(如 IBM WebSphere?...

    基于JAVA技术的综合性大学Web网站的设计方案.docx

    【基于JAVA技术的综合性大学Web网站设计方案】 Java技术在当今互联网行业中扮演着至关重要的角色,尤其在构建大型、复杂和高性能的Web应用方面。对于综合性大学的Web网站来说,Java技术能够提供稳定、安全和可扩展...

    基于Java三层架构的网络文件传输系统的研究与实现.pdf

    ### 基于Java三层架构的网络文件传输系统的关键知识点 #### 1. Java三层架构的概念及特点 - **概念**:Java三层架构是一种模块化的软件设计思想,它将整个业务系统划分为三个独立的层次:界面交互层、业务逻辑层和...

    基于Java的采购订单管理系统

    基于Java的采购订单管理系统是使用Java语言开发的采购订单管理系统,旨在提供一个综合的采购订单管理解决方案。下面是该系统的知识点总结: 一、开发技术 * Java语言: Java是一种面向对象的编程语言,广泛应用于...

    基于Java的web网上书城方案设计书.pdf

    总结来说,基于Java的Web网上书城方案设计涵盖了从基础的网络编程到复杂的Web应用架构。通过Java、Servlet、JSP和Struts的组合,开发者可以构建出高效、稳定且易于扩展的在线图书销售平台,满足用户在互联网上的购书...

    基于Java架构的大型电商谷粒商城设计源码

    该项目是一款基于Java架构的大型电商平台——谷粒商城的设计源码。源码包含共计35个文件,其中Java源文件22个,XML配置文件6个,属性文件5个,Git忽略文件1个,并附带LICENSE文件。谷粒商城系统旨在提供一个完整的...

    Sun公司为中国客户提供Java架构咨询与电子商务解决方案

    Java的普及程度可以从以下几个方面看出:全球约有300万Java开发者,70%的大型企业信息系统采用Java,每年有近2万人参加世界Java开发者大会,超过1000个应用软件基于Java技术,其中400多个获得100%纯Java认证。...

    基于JAVA办公自动化系统(OA)

    总的来说,基于JAVA的办公自动化系统(OA)是一个采用Java技术栈、Swing和AWT构建GUI、利用MSSQL存储数据的企业级解决方案。它提供源码,为开发者提供了深入学习和二次开发的机会。通过理解和使用这套系统,不仅可以...

    基于Java的人事管理系统

    基于Java的人事管理系统通常采用三层架构:表现层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据访问层(Data Access Layer)。表现层负责用户交互,业务逻辑层处理业务规则和流程,数据访问层...

    基于Java的酒店管理系统源码

    在IT行业中,基于Java开发的酒店管理系统是一种常见的企业级应用,它集成了多种功能,旨在提高酒店服务效率和管理水平。本系统以Java编程语言为核心,利用其强大的面向对象特性、稳定性和跨平台兼容性,为酒店日常...

    Java高手真经系统架构卷Java Web系统设计与架构UML建模+设计模式+面向服务架构

    虽然提供的部分内容重复提及了一个网站链接,并未提供具体的知识点内容,但基于标题和描述,我们可以展开丰富的讨论。 ### Java Web系统设计 Java Web系统设计是构建现代Web应用的核心技术之一。它涉及到如何利用...

    基于java开发的考勤管理系统

    综上所述,基于Java开发的考勤管理系统是一个综合运用Java语言、JDBC以及数据库技术的项目,涵盖了软件开发的多个层面,从需求分析、设计、编码到测试,都体现了开发者对IT技术的深入理解和实践能力。通过这样的系统...

    基于java的教务管理系统方案.pdf

    以上知识点涵盖了基于Java的教务管理系统方案的主要技术要素,从数据库选型、系统架构、开发技术到功能实现等不同层面进行了深入探讨。这些知识点的详细说明和理解,对于构建一个高效、稳定且易用的教务管理系统至关...

    基于Apache Tomcat的一站式Java应用服务器解决方案.pdf

    基于Apache Tomcat的一站式Java应用服务器解决方案,包括系统整体架构设计以及监控运维管理平台Open Tomcat的构建。Open Tomcat通过松散耦合的方式对各应用节点进行管理,并集成了开源监控工具PsiProbe,同时为了...

    基于Java的在线考试系统方案.docx

    **基于Java的在线考试系统方案** 在线考试系统是一种利用互联网技术实现远程考试的软件系统,旨在提高教学效率,减轻教师工作负担,同时方便学生随时随地进行学习和自我测试。本文档将详细阐述一个基于Java的在线...

    JAVA小区门户网站(源代码+论文)

    【标题】"JAVA小区门户网站(源代码+论文)"是一个基于Java技术实现的社区门户系统,主要服务于居民,提供丰富的信息和服务。此项目不仅包含了完整的源代码,还有一篇详细的论文,用于阐述系统的架构、设计原则以及...

Global site tag (gtag.js) - Google Analytics