据悉,不久前,国内最大的精英职业发展平台猎聘,在杭州沃创空间的沃创咖啡厅举办了一场“大神教你Java新技术”的线下分享会,拥有近十年互联网研发经验的大咖觉知把多年私藏的干货分享给了与会者。通过猎聘同道精英汇线下沙龙的分享,与会者既了解了行业的最新技术,又拉近了与技术大牛的距离。
觉知,拥有近十年的互联网研发经验、蘑菇街无线应用技术专家。其做过电商核心交易系统、实时数据处理平台、服务化中间件等。目前服务于蘑菇街应用团队,主要负责会员后端&无线应用前端。
他在活动当天分享的主题是“Java异步化与高性能网络应用”。期间,以蘑菇街为例,分享了大量真实的案例和解决方案,供与会者参考和学习。以下是经过编辑和整理的精华内容。
觉知首先回顾了Web服务本身的发展,以CGI为例,其是指通用网关接口,处理比较难的操作会利用CGI来进行实现。CGI的特点从今天的角度来看,在CGI时代的一个请求发过来,我会启动一个进程,然后对它服务,之后就把进程关掉。进程对于操作系统而言,开销是比较大的,当时也会有相应配套的一些设施,如进程池应用等技术,当时也是比较流行的,它也有好处,即使有点问题,进程的请求出错,第二个请求过来重新又起了一个新进程,它们之间的独立性做得非常好,这方面有它的优势。
第二个阶段,Fast CGI,CGI是一个请求过来而进行服务的,那我是否可以启动线程对它进行服务,它也有线程池的技术来进行配套,再来完成这样的工作。Servlet是一个请求、一个线程去对应的。
做异步化改造时,大家都会面临这样一个异步化标准的问题,使用LOD的时候大家都会使用Callback Hell,那么,在请求回来时如何去处理?这个时候,它嵌套会越来越深,我们去阅读和调试这个代码时,成本非常高,这里会有一些解决方案,如Promise.JS/Async.JS,比如调用完一个接口以后,接下来会做什么,发生异常时会做什么,这样的描述方式,对于开发人员理解起来就更友好。与此同时,其中的每一个步骤的执行都是异步化可并行的。
在Java里面,JDK8很早就有,它起的作用是将原有的调用流,调用完接口A以后返回Future,在JDK8中可以用新加的Completable Future来调用。
这里就提到了RxJava,据记者了解,RxJava是基于观察者模式的异步控制流的实现,之前了解过函数式编程的开发者对这一块比较容易接受,对于大部分的开发者而言,RxJava的编程模式还是存在很大挑战的,在思维上理解起来还是比较困难,它是基于数据流的角度去设计的,平时处理的数据是处理一个对象,完了再处理另外一个对象,这一块难度还是有点大。我们在做现有系统异步化改造时,异步编程模式是最大的一个挑战。
异步网络框架的核心部件首先是EventLoop,中间是在一个单线程,会有一个EventLoop循环,它本身会有一些IO操作的处理,再委派给下一级来做。一个执行者对应到后面实际操作是一系列线程,是一个线程池进行对应,它不会马上返回其处理结果,只是将需要处理的东西堆起来。这时候需要一个对象来具体持有这一个状态,这个时候,通常会有一个Future的对象,如果处理完就会重新来唤醒。Futrue是一个数据结构,展示延后处理的一些结果。