题目
论云原生架构及其应用
近年来,随着数字化转型不断深入,科技创新与业务发展不断融合,各行各业正在从大工业时代的固化范式进化成面向创新型组织与灵活型业务的崭新模式。在这一背景下,以容器和微服务架构为代表的云原生技术作为云计算服务的新模式,已经逐渐成为企业持续发展的主流选择。云原生架构是基于云原生技术的一组架构原则和设计模式的集合,旨在将云应用中的非业务代码部分进行最大化剥离,从而让云设施接管应用中原有的大量非功能特性(如弹性、韧性、安全、可观测性、灰度等),使业务不再有非功能性业务中断困扰的同时,具备轻量、敏捷、高度自动化的特点。云原生架构有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用,其代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API等。请围绕“论云原生架构及其应用”论题,依次从以下三个方面进行论述:
1.概要叙述你参与管理和开发的软件项目以及承担的主要工作。
2.服务化、弹性、可观测性和自动化是云原生架构的四类设计原则,请简要对这四类设计原则的内涵进行阐述。
3.具体阐述你参与管理和开发的项目是如何采用云原生架构的,并且围绕上述四类设计原则,详细论述在项目设计与实现过程中遇到了哪些实际问题,是如何解决的。
简介
近些年,新能源汽车蓬勃发展,我司开发了一个针对新能源汽车的一体化平台,该平台主要包括新闻、社区、车型库等主要模块。我在该项目中担任技术经理,负责系统方案定制与技术指导工作。本文描述了该项目中云原生架构的实施过程与解决方案,主要分三个部分,?
背景
2022 年,新能源汽车蓬勃发展,国家也出台了相应政策法规予以支持,但市面上并没有针对新能源汽车的平台,用户在搜索新能源车型的时候,无法快速准确的找到相关信息。为响应国家号召,满足用户需求,于是我司决定开发一个针对新能源汽车的一体化平台。
该项目于 2022 年 6 月开始,团队成员共 17 人,我在该项目中担任技术经理,主要负责系统方案定制与技术指导工作。项目主要有三个主要模块:新闻、社区、车型库。其中新闻模块是为用户提供最新的新能源汽车消息,主要功能有:图文、视频、简讯、最新车型等。社区模块为用户提供一个讨论新能源车型的渠道,主要功能有:话题、帖子、车友圈、车型打分等。其中车型库是该项目的核心,我们在传统汽车平台的基础上增加了许多新能源汽车特有功能,比如辅助驾驶、智能座舱、三电系统等,并对这些功能做了相应评测,建立了对应的评测系统。以此为基础,建立了车型榜单、选车等功能。
回应
云原生架构由于其轻量、敏捷、高度自动化且成本相比传统方式更低等特点,已是目前企业发展的主流选择。云原生架构的设计原则有服务化、弹性、可观测性、自动化,其中服务化原则,是将整体业务拆分为大小适中的服务,解决大型项目中单体架构,开发难,部署难等问题。弹性原则,充分利用云服务的计算资源,动态伸缩,满足用户高峰时段的访问需求,降低低谷时段的成本,做到即用即申请,解决传统方式中扩容难,成本高等问题。可观测性原则,因为服务微型化,用户的请求会经过多个服务,当出现问题的时候,定位排查较为困难,需要提高其可观测行,一般使用链路追踪技术解决。自动化原则,当服务不断增长,人工部署成本较高,此时需引入自动化运维等相关技术,降低运维成本,提高运维效率。
过度
一个良好的云原生架构应是结构清晰、扩展方便、高度自动化的,以下就该系统的设计、开发、运行三个阶段论述该项目的实施过程与解决方案。
// serverless
// devops
// 微服务
// 服务端架构
//
正文
整体架构
该项目是一个针对 C 端用户的一体化平台,考虑到应用推广、开发成本等因素,应用部分采用 B/S 架构。传统 B/S 架构一般为单体架构,用 MVC 模式进行开发,这种架构在复杂应用上的缺点较多,开发人员需要在一个代码仓库内进行修改,且每次更新都需要重新启动,牵一发而动全身,项目的维护成本较高。所以我们采用前后端分离的 B/S 架构,前端部分使用基于 React 的全栈框架 NextJS,方便 SEO,满足推广需求,业务人员可以专注于自己擅长的领域,提高开发效率。后端业务部分为微服务架构,将应用拆解为不同的服务,使用公司提供的 DevOps 工具平台,自动化独立部署项目,方便业务拆解分配到各个项目组,提高开发运维效率,满足自动化要求。数据库部分,独立于业务系统,主要分两个部分,缓存部分使用 Redis 数据库,提高系统的并发吞吐。业务数据使用 Mysql 数据库,保证数据的原子性、一致性、持久性、隔离性。用户请求到达防火墙后,进入 VPC 内网,依次通过负载均衡、API 网关、微服务集群、数据库集群,返回响应内容。该方案整体结构清晰、高度自动化,服务拆分明确,满足云原生架构的自动化、服务化原则。
服务端
后端服务采用业务拆分的方式,主要包括:新闻、社区、车型库、用户、搜索等服务。服务之间采用 http 协议在 VPC 内网中通信,使用 REST 风格,该风格以资源为中心,请求方式作为对资源的操作,GET 表示对资源的获取,POST 表示对资源的新增,PUT 表示对资源的全量更新,PATCH 表示对资源的部分更新,DELETE 表示删除资源,可以有效的降低沟通成本。每个微服务部署在 ServerLess 上,
DevOps
结论
该项目于 2023 年 10 月上线,稳定运行至今,未出现重大事故。由于项目扩展性良好,于二期工程增加了移动设备适配,服务端少量修改后顺利上线安卓与 IOS 平台。项目运行过程中也遇到了一些问题,比如 Serverless 冷启动问题,当已有实例无法满足用户访问需求的时候,需要动态扩容,增加实例。这时云厂商会创建 VPC,拉取镜像,成功启动后才能响应用户请求,整个过程耗时数秒,用户体验较差。由于大部分环节由云厂商控制,我们无法直接参与,所以采取的方案主要有两个,一个是将镜像服务放在同一个可用区,从内网进行拉取,并精简镜像体积,提高镜像拉取速度。二是在用户访问高峰时段,预留一部分启动实例,减少冷启动次数。目前冷启动概率已明显降低,镜像裁剪还有优化空间。