自定义博客皮肤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

做好寫代碼這事

原创 API 网关的设计:异步化请求

对于内部系统使用的网关层,如果对于吞吐量的要求并不高,一般同步请求调用即可。 对于统一的网关层,如何用少量的机器接入更多的服务,这就需要用异步来实现,用来提高更多的吞吐量。对于异步化,一般有以下两种策略: Tomcat/Jetty + NIO + Servlet3 这种策略使用的比较普遍,京东...

2019-12-09 09:00:28

阅读数 9

评论数 0

原创 为什么要统一 API 网关

统一的 API 网关不仅有 API 网关的所有特点,还有以下几个好处: 统一组件升级 在公司内部,如果有某个技术组件需要升级,通常是需要和每个业务线沟通,有可能是几个月都搞不定。举个例子,如果对于入口的鉴权有重大的安全隐患需要升级,沟通效率这么低肯定是不行,而有了统一的网关,修复问题也是非常快...

2019-12-08 10:57:15

阅读数 4

评论数 0

原创 API 网关

API 网关可以看做是系统与外界联通的入口,我们可以在网关处理一些非业务逻辑的逻辑,比如权限验证,监控,缓存,请求路由等等。 那为什么需要 API 网关呢?它有以下几个好点: RPC 协议转成 HTTP 在内部开发中,通常都是以 RPC 协议去做开发,然后暴露给内部服务,当外部服务需要使用这个...

2019-12-07 14:33:31

阅读数 5

评论数 0

原创 布隆过滤器之 Redis

Redis v4.0 之后有了 Module(模块/插件) 功能,Redis Modules 让 Redis 可以使用外部模块扩展其功能,布隆过滤器就是其中的 Module,详情可以查看 Redis 官方对 Redis Modules 的介绍 :https://redis.io/modules。 ...

2019-12-06 08:54:45

阅读数 7

评论数 0

原创 布隆过滤器之 Guava 实现

首先,在项目中引入 Guava 的依赖: <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</a...

2019-12-05 07:46:24

阅读数 5

评论数 0

原创 布隆过滤器原理

当一个元素加入布隆过滤器中的时候,会进行如下操作: 使用布隆过滤器中的哈希函数对元素值进行计算,得到哈希值(有几个哈希函数得到几个哈希值); 根据得到的哈希值,在位数组中把对应下标的值置为 1。 当我们需要判断一个元素是否存在于布隆过滤器的时候,会进行如下操作: 对给定元素再次进行相同的哈希...

2019-12-03 07:38:42

阅读数 2

评论数 0

原创 布隆过滤器

首先,先来了解布隆过滤器的概念。 布隆过滤器(Bloom Filter)是一个叫做 Bloom 的老哥于1970年提出的。可以把它看作由二进制向量(或者说位数组)和一系列随机映射函数(哈希函数)两部分组成的数据结构。相比于我们平时常用的的 List、Map 、Set 等数据结构,它占用空间更少并且...

2019-12-02 07:35:53

阅读数 4

评论数 0

原创 数据库 ID 生成方案:Redis

使用 Redis 来生成分布式 ID,其实和利用 Mysql 自增 ID 类似,可以利用 Redis 中的 incr 命令来实现原子性的自增与返回,比如: 127.0.0.1:6379> set id 1 // 初始化自增 ID 为1 OK 127.0.0.1:6379> incr...

2019-12-01 08:58:28

阅读数 10

评论数 0

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

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

2019-11-30 07:54:56

阅读数 11

评论数 0

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

UidGenerator 是用 Java 语言实现的基于 Snowflake 算法的唯一 ID 生成器。 UidGenerator 是以组件形式工作在应用项目中, 支持自定义 workerId 位数和初始化策略, 从而适用于 Docker 等虚拟化环境下实例自动重启、漂移等场景。在实现上,UidG...

2019-11-29 13:43:56

阅读数 22

评论数 0

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

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

2019-11-28 10:37:36

阅读数 28

评论数 0

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

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

2019-11-27 11:48:30

阅读数 19

评论数 0

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

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

2019-11-26 07:34:50

阅读数 11

评论数 0

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

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

2019-11-25 22:44:31

阅读数 8

评论数 0

原创 Maven 生命周期

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

2019-11-24 10:23:24

阅读数 7

评论数 0

原创 Maven 依赖

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

2019-11-23 14:53:00

阅读数 5

评论数 0

原创 Maven 仓库和坐标

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

2019-11-22 12:38:46

阅读数 10

评论数 0

原创 Maven 安装

① 当前系统需要先配置 JAVA_HOME 的环境变量; ② 到官网下载 Maven,解压 Maven 即可,建议放到非中文无空格的路径下; ③ 配置 Maven 的相关环境变量; 在环境变量增加 M2_HOME,路径是 Maven 解压后的根目录 在环境变量里的 Path 中增加 maven/...

2019-11-21 07:31:11

阅读数 6

评论数 0

原创 Maven 优势

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

2019-11-20 07:35:44

阅读数 4

评论数 0

原创 Maven 简述

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

2019-11-19 22:52:51

阅读数 6

评论数 0

原创 Docker 删除镜像

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

2019-11-18 23:53:47

阅读数 6

评论数 0

原创 Docker 镜像历史

我们知道,一个镜像是由多个层(layer)组成的,那么,要如何查看各个层的具体内容呢? 通过 docker history 命令,可以列出各个层(layer)的创建信息,如查看 redis 的各层信息: docker history redis docker history redis...

2019-11-18 08:41:56

阅读数 5

评论数 0

原创 Docker 搜索镜像

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

2019-11-17 19:47:24

阅读数 4

评论数 0

原创 Docker 镜像详情

借助 docker inspect 命令,我们可以获取镜像的详细信息,包括镜像 Id、创建时间、State、HostConfig、Config 等,如查看 redis : docker inspect redis Docker inspect 查看镜像详细信息 从上图可以看到,doc...

2019-11-17 10:16:06

阅读数 2

评论数 0

原创 Docker 添加标签

可以使用 docker tag 命令,为本地镜像添加新的标签,如下图所示: Docker tag 添加标签 这里是为 mongo:4.1.6 镜像,添加新的镜像标签 mymongo,可以看到,本地多了一个 mymongo:latest 的镜像。 事实上, mongo:4.1.6 和 m...

2019-11-16 08:56:21

阅读数 17

评论数 0

原创 Docker 查看镜像

首先,可使用如下两个命令,列出当前已有的镜像: docker images 或: docker image ls 如下图所示: Docker 查看镜像信息 REPOSITORY: 来自于哪个仓库; TAG: 镜像的标签信息,比如 5.7、latest 表示不同的版本信息; ...

2019-11-15 08:06:33

阅读数 2

评论数 0

原创 Docker 下载镜像

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

2019-11-14 22:51:27

阅读数 7

评论数 0

原创 Docker Build Ship and Run

在 Docker 官网,挂着如下的字样:Docker - Build, Ship, and Run Any App, Anywhere。那么 Build, Ship, and Run 到底是做了什么呢? Build Ship and Run Build(构建镜像) : 镜像就像是集装...

2019-11-13 10:04:44

阅读数 39

评论数 0

原创 Docker 命令

基本命令 docker version # 查看docker版本 docker images # 查看所有已下载镜像,等价于:docker image ls 命令 docker container ls # 查看所有容器 docker ps # 查看正在运行的容器 docker image p...

2019-11-12 07:52:05

阅读数 1

评论数 0

原创 Docker 仓库

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

2019-11-11 08:31:03

阅读数 4

评论数 0

原创 Docker 容器

容器(Container) : 镜像运行时的实体 镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体,容器可以被创建、启动、停止、删除、暂停等 。 容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运...

2019-11-10 07:15:31

阅读数 4

评论数 0

原创 Docker 镜像

Docker 包括三个基本概念: 镜像(Image) 容器(Container) 仓库(Repository) 理解了这三个概念,可以说就理解了 Docker 的整个生命周期。 Docker 三个基本概念 镜像(Image) : 一个特殊的文件系统 众所周知,操作系统分为内核和用户...

2019-11-09 08:14:01

阅读数 4

评论数 0

原创 Docker 容器与虚拟机

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

2019-11-08 07:25:23

阅读数 8

评论数 0

原创 Docker 优势

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

2019-11-07 07:18:21

阅读数 4

评论数 0

原创 Docker 特点

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

2019-11-06 07:49:03

阅读数 19

评论数 0

原创 Docker 简述

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

2019-11-05 07:10:53

阅读数 2

评论数 0

原创 ZooKeeper 测试

进入 ZooKeeper 安装文件夹的 bin 目录,执行以下命令连接 ZooKeeper 服务,连接之前首选要确定 ZooKeeper 服务已经成功启动: ./zkCli.sh -server 127.0.0.1:2181 查看命令:help 创建节点:create 通过 create 命...

2019-11-04 07:20:39

阅读数 1

评论数 0

原创 ZooKeeper 数据模型

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

2019-11-03 09:27:23

阅读数 2

评论数 0

原创 ZooKeeper ZAB 协议模式

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

2019-11-02 07:08:12

阅读数 5

评论数 0

原创 ZooKeeper ZAB 协议 && Paxos 算法

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

2019-11-01 07:20:28

阅读数 19

评论数 0

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