中间件技术及双十一实践·软负载篇

软负载——分布式系统的引路人

综述

软负载是分布式系统中极为普遍的技术之一。在分布式环境中,为了保证高可用性,通常同一个应用或同一个服务的提供方都会部署多份,以达到对等服务。而软负载就像一个引路人,帮助服务的消费者在这些对等的服务中合理地选择一个来执行相关的业务逻辑。

1.1、ConfigServer

ConfigServer主要提供非持久配置的发布和订阅。07/08年间在淘宝内部开发使用的时候,由于ZooKeeper还没有开源,不然可能会基于ZooKeeper来进行改造。主要使用场景是为分布式服务框架提供软负载功能所必须的服务地址列表。
结合淘宝业务场景的发展,与ZooKeeper相比主要有以下一些特点:

  • ConfigServer基于无Master架构ConfigServer是无中心化的架构,不存在单点问题,通过特定的算法进行数据增量同步。
  • ConfigServer支持数据的自动聚合配置数据的聚合功能是ConfigServer结合淘宝的使用场景开发的特殊功能,主要使用场景:集群服务地址发现。每台机器向ConfigServer注册自己的服务元信息,ConfigServer会根据服务名和分组自动聚合所有元数据,提供给服务订阅方使用。
  • ConfigServer是推数据的模型ConfigServer的服务端与客户端是基于长连接的方式进行通信,在客户端订阅关系确定后,配置信息一旦发生变化,会主动推送配置数据到客户端,并回调客户端的业务监听器。
  • ConfigServer客户端本地容灾ConfigServer客户端在收到配置数据时,会记录到本地容灾文件中。在ConfigServer服务端不可用的时候,应用继续使用内存中数据;即使应用这时候重启,ConfigServer的客户端使用本地容灾文件进行离线启动。

1.2、ConfigServer双11准备与优化

面对双11巨大的网站请求,对ConfigServer的数据推送环节考验尤其巨大,如何稳定、高效且正确的完成数据推送任务,成为双11前夕困扰ConfigServer团队最大的问题。在平时的正常运行中,ConfigServer管理的配置数据和订阅者数量已经达到一定量级,服务端的一次重启可能会引起大量的数据推送。举例来说:交易的某个服务有2000台,每个服务发布者信息200B,订阅者5000个,那么这个交易服务可用地址列表有变动,会产生2GB(2000*200B*5000)的数据推送。交易的应用有很多个服务,如果应用发布或者重启,会瞬间产生巨大的流量将ConfigServer服务端的网卡压满。当网卡压满后:保持长连接的心跳检测包会超时,导致与客户端的连接会持续在一个不稳定的状态,集群间数据同步也会受影响。
针对这个问题, ConfigServer在推送数据上做了两个方面的优化:

  • 流量控制加入出口流量统计和监控,通过严格限制出口流量预留出足够的带宽给维持心跳和集群数据同步。这样即使有数据堆积,只会暂时的影响到数据推送,客户端的连接不会频繁的断开,集群之间的同步也不会受到影响。
  • 减少推送量出于两方面考虑:压缩数据对代码的侵入不大;ConfigServer服务端CPU相对空闲,最终我们采用压缩数据的方式来减小数据包。我们经过对比主流的压缩算法(huffman,defalte,BZip2,LZMA)对真实推送数据的压缩测试,最终选择defalte算法。该功能上线后的检测结果显示1500M的推送数据最终推送大小为170M。效果很明显。

1.3、Diamond

Diamond主要提供持久配置的发布和订阅服务,最大特点是结构简单,稳定可靠。Diamond的主要使用场景是用来进行动态数据库切换与扩容,进行一些业务系统运行时开关配置的推送。Diamond产品专注于高可用性,基于此在架构、容灾机制、数据获取模型上有一些与同类产品的不同之处。

Diamond结构非常简单,也属于是无单点的架构模型,

发布或者更新配置数据时,步骤如下:

  • 写入MySql数据库
  • 写本地磁盘
  • 通知集群其他机器去数据库dump更新的数据

订阅方获取配置数据时,直接读取服务端本地磁盘文件,尽量减少对数据库压力。
这种架构用短暂的延时换取最大的性能和一致性,一些配置不能接受延时的情况下,通过API可以获取数据库中的最新配置。

容灾机制

Diamond作为一个分布式环境下的持久配置系统,有一套完备的容灾机制,数据存储在:数据库、服务端磁盘、客户端缓存目录以及可以手工干预的容灾目录。客户端通过API获取配置数据按照固定的顺序去不同的数据源获取数据:容灾目录->服务端磁盘->客户端缓存。因此,面对如下情况,Diamond均能很好的应对:

  • 数据库主库不可用,可以切换到备库,Diamond继续提供服务
  • 数据库主备库全部不可用,Diamond通过本地缓存可以继续提供读服务
  • 数据库主备库全部不可用,Diamond服务端全部不可用,Diamond客户端使用缓存目录继续运行,支持离线启动
  • 数据库主备库全部不可用,Diamond服务端全部不可用,Diamond客户端缓存数据被删,可以通过拷贝备份的缓存目录到容灾目录下继续使用

综上所述,只有在同时碰到如下四个条件的情况下,客户端应用才无法启动: 数据库主备库全部不可用、Diamond服务端全部不可用、Diamond客户端缓存被清空、客户端没有备份的缓存文件。

1.4、Diamond双11准备与优化

长轮询改造

客户端采用推拉结合的策略在长连接和短连接之间取得一个平衡,让服务端不用太关注连接的管理,又可以获得长连接的及时性。

  • 客户端发起一个对比请求到服务端,请求中包含客户端订阅的数据的指纹
  • 服务端检查客户端的指纹是否与最新数据匹配
    • 如果匹配,服务端持有连接
    • 如果30秒内没有相关数据变化,服务端持有连接30秒后释放
    • 如果30秒内有相关数据变化,服务端立即返回变化数据的ID
  • 如果不匹配,立即返回变化数据的ID
  • 客户端根据变化数据的ID去服务端获取最新的内容

Diamond通过这种多重容灾机制以及推拉结合的方式,让客户端逻辑尽量简单,而且高效稳定,使其成为名副其实的“钻石”。

小结

软负载系统引导着分布式请求的来龙去脉,管理着分布式离散数据的聚合与分发,成为了合理且最大化使用分布式系统资源的保证。在2013年的双11购物狂欢节中,面对巨大的消费者请求,ConfigServer集群共10台机器,支撑近60,000长连接,发布配置总量700,000条,订阅配置总量3,000,000条,数据推送峰值600MB/S。Diamond集群共48台,90,000条非聚合配置,380,000条聚合配置,TPS高峰期间达到18000,数据变更15000次,客户端感知最大延时小于2秒。双十一当天部分数据库做了切换,用户完全没有感知。

时间: 2024-08-01 21:49:02

中间件技术及双十一实践·软负载篇的相关文章

中间件技术及双十一实践·服务框架篇

分布式服务框架--分布式服务的组织者 综述 06/07年以后,随着淘宝用户数量和网站流量的增长,应用系统的数量和复杂程度也急剧增加.诸多前台系统都需要使用一些公共的业务逻辑,这些业务逻辑通常具有共性的东西,比如,获取用户信息或查询宝贝详情等.如果将这些业务逻辑在各个系统内部都实现一遍,则大大增加了开发成本和后期维护成本.于是,像服务框架这类的中间件产品就应运而生.服务框架帮助各个系统将那些相似的业务逻辑抽离出来,单独部署,而前台系统在需要调用这些业务逻辑时,只需要通过服务框架远程调用即可,大大节

中间件技术及双十一实践·稳定性平台篇

稳定性平台--系统稳定运行的保障者 综述 大多数互联网公司都会根据业务对自身系统做一些拆分,大变小,1变n,系统的复杂度也n倍上升.当面对几十甚至几百个应用的时候,再熟悉系统的架构师也显得无能为力.稳定性平台从2011年就开始了依赖治理方面的探索,目前实现了应用级别和接口级别的依赖自动化治理.在2013的双11稳定性准备中,为共享交易链路的依赖验证和天猫破坏性测试都提供了支持,大幅度减小了依赖治理的成本和时间.另一方面,线上容量规划的一面是稳定性,另一面是成本.在稳定性和成本上找到一个最佳的交汇

Aliware-MQ消息队列技术架构与最佳实践

在阿里云生态日,阿里巴巴中间件产品专家不铭分享了<Aliware-MQ消息队列>.他从功能特性.技术架构.最佳实践.案例分析四个方面进行了分享.在分享中,他主要介绍了Aliware-MQ的线性扩展技术.存储模型.负载均衡.数据流.刷盘策略.高可靠/高可用方案进行了介绍,并通过案例进行了具体实践分享.   以下内容根据直播视频整理而成.   功能特性 Aliware-MQ是什么?它是企业级互联网架构的核心产品,基于高可用分布式集群技术,支持海量高并发,支持万亿级消息流转(双十一的万亿数据),支持

大数据时代结构化存储云HBase技术架构及最佳实践

在10年,阿里研究HBase,是为了解决阿里容量及并发的实际问题,按照数据库要求,阿里深入HBase技术,并致力于保障稳定性和性能,目前已经有10000台规模,数百个集群,大约1亿的QPS,服务整个集团的业务.17年,把这部分能力也开放给公有云客户.本文中,阿里云高级专家封神带来了主题演讲<大数据时代结构化存储云HBase技术架构及最佳实践>,介绍HBase的应用选择.实战案例.技术平台解读以及后续的规划. 为什么应用HBase 一般而言,传统关系型数据库面临着成本.容量.QPS.分析等多方面

基于中间件技术的多层分布式系统的研究

1 引言 分布式系统的信息处理分布在许多计算机上而不是局限在单一机器上.目前一般类型的分布式系统体系结构可以分为两种.一种是客户机 / 服务器( C/S )体系结构,它由客户端提供用户界面.运行逻辑处理应用,而服务器接受客户端 SQL 语句并对数据库进行查询,然后返回查询结果.C/S 结构曾给人们带来许多便利,但随着业务处理对系统提出更高要求以后,它也逐渐暴露出其客户端逐渐庞大和服务器负担过重的缺点,如灵活可扩展的工作流定制.保证数据在网络传输的稳定性和准确性.应付峰值数据的高负荷处理和平衡负载

阿里专家倪超:支撑海量用户的阿里中间件技术

大流量高并发互联网应用实践在线峰会官网:https://yq.aliyun.com/activity/112 峰会统一报名链接:http://yq.aliyun.com/webinar/join/49 议题名称:<支撑海量用户的阿里中间件技术> 议题简介:伴随着互联网和移动互联网的盛行,海量的用户一次又一次的洗礼了各个机构的IT系统,而在阿里,这种改变无疑更加频繁与剧烈--这些年下来,中间件技术完成了从1.0到3.0时代的蜕变,并已经完成了将技术变成商业化产品,与业界分享.本议题将围绕这一变革

CSDN云计算俱乐部:Hadoop技术开发与应用实践分享

大数据的火爆已不容置疑,在本次Hadoop技术开发与应用实践分享会上,加座.站票已经完全解决不了问题,工作人员不得不临时设立两个会场,满足更多参会人员与讲师面对面沟通的机会. 本次CSDN云计算俱乐部邀请到了Hadoop大数据红象云腾公司创始人童小军.上海宝信高级工程师汪振平及智联招聘高级工程师李尤,对Hadoop与大数据上的实践做出了深度分享. 童小军:Hadoop原理.适用场景及核心思想 童小军,EasyHadop 社区创始人.原暴风影音平台研发经理:国内首位获得美国Cloudera公司Ap

DMS前后端技术揭秘及最佳实践

不同于一般的存储和计算产品,云上DMS上属于操作类产品,目的是为用户提供更高更强的数据库访问能力,减少成本以提高效率.本文中,来自阿里巴巴数据库事业部的钟隐分享<DMS前后端技术揭秘及最佳实践>,介绍云上DMS,即数据库管理服务的整体应用和实践. DMS最佳实践 云上DMS从2013年年底上线,从最初仅支持MySQL基本功能,已覆盖了多种RDBMS.NoSQL及部分分析型数据库在内的13种数据源,同时在多种数据库中逐步提供了传统数据库软件所不具有的专业功能,时间有限,我们仅列举4个不同角度的最

nginx-Nginx 实现软负载均衡

问题描述 Nginx 实现软负载均衡 主管给我的想法大概是拓扑图这样的,我很困惑第一层Nginx和第二层两台Nginx这之间能这样架构么,刚接触Nginx,很多东西不懂,也希望大神能指点Nginx负载均衡的搭建 解决方案 参考:http://dreamfire.blog.51cto.com/418026/1158301/ 解决方案二: 这样不但实现不了负载均衡,而且会使系统的复杂度高很多,且高度依赖核心Nginx服务器.负载均衡的前提就是要降低系统的复杂程度和响应路径深度, 复杂度越高的系统,可