AirJD 焦点
AirJD

没有录音文件
00:00/00:00
加收藏

云端基于Docker微服务应用的架构实践 by 闫长海@阿里云

发布者 devops
发布于 1463359684614  浏览 8191 关键词 DevOps, Docker 
分享到

第1页

云端基于Docker微服务应用 的架构实践   

闫⻓长海 阿⾥里云技术专家



第2页

自我介绍 

  • 闫长海 花名:易嘉  • 阿里云计算专家,负责容器服务研发  • 曾任职IBM公有云Bluemix研发  • E-mail: changhai.ych@alibaba-­‐inc.com
  • 微信:chaghaiych  



第3页

大纲 

• 什么是微服务  • 容器管理微服务的挑战  • 容器微服务管理  • 微服务的持续交付 



第4页

加速应用交付,缩短梦想距离 

传统IT系统 

大兵团作战  Dev vs. Ops  缓慢变化 

整体式应用 

(monolithic app) 

物理服务器、 存储、网络 



今天 

战术小队  DevOps  快速迭代  微服务 

云计算 



第5页

微服务 

• 小 按照业务单一职责设计  • 独 立进程,独立部署  • 轻 量级的通信机制  • 松 耦合 



第6页

用Docker部署微服务 



• Docker是一种轻量级的操作系统虚拟化方案 

– 细粒度资源隔离 - 敏捷,降低企业成本  – 定义了环境无关的标准的交付、部署规范 - 良好可移植性,提高运维效率 



• 当想把Docker容器当做轻量级虚拟机时, 请三思! 

- 正确姿势  • 每次代码提交重新构建镜像  • 禁止修改运行中的镜像  • 利用volume保存持久化数据 

  Docker容器方式 



App A Layer



App B1



App B2



Layer

Docker Engine Host OS

Hypervisor

Server HW



Containers



第7页

云阿里端云漫对步容器:社开区始的支 D持o  cker 之旅
 

• 配置安装  – 安装Docker Toolkit  – 安装云驱动   • ECS driver for Docker Machine  • AWS, GCE, 等等. 

• 在阿里云创建Docker运行环境 

图片 



Docker Machine 



export
 ECS_ACCESS_KEY_ID=xxxxxx
  export
 ECS_ACCESS_KEY_SECRET=xxxxxx
  docker-­‐machine
 create
 -­‐-­‐driver
 aliyunecs
 mytest
  eval
 "$(docker-­‐machine
 env
 mytest)"
  docker
 run
 -­‐d
 nginx
 


 



第8页

容器编排 - Docker Compose 



version: '2'



services:



wordpress:



image: wordpress:4



ports: - 80



容器
 



restart: always



links:



- db:mysql



network_mode: bridge db:



wordpress
 



image: mysql:5.7



environment:



MYSQL_ROOT_PASSWORD: password



restart: always



volumes:



- data:/var/log/mysql



network_mode: bridge



volumes:



data:



driver: local



mysql
 



• 优点 

– 简单好用,便于开发  容器
  – 编排容器、存储和网络 

• 不足 

db
  – 面向开发和部署,不支 持自动化运维 



data
 



volume
 



 



⼀一键部署:docker-compose up ⼿手动伸缩:docker-compose scale wordpress=3



第9页

容器集群管理 - Docker Swarm 

• 优点 

– 支持标准的 Docker API  – 灵活、可插拔的容器调

度 

• 不足 

– 面向容器、缺少微服务 支持 

 



第10页

容器即服务 Container as a Service 



等 



Docker
 Cloud
  (tutum.co)
  
  Docker
 Swarm
 API
  Compose
 template
 



Amazon
 EC2
  Container
 Service
  
  ECS
 API
  Compose
 template/ Task
 definiOon
 



Google
  Container
 Engine
  
  Kubernetes
 API
  Pod/Service
 



阿里云 

容器服务  
  Docker
 Swarm
 API
  Compose
 template
 



第11页

阿里云容器服务
 



控制台
 



阿里云容器Hub


  集群资

  源 管理 


  
  
  服务注
 册发现  
  
  
  
  生命周
 期管理  动态资
 源调度  
  
 

Container
 Service
 

$docker-­‐compose
 up
  $docker
 run



NeNtetwowrokriknig
 ng
  Agent
 

ClLCulosutgsgetir
 enr
 g
 MgMgmt
 mt
  WaWtacthcehr
 er
 

MoMLnAiooMtLnpgiooogtrpin
gi iongtnriiggo
 n/nrigg
 /ng
  ApApp
 Ap
p p
  ApApp
A p
p p
  AAppp
A p
p p
  ApApp
A p
p p
  ApApp
 Ap
p p
  ApAp
p p
 



ECS
  SLB
  VPC
  ESS
  Logging
  Monitoring
 

与阿里云服务 无缝集成 … 



Container
 Cluster
 for
 customer
 A
  VVMVMM
 N
 No
 Nododede
  e
  
 

DCooCcknoetnart
i aEninengrei
 rEn
 nEegn
  igniene
  
 

Container
 Cluster
 for
 customer
 B
  VVMVMM
 N
 No
 Nododede
  e
  
 



NeNtetwowrokriknig
 ng
  Agent
  LCloCuglsgutisentr
 g
e r
 MgMgmt
 mt
  WaWtacthcehr
 er
 

MonAiMtLpoooMrpLn
gi ioogtninggio
 ngtriigon/nrigg
 /ng
  App
 ApAp
p p
  App
A pAp
p p
  App
A pAp
p p
  App
A pAp
p p
  App
 ApAp
p p
  ApAp
p p
 



任意Docker镜像,compose模板  完全兼容现有 Docker API,工具 



CoCnotnatianienre
 rE
 nEgnigniene
  
  Docker
 Engine
 

Dedicated
 and
 isolated
 customer
 domains
 



第12页

阿里云容器服务 



数据库 

MySQL,,  Mongo … 

缓存服 务 

消息队 列 

中间件 

CI/CD 

源代码 管理 

三方扩 展 

开发交付 



应用 



SaaS  负载均衡、路由 



PaaS 



应用  接入 



日志服 务 



服务注册、发现 



同步、异步通信 



灰度发布、不间断升级  服务 



云监控 



容器编排 



资源调度  弹性伸缩 



集群管理 

路由 



调度 



Docker镜像仓库  内容 

编排模板 



Docker 容器引擎 



容器 



存储 

支持块存储、对象存储、网络文件系统  三方扩展 



网络 

支持经典/VPC网络,支持混合云 



三方扩展 



访问控 制 

三方扩 展 



公共云 



专有云 



管控集成 



第13页

服务编排部署 – 增强生命周期管理 



• 健康监测  • 路由注册  • 容器监控  • 日志收集  • 集群部署  • 云服务引用(RDS, KVStore …) 



Wordpress
 

web: image: 10.32.161.160:5000/wordpress:4 ports: - "80" environment: - WORDPRESS_AUTH_KEY=changeme restart: always links: - db:mysql labels: aliyun.logs: /var/log aliyun.probe.url: http://container/test aliyun.probe.initial_delay_seconds: 10 aliyun.routing.port_80: http://wordpress aliyun.scale: 3

db: image: 10.32.161.160:5000/mysql environment: MYSQL_ROOT_PASSWORD: password restart: always labels: aliyun.logs: /var/log/mysql



日志收集

健康监测

路由注册

集群部署 自定义监控



SLB/ RouOng
 



Web
  Web
 



DB
 





Web
 



第14页

服务调度扩展 



• 服务密切关系 

– E.g.
 MySQL主从部署(anO-­‐affinity
 )
 

• 全局部署 

– 每个节点一个实例  – E.g.
 安装监控日志Agent到每个节点
 


 

• 细粒度资源限制 

- CPU
 share 等
 


  • 容器重新调度 

– reschedule:on-­‐node-­‐failure
  – 网络,存储
 



master: image: tutum/mysql:5.6 environment: - MYSQL_USER=user - MYSQL_PASS=test - REPLICATION_MASTER=true - REPLICATION_USER=repl - REPLICATION_PASS=repl ports: - "3306"

slave: image: tutum/mysql:5.6 environment: - MYSQL_USER=user - MYSQL_PASS=test - REPLICATION_SLAVE=true - affinity:service!=master ports: - "3306" links: - master:mysql



• 跨可用区高可用支持  – availability:az==2
 



14 



第15页

存储管理 



rouOng
 



• 利用Docker Volume Plugin 支持不同的存储类型 

– 块存储 云盘  – 对象存储 OSSFS  – 网络文件系统 NFS 

• 支持第三方存储插件 



OSSFS
 



OSSFS
 



ghost:  

OSSFS
 

  image: registry.aliyuncs.com/acs-sample/ ghost:0.7 



  links:  



    - db:mysql  



  ports:  



MySQL实例 / 



    - "2368"    environment: 



    - GHOST_URL=http://my-ghost-blog.com 



  labels: 



    aliyun.scale: '3' 



  restart: always  



db:  



  external:  



第16页

服务注册 



Spring
 Cloud
  
 @ConfiguraOon
 

@ComponentScan
  @EnableAutoConfiguraOon
  @EnableEurekaClient
  @RestController
  public
 class
 ApplicaOon
 {
  
  public
 staOc
 void
 main(String[]
 args)
 {
  
 
 
 
 
 
 
 
 new
 SpringApplicaOonBuilder(ApplicaOon.class).
  web(true).run(args);
  
 
 
 
 }
  }
  
  applicaOon.yml:
  
  eureka:
  
 
 client:
  
 
 
 
 serviceUrl:
  
 
 
 
 
 
 defaultZone:
 hep://localhost:8761/eureka/
  
 



容器服务 

- 自动服务注册 

- 自动服务发现  - 编排支持 



第17页

容器服务发现 



linking
 with
 DNS
  alias
 



ServiceB:myservice
 

Service
 A
 



Service
 B
 



DNS
  alias
 



ServiceA
 



ServiceB
 



ServiceC
 



Discovery
  Service
 



ServiceB:myservice
 



Linking
 with
 load
 



balancing
 



Service
 



RouOng
 



Health
 checking
  SophisOcate
 load
 balancing
 



Service
  Service
 



Custom
 



Discovery
  Service
 



Service
 



Service
  Service
 



第18页

容器服务弹性路由 



http://*.company.com 



集群(VPC内) 



负载均衡SLB     路路路由由由服服服务务务     



labels: aliyun.routing.port_80: http:// shopping.company.com



http://shopping.company.com 



 



 



 



 



    



    



容器  容器    容器 



容器  容器     容器 



    



    



Docker  Engine 



Docker   Engine 



  监控 

 



  监控   



容器服务  Agent 



容器服务  Agent 



   



虚机节点 



虚机节点 



http://payment.company.com 

    容器  容器    容器      Docker  Engine    监控    容器服务  Agent    虚机节点 



Discovery
  Service
 



第19页

服务监控报警 



• 集成的容器监控 

- Aliyun 扩展会根据标签来收集和聚合监控数 据及日志数据 

- aliyun.monitoring.script:/opt/mp.sh - aliyun.logs:/var/log/mysql/



- 插件机制支持采集及集成扩展  - 内置阿里云云监控集成 

- 支持三方扩展 

- aliyun.monitoring.addone.influxdb: 

  • 开源监控方案 

– cAdvisor在每个节点上进行监控指标数据采 集 

– InfluxDB 负责收集汇总监控指标数据,和查 询 

– Grafana/Prometheus 来展现监控指标 

虚机节点 



Agent
 



Monitori ngAgent
 



Docker
 Daemon
 



Grafana/Prometheus
  InfluxDB
 



虚机节点 



Agent
 



Monitori ngAgent
 



Docker
 Daemon
 



第20页

完整的容器化持续交付流程 



提交代码 

开发者 



源代码  管理 



Webhook 通知  下载代码构建 



阿里云镜 像服务 

Push 



Docker镜像和 Compose   模板用于集成、 测试和部署 

配置 管理 



拉取镜像 



CI Server 



CD  Server 



测试环境  预发环境 



如果构建和UT失败反馈开发者 



阿里持续交付平台 



生产环境 

阿里云容器服务 



第21页

容器即服务-Container-as-a-Service 



第22页

谢谢       

  云栖社区Docker团队博客  https://yq.aliyun.com/teams/11


阿里云容器服务  https://www.aliyun.com/product/containerservice/ 



支持文件格式:*.pdf
上传最后阶段需要进行在线转换,可能需要1~2分钟,请耐心等待。