本文主要包括以下内容:
(1)Java中间件的定义与三大类型
(2)构建Java中间件涉及到的Java基础知识
(3)分布式系统中的Java中间件本文涉及到的具体知识并不会在本文博客中给出,很多都在其余博客中进行了讲解,比如构建Java中间件涉及到的Java基础知识,本文只是做一个概括。
1.Java中间件的定义与三大类型
在前面我们讲了大型网站的发展路程,从数据库的读写分离,到缓存到服务化的架构、到业务的拆分以及消息中间件。 这些发展过程中都离不开Java中间件的支撑。
中间件:就是出于应用和底层系统中间的一层,是应用与应用之间、应用与服务之间的桥梁。
我们常接触到的中间件主要是三种:
(1)远程过程调用和对象访问中间件(RPC):主要解决分布式环境下应用互相访问的问题(服务相互访问)
(2)消息中间件:解耦应用之间的消息传递,异步。
(3)数据访问中间件:解决应用访问数据库的共性问题的组件。
2.构建Java中间件涉及到的Java基础知识
1. 跨平台的Java运行环境–JVM
这部分主要是JVM知识、垃圾回收与内存堆布局问题,具体参考别的内容
2. Java并发编程的类、接口和方法
(1)线程池–ThreadPoolExecutor
(2)synchronized 关键字
(3)ReentrantLock 可重入的显示锁
(4)volatile 关键字:涉及到变量的可视性,其实volatile修饰的变量只会在主内存中保存一份,不会再工作内存中存在本地副本。这也说明了volatile比synchronized高效的原因。
(5)Atomic 原子变量类:硬件支持的CAS+volatile
(6)wait、notify和notifyAll函数
(7)CountDownLatch 闭锁
(8)CyclicBarrier 栏珊
(9)Semaphore 信号量:控制并发的数量。
(10)Exchanger 用于在两个线程之间交换数据
(11)Future和FutureTask:获取异步计算结果
(12)并发容器类:CopyOnWrite开头的和Concurrent开头的。
1)CopyOnWrite的思路是:在更改容器时把容器写一份进行修改,保证读线程不受影响,实际上就是读写分离,在读多写少情况性能很好,实质上是在写的时候重建了一次容器。
2)Concurrent开头的思路是:总体来说就是读不加锁,修改时不影响读,达到比读写锁更高的性能。
3. Java的动态代理
具体参考别的博客
4. Java的反射
具体参考别的博客
5. 网络通信实现的选择
BIO、NIO、AIO
3. 分布式系统中的Java中间件
服务框架:对应用进行拆分,完成服务化。
数据层:完成数据的拆分以及整个数据的管理、扩容、迁移等工作。
消息中间件:应用的解耦,并提供一种分布式环境下完成事务的思路。(这里分布式环境下事务解决思路?不理解)
下面给出一个引入中间件的结构图:
WebAPP和Service之间通过 服务框架 解决了集群间的通信问题。
应用和数据库之间通过 分布式数据层 让应用可以方便地访问已被分库分表的数据库节点。
软负载中心和持久配置管理是两个不太直接被业务系统使用却起到很好支撑作用的系统。