前言
在过去的不知道多少年前,我们的应用和数据库,还部署在一台机器上,大概如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| +----------+ +--------------+
| | | |
| | | |
| | | +--------+ |
| +--------------------> | | |
| | | | App | |
| | <------------------+ | ^ + | |
| Client | | +--------+ |
| | | | | |
| | | +--------+ |
| | | | + v | |
| | | | DB | |
| | | | | |
| | | +--------+ |
| | | |
| | | Server |
+----------+ +--------------+
|
随着业务的增长,这样的架构已经不能满足大量的请求,这时候架构也随之改变,把应用与数据库拆分开来:
1
2
3
4
5
6
7
| +--------+ +---------+ +-------+
| | | | | |
| +-------------> | +-----------> | |
| Client | | App | | DB |
| | <-------------+ | <-----------+ |
| | | | | |
+--------+ +---------+ +-------+
|
当然,业务是不停的增长的,而上述这样的也会发生变化,可以把应用与数据库进行集群部署。
然后…
不搭的后语
而如今,技术与架构,在业务的驱动下,早已发生了巨大的变化。
在最近两年,最火的,莫过于服务化,容器化与云化。
微服务
微服务架构,它把软件围绕业务功能结构进行划分、拆解成服务,以服务构建应用,而服务可以独立部署、独立扩展,服务也可以提供模块化的边界,并且不同的使用也可以使用不同的开发语言。
微服务风格的特性:
- 组件与服务
- 围绕业务功能进行组织
- 产品不是项目
- 强化终端及弱化通道
- 分散治理
- 分散数据管理
- 基础设施自动化
- 容错性设计
- 设计改进
容器
容器,另一个热门的话题,而在这个话题中,我们能够快速想到的,应该是Docker。
Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 2013 年 3月以 Apache 2.0 授权协议开源。
Docker包括三个基本概念镜像、容器、仓库。镜像和容器的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实例;容器可以被创建、启动、停止、删除、暂停等;而仓库,则是用来统一存储镜像,进行版本控制。
使用容器技术,带来了以下好处:
- 持续部署与测试
- 跨云平台支持
- 环境标准化和版本控制
- 高资源利用率与隔离
- 简单易用
- …
容器云
容器云是以容器为资源分割和调度的基本单位,封装整个软件运行时环境,为开发者和系统管理员提供用于构建、发布和运行分布式运用的平台。
当容器云专注于资源共享与隔离、容器编排与部署时,它更接近传统的IaaS;当容器云渗透到应用支撑与运行时环境时,它更接近传统的PaaS。
使用容器云,带来了以下好处:
- 更高效的利用系统资源
- 更快速的启动时间
- 一致的运行环境
- 持续交付和部署
- 更轻松的迁移
- 更轻松的维护和扩展。
服务化,容器化与云化
当软件服务化后,我们的架构看起来应该是这样的:
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
| +-------+ +--------------------------------------+ +--------------------------+
| | | | | |
| | | WebUI | | App |
| | | | | |
| | +--------------------------------------+ ---------------------------+
| |
| | +-------------------------------------------------------------------+
| | | |
| | | RESTful API |
| | +-------------------------------------------------------------------+
| |
| | +-----------+ +-----------------------------------+ +-------------+
| | | | | +-----------+ +------------+ | | |
|Monitor| | Registry | | | Service1 | | Service2 | | | Configure |
| | | & | | +-----------+ +------------+ | | |
| | | Dscovery | | | | |
| | | | | +-----------+ | | |
| | | | | | ... | Services | | |
| | | | | +-----------+ | | |
| | | | | | | |
| | | | | | | |
| | +-----------+ +-----------------------------------+ +-------------+
| |
| | +-------------------------------------------------------------------+
| | | +-------------+ +------------+ +----------+ |
| | | | DB | | MQ | | ... | |
| | | +-------------+ +------------+ +----------+ |
+-------+ +-------------------------------------------------------------------+
|
众多的服务给运维带来极大的挑战,要求能够快速地发布与容错处理,而如果再使用人肉运维的方式再也无法满足。
这时候,一个借助于CI/CD的研发流水线的开发方式,渐渐进入了视野:
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
| +--------------+ +------------+ Re^iew +--------------+
| | | +-------> | |
| Developer | Push | | | Maintainer |
| +--------> | Repo | Merge | |
| | | | <----+ | |
+------+-------+ +-----+------+ +--------------+
^ |
| |
| v Trigger
|
| +------------+
Feedback | |
| CI | | CD
| +----------+ CI/CD +-------------+
| | | | |
| v +------------+ v
|
+-------------------------------+ +--------------------------------------+
|-------+ +-------+ +--------+ | | |
||Build +-> Unit +->Analyze +-+| | +---------+ +---------+ +---------+ |
|-------+ +-------+ +--------+ || | |Test Env | |UAT Env | |Production |
|-------+ +-------+ +--------+ || | | | | | | | |
||Deploy<-+Package<-+ Test <-+| | +---------+ +---------+ +---------+ |
|-------+ +-------+ +--------+ | | |
+-------------------------------+ +--------------------------------------+
|
可以借助容器与容器云,将服务进行持续集成、持续部署与交付,最终达到自动化。
放弃
服务化是未来吗?容器是未来吗?容器云是未来吗?
谁知道呢?未来,还没来!
只是现在,作为一枚面向搜索引擎复制粘贴的开发者,在不停的学习中,开拓自己的视野,积累自己的经验,为后来的业务需求打下坚实的基础也是势在必行。
参考:
微服务(Microservices)
《Docker——容器与容器云》试读:1.3 进化:从容器到容器云