java实用的系统架构设计

对用JAVA开发的项目来说,根据“成熟稳定、先进科学、实用可靠“的原则,可以使用这样一种架构,采用多个集群来保证系统的高性能、高可靠性、伸缩性、可维护性和安全的需要,服务器可以线性扩展,使用开源免费软件和廉价服务器,提供极高的性价比。

1系统架构图

2架构设计

2.1项目开发环境

1.       开发语言、工具:JAVA 、eclipse。

2.       技术架构采用STRUTS2+SPRING3+HIBERNATE3。

3.       采用自动测试工具进行严格测试,保证代码质量,如:QTP、ROBERT、LOADRUNNER等。

4.       软件环境:maven、SVN(git)、jetty,JDK6。

5.       硬件环境:cpu:P3 2.8GHZ以上 Memory:3G以上。

2.2运行环境要求:

硬件环境:

服务器端: 推荐配置为16G内存以上,CPU为2.8GHZ以上配置,硬盘容量为500G以上的服务器。

通信网络: 网络协议为HTTP、TCP/IP。

软件环境:

服务器端:

Ø   数据库服务器:mysql5.6。

Ø   Web服务器:jboss7

Ø   服务器采用华硕服务器。

Ø   服务器操作系统: linuxcentos6.5.

Ø   浏览器:Internet Explore8.0或以上版本、360浏览器6及以上版本。

Ø   NAS存储,42T,RAID5,用于存储数据。

屏幕分辨率推荐为:1024*768或以上。

 

2.3服务器架构平台:

1)    Lvs+keepalived-1.2.8 ,2台集群做互联网访问的入口。

2)    Squid3.3用2台集群进行页面缓存。

3)    HAPROXY1.4+keepalived-1.2.8用3台集群进行WEB服务器负载均衡和动静分离。

4)    jboss服务器进行3台集群,每台硬盘500G。

5)    mysql数据库用haproxy进行4台主从集群和负载均衡。

6)    用2台couchbase2集群进行数据缓存。

7)    用2台fastdfs3集群存储图片。

8)    用1台Lucene4.7搜索服务器。

9)    采用nagios3.5监控服务器,发生异常时可发邮件和短信。

这个架构先进实用,可以支持7X24每分钟数万至数十万的访问量。

2.4.架构逻辑设计

2.4.1 LVS+KEEPLIVED+SQUID+HAPROXY+JBOSS集群

用LVS+KEEPLIVED双机通过一个VIP(vitual  IP)对对个squid缓存服务器进行负载均衡,Squid缓存服务器通过haproxy为jboss服务器进行缓存,haproxy+keeplived双机对jboss服务器集群进行负载均衡调度。

  2.4.2mysql集群

MySQL支持双主的设置,即两个MySQL节点互为主备,不过虽然理论上,双主只要数据不冲突就可以工作的很好,但实际情况中还是很容发生数据冲突的,比如在同步完成之前,双方都修改同一条记录。因此在实际中,最好不要让两边同时修改。即逻辑上仍按照主从的方式工作。但双主的设置仍然是有意义的,因为这样做之后,切换主备会变的很简单。因为在出现故障后,如果之前配置了双主,则直接切换主备会很容易。

双主在设置时,只需将上面的一段设置复制一份,分别写入两个MySQL节点的配置文件,但要修改相应的server-id,auto-increment-offset和master-host。auto-increment-offset就是为了让双主同时在一张表中进行添加操作时不会出现id冲突,所以在两个节点上auto-increment-offset设置为不同的值就好。 在两个节点上都为对方创建用户。

Mysql用2主多从,提供高性能服务,主数据库提供对数据库的写操作,从数据库进行读操作,实现了读写分离和数据库备份。从数据库可线性扩展。

用haproxy+keeplived双机对slave数据库进行负载均衡,提供对数据库的读操作。

2.4.3fastdfs图片服务器集群

Fastdfs集群保存图片等文件,可动态线性扩展。

 

3架构剖析

3.1负载均衡器解析

负载均衡器(调度器)是一种采用各种分配算法把网络请求分散到一个服务器集群中的可用服务器上去,通过管理进入的Web数据流量和增加有效的网络带宽,从而使网络访问者获得尽可能最佳的联网体验的硬件设备。

1、负载均衡器的工作层次:

1)工作于tcp/udp层实现底层协议的负载均衡,请求在内核中实现转发;

2)工作于应用层,支持特定的应用协议实现应用层的负载均衡,请求在用户空间中。

工作于tcp/udp层的性能要比工作于应用层的负载均衡器的好得多,若请求数量没超过应用层负载均衡器的容量,应使用应用层的负载均衡器,它能直接于前端更好的解决请求。

2、http/https协议层的负载均衡器

1)tcp/udp层:lvs, haproxy

2) 应用层:apache,nginx,haproxy,lighttpd,varnish, squid

3、mysql协议层的负载均衡器

1)tcp/udp层:lvs

2)应用层:haproxy,数据库专用连接池能实现读写分离。

3.2 lvs解析

LVS集群采用IP 负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的 虚拟服务器。整个 服务器集群的结构对客户是透明的,而且无需修改 客户端和服务器端的程序。为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。

3.3keeplived解析

Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。Layer3,4&7工作在IP/TCP协议栈的IP层,TCP层,及应用层。

3.4 haproxy解析

HAProxy提供高可用性、 负载均衡、动静分离以及基于TCP和HTTP应用的代 理,支持 虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的 并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。

HAProxy实现了一种 事件驱动,  单一进程模型,此模型支持非常大的并发连接数。

3.5解析

MySQL被广泛地 应用在 Internet上的中小型网站中。由于其 体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站 数据库。MariaDB是mysql原开发团队的杰作,google公司已转为使用MariaDB。

Mysql成熟实用,稳定可靠,已在业界得到广泛的使用,mysql的性能比postgre优异,通过实际测试,可以看到mysql比postgre更强。

Mysql提供主从复制功能,主从服务器设置的稳健性得以提升,如果主服务器发生故障,可以把本来作为备份的从服务器提升为新的主服务器。在主从服务器上分开处理用户的请求,读的话,可以直接读取备机数据,可获得更短的响应时间。用从服务器做数据备份而不会占用主服务器的系统资源。采用haproxy对从数据库进行负载均衡,提供高性能的读操作。

 

实践证明,mysql-proxy,amoeba,master-master-manage、mysqlcluster的性能不稳定,不建议使用。

3.6couchbase解析。

Memcache基本上已经是开发的标配了,但是对于Memcache集群,很多线上部署仍然是很单薄的。

几个存在的问题:不健壮、数据不安全、配置变更可能导致存取异常、后备数据的一致性。鉴于存在以上问题,Memcache的开发团队开发了Membase,支持多台服务器集群,数据的切片和复制,有效的提高了服务稳定性和数据的安全性,并且支持数据的持久存储。代码的稳定性不够好,我曾经在部分线上业务上使用了Membase,后来因为几次莫名的存取操作缓慢,只能又撤销回到Memcache。之后,Membase团队与CouchDB团队合并,推出二合一的产品: Couchbase。

Couchbase的最大特点: 

1,完全继承Memcache,原生支持所有Memcache操作;

2,继承了Membase的特性,支持集群和数据持久化及线性扩展;

3,继承了CouchDB的文档性质,支持通过View对数据进行操作。这个View的特性,提供了以往memcache所不具备的便利性,但是同Mongodb相比又很简单原始,感觉不是一种普遍需求的功能。编程使用couchbase和使用memcached一样。

Couchbase比redis做缓存更好,redis一旦重启,速度非常慢,10G数据需要半个小时。

3.7 squid解析

Squid作为网页服务器的前置cache服务器,可以代理用户向web服务器请求数据并进行缓存,也可以用在局域网中,使局域网用户通过代理上网。Squid主要设计用于在Linux一类系统运行。

Squid是一个缓存internet数据的一个软件,可缓存html页面和图片等,它接收用户的下载申请,并自动处理所下载的数据。也就是说,当一个用户想要下载一个主页时,它向Squid发出一个申请,要Squid替它下载,然后Squid 连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份,当别的用户申请同样的页面时,Squid把保存的备份立即传给用户,使用户觉得速度相当快。

3.8 lucene解析

Lucene是一套用于 全文检索和 搜寻的开源程式库,由 Apache软件基金会支持和提供。Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。在 Java开发环境里Lucene是一个成熟的免费 开源工具。就其本身而言,Lucene是当前以及最近几年最受欢迎的免费Java信息检索程序库。

3.9Nagios解析

Nagios是一款开源的免费网络监视工具,能有效监控Windows、Linux和Unix的 主机状态,交换机 路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。

总之,这是一个先进实用的架构,采用了haproxy、lvs、keeplived进行负载均衡,使用couchbase、squid进行缓存,使用mysql数据库主从方式,使用lucene搜索等技术,他们的配置要进行优化,提供了HA、HP的服务性能,值得采纳。

Tagged: , , , , ,

1 comment

  1. hubert 2014 年 6 月 30 日 at 上午 11:18

    .

    thanks for information!…