`
wataxi
  • 浏览: 201532 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

分布式Java 应用(转)

    博客分类:
  • java
阅读更多

网络通信:协议TCP/IP,UDP/Ip,Multicast

               IO:BIO,NIO-Reactor,AIO-Proactor

消息方式的系统间通信:

                基于Java包:TCP/IP(Socket、ServerSocket;SocketChannel、ServerSocketChannel)

                                   UPD/IP(DatagramSocket、DatagramPacket;DatagramChannel、DatagramPacket)

                                   Mutilcast(MulticastSocket、DatagramPacket)

                                   SRM

                基于开源框架:Mina,Netty

                性能角度:连接管理(连接池、连接复用、短连接、长连接)

远程调用方式的系统间通信:基于Java包(RMI(UnicastRemoteObject,LocateRegistry),Webservice)

                                       基于开源框架(Spring RMI,Apache CXF)

                                       性能角度(反射,序列化、反序列化)

深入理解JVM

                 JAVA代码的执行:代码编译为class——sun.jdk中的javac,装载class——ClassLoader,执行class(解释执行、编译执行(client complier,server complier)

                 内存空间:方法区、堆、JVM方法栈、本地方法栈和PC寄存器

                 内存分配:堆上的分配、TLAB分配、栈上的分配

                 内存回收:算法(Copy,Mark-sweep,mark-compact)

                                Sun JDK 实现(分代回收,GC参数,G1)

                 内存状态分析:jconsole、visualvm、jstat、jmap、MAT

                 线程资源同步和交互机制:

                                 资源同步机制:synchronized实现、lock/unlock

                                 线程交互机制:Object.wait/notify/notifyAll ——Double check pattern

                                                      并发包提供的交互机制——semaphore、CountdownLatch

                  线程状态及分析方法:jstack、TDA

 

Sun JDK:

集合包:List(ArrayList,LinkedList,Vector,Stack),Set(HashSet,TreeSet),Map(HashMap,TreeMap)

并发包:ConcurrentHashMap,CopyOnWriteArrayList,CopyOnWriteArraySet,ArrayBlockingQueue,AtomicInteger,ThreadPoolExecutor,Executors,FutureTask,Semaphore,CountDownLatch,CyclicBarrier,ReentrantLock,Condition,ReentrantReadWriteLock

序列化,反序列化

性能调优:

1,先粗粒度划分,在细粒度寻找具体点

2,设定调优目标

3,根据现状衡量目前系统资源的瓶颈,需找消耗资源的代码,寻找执行慢的原因和代码

(CPU(us(代码循环、计算量大等),sy(线程上下文,线程多,IO等待多)))

(文件IO(并发读写多,文件大))

(内存(JVM堆内存(创建了多个对象,持有了不必要的引用),JVM以外的内存(创建了太多的线程,使用了BYTEBUFFER但未释放))

(网络IO(读写网络操作太频繁))

(访问量不大(锁竞争激烈,未充分使用硬件资源,数据量大))

4,性能调优(a针对系统资源消耗过多的优化;b资源消耗不多,但执行慢)

a:cpu:适当释放CPU,wait/notify机制,JVM和内存的优化;降低锁竞争,coroutine;文件IO:异步,限流,限制文件大小;内存,GC调优,JVM堆的代大小调优,释放不需要引用的对象,对象缓冲池

b:降低锁竞争(lock-freem,拆分锁,copyOnWrite),充分使用硬件(充分使用多个CPU,充分使用内存)

 

 构建高可用:避免单点,提高应用的可用性

负载均衡技术:选址,filover,响应返回方式(NAT,IP-Tuneling,DSR),硬件负载,软件负载VRRP,去中心化实现软件负载gossip

热备:Linux HA等

使用多机房

提高可用性:报警系统,日志记录和分析系统,水平伸缩,拆分,读写分离,其他

 

构建可伸缩的系统

垂直伸缩:支撑高访问量(增加CPU(锁问题,线程数随CPU增加的问题),增加内存(cache设置为内存比率的问题))

支撑大数据量:分表

提升计算能力:并行多线程计算

 水平伸缩:SNA,有状态的情况(存在内存的状态(用户身份)广播同步,分布式缓存,terracotta),文件(上传的文件(存储设备,SAN文件系统,分布式文件系统));伸缩带来的数据库问题(cache,分库,异步数据库访问,中间层DAL)

支撑大数据量:性能压力(读写)读写分离,多master

提升计算能力:mapreduce,MPI     

 

 

类加载机制:装载--链接(校验,准备,解析)--初始化         

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics