大数据系列分布式定时任务框架spring cloud

第 1 周 -周记

2019-06-22  本文已影响1人  光小月

最近几个月一直在看框架的知识,包括xxl-job、spring cloud、etl-python、zkClient、zookeeper等等, 现在总结一下最近看的知识点,并总结出一下知识。

1. RPC的实现

查看很多框架的源码,好像对于多web的调用方式,基本都是RPC去实现的,当然实现的方式有很多种,比如HTTP的实现、Netty的nio实现,他们之间的区别在哪里, 这个暂时无法确定,因为我对netty的nio 不怎么熟悉,对http的restful请求了解。

2. 序列化的方式

对xxl-job 中有查看对象的序列化,其实现方式为xxxx。 对于其他java对象的序列化,一般来说都是实现Serializable就可以了。
还有zkClient 中的序列化是指定对应的 serializable 实现类SerializableSerializer和BytesPushThroughSerializer。
SerializableSerializer的serialize, 是将对象通过流的方式实现, stream.writeObject(serializable)
deserialize也是流的方式显示,Object object = inputStream.readObject();。除了这些还有以下序列的工具比如 Jackson, fastjson,gson , Hessian, Kryo 等等,Javason 主要利用ObjectMapper 的writeValueAsString和readValue进行序列化和反序列的。

比较

框架 对象 序列化 反序列化
xxl-job HESSIAN1 HessianOutput .writeObject(obj) HessianInput.readObject()
xxl-job HESSIAN Hessian2Output.writeObject(obj) Hessian2Input.readObject()
xxl-job PROTOSTUFF RuntimeSchema.createFrom(cls) ProtostuffIOUtil.mergeFrom(bytes, message, schema)
xxl-job KRYO kryoLocal.get().writeObject(output, obj) kryoLocal.get().readObject(input, clazz)
xxl-job JacksonSerializer objectMapper.writeValueAsBytes(obj) objectMapper.readValue(bytes, clazz)
Serializable接口 ObjectInputStream writeObject readObject
zkClient SerializableSerializer serialize(实现:stream.writeObject(serializable) ) deserialize(实现:Object object = inputStream.readObject() )
Jackjson ObjectMapper writeValueAsString readValue
Fastjson JSON类 toJSON parseObject
Gson Gson对象 toJson fromJson

查看Java Serializable:明明就一个空的接口嘛, 在jdk中搜索defaultWriteObject会出现如下图

1.png
 xxl-job
 ----- HESSIAN1  
                      HessianOutput .writeObject(obj)
                     HessianInput.readObject()  
 xxl-job 
  ----- HESSIAN
                     Hessian2Output.writeObject(obj)
                     Hessian2Input.readObject() |
 xxl-job 
----- PROTOSTUFF
                      RuntimeSchema.createFrom(cls)
                      ProtostuffIOUtil.mergeFrom(bytes, message, schema)|
  xxl-job  
-----   KRYO
                       kryoLocal.get().writeObject(output, obj) 
                       kryoLocal.get().readObject(input, clazz) |
  xxl-job 
-----  JacksonSerializer
                      objectMapper.writeValueAsBytes(obj)  
                      objectMapper.readValue(bytes, clazz)|
 Serializable接口
----- ObjectInputStream  
                     writeObject 
                     readObject  
 zkClient  
 ----- SerializableSerializer  
                    serialize(实现:stream.writeObject(serializable) ) 
                    deserialize(实现:Object object = inputStream.readObject() )  |
 Jackjson
 -----  ObjectMapper 
                  writeValueAsString
                   readValue  
  Fastjson  
----- JSON类 
                toJSON 
                parseObject 
 Gson
 ----- Gson对象 
                toJson 
                fromJson

tips: static 和 transient修饰的字段无法serializable

3. juc中的知识

lock, synchronized, volatile, AQS, countDownLatch,CyclicBarrier, Semaphore,Condition, juc的原子类Atomic**, ThreadPool, 这些知识都在《java高并发编程》中有,其中我还收集了一些,可以查看自己整理的目录,Java多线程系列目录(共43篇)-转, 链接中讲解的很清楚了,这里就不重复了。

4. 队列

队列,这里说的队列泛指消息中间件功能中的队列。一般就是消息的存取,其中自己写了生产者与消费者5种实现方式

5. zookeeper的应用

利用zookeeper实现了 master 选举、分布式队列、负载均衡、分布式锁、发布与订阅实例。
详见我的github , zk_code

引用

  1. https://juejin.im/post/5d0c4bebf265da1bc23f7f1d?utm_source=gold_browser_extension
  2. https://www.cnblogs.com/duanxz/p/4494395.html

PS: 若你觉得可以、还行、过得去、甚至不太差的话,可以“关注”或者“点赞”一下,就此谢过!

上一篇 下一篇

猜你喜欢

热点阅读