架构设计的一些建议——陈皓

news/2025/2/12 0:44:57/

序言

本周5月15日,MegaEase创始人兼CEO、知名架构师、CSDN 资深博主陈皓(网名:左耳朵耗子)于13日去世,享年47岁。之前听过他的极客时间《左耳听风》,个人觉得还是有点收获的。

CoolShell——陈皓

写这篇文章的目的是希望陈皓在架构之路上的一些经验能够被大家参考和借鉴。

文章链接:我做系统架构的一些原则——陈皓

下面引用他的一些建议和原则:

  • 原则一:关注于真正的收益而不是技术本身
  • 原则二:以应用服务和 API 为视角,而不是以资源和技术为视角
  • 原则三:选择最主流和成熟的技术
  • 原则四:完备性会比性能更重要
  • 原则五:制定并遵循服从标准、规范和最佳实践
  • 原则六:重视架构扩展性和可运维性
  • 原则七:对控制逻辑进行全面收口
  • 原则八:不要迁就老旧系统的技术债务
  • 原则九:不要依赖自己的经验,要依赖于数据和学习
  • 原则十:千万要小心 X – Y 问题,要追问原始需求
  • 原则十一:激进胜于保守,创新与实用并不冲突

下面是上面文章的一个概要。

原则一:关注于真正的收益而不是技术本身

  • 是否可以降低技术门槛加快整个团队的开发流程
  • 是否可以让整个系统可以运行的更稳定
  • 是否可以通过简化和自动化降低成本

以应用服务和 API 为视角,而不是以资源和技术为视角

需要有一种自顶向下的,整体规划,统一设计的方式,才能做到整体的提升。

原则三:选择最主流和成熟的技术

  • 尽可能的使用更为成熟更为工业化的技术栈,而不是自己熟悉的技术栈
  • 选择全球流行的技术,而不是中国流行的技术
  • 尽可能的使用红利大的主流技术,而不要自己发明轮子,更不要魔改
  • 绝大多数情况下,如无非常特殊要求,选 Java基本是不会错的

原则四:完备性会比性能更重要

  • 使用最科学严谨的技术模型为主,并以不严谨的模型作为补充
  • 性能上的东西,总是有很多解的

原则五:制定并遵循服从标准、规范和最佳实践

  • 服务间调用的协议标准和规范
  • 一些命名的标准和规范
  • 日志和监控的规范
  • 配置上的规范
  • 中间件使用的规范
  • 软件和开发库版本统一
  • … …

原则六:重视架构扩展性和可运维性

  • 通过服务编排架构来降低服务间的耦合
  • 通过服务发现或服务网关来降低服务依赖所带来的运维复杂度
  • 一定要使用各种软件设计的原则

原则七:对控制逻辑进行全面收口

  • 流量收口
  • 服务治理收口
  • 监控数据收口
  • 资源调度有应用部署的收口
  • 中间件的收口

原则八:不要迁就老旧系统的技术债务

  • 与其花大力气迁就技术债务,不如直接还技术债。是所谓的长痛不如短痛
  • 建设没有技术债的“新城区”,并通过“防腐层 ”的架构模型,不要让技术债侵入“新城区”

原则九:不要依赖自己的经验,要依赖于数据和学习

  • 千万不要依赖于自己的经验做决定。做任何决定之前,最好花上一点时间,上网查一下相关的资料,技术博客,文章,论文等 。
  • 同时,也看看各个公司,或是各个开源软件他们是怎么做的
  • 然后,比较多种方案的 Pros/Cons,最终形成自己的决定,这样,才可能做出一个更好的决定

原则十:千万要小心 X – Y 问题,要追问原始需求

发生了一个问题X,但是你根据问题的表象,以为这是问题Y,于是尝试去找Y的答案,从而浪费大量的时间和人力。需要避免这种问题的产生,需要追根溯源找到原始问题。

原则十一:激进胜于保守,创新与实用并不冲突

进步永远来自于探索,探索是要付出代价的,但是收益更大。

总结

上面的原则或建议仁者见仁,智者见智,但总归是想大家一起收获一点经验。


http://www.ppmy.cn/news/74808.html

相关文章

qt之元对象系统

组成 QObject类:是所有使用元对象系统的类的基类Q_OBJECT宏:使得类可以使用元对象的特性,如动态属性,信号与槽MOC:元对象编译器,为每个QObject的子类提供必要的代码来实现元对象系统的属性 QMetaObject定…

直播预告 | 医疗人工智能入行经验分享

(本文阅读时间:2 分钟) 或许大家从不同程度上听说或使用过智能导诊机器人、语音电子病历或是智能问诊?这些高端大气又便利的产物都是人工智能在医疗健康领域的重要应用场景产品及服务。 “AI医疗”是人工智能技术赋能医疗健康产业…

VS Code 大量 Java 新功能来袭!

大家好,欢迎来到 Visual Studio Code Java 的 4 月更新!在此博客中,我们将带来大量基础用户体验更新,其中包括调试功能改进、Maven 插件中的配置文件支持、全新 Java Project Explorer 的用户界面和 Spring Boot 项目的可视化增强…

小航编程题库GoC南海区小学四年级模拟测试题(含题库教师账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统(含题库答题软件账号)_程序猿下山的博客-CSDN博客 填空题8.0分 删除编辑 答案:100 第1题画一条高度为100,粗为5的竖线。 //程序名:直线 //作者: int main() { pen.size(5)…

sys用户下为其他用户的创建私有db link的案例

文章目录 1.查询job执行情况2.确认根因3.重建DB LINK3.1使用current_schema方式3.2使用procedure方式 4.重新编译失效的对象,并手动执行job 记录一下scheduler job执行失败,而不知到job拥有者密码的情况下,如何重建私有db link的案例 1.查询j…

Cesium教程(四):调用地形服务

Cesium提供了多种现有地形数据服务接口,并且支持自定义地形数据。 CesiumTerrainProvider:高精度全球地形数据,附有光照和水面效果。地形切片使用quantized-mesh v1.0格式,Cesium使用CesiumTerrainProvider API调用该服务。 Goo…

【软考数据库案例分析】(全)

目录 1.1 案例分析概述 1.2 数据流图设计 1.3 概念结构设计 1.4 关系模式设计 1.5 SQL语言设计 1.5.1 创建表(create table) 1.5.2 修改表 (alter table) 1.5.3 删除表 (drop table) 1.5.4 索引 1.5.5 视图 1.5.6 查询语句格式 1.6.7 分组查询 1.5.8 其他操作 1.5…

Java后端入职第四天,就被要求代码回退(Git回退实战)

一、需求背景 初入职场,由于自己的失误或者对git不熟悉,把被人的代码给冲突掉了,然后需要立马回滚,对于新手开发,应该比较常见吧!或者,比较多一种情况,错误把工程add了到了暂存区,比如一些本地配置,本来就不应该提交的,又或者,开发中只提交部分代码,又想最新的提…