当前位置: 首页 > news >正文

java基础巩固-宇宙第一AiYWM:为了维持生计,虽然咱没机会经历双11这种技术阅兵场,但是看看人家写的阅兵场日记,先xiao习xiao习一下嘛~整起

将故事分为三大部分:事前、事中、事后。

  • 事前:基本上就是相关人员聚在一起商量商量么
    • 开会沟通:参加一个全局的,整体的KO会议(Kick Off Meeting,项目启动会),商量目标啦、人员咋安排,工作如果分阶段进行呀等等。我们技术需要从中获取如下信息:
      • 业务预期DAU、业务预期DAT、具体有哪些活动玩法、活动玩法的具体时间段、哪些商品参与大促,是否有第三方商品、这些商品的库存分别是多少【对于一些细节,下来我们需要与业务进行沟通,比如活动粒度是多少?宣传力度是多少?业务的预期DAU与DAT如何评估的?是否准确?
    • 流量评估:要清晰的知道,当前阶段每天的流量、DAU、DAT是多少,业务评估是多少,技术侧评估又是多少,当前阶段的性能是否能支撑即将来临的大促,如果不能,需要做出什么调整
      • 优化?怎么优化?优化哪些业务?现在优化还来得及吗?
      • 扩容?扩容哪些服务?扩容到多少?为什么要扩容到这么多机器?
      • 降级?什么业务降级?业务是否支持降级?什么时候降级?
    • 业务梳理:
      • 需要梳理出哪些业务是核心业务,哪些业务是非核心业务,哪些业务是可降级业务,这类数据大致可以从上一次大促获取
      • 再加上上次大促到本次大促期间所产生的新项目(业务项目或技术项目)进行梳理,是否影响核心链路?是否进行了压测?压测结果如何?这些项目可能存在什么技术风险?
      • 你的服务依赖哪些下游服务,这些下游服务又是如何依赖的,这是个很麻烦的事情,因为随着业务变大,依赖关系会变得非常复杂,很难判断与梳理。尽管很难,但是这个依赖关系仍然要梳理清楚,只有梳理清楚了,才有全链路。
    • 压测:有了业务梳理和业务指标,那么就在技术上要能够支撑到这个业务级别,那就是压测了。压测一定是针对生产
      在这里插入图片描述
      • 到目前为止有两种压测方式:
        • 不扩容压测:不扩容压测一般不推荐,这种方式需要对业务指标打折作为目标来进行压测,最后在扩容的时候还是需要压测一次,因为局部压测不能完完全全代表整体压测,如果整体压测出现问题,那么所有的局部压测都是白费苦工。
        • 扩容后压测:就是指 容量扩容到大促支撑位,然后进行压测
      • 压测一定是针对生产!
        • 对开发环境、测试环境、预发环境、灰度环境、仿真环境进行压测,从而推断出生产环境的性能。这是万万不可取的,因为环境不同,服务器的性能不一样,生产环境和其他环境的DB性能也不一样,还有一些中间件性能也不一样。所以,压测一定要在生产环境压测,但是有一个缺点,就是会对线上的正常流量产生影响,这也是不可避免的,所以 压测的时候,一般都会选择流量不大的时候进行,尽量减少对正常流量的影响,一旦产生影响,请立即停止压测
      • 压测需要流量爬坡:切记不可一步到位,按照一定比例逐渐施压,每一个坡度都观察几分钟,没问题继续施压,达到目标后观察几分钟没问题直接停止压测,不可恋战!因为大促的流量趋势就是那几分钟,长久的施压对服务器的性能有一定影响,比如CPU飙高啊,频繁GC啊等,所以在在压测过程中还需要不断观察系统整体性能,还有就是也会影响到正常的用户访问。举个例子,奥运会举重,明明只需要保证举起来三秒即可,你训练的时候难道要举起来三分钟吗
    • 限流:压测完了后,我们需要输出一份压测报告,比如商详支持多少qps,下单页支持多少qps,下单支持多少tps等。这些数据说明了,我们的系统,有多少实例,哪个接口能承受的最大峰值是多少。那么我们就需要对这个接口或这些接口做限流【所以,我们需要拿着我们的压测报告,针对我们的服务做单机限流与集群限流。】
      在这里插入图片描述
      • 单机限流与集群限流:
        • 单机限流指的是每台机器自身的限流:机限流的目的是保护服务本身,保证自身服务不被流量击垮。
        • 集群限流指的是整个服务集群的限流:集群限流的目的是保护下游服务,保证下游服务不被当前服务击垮
          • 比如A->B->C,每个服务三台实例,整个B集群最大能支持150qps,C集群最大能支持100qps,那也就是说B服务需要设置集群限流100qps用来保证C,B的三个实例需要设置单机限流50qps用来保证自身不被击垮。所以如果流量不倾斜的话,B服务每个实例会有33qps,如果倾斜的话,最大50qps。
    • 降级:限流后,我们能够保证服务本身不被击垮,保证下游不被击垮,但是,这不是我们的目标,我们的目标是要保证大促期间商详没问题,下单支付没问题呀【所以,我们要降级,一些比较耗性能的业务降级,一些边缘业务降级,给核心业务让路。】
      • 然后就需要梳理这些业务,有哪些需要降级的业务?什么时候降级?由谁来降级?什么时候恢复等。
    • 应急预案与演练
      • 咱们之前都听过一个老板让两个员工去买西瓜的故事,是一样的,事前能够考虑到的风险或者危险越多,然后做好准备,那咱们自身的损失就越少。当我们保证了核心链路的正常后,我们还需要考虑异常的情况。对于电商系统来说,要考虑到整个生命周期异常的可能性,比如:打开商详页失败、打开订单渲染页失败、下单失败、履约失败等。说的都比较概括,我们当时准备了上千个预案!淘系双11大促,为了安全起见,是不会有任何依赖外部系统的,因为第三方系统都无法承受住淘系大促期间的流量波。
        • 如果你的电商系统有依赖外部系统的,那么你还要梳理出哪些渠道哪些商品会参与本次大促,这块也需要针对渠道做压测与限流,有可能渠道由于体系较小不支持压测,这时候你可能要考虑到在履约的时候做蓄洪与泄洪,使用真实流量来冲击渠道,用于检验渠道的性能。另外在有第三方参与的情况下一定 要有每个渠道的应急预案,对应给用户展示的文案是什么都是不一样的
      • 最重要的是要与合作伙伴共同制定一份SLA(Service Level Agreement):服务级别协议,服务提供商和客户之间的协议,用于确定所需的服务和预期的服务水平,对互联网公司来说是网站服务可用性的保证。
        • 在这里SLA约定了客户对于合作伙伴的线上运维、计划运维、业务连续性以及故障处理能⼒的要求。做完预案后,要通过预案平台进行演练,或者人工演练,要当做到熟能生巧,大促出问题后才会显得临危不乱
    • 监控:大促出问题?你怎么知道这块出了问题?这时候需要监控,需要告警。大促大盘监控、全链路监控、核心链路监控、压测监控、限流监控、资源监控、网关监控、渠道履约监控
      在这里插入图片描述
    • 规范:大促期间是需要制定很多规矩,比如发布红线、红线问责、预案执行规范、紧急扩容规范、紧急发布规范…,我们这里统称大促变更规范吧。无以规矩不成方圆,制定这些规范的目的是能让我们明确问题发生后我们应该按照什么流程去应急还有很多其他的一些杂七杂八的,比如大促前每周周会、大促值班人员排班、大促作战室、问题的上升制度等
  • 事中:事中是整个环节最简单的,跨度最短的阶段,但是简单不代表不重要。主要是关注以下几件事情最重要的就是要持续关注告警与监控一旦出现问题需要及时响应与止血,严格按照预案执行。另外就是 关注大促每个场次的峰值情况,通过自动记录或人工记录的方式进行记录峰值,方便作为下次流量评估的依据
    在这里插入图片描述
  • 事后:事后不就跟咱们博客文章复盘一样嘛,用以前的经验和东西为以后提供参考呗。
    • 事后我们最重要的就是要做大促复盘,盘点大促期间的一些好的点和不好的点,对于好的点如何延续到下次大促甚至更好,不好的点如何进行调整
      • 业务上关注哪些商品在哪些区域更好卖一些,哪些玩法更能让用户接受一些
      • 产品侧需要关注配合业务对于现有的产品模型做出一些调整与优化
      • 技术侧重点关注性能,本次大促是否存在性能瓶颈,瓶颈在哪里,如何优化,架构上是否需要调整,下次大促如何去支撑等
    • 其次是降级恢复,在大促前做的降级,在大促后需要对其恢复。不恢复可能有的功能就用不了了或者说不好用了或者说发挥不了原本的功能了
    • 我们还需要 对于系统存在的性能问题进行持续优化改进,然后进行压测,得出结论,再优化,再压测,优化,压测,…。【每到大促,如何保障系统高峰扛得住、长期平稳是每个大促人必须面对的问题。大促期间发生的每一个问题都可能被无限放大,所以我们需要谨慎对待,这开不得玩笑。】
      在这里插入图片描述

巨人的肩膀:
macrozheng老师的文章
极客时间中的各位老师
bilibili中的各位老师
https://mp.weixin.qq.com/s/6KWdncFMKZL3-JiwHKpe6w
李哥技术老师
芋道源码老师关于订单系统的主体框架和主要业务模块的讲述

相关文章:

  • Mybatis配置详解 | 深入理解 『带上CSDN一起玩转国庆』
  • 断断续续学习算法的5年
  • Qt 精确定时器
  • mysql中int(11)与int(1)的区别与联系
  • 【Vue】Vue的v-for指令
  • 【Hadoop---09】MapReduce:MapReduce概述
  • 黑马旅游网-配置项目(一)
  • 【C语言】continue 关键字
  • java基于springboot+Vue+nodejs的高校网上二手闲置跳蚤市场 element
  • JAVA计算机毕业设计超市进销存管理系统Mybatis+系统+数据库+调试部署
  • Java中ArrayList对象中trimToSize()方法具有什么功能呢?
  • B01-快速入门CSS
  • makefile的基础规则与命名方式
  • 自动驾驶仿真:角雷达坐标系转换详解
  • 教你如何制作浪漫的3D相册表白网站 HTML+CSS+JavaScript
  • [ JavaScript ] 数据结构与算法 —— 链表
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • C++类的相互关联
  • canvas 高仿 Apple Watch 表盘
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • Java 多线程编程之:notify 和 wait 用法
  • Linux gpio口使用方法
  • PHP变量
  • Rancher-k8s加速安装文档
  • windows下mongoDB的环境配置
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 回顾2016
  • 你不可错过的前端面试题(一)
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 提醒我喝水chrome插件开发指南
  • 你对linux中grep命令知道多少?
  • 《码出高效》学习笔记与书中错误记录
  • 1.Ext JS 建立web开发工程
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • ​虚拟化系列介绍(十)
  • (13)Hive调优——动态分区导致的小文件问题
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (二)学习JVM —— 垃圾回收机制
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (七)Knockout 创建自定义绑定
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (原創) 未来三学期想要修的课 (日記)
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .NET CORE 第一节 创建基本的 asp.net core
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .net 程序发生了一个不可捕获的异常
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .net和jar包windows服务部署
  • .Net中的设计模式——Factory Method模式
  • ::before和::after 常见的用法