点击上方「

芋道源码

」,选择「置顶公众号」

技术文章第一时间送达!

源码精品专栏

 

  • 精尽 Dubbo 原理与源码 69 篇

  • 精尽 Netty 原理与源码

     61 篇

  • 中文详细注释的开源项目

  • Java 并发源码合集

  • RocketMQ 源码合集

  • Sharding-JDBC 源码解析合集

  • Spring MVC 和 Security 源码合集

  • MyCAT 源码解析合集

来源: https://www.jianshu.com/p/e30327c9baf3

最近学习了阿里资深技术专家李运华的架构设计教程,颇有收获,总结一下。

1 基本概念和目的

架构设计的基本概念和目的

架构设计的目的是为了解决系统复杂度带来的问题,并不是要面面俱到,不需要每个架构都具备高性能、高可用、高扩展等特点,而是要识别出实际业务实际情况的复杂点,然后有有

针对性地解决问题

,即:

有的放矢,而不是贪大求全

。 在实际情况中,不一定每个系统都要做架构设计,需要结合实际情况。有时候最简单的设计开发效率反而是最高的,架构设计毕竟要投入时间和人力,这部分投入如果用来尽早编码,项目也许会更快。

2 架构设计复杂度来源

高性能

高性能

高可用

高可用

可扩展性

可扩展性

低成本、安全、规模

低成本、安全、规模

3 架构设计三原则

架构设计三原则

合适原则

GFS为何在Google诞生,而不是在Microsoft诞生,其中Google有那么庞大的数据是一个主要因素,而不是因为Google的工程师比Microsoft的工程师更加聪明。

真正优秀的架构都是企业

在当前人力、条件、业务等各方面约束条件下设计出来的

,能够合理地将资源整合一起并发挥出最大功效,并且能迅速落地。这也是很多BAT出来的架构师到了小公司或者创业团队反而做不出成绩的原因,因为没有大公司的平台、资源、积累,只是生搬硬套大公司的做法,失败的效率非常高。

简单原则

软体领域的复杂性

无论是结构的复杂性还是逻辑的复杂性,都会存在各种问题,所以架构设计时如果简单方案和复杂的方案都可以满足需求,最好选择简单的方案。《UNIX编程艺术》总结的KISS(Keep It Simple,Stupid!)原则一样适用于架构设计。

演化原则

对于软体系统来说,变化才是主题。软体架构需要根据业务的发展而不断变化。 如果没有把握「

软体架构需要根据业务发展不断变化

」这个本质,在做架构设计的时候就很容易陷入一个误区:试图一步到位设计一个软体架构,期望不管业务如何变化,架构都稳如磐石。

为了实现这样的目标,要么照搬业界大公司公开发表的方案;要么投入庞大的资源和时间来做各种各样的预测、分析、设计。无论哪种做法,后果都很明显:投入巨大,落地遥遥无期。更让人沮丧的是,就算跌跌撞撞拼死拼活终于落地,却发现很多预测和分析都是不靠谱的。

实践中,架构师要提醒自己不要贪大求全,遵循演化优于一步到位的原则,因为业务的发展和变化总是很快的,

无论多牛的团队,都不可能完美预测所有的业务发展和变化路径。

实践中可以参考如下建议:

  • 首先,设计出来的架构要

    满足当时的业务需要

  • 其次,架构要不断地在实际应用过程中迭代,保留优秀的设计,修复有缺陷的设计,改正错误的设计,去掉无用的设计,使得架构逐渐完善。

  • 第三,当业务发生变化时,架构要扩展、重构,甚至重写;代码也许会重写,但有价值的经验、教训、逻辑、设计等却可以在新架构中延续。

4 架构设计的流程

架构设计的流程

参考资料:

从0开始学架构——李运华

架构蓝图--软体架构 "4+1" 视图模型



如果你对 Dubbo / Netty 等等源码与原理感兴趣,欢迎加入我的知识星球一起交流。

长按下方二维码噢

目前在知识星球更新了《

Dubbo 源码解析

》目录

如下:01. 调试环境搭建02. 项目结构一览03. 配置 Configuration04. 核心流程一览

05. 拓展机制 SPI

06. 线程池

07. 服务暴露 Export

08. 服务引用 Refer

09. 注册中心 Registry

10. 动态编译 Compile

11. 动态代理 Proxy

12. 服务调用 Invoke

13. 调用特性 

14. 过滤器 Filter

15. NIO 伺服器

16. P2P 伺服器

17. HTTP 伺服器

18. 序列化 Serialization

19. 集群容错 Cluster

20. 优雅停机

21. 日志适配

22. 状态检查

23. 监控中心 Monitor

24. 管理中心 Admin

25. 运维命令 QOS

26. 链路追踪 Tracing

... 一共 

69+

 篇

目前在知识星球更新了《

Netty 源码解析

》目录

如下:01. 调试环境搭建02. NIO 基础03. Netty 简介04. 启动 Bootstrap

05. 事件轮询 EventLoop

06. 通道管道 ChannelPipeline

07. 通道 Channel

08. 位元组缓冲区 ByteBuf

09. 通道处理器 ChannelHandler

10. 编解码 Codec

11. 工具类 Util

... 

一共 

61+

 篇

目前在知识星球更新了《

资料库实体设计

》目录

如下:

01. 商品模块02. 交易模块03. 营销模块04. 

公用模块

... 一共 

17+

 篇

源码不易

↓↓↓

点赞

支持老艿艿

↓↓


推荐阅读:
相关文章