`
backend-develop
  • 浏览: 24092 次
社区版块
存档分类
最新评论

每分钟访问10万+,11种策略教你保持亿级流量网站稳定性!

阅读更多

稳定性在大型网站运行中至关重要,面对每分钟 10 万次的网络访问,稍有不慎就会引起重大故障。今天这篇文章一起讨论下亿级流量网站在稳定性方面的一些做法,希望对您有帮助。本文已发布在公众号和网站。

 

基础策略

 

配置化

配置化就是把很多业务流程相关的数据统一放在一个配置平台上,从代码中抽离出来,使得代码仅处理通用的业务逻辑。配置化之后,代码拥有处理所有场景的能力,通过配置数据来决定线上运行时具体操作什么样的数据。

 

 

配置化的设计使得我们能够对线上进行快速更改,做到实时的增加、变更和删除,对于快速处理问题有很好的效果。

 

业务开关

业务开关就是针对具体一个流程的开关,通过开关的打开和关闭可以实时控制处理逻辑。开关可以有多种类型,常用的有以下几种。

Boolean 类型:是否使能某个流程,如开启和关闭某个校验;

Number 类型:业务对应的数字配置;

String 类型:业务对应的文本配置;

Collection 类型:业务对应的集合开关,如指定特定类型的业务启动或关闭流程;

Map 类型:业务对应的映射开关,如指定特定类型的业务进行特定类型的处理。

 

 

部署策略

面对每分钟达 10 万次的访问流量,系统的部署是个很大的挑战。我们采用按机房、按机器分组进行分批次的部署策略,也就是在部署过程中,新版本与老版本共存,同时提供服务,整个的部署过程是一个逐步替换的过程。

 

 

灰度部署逐步提高新版本在服务中的比例,分流线上用户进行灰度测试。如果发现机器日志有异常或有用户反馈服务问题,可以第一时间进行新版本回滚,避免产生更大范围的影响。

 

错误处理

在软件架构中要对错误处理有一套统一的流程和规范,对错误码进行分类处理,做到根据统计到的错误码能够快速判断错误类型。要做到这一点,错误码需要约定好统一的格式,比如 CHK 开头表示校验失败、THD 开头表示第三方服务错误、SYS 表示当前系统错误,REQUIRED 结尾表示必填项未填、INVALID 结尾表示数据错误、EXCEPTION 结尾则表示出现异常。

 

日志收集

程序运行一定会产生日志,日志是排查线上问题的第一手原始资料。准确完整地记录下有意义的日志,才能进行有效的分析。比如基于日志,我们可以统计服务调用量并分析成功率,可以明确地看到错误信息,包括哪些用户出错、出错的原因是什么,并可以建立线上问题报警机制。

 

日志需要按照统一的格式打印,存储在一个统一的日志分析服务中,做到实时记录、实时搜索。

 

线上监控策略

 

链路跟踪

分布式系统的一个难题,就是如何跟踪处理链路。通常情况下,我们会在链路的起点为每一个请求生成一个唯一识别码,比如 UUID,并在以后的每一个处理节点都记录下识别码并传播给下一个处理节点。

 

基于这样的唯一识别码,我们可以从海量日志中完整地还原出一个请求在链路上的处理过程,以及输入输出数据,进行全链路分析。

 

异常监控

对 Java 抛出的异常进行处理,打印到日志中,可以建立起异常监控。在异常监控中,我们重点关注异常发生的次数、栈信息、变化趋势。

 

通过异常监控,可以快速定位线上问题,直接根据栈信息找到异常发生的地点。如果是第三方服务的异常,比如分布式调用超时,也能够快速分析并定位。

 

机器监控

机器监控则是重点关注机器的 CPU、内存、网络使用情况,JVM 的线程数量、内存使用、Full GC 次数等。流量洪峰到来时,服务器承压,很可能出现 CPU、内存不足等情况,也可能导致 JVM 内存不足进行 Full GC,进而引起服务崩溃。服务器运行状况如此重要,不能不重视。

 

面对流量洪峰的策略

 

服务降级

服务降级是指在特定情况下,比如双十一、双十二期间,当流量超过系统服务能力时,跳过特定的处理流程。比如在一个卖家下单后,我们可能需要进行风险评估、数据校验等一系列流程,当发生服务降级时,就跳过了数据校验逻辑,来保证服务的稳定性。

 

 

服务降级是面对流量洪峰保证用户体验和预防系统崩溃的有效手段。比如图片内容的校验通常都是比较耗时的操作,面对流量洪峰取消这样的校验可以避免用户的长时间等待、降低对下游链路的冲击,确保服务稳定。

 

服务限流

服务限流是指,根据服务的处理能力提前预估出一个阈值,当流量大于该阈值时直接放弃处理直接返回错误。服务限流是应对流量峰值时,系统进行自我保护的重要措施。比如双十一零点下单峰值、余额宝九点抢购峰值、活动结束商品编辑峰值,都需要进行相应的限流来保护系统。

 

 

在分布式部署中,基于 dubbo、Spring cloud 或 HSF 的数据统计功能,很容易推算出系统平时的流量压力。借助于全链路压测,可以很容易看到系统在流量峰值下的具体表现。因此,服务限流的实施并不困难。

 

故障容灾

单机系统的容灾能力几乎为零,一旦服务崩溃就马上变成不可用。分布式系统通过服务多活,可以不间断提供服务;借助于 nginx、Apache 进行负载均衡可以进一步提高可用性。

 

实际上,即便进行了负载均衡和服务分布式部署,系统仍然面临容灾问题。现在的大型服务,比如淘宝、天猫、微信、京东都进行了异地多活的部署。异地多活部署的主要目的,在于通过多机房提供服务,来降低单机房故障带来的影响,提高容灾能力。

 

 

总结

这篇文章大概整理了一个亿级流量网站在稳定性方面需要注意和做好的点,关于稳定性还有很多问题值得探讨和深思。您有什么观点和看法呢?欢迎留言交流。

 

本文为原创文章,首发于 程序之心 公众号和网站,转载请注明作者及原文链接。

分享到:
评论

相关推荐

    中文词库素材词汇量超过10万+语料库

    总的来说,这个超过10万词汇量的中文词库素材和200个分类语料库是一个宝贵的资源,对于从事自然语言处理、文本挖掘、机器学习等领域的人来说具有很高的参考价值。无论是用于开发新的算法、训练模型还是进行语言学...

    ArcGIS 10 Crack + 安装及破解教程

    详细介绍ArcGIS10的安装及破解,并附上所需工具。

    【完整版本】全开源无加密运营版H5棋牌源码(源码+数据库+架设教程).rar

    【完整版本】全开源无加密运营版H5棋牌源码是一个综合性的开发资源包,它包含了一套完整的H5棋牌游戏的源代码、相关的数据库以及详细的架设教程。这个资源对于那些想要开发或运营H5棋牌游戏的开发者或者创业者来说,...

    C#快速导出Excel文件(3秒可导10万行数据)

    C#快速导出Excel文件,3秒可导10万行数据

    c# 网络流量监测源码

    在IT领域,网络流量监测是一项重要的任务,它可以帮助开发者、系统管理员和网络安全专家了解网络活动,检测潜在的问题,如带宽滥用、攻击或性能瓶颈。本文将深入探讨使用C#进行网络流量监控的相关知识点。 首先,C#...

    java+swing漂亮软件界面+超酷+以及javaswing教程.zip

    Swing组件是轻量级的,它们运行在Java虚拟机上,这使得跨平台兼容性成为可能。Swing还引入了事件处理模型,使得开发者能够轻松响应用户的操作,如点击按钮或选择菜单项。 在“javaswing教程”中,通常会涵盖以下几...

    网站建设与制作教程

    为初学者提供一个在线的自学之地, 为设计前言 网站建设与制作视频教程 1 网站建设入门例子 ...10 如何推广网站与宣传网站 11 找到自己心目中的公司 12 通过网站盈利 者提供一个网络编程的中文参考之地

    JSP版流量统计系统

    【JSP版流量统计系统】是一个基于Java Server Pages(JSP)技术开发的系统,用于收集、处理和展示网站的访问流量数据。JSP是一种在服务器端运行的动态网页技术,它结合了HTML、CSS、JavaScript等前端技术,并且利用...

    win11安装ie11浏览器

    在Windows 11操作系统中,由于Microsoft Edge成为了默认的浏览器,并且微软官方已经停止了对Internet Explorer 11(简称IE11)的更新和支持,许多用户可能在使用某些特定的网页或企业应用时遇到问题,因为这些应用...

    Python教程2020版 完全入门 达到Python工程师水平 笔记+代码+课件+资料

    10. **单元测试**:了解如何编写和执行单元测试,以确保代码的质量和稳定性,使用unittest或pytest库进行测试。 11. **项目实战**:通过实际的项目案例,例如Web开发(使用Flask或Django框架)、数据分析、自动化...

    MyEclipse10使用教程 .doc

    MyEclipse 10 使用教程 MyEclipse 10 是一个功能强大且流行的集成开发环境(IDE),它支持多种技术栈,包括 Struts2.x、Hibernate4.x 和 Spring3.x。在本教程中,我们将学习 MyEclipse 10 的基本使用和高级特性。 ...

    sqlserver自学教程

    SQL Server是企业级数据管理的核心工具,广泛应用于数据存储、数据分析和业务智能等领域。以下是对该教程内容的详细解读: 1. **SQL Server概述**:首先,教程会介绍SQL Server的基本概念,包括它的历史、版本及其...

    Oracle9i+10g+11g+jdbc驱动包下载

    用例: driver = "oracle.jdbc.driver.OracleDriver"; url = "jdbc\:oracle\:thin\:@192.168.1.202\:1521\:cxhis";

    圈圈教你玩USB

    1.10USB的四种传输类型 1.10.1USB事务 1.10.2批量传输 1.10.3中断传输 1.10.4等时传输 1.10.5控制传输 1.10.6端点类型与传输类型的关系 1.10.7传输类型与端点支持的最大包长 1.11本章小结 第2章硬件系统设计 2.1方案...

    超完美经典详细数据库教程pdf教程

    “菜鳥级SQL21天自学通”作为教程的一部分,很可能是一个逐步指导的学习计划,每天都会涵盖一个或多个主题,帮助你按部就班地学习和实践SQL。 通过这个教程,你不仅能够掌握SQL的基本操作,还能深入了解数据库的...

    企业级网站后台管理系统

    良好的用户口碑:PageAdmin在全国拥有10万以上用户、超过1年以上的的广泛应用,在安全性、稳定性、尤其自由灵活性方面得到大广泛的认可。 PageAdmin应用领域 PageAdmin主要应用于以下领域: 企业网站,无论大型...

    C#.net web开发者指南教程PDF+源代码,非常实用.

    1. **C#.NET基础**:C#是微软开发的一种面向对象的编程语言,适用于Windows、Web和移动平台。学习C#.NET的基础语法,包括变量、数据类型、控制流语句(如if、for、while)、函数、类和对象等。 2. **.NET Framework...

    notepad++ 8.4.4版本

    Notepad++是一款非常受欢迎的免费源代码编辑器,尤其在程序员和Web开发者中广为使用。...在官方网站访问受限的情况下,这个压缩包提供了一个可靠的下载途径,确保用户可以继续使用这一高效且免费的文本编辑工具。

    mysql百万级测试数据下载 300W条

    2. **压力测试**:通过模拟大量用户同时访问,测试数据库的并发处理能力和稳定性。这有助于发现潜在的瓶颈和优化点,如事务处理、锁机制和内存使用。 3. **备份与恢复**:大型数据集也能用于测试备份和恢复策略。...

Global site tag (gtag.js) - Google Analytics