前言
Load balancing refers to efficiently distributing incoming network traffic across a group of backend servers, also known as a _server farm_ or _server pool_.
负载均衡作为后端服务的统一入口,所有的流量都会通过负载均衡分发到不同的服务器。1990年第一台思科Goes Public的上线,经过几十年的发展, 负载均衡几乎已成为每个IT系统必备的基础设施。
负载均衡具有非常多的功能优势,例如快速恢复、可扩展、多冗余、灵活性、高效率、全局负载均衡等特点,因此目前几乎很少有系统直接裸服务器暴露到公网,都是通过一组负载均衡设备作为统一入口。
7层负载均衡
负载均衡从设备特点上分为硬件负载均衡、软件负载均衡、DNS负载均衡等,从分发协议上一般分为4层负载均衡和7层负载均衡。目前绝大多数互联网公司都采用7层负载均衡,主要因为7层负载均衡工作在应用层,可以支持更多更加灵活的一些特性。例如:
- 会话保持:让相同的session ID路由到同一台后端机器,保证每个用户的会话只在一台机器上处理。
- 基于内容的转发:能够根据HTTP协议内容进行转发,例如Host、URL甚至是PostBody等。
- 重写请求:能够对用户的请求进行动态修改,非常适用于新老系统的兼容性改造。
- 加密:在负载均衡上配置SSL,提供统一的证书管理,每个服务器无需单独维护证书。
- 健康检查增强:可基于业务规则进行健康检查,而不仅仅是判断端口连通性,使健康检查更加精确。
- 日志监控:全量7层访问日志,能够获取每个请求的结果、耗时、请求大小等信息,能够基于访问日志监控到每个服务的质量。
负载均衡日志分析痛点
原始的访问日志记录了网站的每个访问请求,每个请求包括用户地址、Host、URL、状态码、耗时、请求大小等多个维度的信息,基于访问日志可以统计出不同维度下的访问qps、成功率、延迟等黄金指标,以此实现可以针对各种维度的网站质量监控。但构建一套完整的访问日志分析系统还是非常困难,这其中包括了很多过程和工作:采集、存储、分析、可视化、告警等。在实施过程中最为复杂的点在于:
- 采集问题:如何保证日志采集的可靠性、性能消耗、延时问题;
- 分析:在保证分析灵活性的同时能够保持快速的分析、查询速度以及较低的实施成本;
- 自动化:尤其在业务规模比较大的情况下,如何智能的监控和分析各个服务的状态是一个迫切需要的功能。
阿里云负载均衡7层日志中心
阿里云负载均衡作为纯服务化的负载均衡产品,几乎作为使用阿里云提供服务的企业必备产品,用户只需要控制台或调用API即可完成创建并能为阿里云所有服务器提供4层/7层的负载均衡能力。
对于7层负载均衡访问日志,阿里云SLB专门为用户开放了实时访问日志的能力,通过控制台开通后,实时的访问日志会自动推送到用户自己的SLS中,延迟只有几秒钟,并且SLB推送完全免费且不需要用户自己提供机器接受日志。推送到SLS中的日志可以借助于SLS强大的分析、可视化、监控能力,发挥访问日志的价值。
目前阿里云负载均衡SLB和SLS联合推出了SLB访问日志中心的解决方案,用户只需要几秒钟就可以构建出一套完整的访问日志解决方案,包括日志的实时采集、分析、预聚和、可视化、机器学习异常检测等功能全套配备。
方案架构
为了达到高性能、低成本、快速、智能等要求,SLB日志中心方案包括以下几个部分:
- 原始访问日志存储:当SLB产生访问请求后,会实时将请求的访问日志推送到用户自身的Logstore中,整个过程的延迟一般在3-5秒即可完成,SLS的Logstore具备高可靠、实时索引、自动扩容等功能,保证日志的可靠性和可扩展性。
- 预聚和:由于原始访问日志量巨大,基于原始日志计算指标性能开销较大,因此SLS专门推出了基于访问日志的指标预聚和能力,能够将上百万甚至上亿的访问日志实时聚合成指标类型的时序数据,数据量会降低1-2个数量级,后续的分析与监控可直接基于时序数据进行,大大提高效率。
- 智能巡检:对于预聚和后的Metrics(指标数据),SLS提供了机器学习的自动巡检功能,帮助用户自动去检测各个SLB的各个维度的指标异常,将异常信息实时展现在时序的图表中,结合实时告警能力进行自动的告警配置。此外后续还会支持异常打标,基于用户反馈的信息进行更加精确的检测。
通过以上3层数据链路,实现了从原始访问日志到预聚和的指标最后再到机器学习的异常事件整个数据的流转,对于用户来说,告警和监控只需要基于指标和智能巡检的结果进行,而涉及到具体服务的问题分析可以再回到原始的访问日志并基于SLS提供的各种SQL统计方式进行自定义的排查和分析。
实时预聚和
SLB的访问日志数量和用户访问成正比,在原始访问日志上实时计算指标的开销较大,一般不适合长时间的指标分析,并且原始日志存储的成本较高,一般不会将日志存储较长时间,但我们还是希望指标数据能够尽可能长的存储,这样可以在分析的时候查看更长时间的数据。为此SLS专门为SLB访问日志定制了一套全托管指标实时预聚合的功能,能够实时将SLB的访问日志聚合成指标并存储在SLS的时序库中,这样所有的监控数据查询工作都可以基于聚合后的时序数据进行,大大提升监控数据的查询效率。
丰富可视化
SLB访问日志分析的一个重要工作是可视化系统的搭建,我们需要针对不同场景创建不同的报表以便满足各个方面的需求,例如:
- 整体大盘:包括网站当前的访问UV/PV、整体延迟、成功率等,这个是老板们和SRE需要看的数据,需要保证数据时效性和刷新的速度
- 监控大盘:能够把监控需要关注的各种数据(延迟(平均、P99/P9999等)、流量、成功率、错误码、TOP类统计)等显示在一张报表上,并且能够支持各种维度的过滤,方便定位到问题的实例。
- 访问大盘:显示和用户相关的访问信息,例如PV/UV、访问的地域分布、设备分布等,一般情况技术Leader会关注,另外部分的运营同学可能也会需要这部分数据。
- 异常大盘:显示异常巡检的指标信息,能够把异常的指标显示在报表上,方便查看。
- 后端流量分析:快速分析后端的流量、QPS、延迟、错误率等分布信息,能够快速查找到“调皮”的机器。
智能巡检
在时序监控场景中,用户往往先确定监控对象,并通过其历史数据,结合业务经验,得到不同组的阈值参数,通过各种手段(同比、环比、连续触发几次等)进行监控,往往一个监控对象要设计4~5条监控规则,并配置不同的参数。还有更大的问题,各个参数阈值无法快速的复用到不同的类似观测对象中,当观测对象的规模达到数千,甚至上万后,传统的配置效率底下,无法满足在大规则时序指标数据下的监控需求。流式算法具有天然的优势可以解决上面的问题,用户只需要发起一个机器学习服务,模型自动拉取数据,实时训练,实时反馈(通俗地说:“来一个点,学习一个点,检测一个点”),在极大的降低成本的同时,实现对每一条线的单独建模,单独分析,单独模型参数保存,实现时序异常检测的“千线千面”。
总结
阿里云负载均衡7层日志中心提供了SLB7层访问日志分析、秒级监控指标分析、实时告警等功能,并提供基于AIOps的自动异常巡检功能。基于这些功能我们可以快速构建出一套企业级的监控系统,能够以非常小的工作量实现公司所有访问入口的统一监控。
大家在使用SLB访问日志或SLS过程中,如有任何问题, 可提工单, 或在用户群中反馈(见下放钉钉二维码), 也欢迎关注我们的微信公众号, 会推送实用的使用技巧和最佳实践哦~