首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 互联网 >

从项目开发到云海架构(04)

2012-10-21 
从项目开发到云端架构(04)1.1.1??????????? 扩展系统2.2.2.1??? 特点 ?????? 当单一的部署模式即便通过集

从项目开发到云端架构(04)

1.1.1??????????? 扩展系统

2.2.2.1??? 特点

?????? 当单一的部署模式即便通过集群部署后仍达不到期盼的高并发能力,那对系统的拆分就不可避免,通过拆分把负载分布在各个节点。系统的拆分包括了架构拆分和数据库拆分。架构拆分后需要考虑层次和模块的划分和部署,之间的调用模式,以及考虑事务处理问题;数据库拆分后需要考虑采取哪种模式,以及如果保证数据一致性问题。

?

2.2.2.2??? 架构

?


从项目开发到云海架构(04)
?

图22-08:扩展系统架构

?

在扩展系统中着重考虑整体性能的伸缩性,所谓伸缩性就是在系统负荷大的时候,能够通过增加服务器/虚拟机来缓解压力;同样的,当不需要多台机器的时候,可以减少服务器的数量来。而这些改变,最终用户是透明的。系统的伸缩性需要在前端,后端,以及数据端都需要考虑。

?

Nginx+keepalived能很好的实现高可用、可扩展以及负载均衡的要求。Nginx提供负载均衡的能力,keepalived提供健康检查,故障转移,提高系统的可用性。采用这样的架构以后很容易对现有系统进行扩展,只要在后端添加或者减少realserver,只要更改配置文件,并能实现无缝配置变更。在本项目中建议采用由Nginx充当LoadBalancer的职责,Keepalived实现Nginx的HA的架构模式,通过暴露虚拟IP(配置DNS绑定域名)的形式对内容网站进行访问。

对session的管理,在集群服务器不多(小于4台)时,可使用Session复制的水平扩展方式,因为广播式复制到其他服务器有一定延时,会带来一定网络开销;在服务器数据较多,追求稳定与可控的情况下,则采用集中式session管理的水平扩展方式(代码需要做点修改)。

?

应用层采用无状态分布式模式,本身应用层能分解多个模块,通过封装的nio模式(metis组件)把调用分解到各个服务器上,从而分解前端的调用压力。至于前端如何感知到后端的服务器个数,以及服务器的业务类型(计费服务器,商品管理服务器,内容分发服务器)则可以通过统一的配置管理模块来处理,下面给一个示意图。(在线影城的范例)


从项目开发到云海架构(04)
?

图 22-08:分布式部署方式(前后端分离)

?

?????? 这里展现的是一种前后端分离模式的部署,前端是多台web,后端是后台应用,通过metis封装对外提供统一的api,有2个重要的组件:

?

数据库的伸缩有几种方式,还可以组合使用,一般来说有读写分离,垂直分库,水平分库等。从可实施步骤可以遵循如下步骤:db + cache à db + 读写分离 + cache à db + 垂直分库 + cache。

因为水平分库的拆分因子一旦确定,就几乎不可能在重新作扩展,所以除非有特定业务,一般不考虑水平分库。下面稍微阐述一下读写分离的模式。

?

2.2.2.3??? 开发

?

?

2.2.2.4??? 部署

软件部署,即把软件放置到相应的地方,并且进行相应的配置,让软件能够正常运行起来。下图有个软件项目的部署方式,每个大框为一个JVM容器,即为在物理上依赖一个具体的WEB容器,WEB容器可以存着于一台物理机器上,或者性能良好的虚拟机上。(注:前端保障模块除外,这里体现的是功能的汇聚和整合,实际情况可能包括多个JVM,但在这里被合并成一个概念)这里阐述一种基本的部署模式,在基于电子消费平台的应用中,整个系统被分解为4层5大模块的格局:

?

?


从项目开发到云海架构(04)
?

图 22-09 软件部署图

?

?

上一篇 从项目开发到云端架构(03) ?:http://timeson.iteye.com/blog/1683590

下一篇 从项目开发到云端架构(05) ?:http://timeson.iteye.com/blog/1685858

?

热点排行