JStorm 源码解析:编程接口

Storm topology 是由 spout 和 bolt 构建的有向无环图,其中 spout 是图的起始节点,用于发送数据,而 bolt 是图的中间节点和末端节点,用于对数据进行处理。下面我们先用一个简单的 wordcount 示例来回忆一下 storm 的基本使用,然后对示例中涉及到的 storm 编程接口从源码层面分析其内在实现。

阅读全文

JStorm 源码解析:整体架构

Storm 是一个基于 ZK 协调的分布式任务实时调度系统,属于流式(实时)计算引擎的一类。在目前的大数据和人工智能背景下流式计算是公司大部分业务的刚性需求,能够实现在百十毫秒内完成对用户行为的计算并执行具体的策略,例如依据用户的行为对其实施风控等。 当下市面上已有很多流式计算引擎产品,但是 storm 的出现基本上统一了这一领域,不过近几年也出现了一些新的产品可以撼动 storm 的地位,比如 flink、spark streaming 等。不可否认的是,现阶段还是有很多公司的业务运行在 storm 集群上,这样一个毫秒级延迟的分布式实时计算引擎还是有很多地方值得我们一起去探寻其设计与实现原理。

阅读全文

那些年,面试被虐过的红黑树

面试官:小桂子是吧,看你简历上写着精通 java 编程,想必对 java 已经掌握的很好了吧? 小桂子:系呀系呀,一直都用 java 写 bug 呢~ 面试官:那你说说 jdk1.7 之前 HashMap 的底层实现原理呗,另外为什么在高并发场景下可能造成较高的 CPU 占用? 小桂子:这个。。。好像是红黑树? 面试官:哦?你说的是 jdk1.8 之后的设计,既然你提到了,那就聊聊红黑树这个数据结构吧,这里是白纸和笔,手写一棵吧! 小桂子:哎呀,哎呀哎呀,老师,突然肚子好疼,我要去一下厕所,一会儿就回来~~~

阅读全文

OAuth 2.0 开放授权那些事儿

OAuth 2.0 协议是一种三方授权协议,目前大部分的第三方登录与开放授权都是基于该协议的标准或改进实现。OAuth 1.0 版本于 2007 年发布,2.0 版本则在 2011 年发布,其中 2.0 版本取消了所有 token 的加密过程,并简化了授权流程,但因强制使用 HTTPS 协议,被认为安全性高于之前的版本。

阅读全文

Dubbo 之于 SPI 扩展机制的实现分析

SPI (Service Provider Interfaces) 是 jdk1.5 引入的一种服务扩展内置机制,在面向接口编程的范畴下,SPI 能够基于配置的方式声明实际应用的具体扩展接口实现。之前在写接口限流器时曾遇到过这样一个场景,针对服务端的限流策略一般需要从多个维度进行控制,比如具体接口、IP、用户、设备,以及调用方等等,

阅读全文

Reactor:事件驱动的高性能响应模式

Node.js 这几年火的不要不要的,借助 js 天生的事件驱动机制和 V8 高性能引擎,让编写高并发的 web 应用门槛降低了许多,当然这背后还要得益于 Douglas C. Schmidt 在 1995 年提出的基于事件驱动的 Reactor 模式,让本身只支持单线程执行的 js 能够胜任如今高并发环境下的服务端应用。 不过作为一名服务端开发人员,我对 js 的使用程度并不高,所以也一直没有机会去切身体会 Node.js 的魅力(更换编程语言这件事可不是伤筋动骨 100 天就能好的),好在 Reactor 只是一个设计模式,是与具体语言和平台无关的,前段时间将负责的项目中的一个比较新的服务引入了 Vert.x 组件进行改造,也算是与 Reactor 模式有了一次亲密接触。Vert.x 是一个被称为运行在 JVM 上的 Node.js,用于在任何层次上编写非阻塞、响应式的模块或服务,关于 Vert.x 的发展历程还多少有些坎坷,具体可以移步官网。

阅读全文

接口限流器中的常用算法及其应用场景

小编所在的部门作为公司的基础服务部门,支撑着上层业务的正常运行,当有业务举办活动、遭遇攻击,或者是写土了代码,都会或多或少给我们的服务带来流量上的冲击。我们通常说缓存、降级,以及限流技术是高并发服务的三大利器,为保证集团其它业务不受影响,限流往往是服务端接口的必要特性之一,用于对抗大规模恶意请求,保护有限的计算和存储资源。

阅读全文

MyBatis 源码解析:SQL 语句的执行机制

通过前面两篇文章,我们完成了对 MyBatis 所有配置文件(包括配置文件和映射文件)解析机制的分析。回忆一下我们最开始给出的 MyBatis 小示例(如下),经过前面千山万水的跋涉,我们终于完成了第一行代码的 … 99% …(手动滑稽),这最后的 1% 就是创建 SqlSessionFactory 对象,所有的配置解析最后都会封装到 Configuration 对象中,接下去就是调用 SqlSessionFactoryBuilder 对象的 build 方法创建 SqlSessionFactory 对象,这里使用的是 DefaultSqlSessionFactory 实现类进行实例化。

阅读全文

MyBatis 源码解析:映射文件的加载与解析

上一篇中我们分析了配置文件的加载和解析过程,本文我们将一起来探究映射文件的加载与解析实现,MyBatis 提供映射文件以配置 SQL 语句、二级缓存,以及结果集映射等,是区别与其它 ORM 框架的主要特色之一。 在前面分析配置文件解析 <mappers/> 节点时,我们曾触及到 XMLMapperBuilder 的 parse 方法,这也正是解析映射文件的入口,

阅读全文

MyBatis 源码解析:配置文件的加载与解析

前面我们曾约定 mybatis-config.xml 为配置文件,SQL 配置文件为映射文件,本文我们将沿用上一篇中的示例程序,一起来探究一下 MyBatis 加载和解析配置文件,即 mybatis-config.xml 的过程。 在示例程序中,执行配置文件(包括后面要介绍映射文件)加载与解析的过程位于第一行代码中(如下),其中 Resources 是一个简单的基于类路径获取数据流的工具类,借助该工具类可以获取配置文件 mybatis-config.xml 的 InputStream 对象,然后将其传递给 SqlSessionFactoryBuilder 的 build 方法以构造 SqlSessionFactory。

阅读全文

Powered by hexo & Theme by hiero   Copyright © 2015-2019 浙ICP备 16010916  号,指 · 间 All Rights Reserved.