消息队列技术点梳理(思维导图版)

消息队列作为服务/应用之间的通信中间件,可以起到业务耦合、广播消息、保证最终一致性以及错峰流控(克服短板瓶颈)等作用。本文不打算详细深入讲解消息队列,而是体系化的梳理消息队列可能涉及的技术点,起到提纲挈领的作用,构造一个宏观的概念,使用思维导图梳理。
 
再介绍之前,先简短比较下RPC和消息队列。RPC大多属于请求-应答模式,也包括越来越多响应式范式,对于需要点对点交互、强事务保证和延迟敏感的服务/应用之间的通信,RPC是优于消息队列的。那么消息队列(下文也简称MQ,即Message Queueu)可以看做是一种异步RPC,把一次RPC变为两次,进行内容转存,再在合适的时机投递出[……]

Read more

Nesto – Hulu用户分析平台的OLAP引擎

本文主要介绍Hulu用户分析平台使用的OLAP引擎——Nesto(Nested Store),是一个提供近实时数据导入,嵌套结构、TB级数据量、秒级查询延迟的分布式OLAP解决方案,包括一个交互式查询引擎和数据处理基础设施。

 

1. 项目背景

Nesto起源于用户分析团队,业务上需要一个面向用户、分析型的产品,提供任意维度的Ad-Hoc交互式查询、导出数据,供运营、产品、第三方数据公司使用。
 
一个典型场景是:导出2018年1月看过《冰与火之歌》第7季第7集(S7E7)超过5次的新注册用户,包括用户名、email两个域,用于发送营销[……]

Read more

使用火焰图做性能分析

系统性能的评估维度可能很多,包括应用的吞吐量、响应时间、任务完成时间和资源利用率等。但是这些指标(metrics)仅仅是表象,一旦发现异常,如何从代码级别定位性能问题才是解决问题的关键,本文介绍了一种使用火焰图(Flame Graph)来做性能分析的方法,在实战中具备很高的可操作性和快速pinpoint问题的能力。

下面按照1. 发现问题,2. 分析问题,3. 解决问题三个章节展开,最后是4. Lesson Learned。

 

1. 发现问题

最近公司完成大数据集群的迁移,应用大多是Spark开发的,但是仍然存在一个老的每日运行的Hadoop任务突然发现指标异常,主要体现在[……]

Read more

浅谈从Google Mesa到百度PALO

最近在研究OLAP相关的技术,正好看到Google 2014年的论文《Mesa: Geo-Replicated, Near RealTime, Scalable Data Warehousing》,以及百度最近2017年开源的基于Mesa+Impala的实现系统PALO,本篇就尝试结合起来看下二者,主要是学习介绍性质的文章。
 

1. Mesa

Mesa是一个Google内部使用的数据仓库系统,从论文的标题可以抓住几个关键词:可实现跨DC复制的、近实时的、可扩展的。这几点算是Mesa的特色所在,同时和Mesa要解决的问题背景有很大关系,Mesa主要解决Google在线广告报表和[……]

Read more

JAVA并发编程实战笔记

第二次认真读了Doug Lea的Java Concurrency In Practice这本大作,记录笔记在此链接

Easy-mapper – 一个灵活可扩展的高性能Bean mapping类库

1 背景

做Java开发都避免不了和各种Bean打交道,包括POJO、BO、VO、PO、DTO等,而Java的应用非常讲究分层的架构,因此就会存在对象在各个层次之间作为参数或者输出传递的过程,这里转换的工作往往非常繁琐。
 
这里举个例子,做过Java的都会深有体会,下面代码的set/get看起来不那么优雅 :-(
ElementConf ef = new ElementConf();
ef.setTplConfId(tplConfModel.getTplConfIdKey());
ef.setTemplateId(tplConfModel.getTemplateId[......]

Read more

从JVM说起到初探Scala应用实践

最近在公司组内分享了一次关于JVM、Scala以及Spark介绍性质浅析的议题,这种形式的分享可以鞭策自己主动、自驱的完成一些既定目标,还能和有经验的人士一起交流,共享与学习是每一个做技术的同胞都应该拥抱的价值观。

PPT见连接,请点此

大塞车游戏活动的算法解

最近在公司组织的培训上,遇到了一个很有意思的算法题,这篇文章就借这个为题提供一个解。

解的代码用Java实现,并配有演示,已经放到了github上https://github.com/neoremind/big-traffic-jam-solver
 
首先感谢李培英老师,《职业化研讨》这门课非常值得公司内的一线管理人员去学习。在讲到职业化内涵里的“规则意识”一节时,让大家做了一个简单的大塞车游戏,规则如下:
 
1、邀请10人以上的学员(注意是偶数,当然越多越好),列成两队,面对面的坐在椅子上。
2、中间叫做“鸿沟&rdq[……]

Read more

Flume+Kafka收集Docker容器内分布式日志应用实践

1 背景和问题

随着云计算、PaaS平台的普及,虚拟化、容器化等技术的应用,例如Docker等技术,越来越多的服务会部署在云端。通常,我们需要需要获取日志,来进行监控、分析、预测、统计等工作,但是云端的服务不是物理的固定资源,日志获取的难度增加了,以往可以SSH登陆的或者FTP获取的,现在可不那么容易获得,但这又是工程师迫切需要的,最典型的场景便是:上线过程中,一切都在GUI化的PaaS平台点点鼠标完成,但是我们需要结合tail -F、grep等命令来观察日志,判断是否上线成功。当然这是一种情况,完善的PaaS平台会为我们完成这个工作,但是还有非常多的ad-hoc的需求,PaaS平台无法满足[……]

Read more

使用Scala开发一个DSL来做远程调用

问题背景

最近在实施微服务化过程中,发现了一类潜在需求(这就是传说中开发者的敏锐嗅觉=_ =?):

如何快速的来进行远程RPC调用,来进行测试、排查问题?

服务调用方式有两种形式,如下图所示。
第一种,传统的方式,服务provider提供SDK,服务consumer在构建环境中引入SDK依赖,并且配置IP:PORT,直连调用。
 
第二种,改进的方式,服务provider通过平台治理中心来生成SDK,实际就是将API的接口和签名、类定义信息进行统一的schema描述(可以使用proto)后,由平台负责生成SDK,服务consumer可以通过契约schema的方式、[……]

Read more

Java的业务逻辑验证框架fluent-validator

1 背景

在互联网行业中,基于Java开发的业务类系统,不管是服务端还是客户端,业务逻辑代码的更新往往是非常频繁的,这源于功能的快速迭代特性。在一般公司内部,特别是使用Java web技术构建的平台中,不管是基于模块化还是服务化的,业务逻辑都会相对复杂。

这些系统之间、系统内部往往存在大量的API接口,这些接口一般都需要对入参(输入参数的简称)做校验,以保证:
1) 核心业务逻辑能够顺利按照预期执行。
2) 数据能够正常存取。
3) 数据安全性。包括符合约束以及限制,有访问权限控制以及不出现SQL注入等问题。

开发人员在维护核心业务逻辑的同时,还需要为输入做严格的校验。当输入不合法[……]

Read more

基于Protobuf的分布式高性能RPC框架——Navi-Pbrpc

1 简介

Navi-pbrpc框架是一个高性能的远程调用RPC框架,使用netty4技术提供非阻塞、异步、全双工的信道,使用protobuf作为序列化协议,同时提供长、短连接模式,支持non-blocking和传统的blocking io,以及负载均衡,容错处理策略等,对于基于socket的分布式调用提供通信基础。

如果你的项目中需要高性能的RPC解决方案,那么navi-pbrpc可以帮助到你构建一个强大的远程调用系统。

Navi-pbrpc使用netty nio开发,全双工、异步、非阻塞的通信模型,保证了高性能和理想的QPS,了解详细性能测试报告见附录性能测试。

单测覆盖率见附录。

[……]

Read more

SpringMVC源码分析和一些常用最佳实践

前言

本文分两部分,第一部分剖析SpringMVC的源代码,看看一个请求响应是如何处理,第二部分主要介绍一些使用中的最佳实践,这些best practices有些比较common,有些比较tricky,旨在展示一个框架的活力以及一些能在日常项目中能够应用的技巧,这些技巧的线索都可以在第一部分的代码剖析中找到,所以读读源代码对于使用好任何框架都是非常有帮助的,正所谓“知其然,还要知其所以然”。[……]

Read more

从无重复大数组找TOP N元素的最优解说起

有一类面试题,既可以考察工程师算法、也可以兼顾实践应用、甚至创新思维,这些题目便是好的题目,有区分度表现为可以有一般解,也可以有最优解。最近就发现了一个这样的好题目,拿出来晒一晒。

1 题目

原文:

There is an array of 10000000 different int numbers. Find out its largest 100 elements. The implementation should be optimized for executing speed.

翻译:

有一个长度为1000万的int数组,各元素互不重复。如何以最快的速度找出其中最大的10[……]

Read more

半面创新的一些学习总结

有幸参与了周宏桥老师的半面创新两天的培训session,主题是关于创新突破性产品的实践体系,体会颇多,扩展自己的视野的同时,大有感觉在创新领域绝对是存在原则和方法论的,趁热记录下课程的重点内容。下面内容多是上课时的笔记,由于周老师通晓历史诗歌,所以有很多生动的故事也简单写在里面,了解更多可以搜索周老师的相关出版物

 

1. 创新成果五大原则

一命二正三出奇
四用地利五任势
 

1.1 一命

本质是一个时空绑定的生产关系场。可以理解为,新生产力能够匹配生产关系。生产力、生产关系涉及到马克思主义哲学,此处不做展开。
 
举例来说,过去的传统软件公司[……]

Read more