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

架构师论文备考-论云原生架构及其应用

摘要

        2022年3月,我有幸参与了公司的新智慧公交系统的研发工作。该系统基于B/S架构设计,并以多租户SaaS平台化为发展目标,旨在创建一个功能更全面、性能更卓越、稳定性更强、用户体验更佳的公交调度一体化平台。在这一项目中,我主要参与了系统的整体架构决策以及新智慧公交平台中调度模块的设计与开发工作。文本详细阐述了智慧公交系统在云原生架构方面的具体实践,智慧公交系统在云原生架构的应用上,不仅体现了现代微服务设计理念和云原生技术趋势,还通过综合运用多种开源技术和工具,构建了一个高性能、高可用、易于扩展和维护的智慧交通解决方案。

正文:

        云原生架构的三大核心技术——容器、微服务和DevOps,共同构建了现代云计算应用的基础。这些技术遵循服务化、弹性、可观测性和自动化四大设计原则,以确保应用在云环境中的高性能、高可用性和高效运维。

        服务化原则通过将应用拆分为一组小型、独立且松耦合的服务,每个服务专注于应用的一个功能模块,并通过API进行通信,实现了快速迭代和部署。这种设计促进了敏捷开发和持续交付,允许开发团队在不干扰其他服务的情况下独立升级和扩展每个服务。

        弹性原则确保了应用能够根据需求动态扩展或缩减资源,以应对云环境中的流量波动。应用可以自动调整服务器实例、存储和带宽等资源,以优化性能和成本效率,保持稳定运行。

        可观测性原则要求系统提供充足的信息,使外部观察者能够理解其内部状态。通过收集、分析和展示应用性能指标、日志及跟踪数据,良好的可观测性帮助运维团队实时监控应用状态,快速诊断和解决问题,从而提升性能。

        自动化原则通过软件工具和脚本自动执行重复性任务和流程,减少手动操作,提高效率和一致性。在云原生环境中,自动化包括自动部署、测试、监控、故障恢复和资源管理,是实现持续集成和持续部署(CI/CD)的关键。

        这四大原则共同铸就了云原生应用的设计理念,使应用更加适应云环境,充分运用云资源的弹性和可扩展性,同时确保应用的可靠性和运维的效率。通过这种设计,云原生应用能够提供更加灵活、可靠和高效的服务,满足现代数字化业务的需求。

        智慧公交系统构建在公司业务中台和数据中台之上,采用微服务架构设计,并以敏捷开发模式为指导,采用小团队协作模式,实现了系统的功能开发和迭代。

         智慧公交系统作为一个物联网平台,需要与多种设备进行频繁的交互。其交互架构设计分为三层:感知层负责接收来自各种设备(如终端、客流仪、GPS定位系统)的消息;S17作为消息中间层,对设备消息进行封装,并按照通用协议进行处理和转换;服务层由智慧公交系统的tap服务组成,主要负责设备信令消息的接收与发送,采用Kafka消息队列以事件驱动的方式完成设备交互。事件被封装为IOT Schema和biz Schema两种交互事件,分别用于对接设备和上层业务事件。项目选择MQTT协议作为与设备通信的标准,因为MQTT更适合于频繁交互且信号移动的物联网设备。

        为了实现高效的服务请求处理和流量管理,系统采用了Nginx作为服务代理和转发组件,确保了服务的稳定性和高可用性。 在内部组件的交互方面,智慧公交系统选择了Dubbo作为RPC框架,以实现系统内部服务间的解耦和高效通信。而对于与外部服务的交互,系统则使用了Fegin客户端,通过声明式REST客户端简化了与外部API的集成。

    服务治理方面,系统采用了Nacos作为服务注册和发现中心,实现了服务的动态注册、发现和负载均衡。调度服务的设计采用了事件驱动模式,借助Kafka消息队列完成了消息的发布和订阅,有效提升了系统的异步处理能力和解耦性。

        在分布式系统的监控和追踪方面,项目初期通过traceId实现了日志链路追踪,为后续的故障排查和性能优化提供了重要依据。为了进一步提升链路追踪的完善性和项目的可观测性,项目计划集成SkyWalking开源框架,以实现更加细粒度和全面的服务追踪。

        智慧公交平台基于公司中台网关构建,通过网关地址对外提供统一的访问入口,增强了服务的安全性和访问控制。同时,利用中台的能力,项目实现了单点登录、熔断降级和友好性提示等功能,提升了用户体验和系统的稳定性。

        在部署和运维方面, 智慧公交项目的部署策略经历了几次迭代和优化。最初,项目使用Jenkins进行打包和通过自建部署脚本完成部署流程。随着项目的发展,公交智慧平台项目统一增加了installer模块,用于自动部署多语言词条、页面菜单资源配置、Nacos配置和SQL脚本的版本迭代。随着公司新的CI/CD平台的建成,智慧公交项目开始整合到这一平台,实现了通过统一CI/CD平台的一键化部署,简化了部署流程并提高了效率。

        整体而言,智慧公交系统的项目架构设计充分考虑了可扩展性、模块化和高性能,通过微服务架构和领域驱动设计,实现了系统的灵活性和可维护性,为公交系统的智能化升级提供了坚实的技术基础。

        在智慧公交项目的开发过程中,版本迭代和CI/CD自动化部署的问题曾是项目正式上线的重大挑战。由于平台是新开发的,且迭代频繁,不同版本间有时会存在显著的差异,如第13版本实现了数据库租户的SaaS化功能,导致数据库结构发生重大变化。为应对这种情况,我们制定了详尽的升级文档,并编写了数据库迁移脚本,以确保系统升级的顺利进行。运维和开发团队保持密切沟通,共同确保项目升级的稳定性。
        另一个问题是,由于领导层变更和核心人员离职,团队缺乏具有全局视野的成员,这导致系统初始设计存在不足,需要不断优化。为此,我们以项目经理提出的需求为基础,专注于实现这些需求,并在后续版本中不断进行功能性改进和维护。系统上线前进行了全面测试,以避免严重问题的发生。

        随着项目的落地,我们收集了用户反馈和需求,通过对系统现有问题的分析,我们不断迭代改进智慧公交系统,致力于打造一个满足公交用户需求的一体化智慧公交平台。通过这些努力,我们确保了系统能够稳定运行,并且能够不断适应和满足用户的变化需求。相信通过时间和经验的积累,在多元化的云原生架构的支撑下,我们的项目也将变得越来越完善,以提供更智能、更满意的用户体验。

相关文章:

架构师论文备考-论云原生架构及其应用

摘要 2022年3月,我有幸参与了公司的新智慧公交系统的研发工作。该系统基于B/S架构设计,并以多租户SaaS平台化为发展目标,旨在创建一个功能更全面、性能更卓越、稳定性更强、用户体验更佳的公交调度一体化平台。在这一项目中,我主要…...

12.java面向对象:java构造器

构造器 一个类即使什么都不写,也会存在一个方法。 假如我创建了一个类叫Student里面什么都不写,然后使用StudentDemo创建对象,运行没有结果,也没有报错。 public class Student {}public class StudentDemo {public static voi…...

微服务之间的安全通信

在微服务架构中,服务之间的通信是系统的核心部分。然而,由于服务的分布式和独立性,确保它们之间的通信安全至关重要。如果没有适当的安全机制,微服务系统可能会暴露在各种网络攻击和安全漏洞中。本文将讨论几种常见的微服务间安全…...

全面掌握 Jest:从零开始的测试指南(下篇)

在上一篇测试指南中,我们介绍了Jest 的背景、如何初始化项目、常用的匹配器语法以及钩子函数的使用。这一篇篇将继续深入探讨 Jest 的高级特性,包括 Mock 函数、异步请求的处理、Mock 请求的模拟、类的模拟以及定时器的模拟、snapshot 的使用。通过这些技…...

如何利用UML进行领域建模

如何利用UML进行领域建模 领域建模是通过创建抽象模型来反映业务领域中的核心概念、实体及其之间的关系。UML(统一建模语言)是进行领域建模的常用工具,它能帮助我们可视化地设计系统架构和业务逻辑。在这篇讲解中,我们将详细解释…...

Vue实用操作篇-1-第一个 Vue 程序

安装 Vue 非常的简便&#xff0c;只需下载好 Vue 对应的 .js 文件&#xff0c;在 html 中引入 vue.js 即可使用 Vue 下载好了 vue.js 我们便可以编写我们的第一个 vue 程序了 <!doctype html> <html lang"zh-CN"><head><meta charset"utf…...

Qwen2-VL的微调及量化

一、Qwen2-VL简介 Qwen2-VL是Qwen-VL的升级版本&#xff0c;能力更强&#xff0c;性能全面提升。尤其是72B参数的版本更是取了惊人的成绩。它可以读懂不同分辨率和不同长宽比的图片&#xff0c;在 MathVista、DocVQA、RealWorldQA、MTVQA 等基准测试创下全球领先的表现&#xf…...

[数据集][目标检测]车窗状态检测车窗开关检测数据集VOC+YOLO格式299张3类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;299 标注数量(xml文件个数)&#xff1a;299 标注数量(txt文件个数)&#xff1a;299 标注类别…...

自动泊车系统中的YOLOv8 pose关键点车位线检测

自动泊车系统中的YOLOv8关键点车位线检测技术解析 引言 随着智能驾驶技术的快速发展&#xff0c;自动泊车功能成为了现代汽车的重要组成部分。它不仅能够提高驾驶的安全性&#xff0c;还能在一定程度上解决城市停车难的问题。在自动泊车系统中&#xff0c;准确识别停车位的位置…...

Java html生成pdf和图片

在 Java 项目中将 HTML 生成图片是一项常见需求&#xff0c;特别是用于生成报告、预览页面截图等。不同的库和工具在渲染能力、性能以及支持的功能上有所不同。以下是几种主流的技术选型和对比&#xff0c;帮助你选择适合的解决方案。 技术对比总结 技术名称优点缺点适用场景…...

JavaWeb笔记整理——Redis

目录 Redis数据类型 各种数据类型的特点 Redis常用命令 字符串操作命令 哈希操作命令 列表操作命令 集合操作命令 有序集合操作命令 通用命令 在Java中操作Redis Spring Data Redis的使用方式 操作字符串类型的数据 ​编辑操作hash类型的数据 ​编辑 操作列表类…...

数据库(mysql)常用命令

一.常见的数据库端口号 Mysql默认端口:3306 oracle 默认端口:1521 Sql server 默认端口:1433 注:Mysql采用 的是C/S(客户端/服务器端)架构 二.sql 语法基础 服务器,数据库,数据表,记录,字段之间的关系: 一台Mysql服务器可以管理多个数据库 一个数据库可以存在多张二维表…...

源网荷储一体化新型电力系统解决方案

风光装机快速增长&#xff0c;加剧电力系统不可控性。截至2023H1&#xff0c;我国风电装机389.21GW&#xff0c;太阳能装机470.67GW&#xff0c;风光合计占总装机的31.76%。其中&#xff0c;2023年H1我国风电新增装机22.99GW&#xff0c;对比22年同期新增12.94GW&#xff0c;同…...

树莓派安装 OpenCV 教程

以下是在树莓派上安装 OpenCV 的教程&#xff1a; 笔者当前Python版本&#xff1a;3.7.3 一、更新树莓派系统 在终端中运行以下命令&#xff1a; sudo apt update sudo apt upgrade二、安装必要的依赖项 安装构建工具和图像 I/O 库&#xff1a; sudo apt install build-e…...

01,大数据总结,zookeeper

1 &#xff0c;zookeeper &#xff1a;概述 1.1&#xff0c;zookeeper&#xff1a;作用 1 &#xff0c;大数据领域 &#xff1a;存储配置数据   例如&#xff1a;hadoop 的 ha 配置信息&#xff0c;hbase 的配置信息&#xff0c;都存储在 zookeeper 2 &#xff0c;应用领…...

伪工厂模式制造敌人

实现效果 1.敌人方实现 敌人代码 using UnityEngine; using UnityEngine.UI;public class EnemyBasics : MonoBehaviour {public int EnemySpeed { get; internal set; }public int EnemyAttackDistance { get; internal set; }public int EnemyChaseDistance { get; interna…...

【linux】pwd命令

pwd 命令在 Linux 和类 Unix 系统中用于显示当前工作目录的完整路径。它是 "print working directory" 的缩写。 当你在终端或命令行界面中工作时&#xff0c;你可能会在不同的目录&#xff08;或文件夹&#xff09;之间切换。pwd 命令帮助你确定你当前位于哪个目录…...

Python 如何封装工具类方法,以及使用md5加密

第一步&#xff1a;封装使用方法 在utils目录中&#xff0c;编写我的md5加密的方法&#xff0c;如下&#xff1a; import re import hashlib from os import path from typing import Callable from flask import current_app# 这里封装的是工具类的方法def basename(filenam…...

网络编程的应用

目录 1.单机程序和网络程序 2.客户端与服务端 3.网络编程三要素 3.1 IP地址 3.2 port端口 4.TCP编程 5.UDP编程 1.单机程序和网络程序 之前编写的程序都是单机程序&#xff0c;所有的业务功能实现及数据存储都在一个主机上完成&#xff0c;我们称为单机程序 我们在生活…...

佰朔资本:国内海风加速招标 船舶行业景气上行

昨日&#xff0c;沪指盘中一度下探失守2700点&#xff0c;尾盘在地产、银行等板块的带动下发力上扬&#xff0c;深证成指亦翻红。到收盘&#xff0c;沪指涨0.49%报2717.28点&#xff0c;深证成指涨0.11%报7992.25点&#xff0c;创业板指跌0.11%报1533.47点&#xff0c;上证50指…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...