大型网站系统与Java中间件实践 02 Java中间件

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 01 认识分布式02 Java中间件03 分布式框架3 构建Java中间件3.1 什么事中间件?中间件不是最上层的应用也不是最底层的支撑系统,中间件在项目中起到桥梁作用,特定中间件是解决特定的场景问题的组件。

01 认识分布式
02 Java中间件
03 分布式框架

3 构建Java中间件

3.1 什么事中间件?

中间件不是最上层的应用也不是最底层的支撑系统,中间件在项目中起到桥梁作用,特定中间件是解决特定的场景问题的组件。让开发聚焦于自己的业务。

常用中间件的分类:

  1. 远程过程调用和对象访问中间件:主要解决分布式环境下应用的互相访问问题,
  2. 消息中间件:解决应用之间的消息传递,解耦,异步的问题。
  3. 数据访问中间件:主要解决应用访问数据库的共性问题的组件。

3.2 Java中间件的基础知识

3.2.1 JVM

Java源码通过编译器变成Java字节码

JVM加载Java字节码

3.2.2 垃圾回收与内存堆布局

Java通过虚拟机进行垃圾回收。

img_76d5b00c1a9539b5a672b4c4706a182e.png
Oracle Hotspot JVM堆

一般新的对象被分配在young的Eden区,也有可能直接分配在Tenured。

在进行垃圾回收的时候,Eden区中存活的对象会被复制到空的Survivor区,而下次新生代垃圾回收的时候,Eden区存活的对象和这个Survivor区中存活的对象会被复制到另外那个Survivor区域,并且清空当前的Survivor区域。经过多次新生代垃圾回收,还存活的对象被移动到年老代,而年老代的空间也会根据一定的条件进行垃圾回收。

新生代:

串行GC -- Serial Copying

并行GC -- ParNew

并行回收GC -- Parallel Scavenge

年老代:

串行GC -- Serial GC

并行MS -- Parallel MSC

并行Compacting GC -- Parallel Compacting GC

并发GC -- CMS

3.2.3 Java并发编程

  1. 线程池

  2. synchronized

任何两个线程之间调用互斥。 同步静态代码块。

同一对象之间的两个方法互斥。 同步代码块。

  1. ReentrantLock

tryLock:调用的时候,如果锁被其他线程占有返回false。

可以构造公平锁,公平锁的好处就是等待锁的线程不会饿死,但是整体效率低。

  1. volatile

可见性是指在一个线程中修改变量以后,在其他线程可以看得到这个数值。

volatile关键字保证了同一个变量在多线程中的可见性,所以它更是用于修饰作为开关状态的变量。

int  key1;
public int getKey1(){
    return key1;
}
对于调用getKey1获取当前线程中的副本,这个值不一定是最新的。
对于setKey1来说,操作的是当前线程中的副本,所以其他线程看不到最新的值。

volatile int key2;
public int getKey2(){
    return key2;
}
对于调用getKey2来说,volatile修饰保证这个变量没有线程副本,只会放在主存,所以得到的值是最新的值。
对于setKey2来说,直接操作主存,其他线程肯定会看到新值。

int key3;
public synchronized int getKey2(){
    return key3;
}

同步关键字保证线程主存与本地副本的同步,所以得到的值是最新的值。

  1. Atomics

提供了原子操作,计数器操作。

  1. wait,notify和nitifyAll

notify唤醒一个线程,noitfyAll唤醒所有线程。

对wait,notify和notifyAll调用都必须是在对象的synchronized快中。

  1. CountDownLatch

线程都到达了预期状态活完成预期工作时触发事件。

统计数据:分布计算 latch.countDown(),然后合并数据latch.await();

  1. CyclicBarrier

循环屏障,协同多个线程,让多个线程在这个屏障前等待,直到所有线程都到达了这个屏障的时候,在一起执行后面的计算。

可以循环使用。

  1. Semaphore

信号量:

  1. Exchanger

用于两个线程交互数据

线程会阻塞在exchange方法上,直到另一个线程也到了同一个Exchanger的exchange方法。

  1. Future和FutureTask
// 远程调用回阻塞
1:HashMap<String,Object> map = rpc.getDataFromRemote();

doOther();

// 远程调用提交给线程池执行
2: Future<HahsMap<String,Object>> fuctur = rpc.getDataRemote();

doOther();

// 获取数据的时候阻塞
future.get();
  1. 并发容器

  2. 动态代理

控制在执行方法之前,方法之后能进行处理相关操作。

  1. 反射

常用操作库

Javassist

cglib

asm

bcel

  1. 网络通信实现

框架Mina,Netty

3.3 分布式系统与Java中间件

img_8648fea1cdb6a376427a56ff029c0a72.png
系统中的中间件

WebApp和Service中间引入服务框架,解决了集群之间的通信问题。

在应用和数据库之间,引入分布式数据层可以方便我们操作已被分库分表的数据库节点。

目录
相关文章
|
1天前
|
JavaScript Java 测试技术
基于Java的社区人员管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的社区人员管理系统的设计与实现(源码+lw+部署文档+讲解等)
12 2
|
1天前
|
JavaScript Java 测试技术
基于Java的公司员工工作日志办公系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的公司员工工作日志办公系统的设计与实现(源码+lw+部署文档+讲解等)
21 3
|
1天前
|
JavaScript Java 测试技术
基于Java的精品课程在线学习系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的精品课程在线学习系统的设计与实现(源码+lw+部署文档+讲解等)
15 1
|
1天前
|
JavaScript Java 测试技术
基于Java的高校大学生党建系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的高校大学生党建系统的设计与实现(源码+lw+部署文档+讲解等)
13 1
|
1天前
|
JavaScript Java 测试技术
基于Java的学生课堂考勤系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的学生课堂考勤系统的设计与实现(源码+lw+部署文档+讲解等)
12 0
|
1天前
|
JavaScript Java 测试技术
基于Java的中文学习系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的中文学习系统的设计与实现(源码+lw+部署文档+讲解等)
14 0
|
1天前
|
人工智能 前端开发 Java
Java语言开发的AI智慧导诊系统源码springboot+redis 3D互联网智导诊系统源码
智慧导诊解决盲目就诊问题,减轻分诊工作压力。降低挂错号比例,优化就诊流程,有效提高线上线下医疗机构接诊效率。可通过人体画像选择症状部位,了解对应病症信息和推荐就医科室。
27 10
|
8月前
|
NoSQL Java Redis
阿里Java高级岗中间件二面:GC+IO+JVM+多线程+Redis+数据库+源码
虽然“钱多、事少、离家近”的工作可能离技术人比较远,但是找到一份合适的工作,其实并不像想象中那么难。但是,有些技术人确实是认真努力工作,但在面试时表现出的能力水平却不足以通过面试,或拿到高薪,其实不外乎以下 2 个原因:
|
8月前
|
算法 NoSQL Java
2023年阿里高频Java面试题:分布式+中间件+高并发+算法+数据库
又到了一年一度的金九银十,互联网行业竞争是一年比一年严峻,作为工程师的我们唯有不停地学习,不断的提升自己才能保证自己的核心竞争力从而拿到更好的薪水,进入心仪的企业(阿里、字节、美团、腾讯.....)
|
8月前
|
算法 NoSQL Java
2021年阿里高频Java面试题:分布式+中间件+高并发+算法+数据库
又到了一年一度的金九银十,互联网行业竞争是一年比一年严峻,作为工程师的我们唯有不停地学习,不断的提升自己才能保证自己的核心竞争力从而拿到更好的薪水,进入心仪的企业(阿里、字节、美团、腾讯.....)