基于Docker的PaaS平台建设实践

本内容来自9月中旬BoCloud博云举办的“云计算·风向 名为PaaS的热带气旋”主题沙龙分享内容。现将博云、微软、红帽、美团、民生银行的5位技术专家在沙龙中分享的实践经验与大家分享。

主题

基于DockerPaaS平台建设实践

李亚琼
BoCloud博云CTO

毕业于中国科学院计算技术研究所,获计算机系统结构工学博士学位。先后在华为公司和曙光公司进行云计算相关产品研发,曾任曙光公司云计算产品事业部总工程师,兼任电子政务云集成与应用国家工程实验室专家委员委员。

云计算技术演进

20160929210258

云计算技术的发展已经经历过了第一代虚拟化、第二代资源池化,正向第三代云计算技术前进——以容器、微服务、DevOps为关键技术和特征,能够满足金融业新型业务对快速部署、弹性扩展、自动化运维等核心需求。

20160929210315

业务需求

云技术3.0的关键技术

  • Openstack:开源企业级虚拟化及云计算管理平台,具有开放、稳定、生态完善等特点。
  • Docker:容器级云应用快速部署及运行支撑平台,提供快速部署、弹性、应用编排等功能。
  • DevOps:应用开发、测试、部署、升级的一体化平台及流程,缩短上线流程、降低运维风险。
  • 运维自动化:实现对多种环境和多种对象统一化管理,以异构管理、批量化、自动化为主要特征。

Docker技术定位

资源容器

隔离的cpu、内存、存储空间、IO队列、网络地址等;
运行调度的基本单元,运行的容器对象虽然共享同一个服务器,但资源之间互相隔离;
可以对每一个容器的资源进行独立的配置/调整。

应用环境

独立的操作系统环境,独立的文件系统空间;
包含独立的应用运行所依赖的库、工具、配置文件、用户角色等;
运行时独立的操作系统空间,包括进场组信息、内核配置信息、设备信息等。

云软件包

发布软件的封包格式,包含配置、应用信息、文件系统等;
仓库式包集中管理机制,提供包发布、元数据、依赖管理等功能,方便软件部署;
开放的数据管理技术,能够和运行环境结合实现数据管理。

编排工具

容器静态及运行时配置管理工具,对容器进行配置管理;
编排工具实现应用的多容器运行、依赖解析等;
依赖公有仓库,实现复杂业务应用模板的发布。

 

20160929210329

基于Docker的应用技术需求

 

PaaS平台多功能视图

PaaS平台多功能视图

PaaS平台功能范围

  • 环境管理
    管理基础设施中的多个环境分区,并各个环境中的调度环境进行集中管理
  • 仓库建设
    建设并管理代码、应用、虚拟机、容器、组件与应用模板等仓库平台
  • 调度平台
    根据资源(基础设施、软件、容器等)类型建设并管理各类型资源调度平台
  • 中间件
    围绕高并发及微服务化需求构建消息通信、缓存、服务管理等中间件服务
  • 服务治理
    对业务服务进行发布、弹性伸缩、健康检查等管理管控,形成业务服务平台
  • 业务编排
    对应用、虚拟机、容器、中间件、服务等进行组件封装和编排服务
  • 应用管理
    对业务应用进行版本管理、升级、灰度发布、回滚、可用性、弹性等管理
  • 监控与度量
    监控业务运行性能,建立性能与可用性度量模型,支持弹性伸缩与容量分析
  • 运营支撑
    建设日志、安全审计、权限管理、流程对接、数据同步等运营支撑平台
  • 角色&多租户
    围绕业务与组织架构设置角色体系,建设PaaS能力自服务门户

PaaS平台建设的关键思路&特性

  • 基础Docker环境:基于统一化资源调度,综合建设物理服务器平台、虚拟化资源池平台、容器运行平台等
  • 服务治理&中间件:围绕应用开发及运行时需要的服务调用、消息通信、缓存加速、一致性协商、任务调度等问题,建设中间件服务平台
  • 持续构建/编排部署:以DevOps理念支撑,构建应用持续构建、持续部署、软件仓库、编排模板管理的平台,支撑多角色多环境应用部署需求
  • 自动化弹性:实时监控应用运行状态,自定义指标阈值,基于阈值告警实现业务的自动化弹性伸缩
容器环境

容器环境

Docker环境下的CI/CD

20160929210401

无需开发人员理解镜像概念和手动制作镜像

开发提交代码,程序包生成->自动生产环境升级
支持每天多次的版本发布上线-“上午提需求,下午生产环境版本上线”

高并发场景下的中间件选型

  • 数据管理:满足数据存储&访问的可扩展性、性能、一致性、可用性等目标要求
  • 应用架构:架构与组件的设计、部署中充分考虑一致性、可用性、可管理性、可复用等问题
  • 消息系统:利用异步消息机制解耦系统组件与服务,解决消息顺序、Poison Message、等幂问题
  • 管理监控:实时监控应用的运行时信息,根据运行状态动态调整运行参数,优化配置
  • 性能&可扩展性:负载压力过大时能够快速横向扩展,扩展范围涵盖计算、存储、消息等
  • 自愈性:具备检测错误的能力,并且能够快速从错误中恢复,包括组件错及平台错误恢复
  • 安全性:能够应对恶意攻击、越权访问、敏感信息保护等安全问题,确保信息安全
  • 可用性:在系统出错、基础设施故障、恶意攻击、高负载压力等情况下依然能够保持可用性

高并发程序设计指南

两条设计原则+八条设计指南:

2原则

  1. 异步消息:利用消息系统解耦系统组件,提高系统的可扩展性与自愈性
  2. 数据一致性:识别不同数据的一致性模型(强一致性、最终一致性),设计不同数据系统

8设计指南

  1. 缓存加速:利用缓存系统加速数据的读取速度,特别是对静态数据和只读库表
  2. 计算分割:把计算按照逻辑分割成不同的组件,组件之间协同完成业务请求。
  3. 自动伸缩:实时监控系统的性能与负载压力,自动对性能瓶颈组件进行弹性伸缩
  4. 数据区分:采用水平、垂直、功能等维度分布式存储到不同物理节点,提高扩展性
  5. 数据多副本同步:利用多副本技术保障数据可靠性,根据需求选择不同的副本同步策略
  6. 诊断&监控:收集请求、运行时、故障及性能计数等信息,定位瓶颈、故障及错误恢复
  7. 多DC部署:从容错、负载均衡、数据保护等角度实现多中心部署架构及流量路由/切换
  8. 度量&容量规划:对服务流量、性能、资源需求进行监控,度量服务需求,对资源进行合理规划

举例:消息中间件

20160929210410

举例:消息中间件选型依据

20160929210423

消息编程注意问题:

  1. 根据队列长度自动扩展
  2. 消息故障时熔断保护
  3. 并发消费时负载均衡
  4. 基于优先级处理消息
  5. 排队削峰
  6. 超级监控确保分布式事务

推动MVC转向CQRS:

20160929210433

服务治理问题

  • 服务治理:服务的元数据信息集中进行管理,包括服务路径、参数、描述、优先级等;服务实例向注册中心发布该服务信息
  • 服务分析:跟踪调用,从服务调用频度、服务依赖、服务扇入扇出数、服务响应延迟等多个维度分析服务
  • 自动弹性:根据服务分析结果和预定义的策略(如阈值)对服务实例数、服务资源分配等进行弹性伸缩,提高服务质量
  • 服务可用性:自动化检测服务可用性,并在发生可用性故障时快速实现主备切换,不影响可用性
  • 版本管理:提供服务实例的多版本管理能力,提供版本升级、版本回退、灰度升级等版本管理功能
  • 访问控制:提供访问控制机制,能够实现基于策略的访问控制,包括黑白名单、可用性范围等
  • 服务质量保障:包括服务弹性伸缩、流量控制、服务等级划分等,确保服务性能达到SLA规定。
  • RPC框架:服务运行时平台的选型对于服务开发与服务运营都是关键性因素,候选技术包括spring boot、docker等

服务架构:解决服务发布、发现、调用、可用性维护、QoS控制、负载均衡等一系列问题。

运行支撑:提供服务封装、部署、运行监控、信息收集、弹性伸缩、主备切换等功能。

开发实施:提供开发SDK、多语言绑定、程序框架、部署测试工具集等,支撑服务开发开发部署。

服务治理框架:

20160929210443

基于Thrift的服务治理实现框架

20160929210456

基于Thrift的服务治理关键技术

20160929210507

应用编排&持续部署

20160929210518

Docker Compose vs Cloudify:

20160929210527

应用配置管理

应用配置三要素:

  • 配置类型:不同的类型对应不同的处理流程,比如配置文件类型由配置文件插件处理;支持的类型包括:文件、可执行命令(shell或其他可执行程序)、SQL命令等。
  • 配置输入:不同的配置类型,其输入格式分别对应于配置模板文件、可执行命令(文件)、SQL语句;同时,配置输入还包括配置所需的其他参数,比如配置目标路径等,供插件具体执行配置时作为输入参数。
  • 配置阶段:配置分为检查阶段、环境准备阶段、部署前阶段、部署后阶段、启动前阶段、启动后阶段等,配置阶段定义了配置操作发生的阶段点(Stage),根据不同的配置,对应不同的配置阶段。

配置模板:

20160929210536

自动化弹性:

20160929210546

Riemann:

20160929210556

流操作:

20160929210605

PaaS平台:应用视角

面向平台与服务的应用开发:

  • 持续集成:应用的构建、容器封装、配置及接口注册都通过持续集成平台完成
  • 服务调用:通过服务相关SDK对平台中的服务进行查询、调用、路由及异常响应
  • 对外发布:声明要发布的平台和访问路径,平台解析后调用相关服务接口发布
  • 消息通信:接入公共消息平台订阅消息,也可以创建自己的消息及订阅别人的消息
  • 配置同步:应用的配置项及对外发布的配置信息都通过平台配置服务统一发布
  • 数据存储:平台数据存储服务路径作为配置;或者通过服务接口调用存储服务
  • 任务管理:调用平台提供的任务接口,实现任务注册、注销、定时执行等
  • 日志管理:平台统一进行日志收集,不用管理日志,只需要按照正常日志输出即可

总结:4点经验分享

经验一:PaaS建设需要顶层设计
PaaS的范围很广,运维、开发、服务中间件、应用运行时,Platform as a Service,capability is the key.

经验二:PaaS建设需要场景驱动
要迁移到PaaS平台的应用是什么,触发迁移到PaaS平台的技术/非技术因素(高并发、统一平台、互联互通等)。

经验三:PaaS建设API设计是关键
针对不同的服务设计api,统一考虑,通过服务治理统一服务的发布、查询、离线、升级、服务治理、访问控制等。

经验四:PaaS建设需要考虑环境适配
IaaS环境、安全环境、流程环境、角色体系。

K8S中文社区微信公众号
分享到:更多 ()