中间件

中间件

Docker

Docker 是一个开源的应用容器引擎,基于 Go语言 并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

三个基本概念:

  • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  • 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。

常用命令:

Docker 镜像命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 查看Docker信息
docker version
docker info

# 查看Docker 镜像列表
docker images

# 搜索镜像
docker search 镜像名

# 拉取镜像
docker pull 镜像名:tag

# 运行镜像
docker run 镜像名

Docker 容器命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查看正在运行的容器
docker ps
# 查看所有容器--包含正在运行和已停止的
docker ps -a

# 运行容器
docker run -it -d --name 别名 镜像名:Tag /bin/bash

# 停止容器
docker stop 容器名/容器ID
# 启动容器
docker start 容器名/容器ID
# 重启容器
docker restart 容器名/容器ID

MongoDB

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

SQL术语/概念 MongoDB术语/概念 解释/说明
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
table joins 表连接,MongoDB不支持
primary key primary key 主键,MongoDB自动将_id字段设置为主键

优点:

  • 高效率存储访问(高并发、高性能、高可用)

  • 面向文档的数据模型

  • 强大的查询功能

  • 负载均衡

  • 高扩展性

  • 兼顾 SQL 与 NoSQL

常用命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 显示数据库
show dbs
# 显示数据库中的集合
show collections
# 显示用户信息
show users

# 切换数据库
use database
# 删除数据库
db.dropDatabase()

# 数据增删改查
db.col.insert()
db.col.remove()
db.col.update()
db.col.find()

# 索引增删
db.col.ensureIndex()
db.col.dropIndex()

RabbitMQ

RabbitMQ是一个开源的,基于AMQP(高级消息队列协议)的消息系统(消息中间件)。

优点:

  • 应用解耦

  • 异步提速

  • 流量削峰

  • 可恢复性

基础架构:

  • 生产者(Producer)
  • 交换器(Exchange)
  • 队列(Queue)
  • 绑定(Binding)
  • 消费者(Consumer)

Elasticsearch

Elasticsearch是一个基于Lucene(全文搜索引擎)的搜索服务器,是一个分布式、高扩展、高实时的搜索与数据分析引擎。

应用场景:

  • 海量数据查询
  • 搜索引擎
  • 实时数据分析
  • 日志和事件管理

核心概念:

  • 索引(index):存储数据,相当于数据库
  • 映射(mapping):定义字段类型、分词器等,相当于数据库中的表结构
  • 文档(document):最小数据单元,通常为json格式,相当于数据库中的一行数据
  • 倒排索引:一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,对应一个包含它的文档id列表

常用命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# 索引操作
# 创建索引
PUT http://ip:port/索引名称
# 查询索引
GET http://ip:port/索引1,索引2,...
GET http://ip:port/_all
# 删除索引
DELETE http://ip:port/索引名称
# 关闭、打开索引
POST http://ip:port/索引名称/_close
POST http://ip:port/索引名称/_open

# 操作映射
PUT /index
{
"mappings":{
"properties":{}
}
}
PUT /index/_mapping
{
"properties":{}
}

# 操作文档
# 添加文档
POST /index/_doc/id
{
"name":···
}
# 查询文档
GET /index/_doc/id
# 删除文档
DELETE /index/_doc/id
# 清空文档
POST person1/_delete_by_query
{
"query": {
"match_all": {}
}
}