当前位置: 首页 > 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 …...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

windows系统MySQL安装文档

概览&#xff1a;本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容&#xff0c;为学习者提供全面的操作指导。关键要点包括&#xff1a; 解压 &#xff1a;下载完成后解压压缩包&#xff0c;得到MySQL 8.…...

Vue ③-生命周期 || 脚手架

生命周期 思考&#xff1a;什么时候可以发送初始化渲染请求&#xff1f;&#xff08;越早越好&#xff09; 什么时候可以开始操作dom&#xff1f;&#xff08;至少dom得渲染出来&#xff09; Vue生命周期&#xff1a; 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...

DBLP数据库是什么?

DBLP&#xff08;Digital Bibliography & Library Project&#xff09;Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高&#xff0c;数据库文献更新速度很快&#xff0c;很好地反映了国际计算机科学学术研…...

python基础语法Ⅰ

python基础语法Ⅰ 常量和表达式变量是什么变量的语法1.定义变量使用变量 变量的类型1.整数2.浮点数(小数)3.字符串4.布尔5.其他 动态类型特征注释注释是什么注释的语法1.行注释2.文档字符串 注释的规范 常量和表达式 我们可以把python当作一个计算器&#xff0c;来进行一些算术…...

npm install 相关命令

npm install 相关命令 基本安装命令 # 安装 package.json 中列出的所有依赖 npm install npm i # 简写形式# 安装特定包 npm install <package-name># 安装特定版本 npm install <package-name><version>依赖类型选项 # 安装为生产依赖&#xff08;默认&…...

安宝特案例丨寻医不再长途跋涉?Vuzix再次以AR技术智能驱动远程医疗

加拿大领先科技公司TeleVU基于Vuzix智能眼镜打造远程医疗生态系统&#xff0c;彻底革新患者护理模式。 安宝特合作伙伴TeleVU成立30余年&#xff0c;沉淀医疗技术、计算机科学与人工智能经验&#xff0c;聚焦医疗保健领域&#xff0c;提供AR、AI、IoT解决方案。 该方案使医疗…...

python学习day39

图像数据与显存 知识点回顾 1.图像数据的格式&#xff1a;灰度和彩色数据 2.模型的定义 3.显存占用的4种地方 a.模型参数梯度参数 b.优化器参数 c.数据批量所占显存 d.神经元输出中间状态 4.batchisize和训练的关系 import torch import torchvision import torch.nn as nn imp…...

Springboot多数据源配置实践

Springboot多数据源配置实践 基本配置文件数据库配置Mapper包Model包Service包中业务代码Mapper XML文件在某些复杂的业务场景中,我们可能需要使用多个数据库来存储和管理不同类型的数据,而不是仅仅依赖于单一数据库。本技术文档将详细介绍如何在 Spring Boot 项目中进行多数…...