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

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

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. “蚊子腿也是肉”,只要新技术能够带来一些价值,即使不那么大,也应该推进架构演进

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

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

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

相关文章:

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

1 架构演进的定义 1.1 定义 通过设计新的系统架构(4R),来应对业务和技术的发展变化。 1.2 关键点 新架构新的复杂度 1.3 目的 应对业务和技术的发展变化后带来新的复杂度。 案例 淘宝去IOE,是因为业务发展大了后,IOE的成本和可控性难…...

减半技术实现求a的n次幂

目录 减半技术实现求a的n次幂 程序设计 程序分析 减半技术实现求a的n次幂 【问题描述】给定两个正整数a和n,采用减半技术求a的n次幂;其中a<100,b<20; 【输入形式】两个整数a,n(a与n中间用空格隔开); 【输出形式】一个整数 【样例输入1】2 3 【样例输出1】8 【样…...

MYSQL8窗口函数

MYSQL8窗口函数 MYSQL8窗口函数窗口函数分类序号函数--排行榜row_number()示例rank()示例dense_rank()示例partition by对每个分区内的行进行排名不加partition by全局排序 开窗聚合函数分布函数CUME_DIST()PERCENT_RANK() 前后函数LAG()的用法LEAD() 头尾函数其他函数NTH_VALU…...

全国大学生智能汽车竞赛——安装Ubuntu操作系统(双系统)

1.1 电脑分区 1.1.1 分区原因 由于我们想要在电脑上同时安装Windows和Ubuntu系统&#xff0c;所以就要在window使用的内存中划分出来一段用来给Ubuntu系统使用&#xff0c;相当于一个应用程序一样 1.1.2 分区步骤 1.右击此电脑&#xff0c;点击管理&#xff0c;然后双击左侧…...

[STM32F103C8T6]看门狗

看门狗&#xff1a; 在由单片机构成的微型计算机系统中&#xff0c;由于单片机的工作常常会受到来自外界电磁场的干扰&#xff0c;造 成程序的跑飞&#xff0c;而陷入死循环&#xff0c;程序的正常运行被打断&#xff0c;由单片机控制的系统无法继续工作&#xff0c;会 造成整个…...

浪潮:2022年净利同比增长51.39%

一、4月头条 华为的紧急回应&#xff0c;让东方材料21亿收购要黄&#xff1f; 4月10日消息&#xff0c;东方材料昨日晚间公告拟定增募资不超20亿元&#xff0c;用于向诺基亚全资子公司NSN收购TD TECH 51%股权&#xff08;交易对价21.22亿元&#xff09;。TD TECH剩余49%股权由…...

大厂面试内幕:阿里内部整理出的5000页Java面试复盘指南,起飞!!!

互联网的技术岗一直是高薪的代名词&#xff0c;特别是大厂&#xff0c;应届生的年薪基本都20W起&#xff0c;比一般的公司高多了。 看下面这张网上热传的大厂应届生薪酬表就知道了&#xff0c;SP offer甚至能拿到30W以上。 技术社区也有晒出高薪offer的同学&#xff1a; 除了薪…...

数据结构——哈希表相关题目

数据结构——哈希表相关题目 242. 有效的字母异位词1.暴力解法2.排序后比较3.哈希表 383. 赎金信哈希解法 49. 字母异位词分组438. 找到字符串中所有字母异位词3. 无重复字符的最长子串76. 最小覆盖子串349. 两个数组的交集1.排序双指针2.哈希表 350. 两个数组的交集 II1.排序双…...

域名解析设置方法

域名解析设置都是实时生效的&#xff0c;一般只需几秒即可同步到各地 DNS 上&#xff0c;但各地 DNS 均有缓存机制&#xff0c;解析的最终生效取决于各运营商刷新时间! 一、A记录 ①.主机名必须填写&#xff1b; 常用主机名有&#xff1a;www//*&#xff0c;效果参见上图说明&…...

MySQL连接空闲时间超过8小时报错原因与延伸知识

1 错误原因 1.1 两个参数 MySQL服务端两个参数控制连接超时时间&#xff1a; wait_timeoutinteractive_timeout1.1.1 如何查看 show global variables like interactive_timeout show global variables like wait_timeout 复制代码 1.1.2 含义与区别 wait_timeout&#xf…...

Flutter渲染原理

一 Widget Element RenderObject 之间的关系 1 Widget 在Flutter 中&#xff0c;万物皆是Widget,无论是可见的还是功能型的。一切都是Widget. 官方文档中说的Widget 使用配置和状态来描述View 界面应该长什么样子。 它不仅可以表示UI元素&#xff0c;也可以表示一些功能性的…...

PathCore:IAD文献解读

论文链接&#xff1a;[Towards Total Recall in Industrial Anomaly Detection]Towards Total Recall in Industrial Anomaly Detection &#xff1a;数据集&#xff0c; &#xff1a;标签 : 在ImageNet上预训练后的网络 第 张图 网络中第 层 1. Locall…...

C语言判断一个日期是在该年的第几天案例讲解

今天是2023年4月11号&#xff0c;我们就用今天举例得出是2023年的第几天。 思路分析 1&#xff09;我们想知道2023年4月11号是2023年的第几天&#xff0c;只需要把1到3月份的天数累加求和然后加上今天日期也就是11就可以算出2023年4月11号是2023年的第几天。 推广&#xff1a;…...

【超全总结】集成环信消息推送注意事项(华为、oppo、vivo等)

环信即时通讯 IM 支持集成第三方厂商的消息推送服务&#xff0c;为 Android 开发者提供低延时、高送达、高并发、不侵犯用户个人数据的离线消息推送服务。 当客户端应用进程被关闭等原因导致用户离线&#xff0c;环信即时通讯 IM 服务会通过第三方厂商的消息推送服务向该离线用…...

C++回调函数以及epoll中回调函数的使用

回调函数是一种常用的编程技术&#xff0c;它允许程序在运行时将一个函数作为参数传递给另一个函数&#xff0c;以实现更加灵活和可扩展的功能。在C中&#xff0c;回调函数通常被实现为函数指针或者函数对象。 函数指针是指向函数的指针变量&#xff0c;可以通过它来调用函数。…...

0基础学习软件测试有哪些建议

其实现在基础的资料和视频到处都是&#xff0c;就是看你有没有认真的去找学习资源了&#xff0c;去哪里学习都是要看你个人靠谱不靠谱&#xff0c;再好的教程和老师&#xff0c;你自己学习不进去也是白搭在正式选择之前&#xff0c;大可以在各种学习网站里面找找学习资源先自己…...

MySQL数据类型

文章目录一、数据类型分类二、数值类型1. tinyint 类型2. bit 类型3. int 类型4. float 类型5. decimal 类型三、字符串类型1. char 类型2. varchar 类型3. char 和 varchar 比较4.日期和时间类型5. enum 和 set一、数据类型分类 数据类型本质也是一种约束&#xff01; 如果插入…...

【设计模式】从Mybatis源码中学习到的10种设计模式

文章目录 一、前言二、源码&#xff1a;学设计模式三、类型&#xff1a;创建型模式1. 工厂模式2. 单例模式3. 建造者模式 四、类型&#xff1a;结构型模式1. 适配器模式2. 代理模式3. 组合模式4. 装饰器模式 五、类型&#xff1a;行为型模式1. 模板模式2. 策略模式3. 迭代器模式…...

爬虫攻守道 - 猿人学第20题 - 殊途同归

写在开头 这题也是&#xff0c;自己搞顶多追踪到wasm代码&#xff0c;然后就走不下去了。找了2个参考方案&#xff0c;自己做的过程中还又遇到些新的问题&#xff0c;下面做个记录。解法1参考文章解法2参考文章 解法1&#xff1a;追根溯源 在 JS 代码中追踪到 Payload 赋值位…...

4.11日报

synchronized 和 ReentrantLock 区别是什么&#xff1f; synchronized 早期的实现比较低效&#xff0c;对比 ReentrantLock&#xff0c;大多数场景性能都相差较大&#xff0c;但是在 Java 6 中对 synchronized 进行了非常多的改进。 主要区别如下&#xff1a; ReentrantLock …...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...