[]
        
(Showing Draft Content)

如何设计生产环境的部署方案?

推荐阅读

技术决策者

项目经理

高级技术人员

初级技术人员

测试人员




type=info

生产环境是指提供给最终用户使用的服务器。相比于开发阶段的测试服务器和集成测试的验证服务器,生产环境对性能和可用性要求更高。为了确保系统的可用性和性能,推荐您采用最大并发请求和最大数据量估算资源需求,并且定期关注性能指标,及时扩容。

一、为什么要投入精力来设计部署方案?

使用活字格开发的应用和用C#、Java编码开发的应用一样,需要运行在特定的运行平台上,与其他服务配合才能正常使用。根据项目的特点,您可以有针对性的设计出合适的部署方案,在有限的预算内,最大限度提升系统的可用性和性能。

完整的活字格运行环境由3个角色构成,这里的“角色”不是管理控制台上用于控制权限的角色,而是系统部署架构中的概念,指可独立部署,为系统运行提供某项服务的软件或套件。

  • 活字格服务管理器:加载使用活字格开发的应用,为最终用户提供Web服务,类似于编码开发的IIS/Tomcat

  • 数据库:存取业务数据和非业务数据(如用户、组、权限等)

  • 文件存储:存取用户上传的图片、视频和附件等文件

如何将这三个角色部署在生产环境中?我们为您提供两个选项,共计4种方案。

二、中小型应用,最“省心”的选择是活字格云

活字格云平台架构图


活字格云是官方提供的PaaS云平台,由以下角色构成

  • 服务器管理器:活字格官方运维的容器,独占资源,安装有活字格服务管理器程序

  • 文件存储:活字格官方运维的高可用文件服务

  • 数据库:标准的MySQL、SQL Server服务,独占资源,可选高可用服务

如果您的情况满足以下条件,使用活字格云可以有效减轻运维负担和总体成本,提升系统的安全性和可用性。在实际使用中,活字格云具备以下能力,帮助您构建安全可靠的系统运行环境。

  • 连接:允许通过互联网(外网)访问该系统

  • 数据:允许将数据和服务存储在等保三级的公网服务

  • 规划:不需要将活字格服务器与其他服务或软件的服务器合并到一台主机

三、灵活性强,自主可控性高的场景,建议选择私有化部署(支持局域网或云主机)

如果您希望对机器持有完整的控制权,推荐采用私有化部署方式。根据预算和项目需求,生产环境的部署方案有单机、标准和集群3种;运维和开发环境也可以进行裁剪和调整。


活字格私有化部署模型图

3.1 生产环境

生产环境的配置对系统可用性和性能的影响最大。通常情况下,提升部署节点(服务器或虚拟机)的数量和配置,就能提升系统的性能。

部署方案

成本(服务器台数)

可用性

性能

推荐的应用场景

单机

1

简单或临时使用的应用

标准

2

非核心业务,使用频率不高的核心业务(如数据同步、流程整合等)

集群

>3

高频要求的核心业务场景(如生产排产、物流跟踪等)

3.1.1:标准部署,适用于中小型应用或企业内部使用的场景

为了提升性能,我们推荐您将数据库从活字格服务管理器所在的机器上独立出来。这种做法需要用到2台服务器(应用/网关服务器 + 数据库服务器),虽然每台服务器的配置较单机部署更低,但总成本会稍高一些。

image


端口配置

  • 22或3389:SSH(Linux)或远程桌面(Windows),仅允许管理员指定的特定IP(堡垒机)访问

  • 443或80:HTTPS或HTTP端口,最终用户通过该端口访问使用活字格开发出的站点

  • 22345:活字格应用发布用端口,仅允许管理员指定的特定IP(CI/CD的发布用Agent)访问,详情:配置管理:测试环境、验证环境、生产环境与CI/CD

Tips:

  • 多数场景下,Linux的安全性风险更低,推荐采用活字格官方支持的发行版本,如Ubuntu 20,CentoOS 7等

  • 如果从单机部署迁移到标准部署,考虑到系统开销,两台服务器的总配置需要略高于原来的单机部署,如将8C16G拆分为6C12G和4C8G

  • 两台服务器需部署在同一局域网,或云服务商的同一个内网(vNet)中,以确保数据传输速度

  • 活字格所需的硬件配置与用户数和应用场景有关,在活字格产品白皮书中,有两档(250-1000用户/500-2000用户)的推荐配置表,按照该配置购买云主机(如阿里云的ECS),可以满足大多数企业管理型应用场景

  • 推荐采用nGinx做反向代理来实现日志、黑白名单等网关功能,点击查看配置方法,如果不采用反向代理,则需要在活字格服务器上启用SSL提供HTTPS

3.1.2:集群部署,适用于大型应用或对外提供服务的场景

一台服务器的处理能力终归是有上限的,您可以利用支持负载均衡技术的集群化部署,实现“横向扩展”,持续扩大系统的计算能力,更快速的响应大并发请求。在传统集群能力的基础上,活字格内建了下列功能,可以帮助我们快速完成部署和维护工作。

  • 图形化的配置能力,包含:数据库、缓存服务、文件服务

  • 用户和角色等非业务数据自动同步,登录任意节点的管理控制台,均可对全集群的非业务数据进行修改

  • 应用自动分发,仅需对集群中的一个应用节点执行部署或更新,集群会自动将其同步到所有节点

根据实际部署要求,有两种不同的搭建方式:在局域网中构建以及利用云服务商提供的基础设施搭建。集群部署的授权价格请详询葡萄城的商务人员。

A. 在局域网中构建集群(反向代理模式)

活字格反向代理模式部署


以nginx为代表的成熟的反向代理服务器(Layer 7软件负载均衡)在性能和可靠性方面与传统的Layer 4端口转发器差异不大,成本低很多。详细的搭建文档参见:活字格智能集群搭建方案(私有化方案)

B. 利用云服务商提供的基础设施(端口转发模式)

活字格端口转发模式部署


详细的搭建文档参见:活字格@AWS智能集群的架构与搭建方案(本方案采用了葡萄城生态合作伙伴亚马逊中国提供的Layer4负载均衡和其他服务,如需在其他云服务商中寻找替代方案,请咨询云服务商的技术支持人员)

3.1.3:单机部署,通常用于项目前期演示或技术验证,不推荐用于生产环境

顾名思义,就是将活字格服务管理器和数据库部署在同一台机器上。这是成本最低的部署模式,在性能和可用性上需要作出妥协。

活字格单机部署架构图


端口配置

  • 同“标准部署”

Tips:

  • 除非并发请求数量极低,否则不推荐使用内置库

  • 数据库需要占用内存和CPU资源,在评估机器的配置时,需要将数据库的要求纳入其中

  • 多数场景下,Linux的安全性风险更低,推荐采用活字格官方支持的发行版本,如Ubuntu 20,CentoOS 7等

3.2 开发与测试环境

为了避免开发测试工作对生产环境的影响,降低数据损坏、数据泄露、服务暂停等风险,强烈建议您单独部署一套测试环境。测试环境的服务器和数据库均需要和生产环境保持隔离。完整的开发与测试环境包括:

  • 代码仓库,如GitLab

  • CI/CD服务器,如Jekins、TeamCity

  • 测试用应用服务器

  • 测试用数据库服务器

3.3 运维环境

为了确保服务器的可用性和安全性,核心业务系统通常配套有运维相关的环境和工具,以“不能直接操作服务器”为目标。低代码开发出来的应用,在运维上和编码开发高度类似,基本上可以沿用编码开发的运维方案。完整的运维工具包含:

  • 堡垒机

  • 监控系统

  • 日志分析系统(需采集和处理nGinx网关日志与活字格日志)

四、扩展阅读:更复杂的部署方案

集团型企业或SaaS服务商使用的系统通常由多个不同的企业级应用构成,相互之间存在数据交互,其部署结构比上述方案更复杂,需要根据情况进行设计,以下内容仅供参考。

五、扩展阅读:如何提升系统的可用性

现代的计算机系统有多重可用性保障机制,故障率已经大幅降低。但仍然存在一些风险因素,有可能导致系统停止服务。除了恶意攻击之外,可用性的典型风险列举如下

典型风险

阶段

冷备份

热备份

其他措施

基础软件系统漏洞(含操作系统、中间件、数据库)

设计



  • 采用成熟的Linux和数据库版本

  • 定期升级安全补丁

应用漏洞

开发



  • 做好测试工作

  • 定期检查日志,及时发现异常

硬件损坏(含供电和网络)

运维


运维误操作

运维


请求超过系统处理能力

运维



可见,在运维层面,冷热备份机制能有效防范可用性风险。冷备份重点防范硬件损坏和运维误操作,热备份在冷备份的基础上,还能通过提升系统处理能力,应对“请求超过系统处理能力”的风险。

在具体操作时,冷备份通常是指参照生产环境的配置,另外搭建一套吧备份环境。生产环境的应用升级时,手动更新备份环境;数据则通过定时的数据备份/恢复机制实现同步。如果生产环境出现故障,则通过DNS、负载均衡器或前置nGinx等机制,将备份环境切换为生产环境使用。

热备份则推荐可以使用上文中的集群部署来代替。

type=info

image 温馨提示

企业级低代码开发最佳实践是活字格官方面向进阶开发者推出的产品技术资源,旨在帮助对活字格基本功能有一定了解的开发者快速提升应用开发能力,保质保量做好企业级项目交付。如果您是初次接触活字格,这些内容可能会有些艰深难懂,这也是正常的。如果您有软件开发经验,推荐您学习《面向程序员的活字格入门课程》;否则,您也可以免费报名参加新手训练营直播课程或购买阅读《低代码开发实战:基于低代码平台构建企业级应用》(机械工业出版社),快速上手低代码开发。