自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

happyJared

做好寫代碼這事

  • 博客(32)
  • 收藏
  • 关注

原创 数据库 ID 生成方案:美团 Leaf

在美团早期,有的业务直接通过 DB 自增的方式生成 ID,有的业务通过 Redis 缓存来生成 ID,也有的业务直接用 UUID 这种方式来生成 ID。以上的方式各自有各自的问题,因此美团实现了一套分布式 ID 生成服务来满足需求。具体 Leaf 设计文档见: Leaf 美团分布式 ID 生成服务美团的 Leaf 也是一个分布式 ID 生成框架。它非常全面,即支持号段模式,也...

2019-11-30 07:54:56 404

原创 数据库 ID 生成方案:百度 UidGenerator

UidGenerator 是用 Java 语言实现的基于 Snowflake 算法的唯一 ID 生成器。UidGenerator 是以组件形式工作在应用项目中, 支持自定义 workerId 位数和初始化策略, 从而适用于 Docker 等虚拟化环境下实例自动重启、漂移等场景。在实现上,UidGenerator 通过借用未来时间来解决 Sequence 天然存在的并发限制;采用 ...

2019-11-29 13:43:56 893

原创 数据库 ID 生成方案:雪花算法

上面的三种方法总的来说是基于自增思想的,而接下来就介绍比较著名的雪花算法-snowflake。我们可以换个角度来对分布式ID进行思考,只要能让负责生成分布式ID的每台机器在每毫秒内生成不一样的ID就行了。snowflake是twitter开源的分布式ID生成算法,是一种算法,所以它和上面的三种生成分布式ID机制不太一样,它不依赖数据库。核心思想是:分布式ID固定是一个long...

2019-11-28 10:37:36 3210

原创 数据库 ID 生成方案:号段模式

还可以使用号段的方式来获取自增 ID,号段可以理解成批量获取。比如从数据库获取 ID 时,就可以批量获取多个 ID 并缓存在本地,提升效率。比如每次从数据库获取 ID 时,就获取一个号段,如 (1,1000],这个范围表示1000个 ID,业务应用在请求提供 ID 时,只需要在本地从1开始自增并返回,而不需要每次都取请求数据库,一直到本地自增到1000时,也就是当前号段已经用完...

2019-11-27 11:48:30 2335 2

原创 数据库 ID 生成方案:数据库多主模式

将两个数据库组成主从模式的集群,正常情况下,是可以解决数据库的可靠性问题,但如果主库挂掉后,数据没有及时同步到从库,这个时候就会出现 ID 重复的问题。可以使用双主模式集群,也就是两个实例都能单独的生产自增ID,这样能够提高效率,不过就需要单独给每个数据库实例配置不同的起始值和自增步长。第一台 MySQL 实例配置:set @@auto_increment_offset = ...

2019-11-26 07:34:50 319

原创 数据库 ID 生成方案:数据库自增

创建一个数据库实例,在这个实例中新建一个单独的表:表结构如下:CREATE DATABASE `Test`;CREATE TABLE Test.test01 ( id bigint(20) unsigned NOT NULL auto_increment, phone char(11) NOT NULL default '', PRIMARY KE...

2019-11-25 22:44:31 1538

原创 Maven 生命周期

Maven 有三套且相互独立的生命周期,这三套生命周期分别是:① Clean Lifecycle 在进行真正的构建之前进行一些清理工作。Clean 生命周期一共包含了三个阶段:pre-clean 执行一些需要在 clean 之前完成的工作clean 移除所有上一次构建生成的文件post-clean 执行一些需要在 clean 之后立刻完成的工作② Default Li...

2019-11-24 10:23:24 157

原创 Maven 依赖

① Maven 解析依赖信息时,首先会到本地仓库中查找依赖的 Jar 包对于本地仓库中没有的依赖,就会去中央仓库查找,通过 Maven 坐标来获取 jar 包,获取到后会先下载到本地仓库对于中央仓库中不存在的依赖包,就会显示编译失败② 如果依赖的是自己或者团队开发的 Maven 工程,需要先使用 install 命令把被依赖的 maven 工程的 jar 包安装到本地仓库...

2019-11-23 14:53:00 155

原创 Maven 仓库和坐标

① pom.xml:Project Object Model 项目对象模型。它是maven的核心配置文件,所有的构建的配置都在这里设置。② 坐标:使用下面的三个向量在仓库中唯一的定位一个maven工程image③ maven工程的坐标与仓库中路径的关系:imagemaven坐标和仓库对应的映射关系:[groupId][artifactId][ver...

2019-11-22 12:38:46 574

原创 Maven 安装

① 当前系统需要先配置 JAVA_HOME 的环境变量;② 到官网下载 Maven,解压 Maven 即可,建议放到非中文无空格的路径下;③ 配置 Maven 的相关环境变量;在环境变量增加 M2_HOME,路径是 Maven 解压后的根目录在环境变量里的 Path 中增加 maven/bin 的目录④ 验证:mvn -v 查看 Maven 版本,看到版本信息,这时已...

2019-11-21 07:31:11 94

原创 Maven 优势

① 一个项目就是一个工程如果项目非常庞大,就不适合使用 package 来划分模块,最好是每个模块对应一个工程,利于分工协作,而借助于 maven 就可以将项目拆分成多个工程② 项目中使用 jar 包,需要重复复制和粘贴同样的 Jar 包可能会重复的出现在不同的项目工程中,需要做重复的复制粘贴的工作。借助于 maven,可以将 jar 包保存在本地仓库中,不管在哪个项目,只要...

2019-11-20 07:35:44 257

原创 Maven 简述

Maven 是服务于 Java 平台的自动化构建工具,从工具的发展历程来看,经历过 Ant 到 Maven 再到 Gradle构建:一般的定义是把动态的 Web 工程编译,再把编译的工程部署到服务器上编译:java 源文件[.java] -> 编译 -> Clazz字节码文件[.class]部署:最终在 Sevlet 容器中部署的不是动态 web 工程,而是编译后...

2019-11-19 22:52:51 261

原创 Docker 删除镜像

通过标签删除镜像通过如下两个都可以删除镜像:docker rmi [image]或者:docker image rm [image]支持的子命令如下:-f , -force:强制删除镜像,即便有容器引用该镜像;-no-prune:不要删除未带标签的父镜像;docker images例如,删除 allen_mysql:5.7 镜像,命令如下:...

2019-11-18 23:53:47 169

原创 Docker 镜像历史

我们知道,一个镜像是由多个层(layer)组成的,那么,要如何查看各个层的具体内容呢?通过 docker history 命令,可以列出各个层(layer)的创建信息,如查看 redis 的各层信息:docker history redisdocker history redis如果想要看具体信息,可以通过添加 --no-trunc 选项,如下面命令:doc...

2019-11-18 08:41:56 1299

原创 Docker 搜索镜像

search 命令通过 search 命令进行搜索:docker search [option] keyword比如,搜索仓库中 mysql 相关的镜像,可以输入如下命令:docker search mysqldocker search mysqlsearch 子命令命令行输入 docker search --help, 输出如下:dock...

2019-11-17 19:47:24 3089

原创 Docker 镜像详情

借助 docker inspect 命令,我们可以获取镜像的详细信息,包括镜像 Id、创建时间、State、HostConfig、Config 等,如查看 redis :docker inspect redisDocker inspect 查看镜像详细信息从上图可以看到,docker inspect 返回的是 JSON 格式的信息,如果想要获取其中指定一项的内容...

2019-11-17 10:16:06 306

原创 Docker 添加标签

可以使用 docker tag 命令,为本地镜像添加新的标签,如下图所示:Docker tag 添加标签这里是为 mongo:4.1.6 镜像,添加新的镜像标签 mymongo,可以看到,本地多了一个 mymongo:latest 的镜像。事实上, mongo:4.1.6 和 mymongo:latest 的镜像 ID 是一模一样的,说明它们是同一个镜像,只是别名...

2019-11-16 08:56:21 3185

原创 Docker 查看镜像

首先,可使用如下两个命令,列出当前已有的镜像:docker images或:docker image ls如下图所示:Docker 查看镜像信息REPOSITORY: 来自于哪个仓库;TAG: 镜像的标签信息,比如 5.7、latest 表示不同的版本信息;IMAGE ID: 镜像的 ID, 如果看到两个 ID 完全相同,那么实际上,它们指向...

2019-11-15 08:06:33 1057

原创 Docker 下载镜像

要运行容器,就必须保证本地存在对应的镜像。所以,第一步是需要下载镜像。当尝试下载镜像时,Docker 会尝试先从默认的镜像仓库(默认使用 Docker Hub 公共仓库)去下载,此外,用户也可以自定义配置想要下载的镜像仓库。镜像是运行容器的前提,可以使用 docker pull [IMAGE_NAME]:[TAG] 命令来下载镜像,其中 IMAGE_NAME 表示的是镜像名称,而...

2019-11-14 22:51:27 611

原创 Docker Build Ship and Run

在 Docker 官网,挂着如下的字样:Docker - Build, Ship, and Run Any App, Anywhere。那么 Build, Ship, and Run 到底是做了什么呢?Build Ship and RunBuild(构建镜像) : 镜像就像是集装箱,包含文件以及运行环境等等资源;Ship(运输镜像) :在宿主机和仓库间进行运输,...

2019-11-13 10:04:44 1619

原创 Docker 命令

基本命令docker version # 查看docker版本docker images # 查看所有已下载镜像,等价于:docker image ls 命令docker container ls # 查看所有容器docker ps # 查看正在运行的容器docker image prune # 清理临时的、没有被使用的镜像文件。-a, --all: 删除所有没有用的...

2019-11-12 07:52:05 84

原创 Docker 仓库

仓库(Repository) : 集中存放镜像文件的地方镜像构建完成之后,就可以在当前宿主机上运行,但如果需要在其它服务器上使用这个镜像,就需要一个集中存储、分发镜像的服务,Docker Registry 就是这样的服务。一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像 (Image)。...

2019-11-11 08:31:03 176

原创 Docker 容器

容器(Container) : 镜像运行时的实体镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体,容器可以被创建、启动、停止、删除、暂停等 。容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于独立的命名空间。上一篇文章提到镜像使用的是分层存储,而容器也是如此。容器存储层的...

2019-11-10 07:15:31 92

原创 Docker 镜像

Docker 包括三个基本概念:镜像(Image)容器(Container)仓库(Repository)理解了这三个概念,可以说就理解了 Docker 的整个生命周期。Docker 三个基本概念镜像(Image) : 一个特殊的文件系统众所周知,操作系统分为内核和用户空间。对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支...

2019-11-09 08:14:01 153

原创 Docker 容器与虚拟机

容器是一个应用层抽象,用于将代码和依赖资源打包在一起,多个容器可以在同一台机器上运行,共享操作系统的内核,但各自作为独立的进程在用户空间中运行 。与虚拟机相比, 容器占用的空间较少(容器镜像大小通常只有几十M),瞬间就能完成启动 。虚拟机 (VM) 是一个物理硬件层抽象,用于将一台服务器变成多台服务器。 管理程序允许多个 VM 在一台机器上运行,每个 VM 都包含一整套操作系统...

2019-11-08 07:25:23 143

原创 Docker 优势

一致的运行环境:Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境的一致性;快速的启动时间:可以做到秒级、甚至毫秒级的启动时间,大大的节约了开发、测试、部署的时间;隔离性:避免同一服务器上的其它服务资源会影响当前服务;弹性伸缩,快速扩展:可以根据服务运行压力方便的进行扩容;迁移方便:能够轻易的将当前平台上运行的应用,迁移到另一个平台上,而不用担心运行环...

2019-11-07 07:18:21 106

原创 Docker 特点

Docker 的设计思想是:集装箱,标准化和隔离。而 Docker 的设计特点包括如下:轻量在一台机器上运行的多个 Docker 容器可以共享这台机器的操作系统内核;能快读的启动,而只需占用很少的计算和内存资源。镜像是通过文件系统层进行构造的,并共享一些公共文件,这样就能尽量降低磁盘用量,并能更快地下载镜像;标准Docker 容器基于开放式标准,能够在所有主流 Li...

2019-11-06 07:49:03 566

原创 Docker 简述

一句话来概括容器:容器就是将软件打包成标准化单元,以用于开发、交付和部署。容器镜像就好比是轻量级的、可执行的独立软件包 ,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置。容器化软件适用于基于 Linux 和 Windows 平台的应用,在任何环境中都能始终如一地运行。容器赋予了软件独立性,使其不会因为外在环境的差异(例如,开发和预演环境的差异)而有所影响...

2019-11-05 07:10:53 115

原创 ZooKeeper 测试

进入 ZooKeeper 安装文件夹的 bin 目录,执行以下命令连接 ZooKeeper 服务,连接之前首选要确定 ZooKeeper 服务已经成功启动:./zkCli.sh -server 127.0.0.1:2181查看命令:help创建节点:create通过 create 命令在根目录创建 node1 节点,与它关联的字符串是 "node1"[zk: 127...

2019-11-04 07:20:39 279

原创 ZooKeeper 数据模型

ZNode(数据节点)是 ZooKeeper 中数据的最小单元,每个 ZNode 上都可以保存数据,同时还可以有若干子节点(这就像树结构一样,如下图所示)。可以看出,节点路径标识方式和 UNIX 文件系统路径非常相似,都是一系列使用斜杠 "/" 进行分割的路径,我们可以向这个节点中写人数据,也可以在节点下面创建子节点。ZooKeeper 数据模型提到 ZooKeep...

2019-11-03 09:27:23 177

原创 ZooKeeper ZAB 协议模式

ZAB 协议包括两种基本的模式: 崩溃恢复和消息广播。当服务框架在启动中,或是当 Leader 服务器出现网络中断、崩溃退出或重启等异常情况时,ZAB 协议就会进人恢复模式,然后选举产生新的 Leader 服务器。当选举产生新的 Leader 服务器,同时集群中已经有过半的机器与该 Leader 服务器完成了状态同步,ZAB 协议就会退出恢复模式。其中,所谓的状态同步,是指数据...

2019-11-02 07:08:12 640

原创 ZooKeeper ZAB 协议 && Paxos 算法

Paxos 算法应该说是 ZooKeeper 的灵魂,但是 ZooKeeper 并没有完全采用 Paxos 算法,而使用 ZAB 协议是作为其保证数据一致性的核心算法。另外,在 ZooKeeper 的官方文档中也指出,ZAB 协议并不像 Paxos 算法那样,是一种通用的分布式一致性算法,它是一种特别为 Zookeeper 设计的可恢复的原子消息广播算法。在 ZooKeeper...

2019-11-01 07:20:28 202

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除