【海量之道】海量之道之SET模型
本文介绍了set模型。
一 提供海量服务时面对的场景
场景1:如何令黄村机房的TWS机器访问黄村机房的APP服务,避免TWS跨机房调用永丰机房的APP机器?
场景2:DB和Redis如何实现快慢分离,读写分离,加速读取速度,改善用户体验?
场景3:如何实现单节点错误不影响全局服务,防止单点失效造成全局服务挂掉?
场景4:如何实现用户暴增或业务增加导致的机器负载过高性能下降问题?
二 SET模型是什么
SET模型是在系统设计过程中,根据业务特征为进行规模化扩容或部署而建立的基础资源模型,一种工程化、规模化设备容量建设单位。SET模型的核心是用户模型、容量模型,其主要有以下三个特性:
1 高度标准化:充分考虑各种不同的环境以及场景,综合成本、效率多个方面的要求。
2 高度规格化:充分考虑适用环境的一些要求,提供有限种规格。
3 高度模块化:强调的是麻雀虽小五脏俱全
三 SET模型能做什么
3.1 有效防止故障扩散、单点失效
利用SET思想将一个服务按用户范围分成不同的小单元,每个小单元(SET)具备全部业务服务能力,当一个SET发生故障时候,只影响这一小部分用户从实现到有效防止故障扩散。
在带有容错机制的SET架构中,在SET之间增加容错处理,当一个SET发生故障时,使用类似一致性哈希的算法,调用方可以自动切换到下一个SET来存储,并且将新的位置记录在index上以实现高效容错。
3.2 实现海量服务的高效运营
SET模块就像一个集装箱,把各模块标准化、模块化、规模化,它为海量服务运营,特别是设备管理、网络架构,提供了宏观运营支撑框架,从而极大提高了海量服务运营效率。
以电商的SET模型为例,从接入层开始,数据开始sticky,按订单号路由,即按单号分SET,同一个SET尽可能在一个IDC 里,减少模块间调用的耗时,在同一个SET内,逻辑层任何一台机器,调用方可实时摘除,如果是数据层发生故障,先在接入层,把新产生的订单号屏蔽有故障对应的SET编号,比如,SET1 数据库出现故障,为了避免在故障的SET1 上继续产生新的支付请求,在订单生成器直接跳过SET1的单号规则,把新请求导入其它SET。只有未完成的订单会提示故障,稍后恢复阻止了故障引发的进一步恶化。在故障DB上的数据,通过备机与业务逻辑层的数据核对,完成数据一致性的修复。
3.3 应对用户及业务增加带来的服务压力
使用SET模型可以实现服务的动态伸缩,适应业务的增长。在微信手Q的后台服务框架中,相应的TWS请求APP服务时,我们使用SET模型服务以实现压力均分、同机房接入、动态增减APP服务器以实现业务变更需要、用户增长需要。
3.4 实现快慢分离、读写分离
使用SET模型可以方便的管理服务资源,有效实现服务的快慢分离,避免轻量级服务与重量级服务需求杂糅请求到同一服务点,高效避免了请求拥塞和拒绝服务的发生。
使用SET模型还可以做到读写分离,对DB或Redis的读写实施分离,以实现读写互不干扰、提高海量读取服务速度与质量的目标。
3.5 实际场景分享(微信和手Q如何使用SET模型容灾以确保高可用性)
首先是SET标准化。SET是标准业务部署模块,接入层、逻辑层和存储层标准化成不同的SET。
每个SET内都有固定数量的服务器和标准服务容量。譬如,上海XX接入SET设计容量XXX万用户,当前用户数为XXX万,离警戒水位还有XX%,XX小时后可进入扩容点。
SET都具有自动化部署能力,几百台服务器的SET部署时间小于10分钟。SET按单元分布在不同城市之间。每个重点城市都会部署许多套接入SET,逻辑SET和存储SET。
第三,SET间、城市间、区域间都具备全网调度能力。用户到接入SET的调度通过GLBS来切换,譬如接入SET会有许多个VIP,通过域名服务变更VIP就可以把用户请求从天津切到上海。
接入SET到逻辑SET,或逻辑SET到存储SET的访问则通过内部名字服务系统来切换。这样当任何一个IDC或某城市出现问题时,运维人员通过调度可以在几分钟内把流量切到正常的SET,甚至可以通过调度系统做到自动化切换。
第四,存储层的多地同步。存储层会在三地以上部署多套,譬如华南、华中和华北各部署一套存储SET。有写请求时先写华南SET,写成功后通过同步中心把数据同步到华中和华北SET,通过最终一致性保证数据保存在多地存储。数据在三地同步最长时间才几千毫秒,因此用户对数据的不一致基本无感知。
四 应用SET模型到实际项目
以【金手指项目】为例,本节将对上述模型应用进行列举介绍,并回答开始的四个问题
下图是项目整体的SET服务配置
4.1 TWS访问相同机房APP服务问题
使用SET模型服务可以很简单的实现同机房的服务调用,防止跨地域调用带来的各种问题,下图是IDC的APP服务机的SET配置
图中人为的将不同机房的机器进行SET划分,将APP机器划分为黄村、永丰、灰度机三个集合,对应的TWS机器也进行相应划分,如下图:
如此即可将不同机房的TWS对应不同机房的APP以实现服务调用,即TWS的SET0集合的黄村机器调用APP的SET0集合的黄村机器;TWS的SET1集合的永丰机器调用APP的SET1集合的永丰机器;TWS灰度机访问APP灰度机。下面两张图分别是机房的配置情况及同机房TWS访问相同位置APP的模型:
目前只有在异常情况或测试情况下才会配置TWS跨机房访问APP。
4.2 读写分离
应对DB、Redis的读写分离问题,可以将APP服务机划分为DB、Redis读访问机和写访问机两个服务组。
【金手指项目】中我们需要对DB进行读取和非读取划分,因此我们将APP划分为两组:DB访问组、DB隔离组,如下图:
上图所示APP机器无DB读取权限,仅用于接收TWS用户获取已生成数据的请求;
上图所示APP机器有DB读取权限,用于接收管理端、Daemon端的生成规则关键词请求,该请求需要访问数据库获取黑名单、规则详情等信息,并生成规则下关键词以存储或返回管理端。
上述DB权限不同的服务被被调程序分别调用以实现相应服务,将两个权限组的机器再进行地区SET划分:SET0是黄村机房机器,SET1是永丰机房机器,SET2是灰度机,以实现区域隔离,加速访问效率。下图是对应请求服务的TWS机器的SET划分。
4.3 实现容错、预防单点失效
根据上述图表,每个SET有至少一个以上机器可供使用,SET中设置多机器即可实现不同TWS对应APP的SET中的不同机器获取服务,以防止单台服务机失效问题
4.4 应对业务变化、用户增加
对于业务变化问题,如图所示
项目后期,由于IDC机器不能根据域名访问相应JSS机器拉取数据,根据需要增加了HTTP服务SET,如图橙色和浅紫色所示,使用该服务可以令相应APP机器访问JSS服务器82号机。
对于用户增加业务增加问题,我们也可以相同的增加相应服务SET或增加SET中的机器数量以适应业务变更,同样的当活动结束需求降低,可以摘除部分SET内的机器或整体摘除服务。
4.5 关于监听端口
SET集合的端口是用于被调的,即该端口用于监听并提供来自于该端口的请求服务,因此APP的SET集合的端口应该向上级申请,并实现绝对独立,而TWS不用于向APP提供服务,所以其监听端口无用,但是该端口号不能重合现有服务,防止其阻塞TWS正常服务的监听。
4.6 写在最后
其实SET模型只是一种解耦、内聚的思想,用于方便操作和业务需要,应该因地制宜的使用,就如上图的Daemon服务机SET组,仅用于Daemon服务调用单台机器以实现每天刷新当天最新数据。
本文介绍了set模型。
一 提供海量服务时面对的场景
场景1:如何令黄村机房的TWS机器访问黄村机房的APP服务,避免TWS跨机房调用永丰机房的APP机器?
场景2:DB和Redis如何实现快慢分离,读写分离,加速读取速度,改善用户体验?
场景3:如何实现单节点错误不影响全局服务,防止单点失效造成全局服务挂掉?
场景4:如何实现用户暴增或业务增加导致的机器负载过高性能下降问题?
二 SET模型是什么
SET模型是在系统设计过程中,根据业务特征为进行规模化扩容或部署而建立的基础资源模型,一种工程化、规模化设备容量建设单位。SET模型的核心是用户模型、容量模型,其主要有以下三个特性:
1 高度标准化:充分考虑各种不同的环境以及场景,综合成本、效率多个方面的要求。
2 高度规格化:充分考虑适用环境的一些要求,提供有限种规格。
3 高度模块化:强调的是麻雀虽小五脏俱全
三 SET模型能做什么
3.1 有效防止故障扩散、单点失效
利用SET思想将一个服务按用户范围分成不同的小单元,每个小单元(SET)具备全部业务服务能力,当一个SET发生故障时候,只影响这一小部分用户从实现到有效防止故障扩散。
在带有容错机制的SET架构中,在SET之间增加容错处理,当一个SET发生故障时,使用类似一致性哈希的算法,调用方可以自动切换到下一个SET来存储,并且将新的位置记录在index上以实现高效容错。
3.2 实现海量服务的高效运营
SET模块就像一个集装箱,把各模块标准化、模块化、规模化,它为海量服务运营,特别是设备管理、网络架构,提供了宏观运营支撑框架,从而极大提高了海量服务运营效率。
以电商的SET模型为例,从接入层开始,数据开始sticky,按订单号路由,即按单号分SET,同一个SET尽可能在一个IDC 里,减少模块间调用的耗时,在同一个SET内,逻辑层任何一台机器,调用方可实时摘除,如果是数据层发生故障,先在接入层,把新产生的订单号屏蔽有故障对应的SET编号,比如,SET1 数据库出现故障,为了避免在故障的SET1 上继续产生新的支付请求,在订单生成器直接跳过SET1的单号规则,把新请求导入其它SET。只有未完成的订单会提示故障,稍后恢复阻止了故障引发的进一步恶化。在故障DB上的数据,通过备机与业务逻辑层的数据核对,完成数据一致性的修复。
3.3 应对用户及业务增加带来的服务压力
使用SET模型可以实现服务的动态伸缩,适应业务的增长。在微信手Q的后台服务框架中,相应的TWS请求APP服务时,我们使用SET模型服务以实现压力均分、同机房接入、动态增减APP服务器以实现业务变更需要、用户增长需要。
3.4 实现快慢分离、读写分离
使用SET模型可以方便的管理服务资源,有效实现服务的快慢分离,避免轻量级服务与重量级服务需求杂糅请求到同一服务点,高效避免了请求拥塞和拒绝服务的发生。
使用SET模型还可以做到读写分离,对DB或Redis的读写实施分离,以实现读写互不干扰、提高海量读取服务速度与质量的目标。
3.5 实际场景分享(微信和手Q如何使用SET模型容灾以确保高可用性)
首先是SET标准化。SET是标准业务部署模块,接入层、逻辑层和存储层标准化成不同的SET。
每个SET内都有固定数量的服务器和标准服务容量。譬如,上海XX接入SET设计容量XXX万用户,当前用户数为XXX万,离警戒水位还有XX%,XX小时后可进入扩容点。
SET都具有自动化部署能力,几百台服务器的SET部署时间小于10分钟。SET按单元分布在不同城市之间。每个重点城市都会部署许多套接入SET,逻辑SET和存储SET。
第三,SET间、城市间、区域间都具备全网调度能力。用户到接入SET的调度通过GLBS来切换,譬如接入SET会有许多个VIP,通过域名服务变更VIP就可以把用户请求从天津切到上海。
接入SET到逻辑SET,或逻辑SET到存储SET的访问则通过内部名字服务系统来切换。这样当任何一个IDC或某城市出现问题时,运维人员通过调度可以在几分钟内把流量切到正常的SET,甚至可以通过调度系统做到自动化切换。
第四,存储层的多地同步。存储层会在三地以上部署多套,譬如华南、华中和华北各部署一套存储SET。有写请求时先写华南SET,写成功后通过同步中心把数据同步到华中和华北SET,通过最终一致性保证数据保存在多地存储。数据在三地同步最长时间才几千毫秒,因此用户对数据的不一致基本无感知。
四 应用SET模型到实际项目
以【金手指项目】为例,本节将对上述模型应用进行列举介绍,并回答开始的四个问题
下图是项目整体的SET服务配置
4.1 TWS访问相同机房APP服务问题
使用SET模型服务可以很简单的实现同机房的服务调用,防止跨地域调用带来的各种问题,下图是IDC的APP服务机的SET配置
图中人为的将不同机房的机器进行SET划分,将APP机器划分为黄村、永丰、灰度机三个集合,对应的TWS机器也进行相应划分,如下图:
如此即可将不同机房的TWS对应不同机房的APP以实现服务调用,即TWS的SET0集合的黄村机器调用APP的SET0集合的黄村机器;TWS的SET1集合的永丰机器调用APP的SET1集合的永丰机器;TWS灰度机访问APP灰度机。下面两张图分别是机房的配置情况及同机房TWS访问相同位置APP的模型:
目前只有在异常情况或测试情况下才会配置TWS跨机房访问APP。
4.2 读写分离
应对DB、Redis的读写分离问题,可以将APP服务机划分为DB、Redis读访问机和写访问机两个服务组。
【金手指项目】中我们需要对DB进行读取和非读取划分,因此我们将APP划分为两组:DB访问组、DB隔离组,如下图:
上图所示APP机器无DB读取权限,仅用于接收TWS用户获取已生成数据的请求;
上图所示APP机器有DB读取权限,用于接收管理端、Daemon端的生成规则关键词请求,该请求需要访问数据库获取黑名单、规则详情等信息,并生成规则下关键词以存储或返回管理端。
上述DB权限不同的服务被被调程序分别调用以实现相应服务,将两个权限组的机器再进行地区SET划分:SET0是黄村机房机器,SET1是永丰机房机器,SET2是灰度机,以实现区域隔离,加速访问效率。下图是对应请求服务的TWS机器的SET划分。
4.3 实现容错、预防单点失效
根据上述图表,每个SET有至少一个以上机器可供使用,SET中设置多机器即可实现不同TWS对应APP的SET中的不同机器获取服务,以防止单台服务机失效问题
4.4 应对业务变化、用户增加
对于业务变化问题,如图所示
项目后期,由于IDC机器不能根据域名访问相应JSS机器拉取数据,根据需要增加了HTTP服务SET,如图橙色和浅紫色所示,使用该服务可以令相应APP机器访问JSS服务器82号机。
对于用户增加业务增加问题,我们也可以相同的增加相应服务SET或增加SET中的机器数量以适应业务变更,同样的当活动结束需求降低,可以摘除部分SET内的机器或整体摘除服务。
4.5 关于监听端口
SET集合的端口是用于被调的,即该端口用于监听并提供来自于该端口的请求服务,因此APP的SET集合的端口应该向上级申请,并实现绝对独立,而TWS不用于向APP提供服务,所以其监听端口无用,但是该端口号不能重合现有服务,防止其阻塞TWS正常服务的监听。
4.6 写在最后
其实SET模型只是一种解耦、内聚的思想,用于方便操作和业务需要,应该因地制宜的使用,就如上图的Daemon服务机SET组,仅用于Daemon服务调用单台机器以实现每天刷新当天最新数据。
【海量之道】海量之道之SET模型的更多相关文章
- (面试)Hash表算法十道海量数据处理面试题
Hash表算法处理海量数据处理面试题 主要针对遇到的海量数据处理问题进行分析,参考互联网上的面试题及相关处理方法,归纳为三种问题 (1)数据量大,内存小情况处理方式(分而治之+Hash映射) (2)判 ...
- 十道海量数据处理面试题 - 数据分析与数据挖掘技术-炼数成金-Dataguru专业数据分析社区
1.海量日志数据,提取出某日访问百度次数最多的那个IP. 首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中.注意到IP是32位的,最多有个2^32个IP.同样可以采用映射的方法 ...
- 海量数据挖掘MMDS week4: 推荐系统之隐语义模型latent semantic analysis
http://blog.csdn.net/pipisorry/article/details/49256457 海量数据挖掘Mining Massive Datasets(MMDs) -Jure Le ...
- hadoop面试100道收集(带答案)
1.列出安装Hadoop流程步骤 a) 创建hadoop账号 b) 更改ip c) 安装Java 更改/etc/profile 配置环境变量 d) 修改host文件域名 e) 安装ssh 配置无密码登 ...
- july教你如何迅速秒杀掉:99%的海量数据处理面试题
作者:July出处:结构之法算法之道blog 以下是原博客链接网址 http://blog.csdn.net/v_july_v/article/details/7382693 微软面试100题系列 h ...
- 【Java】几道常见的秋招面试题
前言 只有光头才能变强 Redis目前还在看,今天来分享一下我在秋招看过(遇到)的一些面试题(相对比较常见的) 0.final关键字 简要说一下final关键字,final可以用来修饰什么? 这题我是 ...
- 海量数据处理面试题学习zz
来吧骚年,看看海量数据处理方面的面试题吧. 原文:(Link, 其实引自这里 Link, 而这个又是 Link 的总结) 另外还有一个系列,挺好的:http://blog.csdn.net/v_jul ...
- 海量数据处理的 Top K 相关问题
Top-k的最小堆解决方法 问题描述:有N(N>>10000)个整数,求出其中的前K个最大的数.(称作Top k或者Top 10) 问题分析:由于(1)输入的大量数据:(2)只要前K个,对 ...
- 添加了有道生词本的 chrome google翻译扩展和有道翻译扩展
在chrome发布项目,需要先花美金认证,还得要美国ID,无奈. 直接上源码,需手动导入. 原始项目源码并未开源,个人是从chrome本地文件里拿出来的,拓展来的,侵删(本来想着自已写一个,业余时间, ...
- 项目管理软件之争,禅道和JIRA大对比
本文摘要: 一. 产品介绍 二. 界面设计 1. 界面颜色设计 2. 布局结构 三. 功能区别 四. 价格对比 五. 后期服务 六. 优缺点 七. 总结 说到项目管理软件,不得不提的是禅道和JIRA. ...
随机推荐
- "fcitx按ctrl+space没反应"解决方法
如果是KDM.GDM.LightDM,打开~/.xprofile.如果是startx.Slim,打开~/.xinitrc.(没有就新建一个) export GTK_IM_MODULE=fcitxexp ...
- HBase中我认为比较常用的两个类:Scan和Filter
学习HBase一段时间后,我认为HBase中比较常用,同时也是必须掌握的两个API是Scan和Filter.如下是我的理解: 1.Scan ---- 扫描类 作用:用来对一个指定Table进行按行扫 ...
- NFS网络文件系统服务(配置实战)
NFS网络文件系统服务(实战) NFS(Network File System)即网络文件系统,它允许网络中的计算机之间通过TCP/IP网络共享资源.让不同的主机系统(NFS的客户端)可以透明地读写位 ...
- gen_server2 与gen_server的对比
在erlang杀手级应用rabbitmq中,不难发现,有一个gen_server2.erl模块.而在rabbitmq中,gen_server2.erl是对gen_server.erl模块的重写. Ra ...
- Android Studio 2.3版本 Run项目不能自动启动APP的问题 (转)
参考: http://blog.csdn.net/lucasey/article/details/61071377 Android Studio 升级到2.3版本后 运行项目后,只是安装上了,而APP ...
- Java中的使用了未经检查或不安全的操作(类前加:@SuppressWarnings("unchecked"))
Java中的使用了未经检查或不安全的操作 如此解决就可以了 类前面加@SuppressWarnings("unchecked") @SuppressWarnings("u ...
- js关于事件的一些总结(系列一)
今天小弟在这里说一下 js 关于事件的一些总结 在这里直接上代码 省去啰嗦的步骤以免看烦了 总结的不好希望大家见谅 一.事件的默认事件 事件的默认事件是什么? 就是a标签有一个链接事件 inpu ...
- XSD文件详解
XSD (xml Schema Definition) Xml Schema的用途 1. 定义一个Xml文档中都有什么元素 2. 定义一个Xml文档中都会有什么属性 3. 定义某个节点的都有什么 ...
- C语言基础知识【变量】
C 变量1.变量其实只不过是程序可操作的存储区的名称.C 中每个变量都有特定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上.变量的名称可以由字母.数字和下 ...
- 几种动态调用js函数方案的性能比较
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...