如何从零开始搭建生产系统

搭环境,其实是很多人学习的第一步,因为只有搭好了基础环境,才能使用各种工具。在自己的电脑搭一个私人的环境就非常简单,什么都不用思考,按照教程达到工具能跑通的程度就可以了,后面就可以自己去随心所以的使用工具。但是,如果我不只是想要自己捣鼓几个轻量的小工具,而是想把整套系统应用到生产环境,就没有那么简单。

正巧最近工作在调研技术升级,需要将一些传统技术上云,相当于需要从零搭建一个全新的生产可用的系统。今天就来聊聊一些心得。

什么是生产系统

在公司级别的应用部署环境,一般分为开发,测试和生产环境。其中开发环境用于个人开发测试程序,测试环境专门执行系统的测试工作,生产环境部署正式业务。当开发工程师开发完程序,并自己调整测试完毕后,就可以将程序流转到测试环境。测试环境由专门的测试工程师对开发程序进行系统的测试流程,例如压力测试,冒烟测试等。当测试通过后,程序便可以流转到生产环境正式上线,接受正式用户的流量,正式履行工作职责。

生产系统,故名思意,即运行在生产环境,正常可用的系统。它和我们一般意义的程序软件的不同点在于:首先,它是生产可用的。这意味着,这个系统,肯定需要满足最严格的部署流程,各项参数需要调整到最佳状态,确保它的运行能完美达到你的预期。因此,除了系统本身功能性的联通外,你还需要考虑诸如网络的连通,性能的优化,运维的方式等等,这需要一套完整的架构方案;其次,它是系统,是各种应用的集合体,其内构的复杂程度会影响整体部署的策略选择。因此。部署一个生产可用的系统,需要思考的点还是很多的,如何能快速梳理要点,高效搭建一个生产可用的系统,这就是我接下来想要聊聊的。

搭建前的准备

在准备搭建生产系统前,首先要做的自然是技术选型。相信大家在搭建前,一定有一套自己的架构方案。一般来说,如果搭建前已经有了非常详细的架构方案,那后续正式搭建时自然会简单流畅许多,但实际情况往往是初期的方案会比较笼统,有的可能只是选定某些技术,但缺少具体的搭建细节;有的可能只是选定了某个目标,比如侧重成本考量,或者侧重性能考量,而对技术选型尚未由明确的指定;即使初期的方案足够具体,实际搭建过程中也会出现较多和预期不符的情况,从而让整体的搭建流程不太顺畅。

因此,我认为,在搭建前的准备,方案的详细程度不是最重要的,因为搭建新系统的都动作往往伴随着项目运作,决策层一定是希望能尽快看到项目执行的效果,这要求执行层要动作高效,响应迅速。因此前期的准备工作不必面面俱到,只要要点达成,具备实施的条件,即可动手搭建。

在准备中,由这个几个要点需要注意

  1. 明确目标,确定系统需要达成的目的,这是后续测试系统是否可用的前提

  2. 评估基建可行性。系统的基建,即底层的运行环境,例如公有云或者私有云。无论是哪种环境,都需要确保其具备运行你们系统的基本条件。自建私有云相对简单,因为自己人支持比较方便,如果选择公有云厂商的方案,就要了解其方案的特性,例如我们在选型的时候考虑过AWS的EMR on eks的方案,这是aws基于k8s定制的一套服务环境,但我们经过评估放弃了该方案,因为其中AWS的定制化程度较高,部分组件我们需要替换自研组件难度较大,遂放弃了该方案。在评估过程中可能会存在一些不确定的因素,也可以选择暂时保留,将选型和测试下推到搭建环境,只要时间和人力充足即可。

  3. 合理的时间规划。这其实也是项目管理的一部分,在搭建系统过程中需要梳理时间节点,将流程规范化,防止由于部分因素干扰导致整体目标无法完成。至于如何将搭建环境梳理节点,下面我会讲到。

搭建生产环境

开始着手搭建环境了。先说一下我搭建系统的背景。原先我们用的是云厂商AWS的容器主机,称之为EC2(Elastic Container),上层部署大数据计算服务组件,即Hadoop+yarn+spark。现在因为技术迭代以及成本优化的考量,选择将计算服务上云,把Hadoop 和 spark搬上k8s。因此需要基于公有云厂商提供的k8s环境部署大数据计算系统,目标连通上层调度和下层计算,同时确保服务高可用,用户提交任务方式不变,可以无缝从旧环境切换到新环境。

这里我们就需要明确几个步骤

  1. 系统内循环打通

  2. 系统外循环打通

  3. 底层弹性伸缩自动化

  4. 性能基准测试

  5. 外围设施补齐, 流程集成

系统内循环打通

在不考虑外围因素的前提下,我们首先要做的就是将系统内部的功能串通。例如,搭建一个大数据计算服务,就可以先部署联调好hadoop,hive,spark等组件的功能。因为这部分相对独立,实现比较快速。同时,如果底层基于第三方云厂商,优先调通自身功能可以减少沟通成本,提高效率。

系统外循环打通

当系统内部基本功能实现后,可以尝试接入三方的组件,将系统的“架子”放到底座上。这一步就可以考虑接入efs、s3等外部存储服务,或者其他组件,帮助完善系统功能。

底层弹性伸缩自动化

如果是基于k8s这种可以弹性伸缩的集群,需要考虑伸缩策略,实现资源的高效利用

性能基准测试

当系统已经在新的集群上跑通后,就可以对其进行性能测试,在这个过程中,可以对技术方案进行适当调整,来让最终的搭建方案更满足最初的目标。

外围设施补齐, 流程集成

通过性能测试之后,就可以补充对整个功能影响不大的周边服务,例如监控系统,审计日志,接入服务等。并且可以在这种过程中逐步实现流程的自动化和规范化,例如统一镜像管理,CICD等。

分享到: