Gavin on Backend Technology

backend and more

The Tale of Two Pipelines

Background

I have came across a few articles that clear some of misconceptions around advanced analytics. Two of them, DataOps is NOT Just DevOps for Data and The Next Big Challenge for Data is Organizational has been my favorite.

I cherry-picked some of ideas from them, try to apply them to my work context, turns out it helped a lot to set my expectation correctly and align my plan with the overall organizational vision and strategy.

Here are some punch lines:

  1. The fundamentally different between data warehousing and the advanced analytics (or machine learning application) is that the first one is value pipeline and the later is the innovation pipeline. Some other finding is derived from that perspective.

  2. It’s the organizational factor that challenge data or advanced analytics projects.

The first one set the tone for the second one, while the second one will make fundamental change to your organization’s data approach ( sometimes can be right v.s wrong, rather than just different.).

基于Keras的Word2Vec教程

原文:http://adventuresinmachinelearning.com/word2vec-keras-tutorial/

Word2Vec负取样架构图

理解Word2Vec的词嵌入对学习机器学习来说至关重要。 词嵌入也是自然语言处理的关键一步。 本教程展示如何利用深度学习框架Keras来实现Word2Vec。关于Keras的介绍,请参考我的另外一篇文章。在我的前一篇文章里,我介绍了基于TensorFlow的Word2Vec实现,并且说明了一个简单的、基于softmax的机制在大词量,训练嵌入层相当慢的情况的情况,通过引入了"negative sampling"的机制,并且在tensorflow中定制了loss function,即nce_loss来解决问题。

Hive on Spark

如果要问我使用Hive的最大的感受,那第一个出现的答案一定是:慢。 不仅我这么说,Hive自己觉得挺过意不去的,所以他会建议你更换一个引擎:

1
2
WARNING: Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. 
Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.

本文只有一个目的:告诉你Hive切换成Spark引擎很简单,远远比官方文档描述得简单。

机器学习简介

前言

机器学习作为AI的一个核心领域,重要性不言而喻。本文尝试从本人了解机器学习的过程来解释什么是机器学习。

缘起

由于手上有个IoT项目的数据需要分析,所以去年花了些精力研究数据分析领域的知识和方法。其中一个任务是给用户进行分类(确切地说应该是聚类),进而了解到了spark中的clustering算法,而这类算法通常被归类为机器学习的无监督学习。这样就接触到了机器学习。

搭建大数据全栈集群

前言

从2015年开始搭建数据分析系统以来,已经过了一年多时间,有必要对之前搭建的经历做一个总结。 本问主要包含以下几个系统/框架

  • Hadoop (HDFS/YARN)
  • Hive
  • HBase
  • ZooKeeper
  • Spark

其中hadoop的HDFS做为Hive和Hbase的存储基础设施,也保存历史日志数据。 YARN则做为spark的任务执行调度, 引入Hbase则是为了补充Hive不方便做部分内容更新的问题。 ZooKeeper做为Hbase的支撑,也为未来其他以来zk的系统做支撑。 Spark的作用有很多,目前搭建的目的主要是做为数据解析处理的工具。

Angular for Backend Developer

内容概要

  • 意义
  • 核心概念
  • 实例

意义

Angular作为前端的MVC框架,直接利用了服务器端开发的概念,即表现层和逻辑层分离,数据和逻辑通过控制器分发,并且通过request, session, global 等来传递数据和模型(model)。 angular也提供了控制器、业务服务功能,并且通过相关的指令(Directive)实现类似JSP内嵌Java代码的功能。而数据在视图和控制器之间的传递则通过scope完成。 最关键的是,由于数据和视图都在浏览器中,给数据和视图的实时双向绑定提供了基础,所以angular的变量改变可以直接体现到视图中,反之亦然。

核心概念

五种常见的架构模式

引言

最近难得有点空闲时间, 花了点精力了解了下架构的相关知识. Java程序员大多听说过GOF的设计模式, 而软件架构领域也不例外, O'reilly的开源电子书《Software architecture patterns》介绍了常用的五种架构模式. 其中有我本人有实际开发经验的就有四种,另外一个模式也是目前云计算领域比较流行的模式. 这些模式着眼于不同的角度,我根据我认为从小到大的顺序分别介绍一下.

Restful API的权限设计思考

前言

基于Restful风格的API设计规范已经被广泛接受。鄙公司也不例外,我们的系统基于Micro Service的理念,各个Services(服务)将功能发布为遵循Restful风格的API,每个服务即成为可对外发布的独立单元,服务之间的组合又可成为新的服务,称为BaaS(Back-end as a Service)。

由于各个服务需要单独对外提供服务,并且各个服务之间的业务差别比较大,所以在如何控制资源的权限,确保资源不被意外篡改和非法获取,又不违反Micro-Service的理念(单一业务职责)成为每个服务都要考虑的问题,即如何在开放和安全上做到平衡。

基本结构

我们总结下来,基本原则当然是遵循Restful规范 (为什么必须遵循Restful规范?如果这是个问题的话,请参考:http://stackoverflow.com/questions/1368014/why-do-we-need-restful-web-services )。

由于功能API都遵循Restful,所以我们把权限的分为如下几种:

  • 读:GET
  • 写:PUT
  • 新建:POST
  • 删除:DELETE
  • 获得元信息:HEAD
  • 获得对该资源的可用操作:OPTIONS

基于这样的设计,我们把权限信息设计为这样的json结构:

我理解的JVM

前言

作为一个Java程序员,JVM(Java虚拟机,下简称虚拟机)将执行我们编写的代码,并搞定包括内存管理之类的工作,可以说虚拟机是我们的服务提供商,我们是他的客户。从这个角度来说,虚拟机的架构和原理不是必须掌握的知识。然而总会有一些时刻会让我们恨不得把虚拟机扒个精光看透里面的所有花样,搞明白为什么我们的程序会出现诸如“OutOfMemoryError: ”、”StackOverFlow”的错误,或者为什么我们的程序就是那么慢,为什么就不能承受大流量的冲击呢。 本文是对本人对虚拟机的知识的一个总结,感谢以下几个信息来源:

内容大致分为如下几个方面:

  1. 虚拟机内部架构和Java内存模型
  2. 虚拟机支持的特性,如多线程,并发控制,多态的实现、类加载

如何让nosql数据库支持事务

前言

关系型数据库如SQL server, Oracle, mysql这类强一致性的数据库天然地支持数据库事务,而大部分NoSQL数据库(如Riak)则由于没有隔离性、锁机制等原因不能实现数据库事务,要实现事务控制则必须从应用层面来处理。本文以Riak为例,介绍基于nosql数据库的应用如何实现数据库事务的方案。

事务和隔离性

在开始介绍方案前,先简单回顾下事务的四个特性(ACID):

  • atomicity
  • consistency
  • isolation
  • durability

其中,隔离性是指多个事务(用户)之前的操作不会相互影响,多个事务并行执行结果应该与各个事务串行执行结果一致。注意,这里说的是执行结果应该与串行执行一致,而不是必须串行地执行,因为串行执行会成为性能提升的瓶颈。不同的隔离性会产生不同的副作用,比如: