当前位置: 首页 > news >正文

论云原生架构及应用

20250412-作 

题目

近年来,随着数字化转型不断深入,科技创新与业务发展不断融合,各行各业正在从大工业时代的固化范式进化成面向创新型组织与灵活型业务的崭新模式。
在这一背景下,以容器和微服务架构为代表的云原生技术作为云计算服务的新模式,已经逐渐成为企业持续发展的主流选择。
云原生架构是基于云原生技术的一组架构原则和设计模式的集合,旨在将云应用中的非业务代码部分进行最大化剥离,从而让云设施接管应用中原有的大量非功能特性(如弹性、韧性、安全、可观测性、灰度等),使业务不再有非功能性业务中断困扰的同时,具备轻量、敏捷、高度自动化的特点。
云原生架构有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用,其代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API等。

请围绕“论云原生架构及其应用”论题,依次从以下三个方面进行论述:
1.概要叙述你参与管理和开发的软件项目以及承担的主要工作。
2.服务化、弹性、可观测性和自动化是云原生架构的四类设计原则,请简要对这四类设计原则的内涵进行阐述。
3.具体阐述你参与管理和开发的项目是如何采用云原生架构的,并且围绕上述四类设计原则,详细论述在项目设计与实现过程中遇到了哪些实际问题,是如何解决的。


摘要

    某省预约挂号系统简称预约挂号系统是我司自主研发的系统,该系统集众多功能于一体,旨为提高医疗服务质量和患者体验。随着用户量的逐年攀升,系统面临着性能瓶颈和可用性的挑战,严重阻碍了系统服务质量的提高。我司决定与2023年3月对系统进行全面升级工作,计划一年,投资800万,我担任系统架构设计师,主要的工作就是系统的整体设计。我们通过对系统服务的划分,使用了微服务的形式,由于业务量庞大,系统结构复杂,我们选择了云原生技术,通过实现服务化、可观测、弹性和自动化等原则,又使用容器编排技术部署划分后的微服务,完美的解决了系统的性能和可用性等主要问题,使系统的升级功能得到了圆满成功,领导高层和组员也给予了高度的认可。

背景

    随着信息化时代的快速迈进,科技创新与业务发展不断融合,各大医院纷纷提高了线上系统的运行模式,我司顺应时代的潮流,也对开发的预约挂号系统进行了改进。预约挂号系统是一款集预约挂号、体检预约、报告查询和名医抢号等功能于一体,旨为提高医疗服务质量和患者体验。然而随着用户量的逐年攀升,预约挂号系统面临者性能瓶颈和可用性的严峻挑战,我司为保证系统持续稳定的运行,毅然决定2023年3月启动对预约挂号系统的全面升级工作,计划一年,投资800万,我担任系统架构设计师,主要工作涵盖了系统架构的整体设计、技术栈精准选型和各个核心阶段的评审工作。我们通过对系统业务的划分,选择了微服务的架构模式。又根据公司业务量的和整体架构,我们选择使用云原生的部署方式,基于云原生的服务化、可观测、弹性和自动化等原则,我们设计了各个微服务的部署策略,以提高各个服务的性能和系统整体可用性等。

理论

    云原生有服务化、弹性、可观测性和自动化等等原则。下面介绍原则以及其优点。
    1.服务化原则,指将业务系统按照业务类型进行划分,使系统中的每一个服务只处理自己业务的功能,每个服务也指提供自己业务的数据,每个服务随时等待为调用者提供服务。服务化的优点有:1)将复杂的整体需求细化成按各个业务划分的服务,使每个服务都具有单一职责。2)通过划分职责使服务的内聚提高,修改组件影响范围降低,提高可修改性。3)服务独立性,指提供自己业务内的服务。
    2.弹性原则,指系统根据业务量的不同,系统能够有弹性的增减资源,而不影响系统的整体可用。弹性原则的优点:1)按需使用,通过系统分时段的资源需求,可以对服务的资源进行增减,以抵抗系统某个时段的资源需求暴涨。2)节省成本,在空闲时,降低资源使用,降低成本。
    3.可观测性原则,指对系统的状态实时检测,起到系统有异常或预测异常发生及时报告,并能以图表的形式展示给运维人员,同时给予参考为后续发生异常提供依据。可观测性优点:1)实时监控系统,提高系统的可用性。2)为预防异常发生提供依据。3)可以直观的了解系统当前状态。
    4.自动化原则,指系统的所有过程自动化,对于繁琐的运维操作容易出现错误和运维不方便的问题,过程自动化不仅可以避免不必要的错误,也可以规避系统异常发生时导致系统整体的崩溃。自动化原则优点:1)操作简单,过程自动化。2)快速开发,自动操作部署。3)异常预防,自动伸缩。

实践

    预约挂号系统的整个升级过程大致分为了分析、设计、实现和运行维护等阶段,接下来介绍这几个阶段,以及云原生技术和原则的应用。
    一、分析阶段。1.我们先收集需求总分为3块:a)整理系统目前的状态和需求库中需求数据。b)领导和产品想要达到的业务目标。c)市面上较流行的技术等等。2.并对问题进行了分析:a)目前系统业务逻辑复杂。b)系统性能和可用性难堪重负。c)用户量还在持续增加。d)运维投入效率不高。e)市面上中大型企业对docker、k8s等技术使用率较高。3.得出结论:经过激烈的几轮讨论,我们得出:a)对现有的系统进行业务划分。b)采用面向服务的架构使用微服务的技术来设计预约挂号系统的架构。c)为了提高开发效率和运维效率,采用k8s加docker支持的容器编排技术部署架构。4.评审和整理形成需求规格说明书和初级架构说明书。
    二、设计阶段。1.业务服务化,使用服务化的方式分出:a)医院相关对应的机构服务。b)患者相关对应的用户服务。c)预约相关对应的订单服务。d)支付相关对应的支付服务。e)三方医院对应三方服务。把这些服务都定义成微服务,专门处理每个业务的数据,且服务间独立、实现容器化部署。该阶段生成了类图和包图。2.伸缩资源应对业务并发,机构服务、订单服务和支付服务承载请求较多,需要使用多副本负载均衡的方式部署,为了提高资源利用率,我们设计了分时段伸缩服务资源,要求能承受千级并发量和万级的用户请求。3.使用可观测的技术观察系统,k8s服务组件中有prometheus支持监控,并且有可视化的监控组件,能观察整个系统架构的运行情况,并且有异常或者资源预警发生时可及时通知运维人员做处理。4.自动化的过程,对系统的开发部署、监控、伸缩和调度等等操作全部交由k8s容器编排系统自动管理,运维人员只需设置规则即可,改阶段形成部署操作说明书,设计规则脚本描述和详细描述规则设计。5.设计对各个服务的容器化部署说明,设计部署资源限制和策略。6.评审和整理设计说明书。
    三、实现阶段。1.根据设计文档,我们开发了各个服务的容器的脚本。2.在开发过程中,我们使用了CI/CD(持续集成持续部署)技术,提高开发速度。3.我们对系统进行了压测,观察系统在测试时期的性能和可用性,并观察资源的使用情况,满足了设计要求。4.使用了观测系统,观察预约挂号系统在测试和预发环境的运行情况,很好的反应了系统的状态情况。
四、运行与维护阶段。得到最终的预约挂号系统,由运维人员上线部署执行自动化的命令,一次拉起整个预约挂号系统的所有组件。

结尾 

    得益于云原生技术的使用,预约挂号系统在2024年3月份正式上线,又经过一个月的精心推广,又吸引了大量的用户,现在用户量已经突破了千万大关,在名医抢号功能的使用方面尤为突出,轻松承受了万级用户的请求,平稳运行至今,现在已经对接了11个市的500多家医院,得到了组员的赞誉和领导的高度认可。然而,在开发初期,有部分组员对云原生技术的理解存在模糊之处,这一度阻碍了项目进度的持续推进,针对这一问题,我们快速行动,通过项目组间人员的灵活调配完美解决了这一短板。下一步,我们准备对老系统的数据进行迁移工作,有了此次项目的实施,我们对迁移工作充满信心,并将以更高的要求和标准来应对迁移任务。这次系统的升级工作是个不可多得的机会,经过了这次的项目实施,我的技术和经验得到了显著的提升。

总结经验:
1.描述一下服务化的架构模式。
2.原则的利用,融合到设计里。
3.还是从原则/模式说架构的实现。 

相关文章:

  • macOS,切换 space 失效,向右切换space(move right a space) 失效
  • TCP四层模型:网络协议核心解密
  • 3ds Max贴图操作指南:从基础到应用
  • Java 工程智能化升级:飞算科技重构软件开发的技术范式
  • Python Selenium 滚动到特定元素
  • [Linux]mmap()函数内存映射原理及用法
  • K8s + Springboot 如何实现 优雅停机 + 不停服更新
  • Python 数据分析与可视化 Day 9 - 缺失值与异常值处理技巧
  • MFC获取本机所有IP、局域网所有IP、本机和局域网可连接IP
  • 深度学习框架入门指南:PyTorch 核心实战
  • Discrete Audio Tokens: More Than a Survey
  • 修复opensuse 风滚草rabbitmq的Error: :plugins_dir_does_not_exist问题
  • 随机生成的乱码域名”常由**域名生成算法(DGA)** 产生
  • Flutter基础(UI监听)
  • MyBatis 缓存机制详解
  • Nestjs框架: nestjs-bull的使用与相关queue的规划
  • 【RAG面试题】LLMs已经具备了较强能力,存在哪些不足点?
  • day49-硬件学习之I2C(续)
  • TTvideo免费开源PC录屏软件
  • UE--Slate 焦点、捕获,输入处理与玩家控制器的关系