第2章:Docker基础

1. docker安装

书本P424有各个linux发行版、MAC OS、WIN下的docker安装教程。这里以REHL 7为例,说明下安装方式。

#1. 更新系统

sudo yum update

#1. 添加yum仓库

tee /etc/yum.repos.d/docker.repo << 'EOF'

[dockerrepo]

name=Docker Repository

baseurl=https://yum.dockerproject.org/repo/main/centos/7/

enabled=1

gpgcheck=1

gpgkey=https://yu......

第1章:从容器到容器云

本系列是书《Docker容器与容器云》的读书笔记。

1. 云计算平台

掌握云计算的三层架构即可,IaaS、PaaS、SaaS

2. 容器,新的革命

讲了下docker发展史,了解下就好。

重点提了下容器技术的好处:

2.1 持续部署和与测试

容器消除了线上线下的环境差异,保证了应用生命周期的环境一致性和标准化。开发人员使用镜像实现标准开发环境的构件,开发完成后通过封装着完整环境和应用的镜像进行迁移,由此,测试和运维人员可以直接部署软件镜像来进行测试和发布,大大简化了持续集成、测试和发布的过程。

2.2 跨云平台支持

支持适配各类IaaS平台。有着良好的生态。

大规模数据存储查询解决方案总结

1. 介绍

这个信息时代,每天都有大量数据产生。这对我们的技术也提出了新的挑战。今天简单看了点东西做了点总结。

2. 发展史

单纯从时间线来看,数据存储经历了 RDBMS->NoSQL->NewSQL

下面我们就以这三个类别来讨论。

PS: 我将不支持ACID特性的的都归纳到NoSQL哦,比如说ES。

3. RDBMS

RDBMS已经存在几十年了,非常成熟稳定。所以无论选择啥存储方案,一般都仍然会使用RDBMS做主存储。而且绝大部分场景,可以通过以下方式来提升RDBMS的查询效率:

建索引:合理的建和使用索引,查询亿级别的数据,控制在1秒内不成问题

分库分表:可以......

java8的新特性以及用法简介

1. 介绍

本文简单介绍下java8里面有哪些新的特性,以及相关的用法。

JAVA8是意义深远的一个新版本。随着大数据的兴起,函数式编程在处理大数据上的优势开始体现。JAVA8也紧跟时代,引入了函数式语言的特性,值得关注。下面看看其有哪些新的内容。

2 接口的默认方法

Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,这个特征又叫做扩展方法。JAVA可以实现多个接口,从而来对原本的类进行方法扩展。JAVA只能继承1个类,所以以前的接口没法提供这种灵活的扩展方法。现在要简单的扩展方法,也不需要使用Spring的代码织入了,直接用扩展方法即可。不过横......

java5、java6、java7、java8、java9新特性

1. 介绍

JAVA作为使用的主力语言,掌握下其历史发展也是有必要的。看看从JAVA5开始到现在的JAVA9有哪些变化。借此机会,也可以看看哪些特性我们是已经用到的,哪些是还没有用到的。

我们在IDEA里面也可以看到language level里面的信息,这里也大致写了下各个版本JDK的新特性。

简单概括下就是:

JAVA1.3:普通的原始的JAVA,基本语法相信大家都见过了

JAVA1.4:assert关键字

JAVA5:枚......

云计算中的IaaS、PaaS和SaaS

1. 云服务

上面提到的都可以统一称为云服务。其简单定义为:

IaaS: 基础设施即服务,例如提供基础的云服务器(包括完整的CPU、内存网络等基本硬件)。灵活性最好。

PasS: 平台即服务,例如提供了整合好各类中间件的云平台。例如阿里云,当然阿里云也同样是IaaS。灵活性相比IaaS差点,自己修改的约束也会多些。

SaaS:软件即服务。这个普通用户接触最多了,比如使用的百度网盘、网易云音乐都可以算。这个就没修改的余地了,已经发布的产品

三种云服务Iaas是离普通用户最远的,而SaaS是离普通用户最近的,PaaS在中间。

2. 三种服务差别

主要差别可以参考下图:

再谈分布式场景下的一致性

1. 介绍

之前也写过一些文章总结分布式场景下的一致性处理:

最终一致性的保证策略

分布式事务的典型处理方式:2PC、TCC、异步确保和最大努力型

事务与分布式事务原理与实现2(笔记)

从分布式数据复制一致性问题到paxos算法的理解(第一部分)

从分布式数据复制一致性问题到paxos算法的理解(第二部分)

今天群里小伙伴,拿着paxos的论文来文一致性问题,正好我也借机复习了下。本文将以比较简单的语言总结下分布式场景下如何处理一致性。本文不介绍具体的实现细节,侧重在实用的解决方案上。

2. 分布式一致性的三种需求场景

分布式对一致性有需求的场景可以归纳为两种:

数据副本的一......

Spark cluster mode和client mode原理浅析

1. 介绍

Spark运行JOB主要有两种模式:

cluster mode: Spark driver在 application的master process中运行。如果和YARN集成,则application master process由YARN管理,在YARN中运行。

client mode:Spark driver在clinet process中运行。如果集成YARN,application master只负责从YARN请求资源。

由此可见,两种模式分别代表了瘦客户端(cluster mode)或者是瘦服务器(client mode)两种模式。

本文主要介绍下cluster......

使用ignite成倍提升Mapreduce Job性能

1. 介绍

在之前我写的Ignite In-Memory Hadoop Accelerator安装使用这篇文章中我已经介绍了如何安装Ignite In-Memory Hadoop Accelerator。

为了达到添加一个内存缓存层来加速MR JOB的目的,我们使用的是Ignite In-Memory Hadoop Accelerator(下文我就简称IHA了)。这里注意区别下ignite的data fabric组件。

2. 注意事项

2.1 集成yarn的问题

使用IHA也就意味着由ignite来管理MR任务的调度执行了。因为ignite自己实现了native的ignite MR框......

Ignite In-Memory Hadoop Accelerator安装使用

1.介绍

ignite在ignite简介一文中已经做了介绍。其功能非常多,我们主要把其功能分为两块:

In-Memory Data Fabric

In-Memory Hadoop Accelerator

从官方文档上也可以看到,官方也主要把ignite分成这两个较为独立的模块:

Ignite In-Memory Hadoop Accelerator(请允许我以后都简称IHA)主要是通过提供一个内存存储系统和......

alluxio vs ignite

前段时间一直在研究alluxio,不过alluxio似乎不太适合我们的使用场景。具体可以参考文章:采用alluxio提升MR job和Spark job性能的注意点来了解alluxio的应用场景。

这里并不是说alluxio不好。alluxio在符合其使用的场景下也有非常显著的性能提升。在国内也有百度、去哪儿、阿里这样的公司来使用。不过作为内存缓存层加速本地的spark或者mapreduce job方面可能并不是做的很完善。

ignite的开发者和alluxio的开发者也有过交集。和我标题一样的问题ignite的作者也同样问过。具体可以参考:

敢说 Apache Ignite 比 Ta......

ignite简介

1. 前言

前段时间一直在研究alluxio。不过alluxio似乎不太适合我们的使用场景。我们的需求就是想要有一个能无缝集成Hadoop和Spark的内存缓存层来加速每个本地运行的job。关于alluxio的研究可以查看我alluxio分类下的文章。关于为什么alluxio不适合内存缓存加速job的场景可以参考我的文章:采用alluxio提升MR job和Spark job性能的注意点

本文主要介绍下ignite。主要参考文档:

Apache Ignite(V1.7.0)中文开发手册

ignite官网

ignite-github

PS: 强烈推荐看ignite-github上面......

Memory Storage Support in HDFS

1. 前言

利用内存已是大势所趋。Spark的基于内存的计算就是一个很好的利用内存的例子。hadoop现在的架构也在做调整,学习spark的思路。架构设计上也越来越多的利用内存。例如在hadoop 2.6以后,HDFS就开始支持将数据存到内存了。本文对该特性做一些介绍。

主要基于hadoop 2.7.2的文档:Memory Storage Support in HDFS

2. 介绍

HDFS也支持往datanode管理的堆外内存写数据了。datanode会异步地将这些数据flush到磁盘上。这样的写入过程称作“Lazy Persist write"。如果一个node在异步持久......

关于树这种数据结构

1. 介绍

今天技术群突然讨论起来树这种数据结构了。我也有些知识点忘了,现在用比较精简的话简单总结下。

2. 二查查找树(BST)

特点:

会不平衡

节点直接的大小关系

3. 自平衡二查查找树(AVL)

AVL可以理解为BST的变种, 可见是在BST基础上加入了自平衡功能

特点:

高度平衡: 这也导致了调整树的开销比较大,不适合频繁地插入删除节点

......

采用alluxio提升MR job和Spark job性能的注意点

1. 介绍

相信很多使用alluxio的同学,都是冲着其memory speed的加速效果而来。我也一样,认为只要用上了alluxio,整合了spark和hadoop就可以轻松把以前的JOB提升数倍的性能。然而,事实并不是这么顺利的。

今天主要就来总结下alluxio在提升MR job和Spark job性能上存在的问题和挑战。

2. 实验说明

2.1 实验环境

后面在说明问题的时候会贴一些实验结果。为了排除网络IO的影响,我这边的实验将hadoop、spark还有alluxio都部署在一台机器上。这台机器内存120G,40核。

2.2 实验方法

主要是做对比实验,一个使用all......

hadoop3.0新特性

1. 前言

PS: 新特性主要翻译自官网:Apache Hadoop 3.0.0-alpha1——Overview

2. 概览

Apache Hadoop 3.0.0-alpha1 在hadoop-2.x的基础上集成了大量的新特性。不过这个alpha版本不能保证API的稳定性,需要注意。

3. 关于JAVA版本

必须使用java8及以上版本才能使用hadoop3.0

4. 支持erasure encoding纠错码

HDFS支持纠编码erasure encoding,简称EC技术。EC技术可以防止数据丢失,又可以解决HDFS存储空间翻倍的问题。劣势是:

一旦数据需要恢复,会......

关于设计前瞻性

公司应用kafka也有一段时间,或多或少都有些问题暴露出来。例如,一开始设计分区数的时候过于保守,导致后续client消费成瓶颈时没法通过增加一个消费者组的线程来增加消费速度了。

这个经验教会我一个道理:

使用一个新的平台也好,中间件也好。对于其性能和瓶颈应该有个前瞻性的规划,这个很重要。例如kafka在设计分区数的时候,应该仔细考虑当前消费者线程的消费能力。考虑未来数据规模增长后,消费者必然需要消费更多的数据从而保证不造成数据堆积。即消费者和生产者之间要保持平衡,不能让消费的比生产的慢,从而影响应用。这个前瞻性的规划应该是较为详细的,可控的。

数据规模的增长,消费者线程数的增加,都是应......

maven setting设置说明

转载自:Maven配置setting.xml详细说明

这里以maven 3.0.4版本为例

<?xml version="1.0" encoding="UTF-8"?>

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://m......

maven中的pom.xml标签说明

本文转自 史上最全的maven pom.xml文件教程详解。 为了方便自己查阅就转载了下,感谢作者的无私奉献~

<project xmlns="http://maven.apache.org/POM/4.0.0"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd ">

......

maven常用插件总结

1. 介绍

无论是自己写代码,还是看一些开源的源码,都能看到大量maven插件的应用。本文这里对常用的maven插件做一些简单总结。该文章内容会不断完善。

从maven插件官方文档来看,maven插件一般概括起来可以分为:

类别

说明

Core plugins

Plugins corresponding to default core phases (ie. clean, compile). They may have multiple goals as well.

Packaging types/tools

These plugins relate to packagin......

JAVA中的注解

1. 介绍

Java注解是附加在代码中的一些元信息,用于编译和运行时进行解析和使用,起到说明、配置的功能。注解不会影响代码的实际逻辑,仅仅起到辅助性的作用。注解作为一种重要的技术已经在主流的库中广泛使用。XML和注解都可以用来描述元数据。假如你想为应用设置很多的常量或参数,这种情况下,XML是一个很好的选择,因为它不会同特定的代码相连。如果你想把某个方法声明为服务,那么使用Annotation会更好一些,因为这种情况下需要注解和方法紧密耦合起来,开发人员也必须认识到这点。可见,XML和注解各有自己的用武之地。

一般来说注解的主要作用就是:

描述元数据

完成重复性工作: 注解的这个功能也......

JAVA中的动态代理

1. 动态代理介绍

动态代理是一项重要的技术。在以下场景中被广泛应用:

数据库连接

事务管理

单元测试中动态mock对象

AOP编程中动态织入横切逻辑

等等

常见的动态代理实现方式主要是使用JDK和cglib

1.1 jdk

JDK动态代理主要涉及到java.lang.reflect包中的两个类:

Proxy: Proxy利用InvocationHandler动态创建一个符合某一接口的实例,生成目标类的代理对象。

InvocationHandler: InvocationHandler是一个接口,通过实现该接口定义横切逻辑,并通过反射机制调用目标类的代码,动态将横切逻辑和业务......

Linkedin ESPRESSO数据库

1. 介绍

Espresso的详细说明见博文:Introducing Espresso - LinkedIn's hot new distributed document store

本文对博文内容做些简单介绍总结。

2. 动机

Espresso是一个分布式的、容错的NoSQL数据库。Linkedin有Oracle(RDBMS)和Voldemort(自己研发的Key value存储)。ESORESSO是在RDBMS和NOSQL之间的一个产品。可以借助下图来理解:

Linkedin的Kafka Ecosystem

1. 介绍

本文主要是看了Kafka Ecosystem at LinkedIn这篇博文之后的一些总结。

2. kafka在linked现状

自2010开发使用以来,现在已经每天在1400个broker上处理1.4万亿条消息。kafka的持久性、低延迟等特性使得其在linkedin促成了一些新的使用案例。主要包括如下:

2.1 Replacing MySQL replication——Espresso

Espresso的详细说明见博文:Introducing Espresso - LinkedIn's hot new distributed document store

选择合适的kafka分区数

1. 介绍

如何确定kafka的分区数相信是大家在使用kafka过程中比较关心的一个问题。早些时候,阿里的rocket mq在github上有和kafka比较(这里和老版本的kafka比较,估计是0.8的,现在是0.10.x)的说明。不过现在已经换掉了,而且也看到rocket mq支持集成kafka。可见kafka还是确实越来越受到市场认可。那篇老文章可以看网上这篇博文:RocketMQ与Kafka对比(18项差异)。

文中提到了“Kafka单机超过64个队列/分区,Load会发生明显的飙高现象,队列越多,load越高,发送消息响应时间变长”这个问题。针对这个问题,其实kafka的开发者已......

kafka消息堆积处理

1. 介绍

今天双11,公司kafka上部分消费者对应的分区上堵了不少数据。堵数据的问题主要是由于一开设计的时候,没有考虑足够周全。那时候由于担心分配太多分区导致影响延迟,从而在分配分区上比较“小气”。 针对分区数对kafka的影响可以参考我的另外一篇文章:选择合适的kafka分区数。

本文主要针对kafka消息堆积时,提供一些解决方法和思路。

2. 延迟和消息堆积

增加分区数,比较担心的是较多分区数导致延迟增加。针对这个问题,其实我们主要应该搞明白我们性能的瓶颈到底在什么地方。绝大部分时候,以及绝大部分应用,性能瓶颈都是在生产者和消费者上。由于分区数增多导致分区复制延迟带来的性能影响......

分布式跟踪系统dapper

1. 介绍

简单研究过全链路的同学想必一定看过google dapper的这篇论文。我这里直接看了中文翻译的,并且对其内容进行了一些总结。具体地址见:Dapper分布式跟踪系统-翻译

2. 为什么使用dapper

文章首先举了一些例子说明了跟踪系统的必要性。尤其当一个用户操作设计大量的服务的时候,跟踪系统可以方便我们定位到底是在哪个服务的调用上产生了问题。

3. 跟踪系统在设计时需要考虑的问题

低消耗: 由于是7*24的监控,所以开销要小,不影响在线服务

应用级透明:应用程序不需要关注如何使跟踪系统生效。可以在线程调用、控制流、RPC库中埋点来做到。

扩展性: 支持更多的服务和更大......

HTTP2的优点

1. 介绍

知乎上HTTP/2.0 相比1.0有哪些重大改进?中LeoZhang的回答不错可以看看。本文简单总结下。

2. 优点

主要优点肯定就是性能提升大了。但是为什么性能提升大,其实主要还是由以下方面的改进带来的。

2.1 多路复用

多路复用 (Multiplexing):多路复用允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息。也就是说一个TCP连接可以一次发送和接受多个请求拉。这样实际上就避免了突发性和短时性的HTTP连接性能差的问题了(因为TCP协议里面有慢启动,开始都很慢的).

kafka脚本工具

1. 介绍

kafka本身提供了很多方便使用的脚本工具。

本文主要介绍一下这些常用工具的介绍。一些内容之间转自博文Kafka设计解析(三)- Kafka High Availability (下),请悉知。

2. topic tool

 $KAFKA_HOME/bin/kafka-topics.sh,该工具可用于创建、删除、修改、查看某个Topic,也可用于列出所有Topic。另外,该工具还可修改以下配置。忘记用法的话,可以直接运行该命令,不带参数,可以直接给出帮助提示。......

kafka高可用原理

1. 介绍

以前分享过一篇文章kafka原理以及设计实现思想,但是很多东西讲的还是不够深入。今天这篇文章主要分析下kafka的高可用原理。

文章主要内容转自Kafka设计解析(二)- Kafka High Availability (上),我只选择了一些自己尚未掌握的或者自己认为比较重要的内容作总结。

关于replication、ISR、分区复制、leader、controller等基本概念在以前的文章都已经说过了。这里就直接就针对某些概念进行更加细致的学习。

2. replication

2.1 replica复制算法

将所有Broker(假设共n个Broker)和待分配的Pa......

--> --> --> -->