NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

我们是如何将 ToB 服务的交付能力优化 75%?

  • 2020-01-14
  • 本文字数:4047 字

    阅读完需:约 13 分钟

我们是如何将 ToB 服务的交付能力优化 75%?

ToB 服务交付的方式分为公有云部署和私有化部署两种。其中,对成本敏感的中小企业往往采用公有云部署的方式,从而尽量减少成本。客单价较高的大型企业、政府、银行和事业单位,考虑到数据隐私、安全、合规等要求,往往采用私有化部署的方式。基于对公司营收的巨大贡献,私有化部署便成为了 ToB 企业的重中之重。


在众多私有化部署的场景中,较为复杂的是公有云厂商的专有云产品,之所以复杂,是因为这些厂商直接将公有云的核心功能打包进行私有化部署,和垂直类解决方案往往提供单一功能相比,其难度可想而知。国内采用该种模式的有京东云的 JDStack,金山云的 KingStack,腾讯云的 TCE 和阿里云的 Apsara Stack。

存在的问题:部署耗时和成本

私有化部署的耗时,一般需要两周左右的时间,给人感觉耗时太长了。但从耗时角度去看的话,一个大单从开始到最终结项,历时半年到一年是很正常的,这样看,两周的部署耗时占比不到 10%,并非项目交付耗时的主要矛盾点。


但如果两周部署耗时的背后,是从研发团队抽调了几十名高级工程师加班加点,夜以继日换来的,可能大家都无法淡定了。假设一次大型央企的异地私有化交付项目,部署耗时 20 天,期间现场累计参与人数超过 60 人,现场峰值人数超过 30 人,30%的人员是高级工程师,相关人员频繁往返于两地间,粗略估算一下成本,至少 50 万,这样的模式,只能是在起步阶段交点学费吸取点教训。


在部署耗时的优化上,还需要考虑客户所在行业的特殊性,尤其是关系国计民生的领域,互联网的快速迭代,越变越美并不一定适用。我们可以建议在入场前将我们需要的资源准备完毕,但也只能是建议。对于在现场部署过程中,诸如各种审批流程和要求,甲方工作人员每天的工作时长,基于安全因素对数据传输和拷贝的限制等等,都会影响最终的部署耗时。


因此,相比于部署耗时的优化,对部署成本的控制更现实一些。如果部署工作是由外包来进行的,且过程中不需要公有云厂商的技术支持,那么只要部署耗时控制在客户可接受的范围即可,厂商也会因此具备大规模批量实施的能力。


存在的问题:质量缺陷

什么叫做质量缺陷呢?简单来说,在你完成一套专有云产品的私有化部署之后,最严重的情况,可能这套系统完全无法使用,大部分时候,都会有一小部分功能无法使用。


质量缺陷的影响是什么?最糟糕的情形莫过于你成功的将你的客户转化成你的测试团队,从你部署的系统中,源源不断的反馈各种问题,进而逐渐失去了客户对你的信任。


既然是在公有云验证过的产品,为什么私有化部署还会出现这么多的功能不可用(或者称之为质量缺陷)?我觉得有如下两点:


复杂度:从厂商角度看,公有云产品由数百个模块构成,对外提供几十种功能,涉及到从网络,硬件,操作系统,程序,配置,上下游依赖关系,数据等方方面面,这样一个在公有云厂商中往往是多个部门上千人耗费数年打造的产品,现在让刚成立的交付团队来搞定一个由上千人参与的复杂系统,其难度可想而知,仅仅是能够熟练使用公有云产品提供的这几十种功能,就需要花费很长时间,更何况还要面对数百个模块,数百种配置文件,数百个模块间的复杂依赖,不同的开发语言,几乎涵盖了业界所有主流的开源软件等,以及为了一个小功能牵一发而动全身的痛苦。


兼容性:从客户角度看,不同行业不同客户,真可谓是千人千面。基础设施的供应商不同,组网协议不同,硬件的品牌型号规格不同,操作系统和内核版本不同,登录和认证方式不同,等保要求不同,资源提供方式不同,还有各种极小众的东西,比如非常生僻的数据库,十几年前的软件,小众的编程语言等等。专有云产品为了兼容这些差异,必然需要临时开发一些定制化功能,这也成了质量缺陷的重灾区。

存在的问题:可运维性

为什么在公有云环境下大家反馈良好的产品,在私有化部署中被如此吐槽,主要是因为在公有云场景下,问题被化整为零了。


举例来说,各个产品做的都很不错,每个产品平均仅存在一个部署的小问题,这对于一个研发了数十个模块,拥有百十人规模的团队来说,已经是不错的成绩了。但同样的问题,放在私有化环境下,就不好玩了,五十个产品,每个产品部署的时候都有一个小问题,而交付团队人员少,对系统的掌握程度也不如研发团队,你让他怎么办?


某云提供的运维手册,多达 2100 页,80MB 的体积,我都不知道自己上次看这种大部头书是什么时候了。当然,文档也是交付的必要内容之一,从这个角度来说,某云在国内做的还是很好的。

如何解决存在的问题呢?

通过降低部署环节的技术难度,实现一键部署的能力,将交付工作交给外包团队,从而具备大规模批量交付的能力。整个的过程大致如下:


  • 第一步,对部署流程进行原子化拆分;

  • 第二步,对每一个原子化的部署步骤进行标准化改造,例如以统一的全局错误码进行异常输出,便于查找解决方案;

  • 第三步,对每一个部署步骤均进行多次的部署可靠性验证和回滚验证,确保每一个原子的部署操作具备较高的成功率,同时回滚后不会有任何影响二次部署的残留物;

  • 第四步,为每一个原子操作提供功能测试能力,确保仅在该操作正确无误后,才会进入下一个操作环节;

  • 第五步,梳理各个原子操作间的串并行关系和依赖关系,从而生成部署时序图,进而基于部署时序图打造出一键部署能力。


这里需要注意的是,一键部署并不等于全自动化部署,在相当长的时间,可能也无法做到 100%的全自动化部署,很多环节尤其是前置依赖还是需要客户配合的。


业内众多厂商也在提一体机的概念,一体机的解决方案确实更好,理想情况下,把一批机器放到客户的机房,加电并设置网络就可以使用了,而且公有云厂商的硬件成本更有优势,客户也能看到"实物”,只是在当下,主要是在企业客户中使用。


值得注意的关键点

部署流程图,是整个解决方案中最重要的环节,没有之一。类似于工程施工图,将整体工程从无到有的所有过程、环节、工艺标准、施工要求、依赖和注意事项,进行完整的说明。部署流程图决不能止步于模块部署的内容,而是要涵盖从网络的实施、硬件的上架、操作系统的安装到部署服务的所有环节,这样才能保证一键部署的成功率。找一个完全空白的环境,不断的从零重建,相信大家都可以梳理出完善的部署流程图。在这里再次提醒大家,要覆盖所有环节,尤其是那些你从未接触的部分,以我为例,在交换机参数配置上就吃过好几次亏。


功能验证,以客户的定制化需求为例说明,研发开发完毕自测通过,测试也通过了,运维验证通过后打包发版,交付发现功能上有缺陷,这时候,研发可能就愤怒了,有问题,怎么不早说!因此,功能验证是需要整合产品、研发、测试、运维、安全、法务、合规、交付和客户各种角色对功能验收的要求,便于及早发现问题,减少返工的成本。具体来说,在每个原子操作执行完毕后,对涉及到的功能、接口、页面进行充分的验证,在每个阶段完成后,也要对该阶段的组合功能进行验证。同时,对于相关模块的实例数量,实例规格,依赖,健康状态,配置正确性,错误日志以及性能指标等进行检查,以及相关的配置是否真正生效。多管齐下,确保能够准确判断每个原子操作执行的正确性以及在异常情况下尽可能给出异常原因。


一致性维护,通过 Puppet 等配置管理工具来确保服务器配置的一致性,如 NTP、DNS、YUM、信任关系、日志统一收集、工具列表和版本以及系统参数,避免手工维护缺失和遗漏导致的质量缺陷问题。例如在部署阶段,NTP 时钟不同步导致的趋势图无法展示实时数据,进而耗费了非常大的人力来进行问题定位。


检查清单,主要是对标准规范、统一配置、最佳实践,易错问题且会导致严重后果的问题再次确认,避免后期的大规模返工或者故障。例如,配置变更后需要重启服务器才能真正生效的策略,不仅要检查其配置是否生效,还需要在相关步骤执行完毕后,确保检查服务器的运行时间;通过 Systemd 拉起的服务,要检查其设置了开机自动启动;系统安装后,要确保所有磁盘均为 XFS 格式且全部写入系统配置中;所有用户定制化内容,全部需要再次检查是否生效,如不同用户要求的超卖比。


虚拟化和启动自检,将模块实现虚拟化部署,从而能够和硬件、组网协议、IP 地址等用户资源解耦,实现镜像在多套环境下的固化,从而大幅提升模块部署的成功率。短时间内无法实现虚拟化部署的模块,则必须实现启动自检功能,在物理机或者虚拟机环境下启动前,需要检查环境是否满足自己的要求,例如 JAVA 是否可用,版本是否符合要求,Swap 是否关闭等。


全局标准化,以服务启停方式为例,全部收敛为 Systemd 方式拉起服务,用户仅需要知道进程名就可以实现任意服务的启停操作,日志切分则全部由程序自行实现,不通过外部的 crontab 来进行,这样既降低了复杂度,也大幅提升了可运维性。


插件化,对于专有云产品的定制化功能,尽量由系统通过插件的形式来支持,避免直接修改相关代码导致后期的不可维护。以登录功能为例,目前所有的主流公有云,都支持多种登录方式,这样,在专有云模式下,多增加一种登录方式,其对系统整体的影响就非常小了。

最终效果

通过一键交付整体解决方案的落地,私有化部署的成功率大幅提升,我们目前已经可以确保交付后所有核心功能均可正常使用。同时,私有化部署的耗时,在我们可控的阶段,控制在 3 天内。


另外,我们的兄弟团队,提供 SaaS 化服务的私有化交付,复杂度略低一些,在采用我们的方案,半年间每月交付能力提升了 3.6 倍,从每月 3 套提升到每月 14 套。


下一步发展计划

在解决私有化部署过程中的问题后,接下来的重点工作是提升系统的自动化运维水平,降低系统的运维成本,逐步将运维工作从厂商交接给客户的运维团队。主要在两个方面发力:


操作平台,将日常运维工作中的各类场景(包括但不限于日常巡检,故障处理,版本升级、预案执行、问题定位、配置变更、补丁升级),进行标准化的文档改造并录入到操作平台,然后按照使用频率和重要性逐步将各类场景进行自动化和智能化的升级,减少运维人员需要介入的频次。


可视化,运维人员的主要工作从执行变为监督,因此可视化会变为主要的使用工具。通过各类大屏,将系统的运行状态、健康度、核心指标、容量数据等关键信息进行实时展示,便于运维人员了解情况。


2020-01-14 17:1323525

评论 4 条评论

发布
用户头像
其实,下一步计划中,还应该包括版本如何进行升级,日常更新如何进行,大版本更新如何进行,毕竟是私有化的交付环境,用户使用一段时间后,也可能会有很多的调整和变更,更新难度很大
2022-03-10 10:52
回复
用户头像
很多时候,公司云平台在搭建的时候没有想到将来的私有化,很多环节在设计和实现的时候并没有做很强的解耦,比如一些前置的saas服务,控制服务等等,还有整体的控制面板与公司的sso服务做了较强的绑定。这个咱们有遇到这种情况么?怎么推进的
2020-02-24 00:17
回复
用户头像
一键部署的截图,并非实际业务的截图,而是采用了一家药品公司FDA认证各个环节的展示图,但表达的含义是类似的。
2020-01-15 09:51
回复
很多时候,公司云平台在搭建的时候没有想到将来的私有化,很多环节在设计和实现的时候并没有做很强的解耦,比如一些前置的saas服务,控制服务等等,还有整体的控制面板与公司的sso服务做了较强的绑定。这个咱们有遇到这种情况么?怎么推进的
2020-02-24 00:17
回复
没有更多了
发现更多内容

Pandas的介绍及 Series、 DataFrame的创建

智趣匠

pandas pyhton 10月月更

前端比较好的培训机构是哪家?

小谷哥

从“青铜”到“王者”,制造企业的数字化闯关记

脑极体

埃森哲《2022中国企业数字化转型指数》: 中国企业数字化进程五年间稳步推进,17%企业成领军者

雨果

数字化转型

Gartner:通过数字投资缩短价值实现时间的必要性

雨果

数字化转型 CIO

主导未来的前 5 大数据科学趋势,你知道几个?

雨果

数据科学 DaaS数据即服务

和鲸 ModelWhale 入选《2022爱分析 · 数据智能厂商全景报告》

ModelWhale

机器学习 数据智能 数据科学 厂商

九科信息RPA助力某大型航运企业财务部门降本增效,实现业务流程自动化操作

九科Ninetech

壳牌公司利用数字孪生推动绿色工厂计划和氢能经济

雨果

数字化转型

企业选型必读:选择数据湖or数据仓库?

雨果

数据仓库 数据湖

再见 MySQL!这可能不再是一个哗众取宠的梗了

雨果

MySQL 关系型数据库 开源数据库

分层的电子签市场,被忽略的小微企业

ToB行业头条

数字化转型如何成为增长和创新的工具

雨果

数字化转型

web前端开发培训有前途吗?

小谷哥

让你的 Runner 可视化,使用 Prometheus + Grafana 实现极狐GitLab Runner 可视化

极狐GitLab

DevOps Grafana Prometheus runner 极狐GitLab

C# 关于多态性学习

IC00

C# 学习 上位机 10月月更

数字孪生与未来城市建设

雨果

数字孪生

拳头产品|海泰虎讯,新一代安全即时通讯系统

电子信息发烧客

6种容器接入方式

阿泽🧸

10月月更 容器接入

Spring Boot「19」WebApplicationInitializer源码分析

Samson

Java spring 学习笔记 10月月更 spring-web

如何选择数据

智趣匠

索引技术 DataFrame 10月月更

“程”风破浪的开发者|我的js之路

隔壁老帆帆

学习方法 1024 1024程序员节 “程”风破浪的开发者

软件工程师的核心竞争力是什么?

老张

职场成长 核心竞争力

Spring Boot「20」从 DispatchServlet 开始一个请求的处理过程

Samson

Java spring 学习笔记 10月月更 spring-web

精品方案|基于医疗机构的突发公共卫生多点触发监测预警系统 实现疫情精准防控

电子信息发烧客

腾讯升级云原生产品布局 助力企业数字化转型更进一步

科技热闻

Java 字节码简介

Kian.Lee

Java JVM bytecode 字节码

C#泛型协变和逆变概念学习

IC00

C# 上位机 10月月更

Hive基本架构

穿过生命散发芬芳

hive 10月月更

如何查看 Series、DataFrame 对象的数据

智趣匠

Python serialVersionUID 10月月更

DataFrame 的拼接

智趣匠

Python ApplicationContext 10月月更

我们是如何将 ToB 服务的交付能力优化 75%?_服务革新_焦振清_InfoQ精选文章