如何在大厂做好架构演进?

news2025/1/4 17:04:54

1 架构演进的定义

1.1 定义

通过设计新的系统架构(4R),来应对业务和技术的发展变化。

1.2 关键点

  1. 新架构
  2. 新的复杂度

1.3 目的

应对业务和技术的发展变化后带来新的复杂度

案例

淘宝去IOE,是因为业务发展大了后,IOE的成本和可控性难以满足,而非性能。

架构重构 vs 架构演进

技术手段不是区分架构重构和架构演进的方法,复杂度是否变化才是判断关键。

2 架构演进的原则、驱动力、模式

1个原则

架构演进是为了促进业务发展

2个驱动力

  1. 业务发展带来新的复杂度,2C业务主要体现在用户规模增长和业务多样性。

  2. 技术发展带来新的复杂度应对方法,如国产化,大数据、云计算等。

2种模式

  1. 主动演进架构师主动识别和规划架构演进
  2. 被动演进: 架构师被迫进行架构演进。

3 业务驱动的架构演进技巧

3.1 架构演进模式 V.S 业务发展模式

在这里插入图片描述

主动演进

  1. 业务规模:量变带来质变,一般10倍量级变化才考虑架构演进。
  2. 业务多样性:业务规模可能没有变化,但系统支持的业务类型越来越多。

被动演进

  1. 业务方向:业务调整方向,例如从图文转为短视频。

3.2 不同用户规模的架构挑战

如果架构设计支持100万,但用户增长到200万时发现架构有问题怎么办?

优化、重构、演进。

3.3 业务驱动的主动演进技巧 - 做好预判,提前布局

预判

提前1年做好准备

  1. 以增长数字为标准:下一阶段用户规模60%时就要准备了
    • 例如当前用户60万,下一级的典型用户规模是100万,那么就可以开始考虑架构演进了,别等到100万再演进
    • 今年用户30万,老板说明年就要达到100万,今年就开始考虑架构演进
  2. 以时间为标准:提前1年预判

布局

团队和技术先行。

  1. 招聘人员
  2. 储备技术

3.4 业务驱动的被动演进技巧 - 快速响应,拿来主义

快速响应

熟悉什么就用什么

拿来主义

尽量用现成的方案

例如:

  1. 可能 Elasticsearch 更好,如果不熟悉,先用 MSQL 顶着
  2. 购买云服务的解决方案,例如直播、视频这种
  3. 尽量多用开源的方案

MySQL性能不如 Elasticsearch,用户体验不好咋办?

先跑起来!用户还不一定会用呢!毕竟若你不擅长的技术乱用,就更不稳定了。

演进案例

一开始 php+MySQL 快速试错,买的服务,后期改不动了。

4 技术驱动的架构演进技巧

4.1 技术驱动演进的第1原则 - 新瓶旧酒原则

新瓶旧酒原则:使用新的技术来解决老的问题或者老的复杂度,不要为了尝试新技术而演进。

降本

包括硬件、人力、运营等成本。

例如:

  1. 上云来降低运维和机房成本
  2. 去IOE,降低硬件成本
  3. 机器图片审核,降低审核人员成本

增效

提升效率包括处理、运营、开发运维效率等
例如 :
1.大数据平台提升大数据分析效率;
2.容器化提升运维效率:
3.微服务提升开发效率。

提质

提升质量包括业务、管理、开发等。例如 :

  1. 推荐系统提升用户转化率
  2. 容器化支持弹性扩容应对业务峰值
  3. 中台提升多业务的开发效率

技术驱动的架构演进是主动演进还是被动演进?

主动演进。问题很明显,就属于架构重构。而引入新技术是架构师自己决定的。

4.2 技术驱动演进的第2原则 - 价值原则

新技术要带来典型的价值,才考虑演进。
典型的定义:产出要>>投入

  1. 20台服务器降到10台 ? 2000台降到1500台?
  2. 2000人日降到1000人日 ?100人日降到10人日 ?
  3. 转换率提升2%? 用户留存提升10% ?

要直接计算出钱的多少。

4.3 技术驱动演进的技巧 - 如何说服老板进行演进?

技巧1 - 谈钱,别谈感情( 适合成熟技术 )

将引入新技术带来的价值量化成 money,然后附带说提升技术水平,提升团队动力不要本末倒置。

技巧2 - 谈竞争对手( 适合全新技术 )

如果你没办法量化为钱,那就看看竞争对手是否引入了,“吓晓吓晓”老板。

技巧3 - 谈大环境( 适合法律政治相关)

例如国产化,跟老板谈政治意义和大环境变化…

4.4 技术驱动演进的技巧 -做好洞察,提前布局

洞察:识别新技术能够为业务带来的价值

  1. 多关注业界技术大会
  2. 熟练掌握业务
  3. 把握技术本质

布局:团队和技术先行

  1. 招聘人员
  2. 储备技术

洞察”更难还是“预判”更难?洞察难得多!

案例

5 思维导图

6 测试

判断题

  1. 架构演进主要是为了引入新技术,跟上业界技术发展的趋势 ×
  2. 业务驱动的架构演进优先考虑“快速响应” × 被动演进才是
  3. 可以从成本、收益、竞争、法律法规等角度来阐述架构演进的必要性 √
  4. 技术驱动的架构演进一定要具备“降本、增效、提质”中的一或多个价值 √ 竞争对手做了或者国家法律要求,其实也都属于提质
  5. “蚊子腿也是肉”,只要新技术能够带来一些价值,即使不那么大,也应该推进架构演进

关注业界技术大会+结合业务价值,就能拿到架构演进项目。

  • 和领导谈钱
  • 和下属谈情怀

大厂为了晋升,所以重复造轮子,适应大环境就好。

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

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

相关文章

51单片机入门

文章目录 一、安装keil5及proteus二、MCS-51单片机结构与原理(一).8051单片机基本组成(二).8051单片机引脚1.电源引脚2.时钟电路引脚3.控制信号引脚4.输入/输出端口 (三) 并行输入/输出端口结构 三、单片机cx51编程基础(一).变量定义(二).数据类型(三).存储类型(四).Cx51语言程…

【Python】逆向解析js代码

目录 1. 打开百度翻译网页,查找翻译结果的网络资源包 2. 获取翻译结果网络资源包的url、请求头、请求体,解析json文件数据 3. 观察请求体字段,发现 query 字段便是我们输入的需要翻译的值 4. ctrl F 快捷键搜索sign值的网络资源包&#x…

自然语言处理:词嵌入简介

动动发财的小手,点个赞吧! Word Embeddings 机器学习模型“查看”数据的方式与我们(人类)的方式不同。例如,我们可以轻松理解“我看到一只猫”这一文本,但我们的模型却不能——它们需要特征向量。此类向量或…

MongoDB 聚合管道的集合关联($lookup)及合并($unionWith)

目前为止,我们已经介绍了一部分聚合管道中的管道参数: $match:文档过滤 $group:文档分组,并介绍了分组中的常用操作:$addToSet,$avg,$sum,$min,$max等。 $add…

python OCR识别验证码

1. 抓取网页验证码图像并保存 import lxml.html, urllib3# 使用urllib3抓取网页数据 http urllib3.PoolManager() html http.request(GET,site).data# 使用lxml解析网页数据 tree lxml.html.fromstring(html) # 解析HTML,补全不完整的格式 fixedhtml lxml.ht…

LeetCode:102. 二叉树的层序遍历

🍎道阻且长,行则将至。🍓 🌻算法,不如说它是一种思考方式🍀算法专栏: 👉🏻123 可以参考👉LeetCode:二叉树的前、中、后序遍历——如何创建一棵【二…

机器学习 特征工程

文章目录 一、数据预处理1. 缺失值处理1.1 删除1.2 统计值填充1.3 前后向值填充1.4 直接忽略1.5 模型预测 2. 异常值处理 二、特征提取1. 数值型特征提取1.1 标准化与缩放1.1.1标准化(Standardization)1.1.2 归一化(Normalization&#xff09…

STM32F4_定时器精讲(TIM)

目录 1. 什么是定时器? 2. STM32定时器简介 2.1 高级控制定时器 TIM1和TIM8 2.1.1 TIM1和TIM8简介 2.1.2 时基单元 2.1.3 计数器模式 2.1.4 重复计数器 2.1.5 时钟选择 2.1.6 捕获/比较通道 2.1.7 输入捕获模式 2.1.8 其他功能 2.2 通用定时器 TIM2到TI…

算法----删点成林

题目 给出二叉树的根节点 root,树上每个节点都有一个不同的值。 如果节点值在 to_delete 中出现,我们就把该节点从树上删去,最后得到一个森林(一些不相交的树构成的集合)。 返回森林中的每棵树。你可以按任意顺序组…

2023年天梯赛模拟赛

//能力有限&#xff0c;只展示一百分代码。前八个题一般是原题&#xff0c;所以不展示题目。 L1-1 嫑废话上代码 #include<bits/stdc.h> using namespace std; int main(){cout<<"Talk is cheap. Show me the code.";return 0; } L1-2 九牛一毛 这是…

Leetcode每日一题——“移除元素”

各位CSDN的uu们你们好呀&#xff0c;小雅兰又来啦&#xff0c;今天&#xff0c;小雅兰的内容是移除元素&#xff0c;下面&#xff0c;让我们进入Leetcode的世界吧 说明: 为什么返回数值是整数&#xff0c;但输出的答案是数组呢? 请注意&#xff0c;输入数组是以「引用」方式…

ChatGPT | 使用new bing的简易教程

1. 教程参考&#xff1a; https://juejin.cn/post/7199557716998078522 2.在参考上述教程遇到的问题与解决 2.1 下载dev浏览器的网址打不开 egde dev下载地址&#xff08;上面网站上的&#xff09;我电脑打不开 换用下面的网址即可 https://www.microsoftedgeinsider.com/z…

在three.js中废置对象

基于three.js子如何废置对象(How to dispose of objects) 前言: 为了提高性能,并避免应用程序中的内存泄露,一个重要的方面是废置未使用的类库实体。 每当创建一个three.js中的实例时,都会分配一定数量的内存。然而,three.js会创建在渲染中所必需的特定对象, 例如几何…

4.11、socket地址

4.11、socket地址1.通用 socket 地址2.专用socket地址1.通用 socket 地址 socket 网络编程接口中表示 socket 地址的是结构体 sockaddr&#xff0c;其定义如下&#xff1a; // socket地址其实是一个结构体&#xff0c;封装端口号和IP等信息。后面的socket相关的api中需要使用…

【c语言】每日一题之汉诺塔类型

目录 前言题目说明描述 题目分析汉诺塔问题 题目代码展示 前言 大佬们&#xff0c;我又回来了&#xff0c;最近也在忙自己的学业&#xff0c;忙着生活对线&#xff0c;也参加了今年的蓝桥杯其他的组&#xff0c;发现今年太难了 &#xff0c;摆烂了。但我想到了读者你们&#x…

前端面试之JavaScript题目,简单全面(持续更新ing...)

数据类型 1.JavaScript有哪些数据类型&#xff0c;它们的区别&#xff1f; 类型&#xff1a;JavaScript共有8种数据类型&#xff0c;undefined&#xff0c;null&#xff0c;Boolean&#xff0c;string&#xff0c;number&#xff0c;bigint&#xff0c;symbol&#xff0c;obj…

K-计算面积

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 题目描述 小w给你三种图形&#xff0c;可能是平行四边形&#xff0c;三角形&#xff0c;梯形&#xff0c;对于给定的TTT个图形&#xff0c;你需要依次回答每个图形的面积&#xff0c;保证答案…

《LeetCode》——LeetCode刷题日记

本期&#xff0c;将给大家带来的是关于 LeetCode 的关于二叉树的题目讲解。 目录 &#xff08;一&#xff09;606. 根据二叉树创建字符串 &#x1f4a5;题意分析 &#x1f4a5;解题思路 &#xff08;二&#xff09;102. 二叉树的层序遍历 &#x1f4a5;题意分析 &#…

docker stats 命令详解

docker stats : 显示容器资源的使用情况&#xff0c;包括&#xff1a;CPU、内存、网络 I/O 等。 docker stats [OPTIONS] [CONTAINER...]OPTIONS 说明&#xff1a; –all , -a :显示所有的容器&#xff0c;包括未运行的。 –format :指定返回值的模板文件。 –no-stream :展…

( “树” 之 BFS) 637. 二叉树的层平均值 ——【Leetcode每日一题】

637. 二叉树的层平均值 给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 1 0 − 5 10^{-5} 10−5 以内的答案可以被接受。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[3.00000,14.50000,1…