架构师训练营 week9 - 学习总结

用户头像
devfan
关注
发布于: 2020 年 08 月 05 日

JVM 虚拟机原理与编程优化

JVM组成架构

Java是一种跨平台的语言,JVM屏蔽了底层系统的不同,为Java字节码文件构造了一个统一的运行环境。

JVM核心组成部分:

  • 类加载器

  • 运行期数据区

  • 方法区 - 所有线程共享区域

  • 堆 - 所有线程共享区域

  • Java栈 - 每个线程独享

  • 程序计数寄存器 - 每个线程独享

  • 执行引擎

线程工作内存 & volatile

  • 线程操作主内存变量,需要通过线程独有的工作内存拷贝主内存变量副本来进行。

  • 一个共享变量被volatile修饰之后,保证了不同对这个变量进行操作时的可见性。

JVM垃圾回收

  • JVM垃圾回收就是在JVM堆中的已经不在被使用的对象清理掉,释放内存资源;

  • JVM通过一种可达性分析算法进行垃圾对象的识别,对被引用的对象进行标记,那些没有标记的对象就是可回收的垃圾对象了。

  • JVM回收垃圾对象占用的资源主要有3种方法:1.清理2.压缩3.复制

  • JVM在具体垃圾回收时会进行分代垃圾回收。具体实现:JVM将堆空间分成新生代和老年代两个区,新建的对象都存放在新生代,当新生代空间不足时,只对新生代进行垃圾回收,这样需要处理的内存空间就比较小,垃圾回收速度就比较快。

  • 采用串行、并行、并发或G1等算法对内存进行回收,在回收过程中会产生STW(Stop The World)现象。

JVM性能诊断工具

基本工具:JPS、JSTAT、JMAP、JSTACK

集成工具:JConsole、JVisualVM

秒杀

挑战和问题

秒杀系统需要面对的技术挑战如下:

  • 对现有网站业务造成冲击

  • 高并发下的应用、数据库负载

  • 突然增加的网络及服务器带宽

  • 直接下单:对秒杀URL的控制,避免秒杀前被刷。



秒杀系统的核心问题:

  • 并发读: 核心优化理念是尽量减少用户到服务端来“读”数据,或者让他们读更少的数据。

  • 并发写: 要求我们在数据库层面独立出来一个库,做特殊的处理。

  • 我们还要针对秒杀系统做一些保护,针对意料之外的情况设计兜底方案,以防止最坏的情况发生。



其他需要处理的问题:

  • 如何控制秒杀商品页面购买按钮的点亮

  • 如果只允许第一个提交的订单被发送到订单子系统

架构方案

秒杀系统的应对策略主要有以下几点:

  • 秒杀系统独立部署

  • 秒杀商品页面静态化,动静分离

  • 租借秒杀活动网络带宽

  • 动态生成随机下单页面URL

  • 热点数据隔离:处理热点数据通常有几种思路:一是优化,二是限制,三是隔离。

搜索

搜索引擎速度快是通过倒排索引进行查找的



爬虫系统架构

Lucene架构



Lucene是不支持分布式的,现在大部分都使用 ElasticSearch



用户头像

devfan

关注

还未添加个人签名 2017.11.12 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 week9 - 学习总结