架构师训练营 week9 - 学习总结
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
评论