docker based cloud thinking

简介:
关注Docker有段时间了, 最近在搞去存储的事情, 会有一堆的小数据库脱离存储, 使用流复制来做HA.
对于小型数据库来说, 可以考虑放到云环境去, 但是以前考虑到虚拟化带来的性能损耗有点大, 所以一直未考虑过在虚拟化中使用数据库.
docker刚好解决了性能损耗这块的问题, 利用了Linux的cgroup和chroot特性来实现namespace的隔离, 将性能损耗降到几乎为0.
在云环境中, 数据库和其他应用的显著差别是数据存储这块.
数据库要求数据存储的可靠性, 持久化, 原子性, 一致性. 所以对存储的要求比较高.
另一方面, 数据库对CPU的要求也比较高, 在处理高并发的请求或者复杂的查询时, 耗费的CPU是比较多的.
网络方面, 当数据库有大量的数据进出时, 要求也比较高.
最后是数据的安全, 虚拟机和虚拟机之间的资源隔离也是很重要的.
下面假设我们要以docker 为基础部署云环境, 大概需要考虑哪些因素, 大致的框架如何, 谈一点个人想法, 如图 : 
docker based cloud thinking - 德哥@Digoal - PostgreSQL research
现在大多数的IaaS云产品可能和这个类似, 例如openstack, Eucalyptus, opennebula, cloudstack, kubernetes.
对于openstack产品来说docker 和KVM这类虚拟化也差不多, 只是docker只能运行Linux, kvm可以允许windows, freebsd, linux等.

几大模块的功能 : 
镜像存储
    存储docker images.
宿主机
    使用选择的image运行container.
注册服务
    存储container的运行参数, name, 卷, 环境变量, 心跳文件, fence信息, 网络信息等. 可以存储在数据库中.
    注意数据库运行在云环境中的一个注意事项, 为了防止文件被重写(如多个container写一份数据), 在启动container时, 应该fence掉前一个运行该数据的container, 所以我们需要注册fence信息.
管理机
    管理container的运行, 停止; 监控container的状态, 事件触发.
云存储
    数据文件所在, 因为当宿主机DOWN掉时, 可能要从其他宿主机起container, 所以数据需要通过云存储来共享 .
网络
    需要将container的网络, 云存储网络, 镜像存储网络隔离开来, 以免相互造成干涉而降低性能. container则可能需要使用到网桥的功能. 可以通过brctl或者openvswitch来管理.

一个假想的上线流程.
1. 搭建网络
2. 搭建云存储
3. 搭建镜像存储
    制作镜像.
4. 搭建宿主机
5. 搭建注册服务数据库
6. 搭建管理机
7. 注册服务元数据初始化, 新增宿主机信息, 镜像存储信息, 镜像信息(通过哪个镜像来启动container), 云存储信息, 挂载点信息, 网络信息等.
8. 添加container, 如包括镜像, 网络, 启动参数, 心跳文件, fence文件等信息.
9. 启动container

启动docker时, 我们可以通过entry文件来处理一些逻辑.
例如,
    判断volume是否已初始化
    通过run传递的env, 设置数据库的初始化参数, 启动参数等
    如果已初始化, 查看心跳文件, fence文件等, 
    fence 前一个container
    启动数据库.

为了确保数据库的可靠性, 我们可以大家两套云环境, 使用不同的云存储, 使用流复制一主一备. 主和备的数据文件分布在不同的云存储(或不同的云环境的不同云存储下面).

[参考]
2. man docker
3. man docker-run

相关文章
|
10月前
|
Java 测试技术 微服务
这可能是2023年把微服务讲的最全了:SpringBoot+Cloud+Docker
最近几年,微服务可谓是大行其道。在业务模型不完善,超大规模流量的冲击的情况下,许多企业纷纷抛弃了传统的单体架构,拥抱微服务。这种模式具备独立开发、独立部署、可扩展性、可重用性的优点的同时,也带来这样一个问题:开发、运维的复杂性提高。有人感觉微服务越做越不方便管理。
|
1月前
|
安全 Java Docker
|
10月前
|
Java Docker 微服务
阿里P8携手腾讯T4谈微服务架构实战:深入浅出Cloud+boot+Docker
微服务”架构在这几年被广泛传播,变得非常火热,以至于关于微服务架构相关的开源框架和工具都变得越来越活跃,比如: Netflix OSS. Dubbo. Apache Thrift等。Spring Cloud也因为Spring社区在企业应用领域的广泛知名度和强大影响力,受到了广大架构师与开发者的高度关注。
|
1月前
|
Java Nacos Docker
Spring Cloud Alibaba【什么是Nacos、Nacos Server下载安装 、Docker安装Nacos Server服务、微服务聚合父工程构建】(一)
Spring Cloud Alibaba【什么是Nacos、Nacos Server下载安装 、Docker安装Nacos Server服务、微服务聚合父工程构建】(一)
101 0
|
1月前
|
Java Docker 微服务
阿里P8携手腾讯T4谈微服务架构实战:深入浅出Cloud+boot+Docker
微服务”架构在这几年被广泛传播,变得非常火热,以至于关于微服务架构相关的开源框架和工具都变得越来越活跃,比如: Netflix OSS. Dubbo. Apache Thrift等。Spring Cloud也因为Spring社区在企业应用领域的广泛知名度和强大影响力,受到了广大架构师与开发者的高度关注。
|
1月前
|
Dubbo 应用服务中间件 Docker
阿里P8架构师谈微服务架构:Dubbo+Docker+SpringBoot+Cloud
什么是微服务架构呢?简单说就是将一个完整的应用(单体应用) 按照一定的拆分规则(后文讲述)拆分成多个不同的服务,每个服务都能独立地进行开发、部署、扩展。服务于服务之间通过注入RESTful api或其他方式调用。
|
1月前
|
Java 测试技术 微服务
这可能是2024年把微服务讲的最全了:SpringBoot+Cloud+Docker
最近几年,微服务可谓是大行其道。在业务模型不完善,超大规模流量的冲击的情况下,许多企业纷纷抛弃了传统的单体架构,拥抱微服务。这种模式具备独立开发、独立部署、可扩展性、可重用性的优点的同时,也带来这样一个问题:开发、运维的复杂性提高。有人感觉微服务越做越不方便管理。
|
9月前
|
弹性计算 Linux Apache
部署并使用Docker(Alibaba Cloud Linux 3)
本场景带您体验如何在Alibaba Cloud Linux 3.2104 LTS 64位操作系统的云服务器上部署并使用Docker。
2681 0
|
9月前
|
弹性计算 Linux Apache
部署并使用Docker(Alibaba Cloud Linux 2)
本场景带您体验如何在Alibaba Cloud Linux 2.1903 LTS 64位操作系统的云服务器上部署并使用Docker。
586 0
|
11月前
|
Java jenkins 持续交付
基于Spring Cloud与Docker如何搭建一个电商平台项目
近几年,大家都在谈论微服务,那么,什么是微服务呢,微服务的概念是怎么产生的呢?为什么要使用微服务架构,微服务架构能给我们带来什么好处,微服务架构与Spring Cloud又是一种什么关系。 要说明什么是微服务,很有可能一时不能说得很清楚。这里 有一点容易混淆的就是微服务架构和微服务,这应该是两个不同的概念。