管控面与数据面的差异与思考

定义

管控面对最终用户提供服务,包括console、API、sdk等,还需要对整个流程进行编排,包括创建数据中心、创建 保护实例、创建容灾卷、将容灾卷挂载到复制网关、获取被保护虚拟机详情等。

数据面完成最终的业务功能,实现数据的流动和存储。

区别

整个云计算其实大部分都是管控面。管控面繁杂,数据面单点更难。

管控面的竞争力

管控面更接近用户,对易用性、适应性要求高。灾备产品不属于用户粘性产品,用户不会经常去控制台进行操作,因此对高并发要求倒不是很高。

快速迭代能力

  • 公共基础能力,包括操作系统、DB、消息队列、微服务框架等。
  • 高效的流程,缩小特性上线周期TTM。

易用性

  • 界面
  • API/SDK
  • 编排能力

生态系统

单纯卖虚拟化、磁盘的时代已经过去了。

  • SAAS集成
  • 应用支持度

管控面难点

  • 数据模型和API设计,这个设计好之后确实很多开发就是CRUD。数据模型很多时候决定了后期的扩展能力和易用性。
  • 与周边系统的集成,与不同部门的人沟通,拉通对齐。每个人都有自己的屁股,希望自己的模型改动少,架构不腐烂。
  • 基础组件、公共服务能力,比如数据库、消息队列、安装部署、扩容、监控、PaaS平台(k8s)等。
  • 架构统一,不同架构的管理面整合成统一的备份服务,提升开发、运维效率。

数据面的编码难点

内存是TOP1问题。

规避手段:

  • 使用智能指针,尽量避免内存手工动态分配。通过shared_from_this来延长生命周期。
  • 尽量使用局部变量,通过右值引用延长生命周期
  • 使用valgrind工具进行内存泄漏检测
  • 代码检视,从多个角度进行审视

并发是TOP2问题。

规避手段:

  • 尽量避免用锁,一是提高效率,二是防止死锁。
  • 划分不同的线程池,主线程用来串行,通过队列等保序;使用线程池处理大量异步任务,处理完扔完主线程。
  • 设计时想清楚哪些放在主线程,哪些放到线程池;具体来说就是消息的收发放到主线程,数据处理如合并、压缩、hash等放在线程池。
  • 合理设置线程数,线程太多不一定好,有可能造成相互抢占CPU资源形成等待。
  • 避免使用sleep,采取重新调度的方式。

数据面的三座大山

数据面面临三大挑战:性能可靠性安全

可靠性提升方法

进行软件sfmea故障模式库分析,分析不同故障如进程重启、网络故障、磁盘IO响应慢等各种场景下软件应该如何应对。通过故障点注入的方式进行验证,本质上就是通过编译宏改变函数处理流程,直接模拟异常场景,比如S3无法下载数据。

安全提升方法

根据安全checklist逐一排查。

DRA难点

数据模型

以dataset为粒度进行处理,提升数据处理能力。

线程调度

数据传输目标为又快又好,将调度模型划分为三种:

  • 主线程:消息收发,保证顺序,在主线程中不同有任何阻塞。
  • 线程池:迸发异步处理后台任务,包括压缩、hash、s3上传下载等。
  • 只包含一个线程的线程池:处理既需要保序又需要异步,如写文件、更新done文件等。

dataset编号

将dataset分别三种:

  • 正常dataset:每个dataset带上编号。
  • skip的dataset:记录skip的开始和结束。
  • 完成的dataset:通过done文件标记。

dataset编号始终以s3中存在的数据为准。

buffer机制

通过buffer保证传输不会过载。

results matching ""

    No results matching ""