本内容来自9月中旬BoCloud博云举办的“云计算·风向 名为PaaS的热带气旋”主题沙龙分享内容。现将博云、微软、红帽、美团、民生银行的5位技术专家在沙龙中分享的实践经验与大家分享。
主题
李亚琼
BoCloud博云CTO
毕业于中国科学院计算技术研究所,获计算机系统结构工学博士学位。先后在华为公司和曙光公司进行云计算相关产品研发,曾任曙光公司云计算产品事业部总工程师,兼任电子政务云集成与应用国家工程实验室专家委员委员。
云计算技术演进
云计算技术的发展已经经历过了第一代虚拟化、第二代资源池化,正向第三代云计算技术前进——以容器、微服务、DevOps为关键技术和特征,能够满足金融业新型业务对快速部署、弹性扩展、自动化运维等核心需求。
云技术3.0的关键技术
- Openstack:开源企业级虚拟化及云计算管理平台,具有开放、稳定、生态完善等特点。
- Docker:容器级云应用快速部署及运行支撑平台,提供快速部署、弹性、应用编排等功能。
- DevOps:应用开发、测试、部署、升级的一体化平台及流程,缩短上线流程、降低运维风险。
- 运维自动化:实现对多种环境和多种对象统一化管理,以异构管理、批量化、自动化为主要特征。
Docker技术定位
资源容器
隔离的cpu、内存、存储空间、IO队列、网络地址等;
运行调度的基本单元,运行的容器对象虽然共享同一个服务器,但资源之间互相隔离;
可以对每一个容器的资源进行独立的配置/调整。
应用环境
独立的操作系统环境,独立的文件系统空间;
包含独立的应用运行所依赖的库、工具、配置文件、用户角色等;
运行时独立的操作系统空间,包括进场组信息、内核配置信息、设备信息等。
云软件包
发布软件的封包格式,包含配置、应用信息、文件系统等;
仓库式包集中管理机制,提供包发布、元数据、依赖管理等功能,方便软件部署;
开放的数据管理技术,能够和运行环境结合实现数据管理。
编排工具
容器静态及运行时配置管理工具,对容器进行配置管理;
编排工具实现应用的多容器运行、依赖解析等;
依赖公有仓库,实现复杂业务应用模板的发布。
PaaS平台功能范围
- 环境管理
管理基础设施中的多个环境分区,并各个环境中的调度环境进行集中管理 - 仓库建设
建设并管理代码、应用、虚拟机、容器、组件与应用模板等仓库平台 - 调度平台
根据资源(基础设施、软件、容器等)类型建设并管理各类型资源调度平台 - 中间件
围绕高并发及微服务化需求构建消息通信、缓存、服务管理等中间件服务 - 服务治理
对业务服务进行发布、弹性伸缩、健康检查等管理管控,形成业务服务平台 - 业务编排
对应用、虚拟机、容器、中间件、服务等进行组件封装和编排服务 - 应用管理
对业务应用进行版本管理、升级、灰度发布、回滚、可用性、弹性等管理 - 监控与度量
监控业务运行性能,建立性能与可用性度量模型,支持弹性伸缩与容量分析 - 运营支撑
建设日志、安全审计、权限管理、流程对接、数据同步等运营支撑平台 - 角色&多租户
围绕业务与组织架构设置角色体系,建设PaaS能力自服务门户
PaaS平台建设的关键思路&特性
- 基础Docker环境:基于统一化资源调度,综合建设物理服务器平台、虚拟化资源池平台、容器运行平台等
- 服务治理&中间件:围绕应用开发及运行时需要的服务调用、消息通信、缓存加速、一致性协商、任务调度等问题,建设中间件服务平台
- 持续构建/编排部署:以DevOps理念支撑,构建应用持续构建、持续部署、软件仓库、编排模板管理的平台,支撑多角色多环境应用部署需求
- 自动化弹性:实时监控应用运行状态,自定义指标阈值,基于阈值告警实现业务的自动化弹性伸缩
Docker环境下的CI/CD
无需开发人员理解镜像概念和手动制作镜像
开发提交代码,程序包生成->自动生产环境升级
支持每天多次的版本发布上线-“上午提需求,下午生产环境版本上线”
高并发场景下的中间件选型
- 数据管理:满足数据存储&访问的可扩展性、性能、一致性、可用性等目标要求
- 应用架构:架构与组件的设计、部署中充分考虑一致性、可用性、可管理性、可复用等问题
- 消息系统:利用异步消息机制解耦系统组件与服务,解决消息顺序、Poison Message、等幂问题
- 管理监控:实时监控应用的运行时信息,根据运行状态动态调整运行参数,优化配置
- 性能&可扩展性:负载压力过大时能够快速横向扩展,扩展范围涵盖计算、存储、消息等
- 自愈性:具备检测错误的能力,并且能够快速从错误中恢复,包括组件错及平台错误恢复
- 安全性:能够应对恶意攻击、越权访问、敏感信息保护等安全问题,确保信息安全
- 可用性:在系统出错、基础设施故障、恶意攻击、高负载压力等情况下依然能够保持可用性
高并发程序设计指南
两条设计原则+八条设计指南:
2原则
- 异步消息:利用消息系统解耦系统组件,提高系统的可扩展性与自愈性
- 数据一致性:识别不同数据的一致性模型(强一致性、最终一致性),设计不同数据系统
8设计指南
- 缓存加速:利用缓存系统加速数据的读取速度,特别是对静态数据和只读库表
- 计算分割:把计算按照逻辑分割成不同的组件,组件之间协同完成业务请求。
- 自动伸缩:实时监控系统的性能与负载压力,自动对性能瓶颈组件进行弹性伸缩
- 数据区分:采用水平、垂直、功能等维度分布式存储到不同物理节点,提高扩展性
- 数据多副本同步:利用多副本技术保障数据可靠性,根据需求选择不同的副本同步策略
- 诊断&监控:收集请求、运行时、故障及性能计数等信息,定位瓶颈、故障及错误恢复
- 多DC部署:从容错、负载均衡、数据保护等角度实现多中心部署架构及流量路由/切换
- 度量&容量规划:对服务流量、性能、资源需求进行监控,度量服务需求,对资源进行合理规划
举例:消息中间件
举例:消息中间件选型依据
消息编程注意问题:
- 根据队列长度自动扩展
- 消息故障时熔断保护
- 并发消费时负载均衡
- 基于优先级处理消息
- 排队削峰
- 超级监控确保分布式事务
推动MVC转向CQRS:
服务治理问题
- 服务治理:服务的元数据信息集中进行管理,包括服务路径、参数、描述、优先级等;服务实例向注册中心发布该服务信息
- 服务分析:跟踪调用,从服务调用频度、服务依赖、服务扇入扇出数、服务响应延迟等多个维度分析服务
- 自动弹性:根据服务分析结果和预定义的策略(如阈值)对服务实例数、服务资源分配等进行弹性伸缩,提高服务质量
- 服务可用性:自动化检测服务可用性,并在发生可用性故障时快速实现主备切换,不影响可用性
- 版本管理:提供服务实例的多版本管理能力,提供版本升级、版本回退、灰度升级等版本管理功能
- 访问控制:提供访问控制机制,能够实现基于策略的访问控制,包括黑白名单、可用性范围等
- 服务质量保障:包括服务弹性伸缩、流量控制、服务等级划分等,确保服务性能达到SLA规定。
- RPC框架:服务运行时平台的选型对于服务开发与服务运营都是关键性因素,候选技术包括spring boot、docker等
服务架构:解决服务发布、发现、调用、可用性维护、QoS控制、负载均衡等一系列问题。
运行支撑:提供服务封装、部署、运行监控、信息收集、弹性伸缩、主备切换等功能。
开发实施:提供开发SDK、多语言绑定、程序框架、部署测试工具集等,支撑服务开发开发部署。
服务治理框架:
基于Thrift的服务治理实现框架
基于Thrift的服务治理关键技术
应用编排&持续部署
Docker Compose vs Cloudify:
应用配置管理
应用配置三要素:
- 配置类型:不同的类型对应不同的处理流程,比如配置文件类型由配置文件插件处理;支持的类型包括:文件、可执行命令(shell或其他可执行程序)、SQL命令等。
- 配置输入:不同的配置类型,其输入格式分别对应于配置模板文件、可执行命令(文件)、SQL语句;同时,配置输入还包括配置所需的其他参数,比如配置目标路径等,供插件具体执行配置时作为输入参数。
- 配置阶段:配置分为检查阶段、环境准备阶段、部署前阶段、部署后阶段、启动前阶段、启动后阶段等,配置阶段定义了配置操作发生的阶段点(Stage),根据不同的配置,对应不同的配置阶段。
配置模板:
自动化弹性:
Riemann:
流操作:
PaaS平台:应用视角
面向平台与服务的应用开发:
- 持续集成:应用的构建、容器封装、配置及接口注册都通过持续集成平台完成
- 服务调用:通过服务相关SDK对平台中的服务进行查询、调用、路由及异常响应
- 对外发布:声明要发布的平台和访问路径,平台解析后调用相关服务接口发布
- 消息通信:接入公共消息平台订阅消息,也可以创建自己的消息及订阅别人的消息
- 配置同步:应用的配置项及对外发布的配置信息都通过平台配置服务统一发布
- 数据存储:平台数据存储服务路径作为配置;或者通过服务接口调用存储服务
- 任务管理:调用平台提供的任务接口,实现任务注册、注销、定时执行等
- 日志管理:平台统一进行日志收集,不用管理日志,只需要按照正常日志输出即可
总结:4点经验分享
经验一:PaaS建设需要顶层设计
PaaS的范围很广,运维、开发、服务中间件、应用运行时,Platform as a Service,capability is the key.
经验二:PaaS建设需要场景驱动
要迁移到PaaS平台的应用是什么,触发迁移到PaaS平台的技术/非技术因素(高并发、统一平台、互联互通等)。
经验三:PaaS建设API设计是关键
针对不同的服务设计api,统一考虑,通过服务治理统一服务的发布、查询、离线、升级、服务治理、访问控制等。
经验四:PaaS建设需要考虑环境适配
IaaS环境、安全环境、流程环境、角色体系。