十年架构心路:从单机到云原生的分布式系统演进史

十年架构心路:从单机到云原生的分布式系统演进史

这里写目录标题

  • 十年架构心路:从单机到云原生的分布式系统演进史
  • 一、技术生涯的起点:单体架构的黄金时代
    • 1.1 典型技术栈
    • 1.2 记忆深刻的故障
  • 二、分布式架构转型期
    • 2.1 服务化拆分实践
    • 2.2 分布式事务困局
  • 三、云原生架构深度实践
    • 3.1 Kubernetes架构体系
    • 3.2 服务网格实践
    • 3.3 混沌工程防护网
  • 四、架构原则的血泪教训
    • 4.1 缓存使用八大禁忌
    • 4.2 微服务拆分边界
  • 五、未来架构演进方向
    • 5.1 服务网格 + Dapr 双运行时
    • 5.2 基于WebAssembly的轻量级运行时
    • 5.3 量子计算预备架构
  • 六、给开发者的成长建议
    • 1. 技术学习四象限
    • 2. 架构师能力模型
    • 3. 推荐书单
  • `谨以此文献给所有在架构路上探索的同道者,期待在评论区听到您的技术故事!`

一、技术生涯的起点:单体架构的黄金时代

前端JSP
Tomcat
MySQL
文件服务器

我的第一个千万级项目架构图

1.1 典型技术栈

前端:jQuery + Bootstrap
后端:Spring MVC + MyBatis
部署:物理机 + WAR包

1.2 记忆深刻的故障

2016年双11零点宕机事件:

// 问题代码:未做缓存的热点商品查询
public Product getProduct(long id) {return jdbcTemplate.query("SELECT * FROM products WHERE id = ?", new ProductRowMapper(), id).get(0);  // 直接访问数据库
}

故障链分析:

用户应用数据库海量商品查询请求高并发SQL查询响应延迟504 Gateway Timeout用户应用数据库

解决方案:

1.引入Redis缓存层
2.数据库读写分离
3.静态页面化商品详情页

二、分布式架构转型期

2.1 服务化拆分实践

拆分原则:

业务领域
用户中心
商品服务
订单服务
支付服务

Spring Cloud技术栈:

# application.yml 片段
feign:client:config:default:connectTimeout: 5000readTimeout: 5000ribbon:ConnectTimeout: 3000ReadTimeout: 5000MaxAutoRetries: 1

2.2 分布式事务困局

跨服务订单创建场景:

// 分布式事务伪代码(错误示范)
@Transactional // 本地事务注解失效!
public void createOrder(OrderDTO order) {// 步骤1:扣减库存stockService.reduce(order.getSkuId(), order.getQuantity());// 步骤2:创建订单orderMapper.insert(order);// 步骤3:生成支付单paymentService.create(order.getId(), order.getAmount());
}

最终一致性方案:

发消息
订单服务
MQ
库存服务
支付服务
事务补偿

三、云原生架构深度实践

3.1 Kubernetes架构体系

生产环境拓扑:

Node
Pod
Ingress Nginx
Service
Deployment
App Container
Sidecar
Etcd
Prometheus

3.2 服务网格实践

Istio核心配置:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:name: product-vs
spec:hosts:- product-svchttp:- route:- destination:host: product-svcsubset: v1weight: 90- destination:host: product-svcsubset: v2weight: 10

3.3 混沌工程防护网

故障注入实验:

// ChaosMesh 实验定义
apiVersion: chaos-mesh.org/v1alpha1
kind: NetworkChaos
metadata:name: delay-product-service
spec:action: delaymode: oneselector:namespaces:- productionlabelSelectors:"app": "product-service"delay:latency: "500ms"correlation: "100"jitter: "100ms"

四、架构原则的血泪教训

4.1 缓存使用八大禁忌

缓存雪崩
随机过期时间
缓存穿透
布隆过滤器
缓存击穿
互斥锁
数据不一致
延迟双删

4.2 微服务拆分边界

2022年过度拆分事故:

pietitle 服务调用链长度分布“1-3跳” : 35“4-6跳” : 45“7跳以上” : 20

后果:

订单创建平均延迟从50ms→420ms
故障排查耗时增加3倍

修复方案:

合并用户基础服务与认证服务
引入领域事件代替同步调用

五、未来架构演进方向

5.1 服务网格 + Dapr 双运行时

应用
Dapr Sidecar
状态管理
服务调用
发布订阅
可观测性

5.2 基于WebAssembly的轻量级运行时

// 使用Rust编写WASM过滤器
#[no_mangle]
pub extern "C" fn proxy_on_request() -> Action {let headers = get_request_headers();if !headers.contains_key("X-Auth-Token") {send_http_response(403, vec!["Forbidden"], None);return Action::Pause;}Action::Continue
}

5.3 量子计算预备架构

抗量子密码学改造:

RSA-2048
NIST PQC标准
CRYSTALS-Kyber
Falcon-1024

六、给开发者的成长建议

1. 技术学习四象限

quadrantCharttitle 技术投资矩阵x-axis 短期价值 → 长期价值y-axis 低门槛 → 高门槛quadrant-1 云原生: 高门槛,长期价值quadrant-2 新框架: 低门槛,短期价值quadrant-3 过时技术: 低门槛,低价值quadrant-4 底层原理: 高门槛,长期价值

2. 架构师能力模型

mindmaproot(架构师核心能力)技术深度分布式原理操作系统网络协议系统设计可扩展性容错设计成本控制业务理解领域建模演进规划价值闭环

3. 推荐书单

《设计数据密集型应用》Martin Kleppmann
《分布式系统模式》Unmesh Joshi
《云原生模式》Cornelia Davis
十年感悟:
“架构的本质不是选择新技术,而是平衡业务需求与技术约束的艺术”
从单机到云原生,变的是技术形态,不变的是对稳定性、效率、成本的极致追求

谨以此文献给所有在架构路上探索的同道者,期待在评论区听到您的技术故事!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/914119.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/914119.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用docker搭建nginx

安装docker 和 docker compose验证docker版本配置docker目录配置代理,使docker能访问外网能否ping通最后直接拉入镜像即可docker pull nginx

Intel新CPU助攻:微软Copilot+将登陆台式电脑

微软的Copilot PC计划已经推出一年多,但目前仅支持平板电脑和笔记本电脑,以及少数迷你电脑。 随着Intel下一代桌面处理器——代号为“Arrow Lake Refresh”的推出,Copilot PC功能有望扩展到桌面计算机。 要支持Copilot PC的所有功能&#xff…

【Kubernetes】跨节点 Pod 网络不通排查案例

最近在部署一个集群环境的时候,发现集群中一个子节点与其他子节点不通,而 master 节点可与任何子节点互通,通过抓包排查后,发现是 Linux 路由决策导致的。因此,在此记录下来,希望对大家有所帮助。1、环境及…

【算法训练营Day11】二叉树part1

文章目录理论基础二叉树的递归遍历前序遍历中序遍历后序遍历总结二叉树的层序遍历基础层序遍历二叉树的右视图理论基础 二叉树在结构上的两个常用类型: 满二叉树完全二叉树 在功能应用上的比较常用的有: 二叉搜索树: 节点有权值、遵循”左…

Flutter 之 table_calendar 控件

1.库导入在pubspec.yaml文件中dev_dependencies:table_calendar: ^3.2.02. 代码编写TableCalendar(daysOfWeekHeight: 20,availableGestures: AvailableGestures.horizontalSwipe,firstDay: DateTime.now().subtract(const Duration(days: 365)),lastDay: DateTime.now(),cal…

【leetcode】1486. 数组异或操作

数组异或操作题目题解题目 1486. 数组异或操作 给你两个整数,n 和 start 。 数组 nums 定义为:nums[i] start 2*i(下标从 0 开始)且 n nums.length 。 请返回 nums 中所有元素按位异或(XOR)后得到的…

php7.4使用 new DateTime;报错 Class DateTime not found

php7.4使用 new DateTime;报错Uncaught Error: Class ‘app\home\c\DateTime’ not found 查了半天资料,最后找到了解决办法 DateTime 是 php 内置的类,不隶属于任何命名空间,如果你需要在命名空间中使用须有 \ 声明,解决办法就是…

Gartner《构建可扩展数据产品建设框架》心得

一、背景与价值 1.1 “数据产品”为什么忽然重要? 传统模式:业务提出需求 → IT 建数据集 → ETL 管道爆炸 → 维护成本指数级上升。 新范式:把“数据”包装成“产品”,以产品思维迭代演进,强调复用、自助、可扩展。 Gartner 观察到:大量组织把“报表”或“数据仓库”重…

CentOS/RHEL LVM 磁盘扩展完整教程

CentOS/RHEL LVM 磁盘扩展完整教程📝 前言 在Linux系统管理中,磁盘空间不足是经常遇到的问题。特别是在生产环境中,当根分区空间告急时,我们需要通过添加新磁盘来扩展存储空间。本教程将详细介绍如何在CentOS/RHEL系统中使用LVM&a…

LVGL应用和部署(用lua做测试)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】嵌入式产品做好了,下面就是测试和量产了。以按键屏幕的开发模式为例,如果仅仅是简单的功能测试,那还比较好解决&…

phpstudy搭建pikachu

一.启动mysql和nginx服务二.修改靶场文件参数点击管理打开根目录,将下载好的靶场源文件解压到www目录下三.找到此文件用记事本打开四.修改配置文件五.打开浏览器,输入127.0.0.1/pikachu六.按照步骤初始化心得体会:如果mysql启动又立刻停止,大…

【Linux】GDB/CGDB 调试器学习笔记

GDB/CGDB 调试器学习笔记🚀 前言 GDB 是 GNU 项目下功能强大的命令行调试器,适用于 C/C 等多种语言。CGDB 则是在 GDB 之上构建的轻量级 curses 界面,适合喜欢终端操作且习惯 vi 风格的人。一、GDB 入门篇 1. 编译时带调试信息 gcc -g -O0 -W…

链接代理后无法访问网络

路由方向的问题 cmd 输入 route print 查看路由多了一个不是你网络的路由 我的嘎嘎好用直接那都通 route add -p 0.0.0.0 mask 0.0.0.0 0.0.0.0 参考这个 固定ip if是代理链路的 链路口又敏感词这个文章不合规两次评论区问我

day37 早停策略和模型权重的保存

DAY 37 我今天的笔记是用cpu训练的,请自行修改为gpu训练 仍然是循序渐进,先复习之前的代码 import torch import torch.nn as nn import torch.optim as optim from sklearn.datasets import load_iris from sklearn.model_selection import train_test_…

网络爬虫分类全解析

网络爬虫作为数据获取的重要工具,其分类方式多样,不同类型的爬虫在技术实现、应用场景和功能特性上存在显著差异。深入理解这些分类,有助于开发者根据实际需求选择合适的爬虫方案。本文将从技术特性、应用场景和架构设计三个维度,系统介绍网络爬虫的主要分类。 一、按技术…

ECR仓库CloudFormation模板完整指南

概述 本文档详细介绍了一个通用的Amazon ECR(Elastic Container Registry)仓库CloudFormation模板,该模板支持多业务组、参数化配置,并包含完整的安全策略、生命周期管理和监控功能。 模板特性 核心功能 ✅ 支持4个业务组:app、ai、mall、frontend✅ 灵活的服务名手动输…

C++(STL源码刨析/List)

一 List 核心字段和接口1. 节点字段template<class T> struct __list_node {typedef void* void_pointer;void_pointer prev;void_pointer next;T data; }由于 链表 不是连续的内存块&#xff0c;所以对每一个申请到的内存块要进行统一组织&#xff0c;也就是封装成一个类…

苹果App上架流程:不用Mac也可以上架的方法

iOS App 的上架流程一直被认为是门槛最高、流程最繁琐的移动端工作之一。对很多使用 Windows 或 Linux 进行开发的跨平台团队来说&#xff0c;Mac 的缺位更放大了每一步的难度。 在我们近期为一款本地生活类 App 进行 iOS 上架时&#xff0c;团队成员几乎没有配备本地 Mac&…

【爬虫】- 爬虫原理及其入门

爬虫01 - 爬虫原理及其入门 文章目录爬虫01 - 爬虫原理及其入门一&#xff1a;爬虫原理1&#xff1a;爬虫的优势‌2&#xff1a;爬虫的核心库3&#xff1a;经典举例4&#xff1a;合规问题一&#xff1a;爬虫原理 学习爬虫之前前置知识需要了解这些&#xff1a; 我的HTTP介绍, 了…

G5打卡——Pix2Pix算法

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 Pix2Pix 是一种基于条件生成对抗网络&#xff08;cGANs&#xff09;的图像到图像翻译算法&#xff0c;由 Phillip Isola 等人在 2016 年提出。该算法的核心思想…