自2013到2019年大数据领域发生了什么变化

What changed in the Big data landscape from 2013 to 2019

自2013到2019年大数据领域发生了什么变化

作者:Abbass Marouni

翻译:helight

原文地址:https://blog.marouni.fr/bidata-trends-analysis/

译者序

在网上看到这篇文章之后发现还挺有意思,文章也算比较简短,就试着联系了一下作者说:我想把他翻译成中文,不做商业用途只是练习和技术布道。作者的回应也非常快,当晚就给我回复,所以就有了这篇翻译,如果翻译有不准确的地方还请大家指出。

背景

I’ve been[……]

Read more

golang单元测试之mock

golang单元测试之mock

序言

前面介绍了golang的一般单元测试,以及如何使用vscode进行高效的go单元测试开发。同时也说过一般单元测试重点在于cpu和内存类型的测试,而对io类型的测试是比较敏感的。那么针对这类测试就没法做单元测试了吗?有的,肯定是有的,这就是mock技术。

mock测试不但可以支持io类型的测试,比如:数据库,网络API请求,文件访问等。mock测试还可以做为未开发服务的模拟、服务压力测试支持、对未知复杂的服务进行模拟,比如开发阶段我们依赖的服务还没有开发好,那么就可以使用mock方法来模拟一个服务,模拟的这个服务接收的参数和返回的参数和规划设计的服务是[……]

Read more

Golang UnitTest单元测试

Golang UnitTest单元测试

单元测试是程序开发者适用一段代码来验证另外一段代码写的是否符合预期的一种相对高效的自我测试方法。

对于程序开发来说,经过长期的积累和方法总结,单元测试是一种比较好的开发程序验证方式,但是单元测试却是在正真的软件开发之外要写的额外的代码,而且编写和管理维护都有比较大的成本。但是单元测试确实能够提高程序开发的质量,所以基本上各种语言都有相应的单元测试框架来支持更为方便编写和管理单元测试。

golang也是一样,不过golang的测试框架的支持是自生就提供了,不像C/C++,php等语言的单元测试框架需要第三方提供和安装。golang你在安装了其开发编译[……]

Read more

Golang官方依赖管理工具dep学习使用笔记

golang的之前的版本一直缺乏官方的包管理,第三方的包管理个人感觉还是比较麻烦的,但是看到dep现在样子之后还是有了很大的兴趣,使用了之后发现也确实方便了很多。推荐使用dep

Golang官方依赖管理工具:dep


今天在看一个内部项目的时候发现内部一个项目的体积非常大,一看原来是vendor占了很大空间。里面的库都是静态提交到git库的,更新和管理都很不方便,想想java开发中的maven多好用啊。之前也知道golang一直在开发类似的东西,借这个机会了解了一下,golang也已经有了这样的工具了:godep。所以赶紧拿来研究一下看看怎么用起来,用了之后发现,哎,还挺好用的。管理起来非[……]

Read more

这些年积累的一些小项目

github项目

Oneflow

项目简介:可视化分布式流程控制系统,数据流和业务流控制系统。使用golang开发,调度端采用了lua虚拟机,在web端可以创建串行流程,并且在每个流程中写lua脚本,发送到制定或者自动选择对远端机器进行任务执行。是之前项目openflow的升级版本。

项目地址:https://github.com/helight/oneflow

DP设计模式golang实现

项目简介:用golang实现设计模式的测试程序,还在持续积累。

项目地址:https://github.com/helight/go-patterns

XGCom串口调试工具

项目简介:一[……]

Read more

golua虚拟机的使用

前言

​ 之前一直想把openflow这样的分布式流程系统做起来,但是时间和应用场景的问题所以都是做了一个半拉子工程,而且之前想的也有点简单了,认为只要有同学愿意,在开发上应该没问题,但是最终还是出现了项目管理和开发能力的问题,最终搁浅了。但是我想做一个分布式流程调度系统的想法一直没有断,其实在公司内和另外一个同学做过一个flow系统,也在线上使用了,直到现在还在使用。前一段时间就想把这个系统再优化梳理一下,目标是做一个小巧的开源可用版本。经过一段时间的梳理目前已经初步完成了,后台+前端代码的重新梳理也已经完成了。

lua虚拟机的使用

​ 而今天主要想写的是其中使用[……]

Read more

使用gitbook来写文档和文章啦

前言​

项目中文档管理是一个比较麻烦的事情,一般的做法都是写word文档,或者pdf;针对代码或者接口文档高级一点的可以使用Doxygen或者swagger这样的工具自动生成更新文档。但是项目中还有很多文档有是图文混合的。那这样的文档怎么有效管理呢?

​ 在找了几个工具之后,发现了一个比较合适的工具gitbook。这个工具之前也接触过,主要是用来书籍编写管理,这方面确实做的非常专业。但是我发现用来做文档管理也是非常好用的,所以拿来测试了一下,效果还是不错的。看看这个效果,也是左右分栏,左边是目录分类列表,右边是内容。还可以直接进行搜索。

gitbook介绍

​ gitboo[……]

Read more

golang1.8以后yacc安装和使用

golang在1.8以后的tool工具中默认移除了yacc工具,如果要使用只能自己安装。

今天在测试代码中要用一下这个工具,突然发现没有,需要自己安装
首先这里下载代码:
http://github.com/golang/tools/cmd/goyacc/

然后编译,过程非常简单

go build goyacc

root@ecee334078d1:/usr/share/go-1.10/src/cmd/goyacc# go build yacc.go
root@ecee334078d1:/usr/share/go-1.10/src/cmd/goyacc# ls
doc[......]

Read more

windows10下使用dockerfile制作镜像

其实操作系统没有关系,主要还是Dockerfile的编写和执行,过程来说比较简单。

1.编写Dockerfile

我的dockerfile如下,主要是用于golang和c++的开发,所以相关软件安装都是和这方面有关的。 本来打算使用163的源的,后来看了一下官方源速度也还不错,就直接用官方的源了。

安装的主要软件是mysql,git,nginx,golang,vim

#Version 0.1
FROM ubuntu:latest

MAINTAINER helight "helight@qq.com"

#设置root用户为后续命令的执行者
USER root[......]

Read more

Windows10下安装Docker记录

之前一直使用window安装虚拟机的方式来做linux应用,这次想使用docker来试试,这里顺便记录一下,部分资料来自网上。
一、启用Hyper-V

打开控制面板 – 程序和功能 – 启用或关闭Windows功能,勾选Hyper-V,然后点击确定即可,如图:

点击确定后,启用完毕会提示重启系统,我们可以稍后再重启。

二、安装Docker

Docker下载地址为:https://store.docker.com/editions/community/docker-ce-desktop-windows

下载需要登录才可以,注册登录之后就可以下载了,安装包有50[……]

Read more

Apache Flink 1.6 Documentation: Jobs and Scheduling

Jobs and Scheduling 作业和调度

这边文档简要的描述了Flink怎么样调度作业和Flink在JobManager中如何表述和跟踪作业。

Scheduling 调度

Flink中的执行资源是通过任务执行槽来确定的。每个TaskManager有一个或者多个任务执行槽,每个可以运行一个并行任务的流水线。每个流水线包含多个连续的任务,像N次的MapFunction的并行实例跟一个ReduceFunction的n次并行实例。注意Flink经常同时执行多个连续的任务:对数据流程序来说都会这样,但是对于批处理程序来只是频繁发生。
下面的图说明了这个情况。一个带数[……]

Read more

Apache Flink 1.6 Documentation: Component Stack

Component Stack 组件栈

作为一个软件栈,Flink是一个分层设计的系统。不同的层基于底层创建,不断提升程序表现的抽象。
  • 运行时层接受JobGraph 形式的程序,一个JobGraph 是一个通用的并行数据流,它具有消费和生产数据流的任意任务。
  • DataStream的API和DataSet的API都通过独立的编译过程生成JobGraphs。DataSet的API用一个优化程序来确定程序的优化计划,而DataStream的API使用流构建器
  • 根据Flink中各种不同部署参数来执行JobGraph(例如:local,remote,YAEN等等)
  • [……]

Read more

Apache Flink 1.6 Documentation: Distributed Runtime Environment

分布式运行时环境

Tasks and Operator Chains 任务和操作链
Job Managers, Task Managers, Clients 作业管理器,任务管理器,客户端
Task Slots and Resources 任务执行槽和资源
State Backends 后端状态
Savepoints 保存点
Tasks and Operator Chains 任务和操作链
对分布式执行操作,Flink把操作子任务链起来放到任务中。每个任务由一个线程来执行。把操作链起来放入任务中是有助于优化的:它可以减少线程间交互[……]

Read more

Flink Dataflow Programming Model

Dataflow Programming Model

数据流编程模型

  • Levels of Abstraction :数据处理层抽象
  • Programs and Dataflows 编程和数据流
  • Parallel Dataflows 并行数据流
  • Windows 窗口
  • Time 时间
  • Stateful Operations 带状态的操作
  • Checkpoints for Fault Tolerance 容错检查点
  • Batch on Streaming 基于流的批处理

Levels of Abstraction 数据处理层抽象

Flink提供了不同的数据处理抽象层来开发流、批处理应用。[……]

Read more

golang调度机制学习

1.Golang的核心之一gorountine

go语言非常重要的一个特性就是gorountine,有了这个东东,就可以很简单的做并发处理程序,比起c++和java的方式来说可以说简单了很多很多。那么gorountine又是一个什么样的东东呢? 从使用上来看它就是一个函数,使用起来有点像thread,但是实际上又不是,thread我们一般说起是指内核中的调度单元,他也是又用户态传递一个函数给thread,再由内核来调度执行,而gorountine是完全用户态的一个东西,而它要想和thread一样被执行那么就需要设计一个用户态的调度器,来保存它结构,执行现场和调度切换不同的gorountine[……]

Read more

golang的struct和interface

struct

struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套;go中的struct类型理解为类,可以定义方法,和函数定义有些许区别;struct类型是值类型。

struct定义

type User struct {
    Name string
    Age  int32
    mess string
}
var user User
var user1 *User = &User{}
var user2 *User = new(User)

struct的方法

在go语言中,我们可以为自定义类型定义类型相关的方法[……]

Read more

Golang信号处理和如何实现进程的优雅退出

Linux系统中的信号类型

各操作系统的信号定义或许有些不同。下面列出了POSIX中定义的信号。
在linux中使用34-64信号用作实时系统中。
命令 man 7 signal 提供了官方的信号介绍。也可以是用kill -l来快速查看
列表中,编号为1 ~ 31的信号为传统UNIX支持的信号,是不可靠信号(非实时的),编号为32 ~ 63的信号是后来扩充的,称做可靠信号(实时信号)。不可靠信号和可靠信号的区别在于前者不支持排队,可能会造成信号丢失,而后者不会。
Linux支持的标准信号有以下一些,一个信号有多个值的是因为不同架构使用的值不一样,比如x86, ia64,ppc, s3[……]

Read more

Goroutine+Channel+WaitGroup使用

介绍

goroutine

golang语言中最有特色之一的东东就是这个goroutine了,很多时候问起别人为什么golang的好用,golang的网络性能可以那么好,一般都会多多少少想到goroutine,提起goroutine。在linux中内核的调度最小单位是就是thread,同一个进程中的多个thread线程就对应内核中的多个thread实体。所以thread是内核级的,而gorountine是一个不同于thread的概念,gorountine是一个用户态,另外一种说法也就携程,是用户态的一种调度粒度,每个gorountine也有自己的栈空间,而且是在用户内存中的。golang[……]

Read more

golang网络编程笔记

网络编程类型

我们一般提到的网络编程类型有两种:tcp和udp,都属于网络传输层协议支持下的协议,而且在目前也是网络编程中最基础的。这其中具体说来有有个socket的概念,tcp和udp都是协议,而socket就是一个具体的实现了,所以有tcp socket和udpsocket。golang是自身就带有网络库的net的,使用非常方便。
同时我这里还会简单介绍一下另外一种协议,用户态的,基于udp的,但是具有tcp的连接回话管理,重传确认等机制-kcp。
网络编程主要的目的是进行通信,所以就会涉及到至少2个端的通信,一般我们把这两个端分为服务端和客户端,服务端主要是起一个服务,实际上也[……]

Read more

golang的grpc学习笔记2


上一篇文章简单体验了一下grpc的golang使用,从环境安装到简单demo的编写,编译和测试,感觉还不错,今天再进一步学习分析其用法和一些要注意的坑。
grpc一开始由 google 开发,是一款语言中立、平台中立、开源的远程过程调用(RPC)系统。是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。目前提供 C、Java 和 Go 语言版本。而且gRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。
从学习上来说,grpc的文档真是很全面了,http[……]

Read more