基于“微服务+容器化”实现空间规划应用平台快速搭建

极海云 Jun 21, 2019
1. 一次难忘的软件部署经历

2015年极海云上线,不久便得到一家国字头单位合作的机会,需要把极海云部署在离线环境。为了保障顺利部署,大家做了周全的准备,把各种依赖库全部下载打包,模拟用户服务器环境部署测试。万事俱备,我们兴奋地哼着小曲来到用户机房。然后,噩梦开始了... 由于服务器环境的差异,要么缺少基础库,要么需要安装的依赖库和现有库有冲突。因为服务器完全离线,我们不得不数次往返于公司和用户机房,该下载的下载,该编译的编译... 最终我们用了一周的时间,才让极海云在用户服务器上运行起来。

这一次难忘的软件部署经历之后,我们开始研究如何提升软件交付效率。借助“微服务+容器化”技术,极海云已形成具备云原生能力的地理大数据云平台架构(如下图所示),可以在30分钟内完成对不同规模服务器集群的自动化部署。这背后其实是微服务架构的落地和容器技术的崛起。微服务和容器技术以一种自然而优雅的方式结合在一起,重新定义了软件交付的方式。这篇文章将阐述我们如何利用“微服务+容器化”重构极海云架构,以及如何更好地服务于如火如荼的国土空间规划平台建设。

2. 微服务带来软件架构优化

从早期传统的单体架构,到后来的SOA(面向服务架构),再到现在的微服务架构,软件架构在不断的发展迭代。随着软件规模越来越庞大,处理的业务越来越复杂,人们总能发现当前架构的不足并试图给出新的解决方案。微服务虽然是2014年才开始流行的概念,但其实是软件规模和软件架构长期持续演进的结果。微服务架构的出现,对当前互联网和云计算环境下的软件开发和交付形式,产生了深远的影响。

2.1 微服务的概念

简单来说,微服务就是一些协同工作的小而自治的服务。微服务是一种架构风格,一个大型复杂软件由多个微服务组成。微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注完成一件任务,每个任务代表着一个小的业务能力。微服务的概念是相对于传统的“单体架构”的概念提出的,微服务具有以下特点:

  • 耦合程度。微服务架构开发人员只需处理小型代码库,程序之间更容易松耦合。
  • 成员职责。可按照微服务分配团队工作,开发人员职责更加明确。
  • 技术堆栈。微服务可根据实现功能选择更合适的不同的开发语言和库。
  • 持续交付。单体程序要更新整个应用,微服务可独立部署,持续交付更加容易。
  • 可伸缩性。单体程序需要多个副本,微服务可根据所需资源扩展各自数量。

2.2 微服务的价值与挑战

微服务的价值在于把软件系统按照业务划分成粒度适中的功能模块,彼此独立松耦合,通过相互调用实现完整的业务逻辑。对于开发企业来说,微服务带来团队更明确的分工、更快速的开发效率、更高效的持续交付。很有趣的一个现象是,我们发现最终用户对微服务也很在意,他们更倾向于采用微服务架构的软件。对于最终用户来说,微服务架构保证了对用户需求的快速响应和及时交付。

当然这世界上没有银弹,微服务架构也是一把双刃剑,不是所有软件都适合微服务,实施过程中也面临新的挑战。首先微服务架构是一种分布式架构,服务之间的调用由单体架构下的引用调用变成远程调用,开发和调试都带来复杂性;其次,因为服务之间的依赖,测试微服务也变得复杂;再者,一个软件系统会有几十甚至上百上千个微服务,每个服务都有多个实例,如何配置、部署、监控、发现微服务并实现高度自动化,需要有新的方法和工具来支撑。接下来要介绍的容器技术,为微服务架构的落地提供了解决方案。

3. 容器化改写软件交付方式

容器技术由来已久,最早可追溯到1979年贝尔实验室尝试用“容器”的概念,在操作系统环境下“隔离”出一个可供软件构建和测试的环境,以此提升软件测试效率。2008年,LXC(Linux Container)作为完整的容器技术出现在Linux内核中。而容器技术真正被大众所熟知并大规模应用,要等到2013年开源项目Docker发布。以至于很多人认为容器就是Docker,Docker就是容器。而Docker其实是在LXC基础上,用一套漂亮的设计让Linux容器技术具备了大规模应用的可能性。Docker和LXC的关系,可以理解为GitHub与Git的关系。Torvalds花两周时间写出来的Git,专业而小众,而GitHub让全世界程序员都用上并爱上了Git。事实上,Docker的镜像设计确实也从GitHub的设计上受益良多。

3.1 容器的概念

容器技术(Linux Container,LXC)是一种内核轻量级的操作系统层虚拟化技术。容器提供了将应用程序的代码、运行时、系统工具、系统库和配置打包到一个实例中的标准方法。一个宿主机上的所有容器共享一个内核(操作系统)。容器化就是把应用程序打包成容器运行,是应用程序级别的虚拟化。容器具有以下特点:

  • 极其轻量。容器仅打包应用程序、配置和依赖库,所占存储少,一般为MB级别。
  • 秒级启动。容器启动时间为秒级,虚拟机为分钟级,可大大减少开发、测试、部署的时间。
  • 易于移植。一次构建、随处部署,完全离线的环境也是如此。
  • 接近原生。在容器内运行的应用程序,性能接近原生,远高于虚拟机内运行的程序。

3.2 容器的价值与挑战

容器技术的价值在于重新定义了软件交付的方式,让微服务架构落地。分层的概念、一次编译随处部署的特性,使得Docker在容器技术的竞争中胜出。Docker通过容器镜像,直接将一个应用运行所需的完整环境,即整个操作系统的文件系统打包进去。镜像一旦编译完成,可以在任何Docker环境中运行,我们再也不用面对文章开篇描述那样的窘境。Docker容器镜像已经成为了现代软件交付与分发的事实标准。

容器技术实现了应用的微服务化和单一职责化。但真实的软件系统,是由很多微服务构成的。这些服务的应用和管理具有复杂性,又需要灵活性,尤其是在云计算环境中。其中最为重要的是如何解决容器编排问题,这成为Docker的大规模应用的最大障碍。Docker在取得了容器技术的胜利后,却在容器编排竞争中失利。这一次,在容器技术方面有着深厚积累的Google(LXC就是Google贡献到Linux内核的)推出Kubernetes并占得先机。Kubernetes提出一套容器化设计模式和对应的控制模型,让软件程序具备了云原生的能力。

4. 微服务+容器化构建极海云

那次难忘的软件部署经历之后,我们开始对软件架构和交付形式进行渐进式调整。一是实施微服务架构,把软件程序按照功能模块划分为粒度适中的微服务,提升迭代效率;二是通过Docker技术,以容器镜像的方式交付分发微服务,提升交付效率;三是采用Kubernetes作为容器编排和管理工具,实现整个平台的云原生能力。Kubernetes是整个“云原生”理念落地的关键与核心所在,Kubernetes架构如下图所示。

极海云架构如下图所示。用户可直接通过浏览器访问前端应用,开发者通过API做定制化应用开发,统一由后端服务输出能力。前端应用、各种API、后端服务都以微服务的形式运行。目前极海云内部运行着几十个微服务,不同的微服务分配不同的资源,运行不同的实例数量,达到硬件资源的最大化利用。“云原生”能力让极海云脱离了对具体硬件环境的依赖,可以部署在阿里云这样的IaaS环境,也可以部署在由物理机或虚拟机组成的服务器集群环境。极海开发团队,针对微服务有着明确的分工,内部通过实施DevOps对微服务快速迭代,对用户需求快速响应并及时交付。

5. 实现空间规划平台快速搭建

随着国家和地方机构改革方案落地,自然资源部及各地方自然资源和空间规划部门相继成立,空间规划进入新时代。而“规划编制”是规划工作的首要环节,是构筑智慧国土空间规划的先发基础。伴随“大智移云”技术逐渐成熟,如何将其与规划编制业务流程有效融合,用以匹配支撑“可感知、能学习、善治理、自适应”的数据驱动的“智慧规划”不同深度的业务要求,是推动国土空间治理体系和治理能力现代化的重要起点。

智慧国土空间规划编制工作,如何能优质快速地实现数字化工作状态,成为当前时间紧、任务重的工作要求。极海快速响应,以极海云为基础,基于“微服务+容器化”,已经研制并建立了一套集数据管理、空间数据分析、专题图制作为一体的空间规划辅助编制平台。目的是为规划编制人员优化规划编制工作流程,打造高效协同工作模式,从根本上满足和保障智慧规划编制质量和效率要求。

Comments

Not using Html Comment Box  yet?
Anonymous · Mar 31, 2022

rss
Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.
分享