热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【海量之道】海量之道之SET模型

本文介绍了set模型。一提供海量服务时面对的场景场景1:如何令黄村机房的TWS机器访问黄村机房的APP服务,避免TWS跨机房调用永丰机房的APP机器?场景

本文介绍了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服务调用单台机器以实现每天刷新当天最新数据。


推荐阅读
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 提升 Kubernetes 集群管理效率的七大专业工具
    Kubernetes 在云原生环境中的应用日益广泛,然而集群管理的复杂性也随之增加。为了提高管理效率,本文推荐了七款专业工具,这些工具不仅能够简化日常操作,还能提升系统的稳定性和安全性。从自动化部署到监控和故障排查,这些工具覆盖了集群管理的各个方面,帮助管理员更好地应对挑战。 ... [详细]
  • Jeecg开源社区正式启动第12届架构技术培训班,现已开放报名。本次培训采用师徒制模式,深入探讨Java架构技术。类似于大学导师指导研究生的方式,特别适合在职人员。导师将为学员布置课题,提供丰富的视频资料,并进行一对一指导,帮助学员高效学习和完成任务。我们的教学方法注重实践与理论结合,旨在培养学员的综合技术能力。 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • 基于iSCSI的SQL Server 2012群集测试(一)SQL群集安装
    一、测试需求介绍与准备公司计划服务器迁移过程计划同时上线SQLServer2012,引入SQLServer2012群集提高高可用性,需要对SQLServ ... [详细]
  • 在分析和解决 Keepalived VIP 漂移故障的过程中,我们发现主备节点配置如下:主节点 IP 为 172.16.30.31,备份节点 IP 为 172.16.30.32,虚拟 IP 为 172.16.30.10。故障表现为监控系统显示 Keepalived 主节点状态异常,导致 VIP 漂移到备份节点。通过详细检查配置文件和日志,我们发现主节点上的 Keepalived 进程未能正常运行,最终通过优化配置和重启服务解决了该问题。此外,我们还增加了健康检查机制,以提高系统的稳定性和可靠性。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • Docker入门指南:初探容器化技术
    Docker入门指南:初探容器化技术摘要:Docker 是一个使用 Go 语言开发的开源容器平台,旨在实现应用程序的构建、分发和运行的标准化。通过将应用及其依赖打包成轻量级的容器,Docker 能够确保应用在任何环境中都能一致地运行,从而提高开发和部署的效率。本文将详细介绍 Docker 的基本概念、核心功能以及如何快速上手使用这一强大的容器化工具。 ... [详细]
  • Java 点餐系统源代码附带管理后台(免费提供)
    本项目提供了一套基于 Java 的点餐系统,包括前端小程序和后端管理平台。采用 Spring Boot 和 SSM 框架,结合 MySQL 和 Redis 数据库技术,适用于学习和二次开发。有需要源代码的开发者可以通过私信联系,免费获取下载链接。 ... [详细]
  • 本文介绍了如何利用HTTP隧道技术在受限网络环境中绕过IDS和防火墙等安全设备,实现RDP端口的暴力破解攻击。文章详细描述了部署过程、攻击实施及流量分析,旨在提升网络安全意识。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • Redis 主从复制机制详解及其工作原理
    主从复制机制在 Redis 中具有重要作用,能够实现读写分离、提升系统性能并提供快速的灾难恢复能力。具体实现方面,以一主两从的架构为例,需要创建三个独立的配置文件(.conf),分别用于主节点和两个从节点的设置。通过这种方式,可以从主节点同步数据到从节点,确保数据的一致性和高可用性。此外,还可以利用从节点进行读操作,减轻主节点的压力,进一步提高系统的整体性能。 ... [详细]
  • 本文探讨了利用Python编程语言开发自动化脚本来实现文件的全量和增量备份方法。通过详细分析不同备份策略的特点,文章介绍了如何使用Python标准库中的os和shutil模块来高效地管理和执行备份任务。此外,还提供了示例代码和最佳实践,帮助读者快速掌握自动化备份技术,确保数据的安全性和完整性。 ... [详细]
author-avatar
娶位红太郎_442
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有