`
raymond2006k
  • 浏览: 295117 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

SNA架构的几种实现方式

阅读更多
参考资料:
Shared Nothing Architecture与PHP的童话
Shared Nothing Architecture

   以往集群架构都采用Session共享模式进行设计,而后PHP等方面提出了SNA架构,主张Session不共享。SNA架构思想,无论对企业应用还是大型互联网站,极大提高了web应用的吞吐量和性能。
   一般SNA架构以集成分布式Cache例如 memcached 的方案居多,此处姑且称为 Cache模式。


   我结合公司电信项目的情况,以及思考,总结另一种方案,供参考。
   SNA思想的关键就是每个集群内web server实例不互相共享session,Cache模式主张session数据都放到分布式缓存中,意味着,逻辑上集群内还是要共享session信息;这种考虑源于负载均衡时,同一个IP发来的两个请求,可能走到不同的 Web Server上。

   因此,只要同一IP的两个请求转发到同一个 Web  server实例,那么就可以不需要全局的 session信息缓存。
   1) 我所在的移动项目下,采用 F5硬件负载均衡器,使用IP记忆机制实现了这一点。因此,各 web server实例的session无需共享,仍然保存在自己的session内存中,节省了网络开销和Cache命中查找时间。
   F5很贵,因此对于网站一般负担不起,但可以采用软件负载来做到这一点。

   切分模式的SNA架构:
   2) IP Memory(IP记忆):负载服务器记录 客户端IP -> ServerID 的关系,模拟F5;
   3) (Dispatch by Rule)按规则转发:IP记忆需要维护一张路由table, 因此,需要消耗一定内存,以及映射关系查找的时间;
      我们将客户端的所有IP看作一个集合 IP Set,按固定规则将其平均分配集群的server实例上去,这样就可以节省路由table的开销。 关键是分配算法,可以考虑的有:
      2.1) 简单数值法: IP各节加总 = X, 假定集群实例个数为 N,编号1-N, 那么每次请求选择的目标server id = X mod N。
      2.2) hash值法: 有的系统可能想基于 userid 进行请求分配, 那么可以采用 X = hashCode(userid), serverID = X mod N;
      具体情况下, 可以灵活选择使用那个数据项判断请求分配的逻辑。这个思想参考了  memcached 的集群管理思想。
   

   4) stickySession方式。
      一般apache等采用这种方式做负载均衡。但必须结合 jvmRoute。 第一次被分配的 web server必须返回一个 jvmRoute在response中,并由 apache 送到客户端浏览器,第二次请求发起时,request信息中将包含 JSESSIONID 和 对应的 jvmRoute, apache根据次找到对应的 server,完成 stickySession机制。


结论: 切分模式的SNA架构,基于规则进行请求转发,可以省去分布式Cache的使用,更进一步的提升系统吞吐量和响应性。
  • 大小: 12.8 KB
  • 大小: 15.5 KB
分享到:
评论
17 楼 tomijerry 2009-12-12  
yunshu 写道
简单的说就是三种:
1. 集中存储session,需要部署单独的session服务器,存储方式可以是内存,可以是数据库,也可以是文件。这种的不好的地方在于要维护单独的session服务器,而且session服务器还要做互备。

2. ip记忆,F5,Foundry,A10等硬件设备做基于源ip的负载均衡转发,或者LVS等软件方式。坏处在于客户端IP地址变更,以及web服务器保存session带来的性能损耗。

3. 纯cookie方式,也可以是伪cookie或者伪session,简单的说就是加密和签名,还有注意时间戳的问题。

我曾经有两个文章涉及到一点这方面的内容,不过我是做安全的。http://www.icylife.net/yunshu/show.php?id=675和http://www.icylife.net/yunshu/show.php?id=644


那如果cookie被劫持了呢,完成可以通过sniffer来获取cookie信息,然后模拟一份完全一样的cookie信息,这种方法用加密与签名是否能解决这个问题呢
16 楼 zhouzulin 2009-05-04  
F5基于IP策略来做会导致部分失败,因为现在的客户端太复杂,好多客户端的ip地址是基于双向链路:一会是联通 一会是电信 ip经常变更
15 楼 xieke 2009-04-28  
raymond2006k 写道
参考资料:


结论: 切分模式的SNA架构,基于规则进行请求转发,可以省去分布式Cache的使用,更进一步的提升系统吞吐量和响应性。


即使用了session stick之类的切分模式,还是不能用本地cache,
如果一个用户修改了数据,本地cache随之修改  ,其他用户如果stick在另外一台服务器上访问cache ,就是脏数据了。
14 楼 neptune 2009-03-06  
SNA主要无非就是解决,Session和cache的问题
13 楼 yunshu 2009-03-06  
简单的说就是三种:
1. 集中存储session,需要部署单独的session服务器,存储方式可以是内存,可以是数据库,也可以是文件。这种的不好的地方在于要维护单独的session服务器,而且session服务器还要做互备。

2. ip记忆,F5,Foundry,A10等硬件设备做基于源ip的负载均衡转发,或者LVS等软件方式。坏处在于客户端IP地址变更,以及web服务器保存session带来的性能损耗。

3. 纯cookie方式,也可以是伪cookie或者伪session,简单的说就是加密和签名,还有注意时间戳的问题。

我曾经有两个文章涉及到一点这方面的内容,不过我是做安全的。http://www.icylife.net/yunshu/show.php?id=675和http://www.icylife.net/yunshu/show.php?id=644
12 楼 chenlb 2009-03-04  
willko 写道
我有点疑问,
1.在本机用什么方式保存session?用文件系统吗?这样效率怎样?
如果采用共享session的方法,可以保存在memcached中。php只负责存取,gc交给memcached做,这样性能是不错的。
如果用文件系统保存,php需要随机gc,而且文件系统的性能是不能和内存比的,就算是本地保存session,我也认为应该在本机安装memcached。



楼主的意思应该是, 本地内存保存session,

可以简单地理解为memcached功能的每台机由web server才担。下面的那些规则主要是解决同一个用访问同一web server
11 楼 yanhua 2009-03-03  
unsid 写道

"极大提高了web应用的吞吐量和性能。"
PHP不了解,以J2EE项目为例子,这能提升性能么?Session共享,Session是在本地的啊,访问本地对象多快啊,分布式缓存有网络延迟啊,这是为什么小规模项目用分布式缓存做SSO性能会很不好,只有项目很大,大到这点性能上的损失远远不如部署新应用带来的便利更重要的时候,用memchace才会觉得划算吧,本质上是减低耦合,增强扩展性,看不出和性能有什么关系。

很多人把性能和吞吐量认为是一回事。其实这种架构主要是提高吞吐量的。
10 楼 highriver 2009-02-25  
负载均衡可以使用上面的软硬件去实现。HA还是要考虑使用Memcached或Terracotta这样的中央服务器实现。
9 楼 highriver 2009-02-25  
HA如何实现
8 楼 lcycenter 2009-02-10  
基于IP的分发方式有它的缺陷,因为在一个session中客户IP可能会发生变化。IP发生变化的原因可能有:
1. 用户网络的出口采用了基于地址池的NAT或者是防火墙
2. 用户网络的出口可能采用双链路连接方式,配置的负载策略可能会导致IP发生变化
3. 用户可能采用多PROXY切换工具
4. ...

总而言之,用户端的情况及其复杂,使用基于IP的分发策略是一个有缺陷的SNA实现方式。
7 楼 myreligion 2009-02-09  
就提升而言,用 cookie + 伪SNA 应该更好。

对于web,大部分是匿名访问,少量是登录的。匿名情况可以全部用cookie做标示;对于登录session,在cookie内做标示并存储在数据库中一份。当请求访问到某一台server的时候,如果是匿名的按照匿名处理,如果是登录的从本地读取session(如: request.getSession(false)),如果不存在按照cookie标示从数据库读取,然后加载到内存中,供以后使用。

IP记忆还是hash算法都会损失可用性,为了性能降低高可用性很多时候是划不来的。就像google可以慢点,但是google肯定不允许宕机。
6 楼 willko 2009-02-08  
“简单数值法”和“hash值法”,感觉就是求余法啊。。。原理一样的,应该不能算两种吧,可能我钻牛角尖了。。。

memcached的分布式算法有两种,名字我起的,哈哈,别见怪

1.求余法
crc32(key) % memcached服务器数量
这种算法,当有一台服务器当机,会导致大量cache失效,这个算法太依赖服务器数量了

2.临近节点算法
假如:
服务器数量 3台
网络节点 2^32 = 12 (方便计算,假如的)

把网络节点12分配给3台memcached服务器

假如网络节点这样分配了
1-4 memcached1
5-8 memcached2
9-12 memcache3

计算键的crc32值,然后找到该值的下一个节点,这个节点就是要保存的服务器

当某台服务器当机后,只会导致本服务器区域的cache失效



谢谢,我刚知道sna,一直我都是共享session的
5 楼 willko 2009-02-08  
我有点疑问,
1.在本机用什么方式保存session?用文件系统吗?这样效率怎样?
如果采用共享session的方法,可以保存在memcached中。php只负责存取,gc交给memcached做,这样性能是不错的。
如果用文件系统保存,php需要随机gc,而且文件系统的性能是不能和内存比的,就算是本地保存session,我也认为应该在本机安装memcached。

2.分配算法,有没有比较好的方法,能平衡的分布。考虑最近n分钟内的分布情况,再影响分布。


如果我没记错的话,nginx支持ip hash负载均衡,现在nginx的wiki上不去,,不会被gfw了吧。。。

刚查了一下f5,真的好贵。。。。哈哈
4 楼 wendong007 2009-02-08  
但是如果某台WebServer宕机怎么办,如何保证HA呢
3 楼 unsid 2009-02-08  
"极大提高了web应用的吞吐量和性能。"
PHP不了解,以J2EE项目为例子,这能提升性能么?Session共享,Session是在本地的啊,访问本地对象多快啊,分布式缓存有网络延迟啊,这是为什么小规模项目用分布式缓存做SSO性能会很不好,只有项目很大,大到这点性能上的损失远远不如部署新应用带来的便利更重要的时候,用memchace才会觉得划算吧,本质上是减低耦合,增强扩展性,看不出和性能有什么关系。
2 楼 gembler 2009-02-08  
用memcached存session
touch session有什么思路?
1 楼 key232323 2009-02-08  
最近一直研究这个。

在这里学习了

相关推荐

    SNA on linux 管理手册

    - **System Network Architecture (SNA):** SNA是IBM开发的一种网络架构,用于在大型机和其他计算机之间建立连接。它提供了一种灵活且高效的方式来管理不同类型的网络资源。 - **LU (Logical Unit):** LU是在SNA网络...

    网络游戏-SNA网络体系下交互数据的传输方法及装置.zip

    在网络游戏领域,SNA(System Network Architecture,系统网络架构)是一种传统的网络通信协议集,主要用于IBM大型机系统。然而,随着技术的发展,SNA的概念也被借鉴到其他领域,包括网络游戏中的数据传输。本文将...

    JavaEye论坛热点月报 总第8期

    - **SNA架构的几种实现方式**:探讨了系统网络架构(SNA)的不同实现方式,以及它们在现代网络环境中的应用和优缺点。 4. **项目实战** - **山寨开心网停车外挂开发**:分享了一个基于社交网络游戏的外挂开发案例...

    CCDP 640-025

    这是因为FEP在SNA架构中起到了桥接主机和终端设备的作用,而一个独立的FEP没有连接外围设备时,可以看作是一个相对独立的单元或“子区域”。 ### 知识点四:主域信任关系 在多域环境中,主域之间的信任关系是至关...

    基于Spark图计算的社会网络分析系统的设计和实现——顶点分析1

    8. **系统设计与实现**:详述了系统架构的设计,包括数据输入、处理流程、结果输出等模块,以及如何在实际环境中部署和运行该系统。 通过这样的系统,研究人员和分析师可以更有效地探索社会网络中的模式、趋势和...

    -CSDN云服务器音乐

    音乐文件SNA.wav和WIN.wav是两种常见的音频格式,WAV是一种无损音频格式,它保留了原始录音的所有细节,但文件通常较大。这种格式适用于专业音频编辑和高质量的音乐播放。另一方面,如果没有更多上下文,SNA可能是...

    网络协议图

    本文将详细解析标题所提及的几种网络协议,并基于描述中提到的TCP/IP、NOVELL、IBM、ISO、DEC、APPLETALK等协议进行深入探讨。 首先,我们来了解一下OSI(开放系统互连)模型,这是描述网络通信的一个通用框架。它...

    网络管理\路由技术介绍

    本文将详细介绍几种关键的技术,包括串行隧道(Serial Tunnel)、通道接口处理器(Channel Interface Processor, CIP)、DLSw(Data Link Switching)技术、MIP(Multiprotocol Interface Processor)的E1接口特性...

    JHMI综合布线英文文档

    文档进一步讨论了几种当前流行和未来可能广泛使用的通信技术,包括: 1. **ISDN (Integrated Services Digital Network)**:一种能够同时传输语音和数据信号的数字通信标准,适用于高质量的语音通话和数据传输。 2....

    IBM_AIX RS/6000培训教材

    - AIX支持多种网络协议,如TCP/IP和SNA,能够轻松实现与其他系统的互联互通。 - **1.1.4 终端支持:** - 提供了丰富的终端支持功能,允许用户通过多种方式接入系统。 **1.2 AIX系统架构** - AIX基于微内核架构...

    路由器配置和桌面协议

    在现代网络架构中,路由器与桥接技术扮演着至关重要的角色,尤其是在实现不同网络间的互连互通方面。本文档旨在深入解析《路由器配置和桌面协议》中的关键概念——透明桥接技术。这一技术对于构建高效、稳定的网络...

    OSI七层模型详解

    本节简要介绍几种商用网络体系结构及其特点。 ##### 1. SNA(System Network Architecture) SNA是由IBM公司在1974年推出的,主要用于构建以大型主机为中心的集中式网络架构。SNA协议同样分为七层,但与OSI模型在...

    IBM的SAN交换机

    在SAN架构中,交换机扮演着核心角色,它们可以是交换式网络或共享式网络,如FC-AL(Fibre Channel Arbitrated Loop)环网。交换式网络通过多个交换机组成的光纤通道交换矩阵,允许数千个节点相互连接,提供更高的可...

    计算机网络技术自考试题.pdf

    1. **通信复用技术**:在题目中提到了几种不同的复用技术,如频分多路复用(FDM)、时分多路复用(TDM)、波分多路复用(WDM)以及码分多址(CDMA)。T1信道是时分多路复用的实例,它将一个信道划分为多个时间片,每...

    zigbee primer

    - **网络架构**:Zigbee网络包括三种设备类型:协调器(Coordinator)、路由器(Router)和终端设备(End Device)。其中,协调器负责创建和维护网络;路由器用于转发数据;终端设备则只进行数据交换。 - **通信方式...

    Cisco路由器手册

    AAL类型根据所传输数据的特点被细分为几种不同的标准: 1. **AAL1 (AAL Type 1)**:设计用于传输固定比特率(CBR)的流量,如音频和视频信号,同时也支持基于时分复用(TDM)的电路仿真,例如DS1和E1电路。 2. **AAL2...

    数据通信:4-网络基础.pdf

    数据通信和网络基础是信息技术领域的核心概念,涵盖了网络的架构、功能、传输媒介以及通信协议等方面。本篇文档主要讨论了以下几个关键知识点: 1. **差错控制**:在数据通信中,差错控制是为了确保数据在传输过程...

Global site tag (gtag.js) - Google Analytics