架构师训练营作业 -Week9

用户头像
wyzwlj
关注
发布于: 2020 年 08 月 02 日

一、简述JVM垃圾回收原理

1、确定回收区域

    1)堆区的无用对象

    2)方法区废弃的常量、无用类



2、寻找垃圾对象

    1)可达性分析算法:以 线程栈帧中的引用变量、方法区中的静态变量为根节点,进行深度遍历,标记出当前存活的对象,未被标记的对象则为可回收的垃圾对象



3、执行垃圾回收

    1)三种回收算法

        a. 清理:直接清除垃圾对象。容易产生内存碎片

        b. 复制:将内存区域分成两部分,每次只用一部分区域,垃圾回收时,将存活的对象回收到另一部分区域。内存利用率低

        c. 压缩:从堆空间的头开始,复制存货对象。不会产生碎片,且内存利用率高,但需要避免大量挪动对象的场景

    2)分代回收

        a. 将内存区域划分为不同的区域(新生代+老年代+元数据区)

        b. 根据不同区域 对象存活的特点,和不同回收算法的优缺点,对不同的区域使用不同的回收算法



4、JVM垃圾收集器

    1)串行回收器

    2)并行回收器

    3)并发回收器CMS

    4)G1回收器

    

二、设计一个秒杀系统,主要的挑战和问题有哪些?核心的架构方案或思路有哪些?



1、思路分析

    1)梳理秒杀系统的业务流程,中间会经历哪些环节,针对每个环节进行分析(纵向分析)

    2)根据分层优化的思想对系统进行优化(横向分析):

        a. 优化机房与骨干网络性能 --CDN 

        b. 优化服务器与硬件性能 --提升网络带宽

        c. 优化操作系统性能

        d. 优化虚拟机性能

        e. 优化基础组件性能 --Web容器升级或替换

        f. 负载均衡软件升级 --使用nginx、VIP(分担网络压力)

        g. 优化软件架构性能 --缓存、异步化、限流

   3)总体想法:业务流程是怎样的?技术问题有哪些?非技术(性能)问题有哪些?根据分层优化的想法,每层可做什么优化?



2、秒杀系统主要的业务流程

    1)查看商品列表

    2)查看商品详情&秒杀

    3)商品下单

    4)订单支付



3、商品列表环节

    1)面临的问题有什么

        a. 商品列表页的高并发访问

        b. 页面占用资源大,网络传输压力大

        c. 秒杀开始的判断

    2)解决方案是什么

        a. 资源静态化:提前录入秒杀商品信息,并将秒杀商品的商品列表页面进行静态化处理,避免每次动态计算商品列表

        b. 资源缓存:包括列表页面的CDN缓存、反向代理服务器的页面缓存

        c. 尽量使用小资源:控制文件大小、文件压缩、删除非必要资源



4、 商品详情&秒杀环节

    1)面临的问题有什么

        a. 商品详情页的高并发访问

        b. 抢购按钮的 置灰&点亮 问题:保证只有抢购开始时,才可以点击按钮抢购商品,抢购开始前或抢购结束后,都不可点击按钮

        c. 抢购商品的URL动态生成问题:避免用户根据猜测的URL,绕过抢购页面,直接进入下单环节

        d. 秒杀访问量过大的问题:限制进入秒杀环节的用户量,降低秒杀的并发量

    2)解决方案是什么

        a. 资源静态化处理

        b. 商品详情页的缓存处理

        c. 秒杀开始的判断:页面异步刷新 获取秒杀商品的列表,通过判断商品是否在秒杀列表中 判断秒杀是否开始

        d. URL动态生成问题:秒杀开始前,为每个商品生成token,token用于秒杀页面的访问,以及控制秒杀时间

        e. 秒杀页面限流处理:限制进入秒杀页面的用户



5、商品下单环节

    1)面临的问题有什么

        a. 秒杀商品的下单量过大问题:大量用户(超过商品数量)点击秒杀按钮,进行商品秒杀

    2)解决方案是什么

        a. 下单页面的限流处理:限制进入下单页面的用户量



6、订单支付环节

    1)面临的问题有什么

        a. 高并发情况下,系统响应慢的问题:秒杀场景下,大量的用户访问,导致系统的网络和负载压力较大,用户支付卡顿,影响用户支付体验

    2)解决方案是什么

        a. 支付页面的限流处理:限制进入支付页面的用户量

        b. 支付异步化处理:下单成功后不立即进入支付页面,允许用户等到系统空闲下来再进行支付



用户头像

wyzwlj

关注

还未添加个人签名 2018.05.02 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营作业 -Week9