Redis的事件处理模型2:客户端命令执行过程

前言

上篇分析了Redis的事件处理模型,了解了Redis的事件处理基本过程,这篇还想继续顺着上面的思路分析一下这种情况:在客户端向服务端发起一个set指令或者get指令后,服务端接收后怎么执行这个命令,这个命令操作的简单过程是怎么样的。在分析了这个过程之后,我们就知道了Redis客户端和服务端交互的整个过程。清楚交互过程之后,我再会分析每个数据类型的结构和原理。所以今天继续分析Redis的事件处理模型。

redis客户端命令处理分析

命令字解析

还是从上一篇分析的延续下来,我们从服务端接收到客户端请求开始,从createClient分析起来。下面的代码就是createClient中创[……]

Read more

Gartner整理的未来5年流行技术词

这两周梳理了一下Gartner上新技术点,看到这篇点,感觉还挺有意思,试着简单翻译了一下,有些词我也在网上又搜索了一番,也学习学习.

Glossary of Emerging Technology Trends

Digitalization is boundless, A dozen other emerging technology trends are destined to improve trend sensing over the next 5 years

数字化是无限的,十多种新兴技术趋势注定要在未来5年内会非常流行。

4D printing (4DP)

4D prin[……]

Read more

Redis源码分析2:Redis的事件处理模型

前言

上一篇分析了一下redis的大致框架和启动过程,这篇我想分析一下redis的事件处理模型,当然也包含了网络事件的处理模型。redis除了其高效的nosql存储非常有名以外,另外一个比较被称赞的就是其服务效率。像这类服务的是怎么设计的,为什么这么高效。所以我想这里来分析分析。

事件驱动框架

redis的代码中有一个ae框架,是整个redis事件框架的基础,所以这里先来看看整个东东。按照ae.c文件中的注释说A simple event-driven programming library. Originally I wrote this code for the Jim's ev[......]

Read more

Redis源码分析1:Redis启动分析

前言

近期决定把redis的源码阅读分析一下,在官网下载了最新稳定版本5.0.3。整个代码包还是比较小的,下载之后整个包才9M,解压之后看src文件夹也才3.7M,也就是说redis的源码就这么点,其它占空间的主要是几个依赖组件:hiredis(redis的C客户端), lua, jemalloc(内存池), linenoise(配置文件解析),这些代码占了大概6.3M.

看了redis的代码首先直观感觉就是:规范,非常规范。代码格式,缩紧,注释,命名都是非常规范的,可以说又是一个C代码的软件的典型。所以读起来也相对比较舒服。

计划从这几个方面开始
1. 基本的代码结构和服务启动过程[……]

Read more

Function as a Service介绍

本文是在去年梳理的关于FaaS的一个文档,主要目标是梳理FaaS的基本概念,发展势头,应用场景和一些基本的架构设计。后来在内部参考FaaS的设计思路,我们实现了一套适用于我们自己业务特点的函数服务,结合了DevOps,目前在内部使用的还算不错。目前可以用在实时排行服务,实时用户触达,实时数据清洗处理等等一些场景,以后也会把实现思路拿出来分享的。

现在的各种技术发展,必然是以服务的形式出现的,所以所有的技术以服务化的方式提供这是必然的。在内部我们建设各种系统和平台,在架构设计思路上也必然遵循这样的规范:分层设计和服务化设计。






Serverless在14年出现,并不断发展,到目[……]

Read more

自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

Flink Distributed Runtime Environment

Flink分布式运行时环境

  • 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