当前一种先进实用的架构设计

标签: 架构 设计 | 发表时间:2014-06-28 17:43 | 作者:buddha17
出处:http://blog.csdn.net

目录

1系统架构图...2

2架构设计...3

2.1项目开发环境...3

2.2运行环境要求:...3

2.3 服务器架构平台:...4

2.4.架构逻辑设计...5

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

2.4.2mysql集群...6

2.4.3fastdfs图片服务器集群...8

3 架构剖析...8

3.1负载均衡器解析...8

3.2 lvs解析...9

3.3keeplived解析...10

3.4 haproxy解析...10

3.5mysql解析...11

3.6couchbase解析。...12

3.7 squid解析...13

3.8 lucene解析...13

3.9Nagios解析...13

 

当前一种先进实用的架构设计

                  李万鸿

对用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的服务性能,值得采纳。

                          

     2014-06-28

作者:buddha17 发表于2014-6-28 9:43:41 原文链接
阅读:141 评论:0 查看评论

相关 [架构 设计] 推荐:

软件架构设计

- - 企业架构 - ITeye博客
软件架构设计尚没有万灵的方法论支持,还是个非常新兴的行业,给出个人理解的行业软件架构设计过程,受个人水平有限,仅供参考:. 1.业务分析:针对目标行业的业务战略、蓝图、业务功能及流程进行分析,提出其中部分功能可以使用信息化进行处理,通过分析可以得出信息化要解决的问题. 2.解决方案设计:根据业务战略,形成行业信息化解决方案.

架构设计-逻辑层

- - 人月神话的BLOG
知乎看到一个问题,也是当前在软件设计开发中普遍存在的一个问题,如下:. 现在要开发一个业务逻辑比较复杂的项目,但是在网上看了设计模式的思想后感觉自己以前写的东西扩展性都不好,接口定义也不合适,都是一个实体类一个接口,项目施工也感觉不合理,感觉项目施工中应该先集中定义好接口,并完成业务逻辑,然后在具体实现接口,不知道这样想是不是正确.

秒杀架构设计

- - IT瘾-dev
最近在部门内部分享了原来在电商业务做秒杀活动的整体思路,大家对这次分享反馈还不错,所以我就简单整理了一下,分享给大家参考参考. 通俗一点讲就是网络商家为促销等目的组织的网上限时抢购活动. 比如说京东秒杀,就是一种定时定量秒杀,在规定的时间内,无论商品是否秒杀完毕,该场次的秒杀活动都会结束. 这种秒杀,对时间不是特别严格,只要下手快点,秒中的概率还是比较大的.

架构设计和概要设计

- - 人月神话的BLOG
初步再来探讨下架构设计和概要设计的区别和边界问题. 架构设计包括了功能性架构和技术架构设计两个部分的内容,功能性架构解决业务流程和功能问题,而技术架构解决非功能性需求等问题. 两种架构都包括了动态和静态两个方面的内容,对于功能性架构中动态部分为业务流程驱动全局用例,用例驱动的用例实现等;对于技术架构中动态部分为架构运行机制,而静态部分为框架,分层等方面的内容.

社区讨论:Android的架构设计

- - InfoQ cn
最近,开发者在知乎社区中就Android的架构设计展开了 讨论. 有人问“Android 架构设计的思想与原则是什么. 最近工作中遇到了Android中的权限问题,发现Android确实是开源的,但并不开放,比如权限控管就相当严格,限制做很多事情,这一点得益于Linux内核. 这也勾起来对其架构研究的兴趣,不知到哪位能够深度剖析下Android架构设计的思想与原则.

分层架构设计原则

- - 博客园_首页
通常一个软件系统都包含不同部分互相交互耦合,我们希望设计能够将系统划分为有意义的各个部件,各个部件能够独立的开发、演进、部署. 这时整体性的设计已经无法满足这些挑战,这就需要我们对系统进行合理清晰的划分. 通常我们为待开发的系统定义多个层次,每一层完成独立的功能. 1:系统分为多层,每层完成独立的功能,层内部继续细分子模块,每层能够独立演进、部署.

CDN架构设计及注意事项

- - ITeye博客
内容传输网络或内容分发网络(CDN)是一个包含数据副本的缓存系统,存在于网络中不同的节点以便可以最大化的利用网络来传输数据至客户端. 一个客户端访问离它最近节点的数据副本,而不是所有的客户端访问相同的中心服务器,因此避免了服务器瓶颈问题. CDN所缓存的内容类型包括web对象、可下载的对象(媒体文件、软件、文档)、应用程序和实时媒体流.

Solr与HBase架构设计 - aitanjupt

- - 博客园_首页
摘要:本篇是本人在做一个大数据项目. ,对于系统架构总结的一点想法,如何在保证存储量的情况下,又能保证数据的检索速度. 前提:      Solr、SolrCloud提供了一整套的数据检索方案,HBase提供了完善的大数据存储机制. 需求:      1、对于添加到HBase中的结构化数据,能够检索出来.

网购秒杀系统架构设计

- - 企业架构 - ITeye博客
秒杀活动只是网站营销的一个附加活动,这个活动具有时间短,并发访问量大的特点,如果和网站原有应用部署在一起,必须会对现有业务造成冲击,稍有不慎可能导致整个网站瘫痪. 用户在秒杀开始前,通过不停刷新浏览器页面以保证不会错过秒杀,这些请求如果按照一般的网站应用架构,访问应用服务器、连接数据库,会对应用服务器和数据库服务器造成极大的负载压力.

Hybrid APP架构设计思路

- - SegmentFault 最新的文章
关于Hybrid模式开发app的好处,网络上已有很多文章阐述了,这里不展开. 本文将从以下几个方面阐述Hybrid app架构设计的一些经验和思考. 原文及讨论请到 github issue. 作为一种跨语言开发模式,通讯层是Hybrid架构首先应该考虑和设计的,往后所有的逻辑都是基于通讯层展开.