架构师论文备考-论云原生架构及其应用
摘要
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 非常的简便,只需下载好 Vue 对应的 .js 文件,在 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的升级版本,能力更强,性能全面提升。尤其是72B参数的版本更是取了惊人的成绩。它可以读懂不同分辨率和不同长宽比的图片,在 MathVista、DocVQA、RealWorldQA、MTVQA 等基准测试创下全球领先的表现…...
[数据集][目标检测]车窗状态检测车窗开关检测数据集VOC+YOLO格式299张3类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):299 标注数量(xml文件个数):299 标注数量(txt文件个数):299 标注类别…...
自动泊车系统中的YOLOv8 pose关键点车位线检测
自动泊车系统中的YOLOv8关键点车位线检测技术解析 引言 随着智能驾驶技术的快速发展,自动泊车功能成为了现代汽车的重要组成部分。它不仅能够提高驾驶的安全性,还能在一定程度上解决城市停车难的问题。在自动泊车系统中,准确识别停车位的位置…...
Java html生成pdf和图片
在 Java 项目中将 HTML 生成图片是一项常见需求,特别是用于生成报告、预览页面截图等。不同的库和工具在渲染能力、性能以及支持的功能上有所不同。以下是几种主流的技术选型和对比,帮助你选择适合的解决方案。 技术对比总结 技术名称优点缺点适用场景…...
JavaWeb笔记整理——Redis
目录 Redis数据类型 各种数据类型的特点 Redis常用命令 字符串操作命令 哈希操作命令 列表操作命令 集合操作命令 有序集合操作命令 通用命令 在Java中操作Redis Spring Data Redis的使用方式 操作字符串类型的数据 编辑操作hash类型的数据 编辑 操作列表类…...
数据库(mysql)常用命令
一.常见的数据库端口号 Mysql默认端口:3306 oracle 默认端口:1521 Sql server 默认端口:1433 注:Mysql采用 的是C/S(客户端/服务器端)架构 二.sql 语法基础 服务器,数据库,数据表,记录,字段之间的关系: 一台Mysql服务器可以管理多个数据库 一个数据库可以存在多张二维表…...
源网荷储一体化新型电力系统解决方案
风光装机快速增长,加剧电力系统不可控性。截至2023H1,我国风电装机389.21GW,太阳能装机470.67GW,风光合计占总装机的31.76%。其中,2023年H1我国风电新增装机22.99GW,对比22年同期新增12.94GW,同…...
树莓派安装 OpenCV 教程
以下是在树莓派上安装 OpenCV 的教程: 笔者当前Python版本:3.7.3 一、更新树莓派系统 在终端中运行以下命令: sudo apt update sudo apt upgrade二、安装必要的依赖项 安装构建工具和图像 I/O 库: sudo apt install build-e…...
01,大数据总结,zookeeper
1 ,zookeeper :概述 1.1,zookeeper:作用 1 ,大数据领域 :存储配置数据 例如:hadoop 的 ha 配置信息,hbase 的配置信息,都存储在 zookeeper 2 ,应用领…...
伪工厂模式制造敌人
实现效果 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" 的缩写。 当你在终端或命令行界面中工作时,你可能会在不同的目录(或文件夹)之间切换。pwd 命令帮助你确定你当前位于哪个目录…...
Python 如何封装工具类方法,以及使用md5加密
第一步:封装使用方法 在utils目录中,编写我的md5加密的方法,如下: 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.单机程序和网络程序 之前编写的程序都是单机程序,所有的业务功能实现及数据存储都在一个主机上完成,我们称为单机程序 我们在生活…...
佰朔资本:国内海风加速招标 船舶行业景气上行
昨日,沪指盘中一度下探失守2700点,尾盘在地产、银行等板块的带动下发力上扬,深证成指亦翻红。到收盘,沪指涨0.49%报2717.28点,深证成指涨0.11%报7992.25点,创业板指跌0.11%报1533.47点,上证50指…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
