:我们将这些年各个环节对应的解决方案,以产品化的方式沉淀到企业级分布式应用服务(EDAS)中。EDAS致力于解决在线应用全流程无损流量。经过6年的精细打磨,在流量接入和流量服务两个关键位置,为我们的客户提供了无损流量的关键能力。我们接下来的主要目标也是这种能力贯穿应用的全流程,让你的应用能够默认无损的拥有全流程的流量,力求保证业务能力的可持续性。作者|谷一石棉前言在前面两篇文章中,我们已经完成了三大部分的内容:流量分析、流量接入、流量服务。本文主要从数据交换的维度阐明数据交换的过程如何影响在线流量;最后介绍两种常用的防范措施:全链路压力测试和安全生产演练。先说数据交换部分:数据在应用集群中流转完成后,其所到的终点一般是与各种类型的数据服务进行数据交换,如:从缓存中读取数据并返回,发送订单记录存储在数据库中,与外围支付服务交换交易数据等。但是只要与外部服务进行数据访问,就会出现外围服务不可用的情况。一些常见的情况包括:严重依赖或数据过载导致的雪崩,以及数据中心整体不可用导致的大面积瘫痪。比如最近比较知名的事件就是Meta公司的大规模宕机。原因是下发了错误的配置,数据中心之间的主干路由被切断了。1、常用方案:分库分表针对国内互联网公司的海量数据场景。当我们的业务发展到一定阶段,就会带来缓存或者DB容量的问题。以MySQL为例,当单表的容量为千万级别时,如果这张表需要与其他表进行关联查询,在IO和CPU上都会对数据库造成压力。这时候就要开始考虑分库分表的方案了。但分工结束后,也不是一蹴而就的。会引入分布式事务、联合查询、跨库join等新问题。每一个问题,如果用人肉来解决,都会更加困难。有很多优秀的框架,比如社区的ShardingJDBC,还有阿里云刚刚开源的PolarDB-X。2、常见的解决方案:数据中心容灾为了防止数据中心整体不可用,一个常规的思路是构建高可用的容灾能力和多活动能力。同城数据中心级容灾很常见,但是一个数据中心部署的服务很可能是分布式服务,每个分布式服务的容灾策略略有不同。本文以常见的MySQL为例,说明一些常见的思路。容灾的核心是解决CAP中的两个问题,即:C(数据一致性)和A(服务可用性),但是根据CAP理论我们只能保护CP和AP其中之一,那么这里选择什么呢?最好的策略其实需要根据业务形态来制定。对于同城IDC级别的容灾,由于其RT一般很小,可以最大程度的满足数据的一致性。只是如果Paxos(MySQL中的共识算法)的Master节点所在的机房挂了,就会面临重新选举master。如果集群很大,DB可能因为选主导致几十秒不可用。.对于异地场景,由于数据链路过长的问题,其数据一致性基本无法满足,所以业务必须配合改造,实现业务层面的横向切分,比如:华南数据中心服务于华南客户群,华北数据中心服务于华北客户群。碎片化的数据最终通过数据同步得到一致。预防至此,我们基本讲完了在线应用的四个核心环节,特别提到了由于架构设计、基础设施脆弱等容易造成流量流失的点,也列出了相应场景下的解决方案。但是,从安全生产的角度来看,一切安全生产的目的都是为了防患于未然。相对于互联网系统中的传统软件产品,我们推荐两种生产层面的防范方式:全链路压力测试和产线安全演练(也叫故障演练)。1、全链路压测在软件产品的生产系统中,我们会对任何一个即将上线的系统进行各种目标测试,包括压力测试,就是把系统放在比较恶劣的环境中,观察系统的性能。普通压测只是构建相应的接口,对线下部署的环境服务进行相应的压测,测试报告无一例外地完美;但这样的压测存在几个问题:由于线上线下依赖环境差异较大,无法评估真实的线上系统容量。压测过程中数据不丰富,覆盖范围窄,导致场景遗漏。由于压测的流程或工具不够完善,只能评估单台机器或服务,不能评估整个生产集群。如果要做到全面、系统、真实的流量评估,建议直接使用生产环境进行针对性的性能压测。但是要实现这样的全链路压测,还有很多技术瓶颈需要克服。其中包括:拥有强大的工具系统或产品,可以构建丰富的场景。在整体业务链路上,支持从流量入口传递压测标记。系统中使用的中间件可以识别正常流量和压测流量。业务需要对压测流量进行业务改造(如影子表),避免压测数据影响线上真实数据。但在实施过程中,由于对整个链路的影响较大,在大流量压测正式开始之前,需要逐步落实前期的准备工作,包括:压测的制定计划、跑前验证、压测预热,最后才是正式压测。压测完成后,需要对压测结果进行分析,确保整个系统满足预设目标。2、安全生产演练类似于全链路压力测试。为了尽可能贴近生产环境,我们建议安全生产演练在线完成。演练的目的是测试在各种不可预测的服务不可用、基本实现失败或依赖失败的情况下,系统的行为是否仍然健壮。通常演练的范围从单个应用到服务集群,甚至是整个机房的基础设施。Drill场景可以从进程内部(如:请求超时)、进程级别(如:FullGC)、容器(如:高CPU)、再Kubernetes集群(如:Pod驱逐、etcd故障等)叠加.)抗脆弱能力,做出有针对性的选择。结束语至此,关于如何搭建无损流量在线申请系统的三篇文章就全部讲完了。文章中的很多场景和技术点都来源于真实线上系统的真实故障。我们把这些年各个环节对应的解决方案,以产品化的方式沉淀到企业级分布式应用服务(EDAS)中。EDAS致力于解决在线应用全流程无损流量。经过6年的精细打磨,在流量接入和流量服务两个关键位置,为我们的客户提供了无损流量的关键能力。我们接下来的主要目标也是这种能力贯穿应用的全流程,让你的应用能够默认无损的拥有全流程的流量,力求保证业务能力的可持续性。下一步,EDAS将继续围绕开发和测试构建完善的技术中台;我们还准备了免费下载版本,让您可以在任何环境下轻松享受许多默认的流量无损功能。交付端打通多集群、多应用批量交付,打通线上公有云、线下自由输出、混合云间交付能力。敬请关注。原文链接本文为阿里云原创内容,未经许可不得转载。
