80后聊架构:究竟怎么做架构设计? | 架构师之路

开发 架构 系统
很多人确实上线了很多系统,也确实做了很多需求,但基本上都是毫无方法,全凭自己想象的在做架构设计。总的来说,架构设计有四个大的步骤,其中第二个步骤最容易被大家忽略。

相关文章:《80后聊架构:究竟什么是架构设计? | 架构师之路

做了多年架构设计,很多人连架构设计的关键流程和步骤都不知道。

很多人确实上线了很多系统,也确实做了很多需求,但基本上都是毫无方法,全凭自己想象的在做架构设计。

总的来说,架构设计有四个大的步骤,其中第二个步骤最容易被大家忽略。

画外音:别人写文章,都说最后一个步骤最重要,我就是不按套路出牌,说第二个步骤最重要。

步骤一:理解需求以及定义系统边界。

Understand the problem & Identify the scope of the system.

理解需求,核心是和产品确定功能要求,以及根据业务确定性能要求。

定义系统边界,核心是要明确系统哪些要做,哪些不做。

步骤二:也就是最容易被忽略的一个步骤,调研已有的类似的系统。

Research on existing systems.

你做的系统,是业内首创吗?如果不是,看看类似的系统是怎么做架构设计的。参考成熟的方案,能让你的架构设计事半功倍。

步骤三:顶层设计。

high-level architecture design.

设计系统的主要组件,以及它们之间的交互方式。例如:

  • 使用机房,还是云?
  • 使用单体,还是微服务?
  • 要不要cache,要不要mq?
  • 用rdb,还是nosql?
  • ...

这里要包含系统架构的粗略图,以及实现核心需求的流程图。

步骤四:也是非常重要的一个步骤啊,解决主要矛盾迭代设计。

Refine the design.

(1) 顶层设计完之后,哪里是系统的主要矛盾?

我们要根据潜在的主要矛盾,细化与迭代顶层设计。

例如:你要做一个计数系统,对推文的阅读,转发,点赞,评论数进行计数。

(2) 假如主要矛盾如果是并发,1秒10万次?

那可能就要加入一些乐观锁,异步,批量请求,Copy On Write等巧妙设计,甚至牺牲一些一致性。

(3) 假如主要矛盾是一致性,不允许数据出错?

那可能就要加入一些互斥,校验,write-ahead logging等巧妙设计。

迭代设计,解决完一个主要矛盾,继续解决次要矛盾,直到所有的功能需求与性能需求得到满足。

这里面有个地方要注意:在第四步迭代设计的过程中,有可能会发现第三步顶层设计的缺陷。这个时候,可能要优化甚至推翻第三步顶层设计。

这也是为什么,一些系统运行了几年,就要进行重构。当初的顶层设计已经满足不了现有的业务需求了。在原有顶层设计基础上,解决不了主要矛盾了,那就重构顶层设计来解决。

这也是我非常推崇的两大核心架构设计理念:

  • 其一,任何脱离业务的架构设计都是耍流氓;
  • 其二,架构不只是设计而来的,更是迭代与演进而来的;

这两个架构理念,我会在接下来的100个架构知识点里反复提及。

咱们举个例子。

假如业务需求是:“我想做一个1万属性,100亿数据,每秒10万吞吐的分类信息平台,像58同城一样,2个月实现”。

(4) 如何来做架构设计呢?

第一步,探究功能需求,性能需求,确定系统边界。

分类信息的特点是什么?

招聘、房产、二手、二手车、黄页... 品类繁多,帖子schema不固定...

分类信息的典型场景是什么?

帖子发布,帖子浏览,帖子搜索(每个属性都可能被搜索)...

需求的性能要求是什么?

数据量巨大,吞吐量巨大,用户实时访问,请求延时敏感...

第二步,调研类似系统的方案。

国外信息分类做得最好的应该是 Craigslist 了,网上调研一些相关的资料,可以了解到,其核心的一些关键设计点:

①如何品类扩展?

服务垂直拆分,数据垂直拆分...

②如何扩展属性?

利用 MongoDB 的 schema-free 特性...

③如何实现搜索?

早期利用 MongoDB 的索引,后期利用搜索服务...

④如何应对大数据量,高并发量?

数据水平切分,逻辑处理服务化,集群化,缓存降低数据库压力...

总之,通过调研,对已有的方案有个初步的了解。

第三步,架构顶层设计。

宏观上,结合 Craigslist 的一些成熟实践:

  • 业务垂直拆分;
  • 微服务分层,集群化;
  • 数据库水平切分;
  • 缓存降压;
  • ...

大的方向基本就能把握住。

第四步,根据主要矛盾迭代设计。

① 主要矛盾1:多品类帖子数据的分开存储,使得核心业务流程及其复杂,怎么解?

潜在方案:统一帖子中心服务IMC(Info Management Center)。

② 主要矛盾2:多品类帖子属性的分级,扩展与校验,怎么解?

潜在方案:统一分类管理服务CMC(Category Management Center)。

③ 主要矛盾3:大数据量,高并发,跨品类的多属性搜索,怎么解?

潜在方案:统一信息检索服务E-search。

这里,是一个架构设计过程的案例演示,主要用以说明设计流程。具体“1万属性,100亿数据,每秒10万吞吐的分类信息平台”的设计细节,详见后文的补充阅读资料。

回归今日话题,架构设计的四大步骤:

  • 其一,理解需求以及定义系统边界;
  • 其二,调研已有的类似的系统;
  • 其三,顶层设计,定义核心组件与交互;
  • 其四,针对主要矛盾迭代设计;

有人问,第二步借鉴已有成熟系统的方案,在别的架构设计方法中,没有看到过这个步骤呀?莫不是搞笑的吧。

我非常严肃地声明,这个步骤非常重要,调研一定要多花时间。不行的程序员,看谁的代码都是屎;不行的架构师才会认为,我的方案最牛逼,别人的方案都是屎,但其实,自己原创的大部分方案才是屎。

保持开放的心态,借鉴优秀的方案,是优秀架构师的核心品质。

“借鉴”这一点,任何不接地气的架构方法,都不会有人说。

补充阅读材料

上述案例架构设计方案细节,详见:《1万属性,100亿数据,每秒10万吞吐,架构如何设计?

责任编辑:赵宁宁 来源: 架构师之路
相关推荐

2024-11-13 06:03:45

架构设计架构系统

2023-08-20 12:21:18

软件开发架构设计

2018-11-23 09:52:24

架构设计架构师

2018-07-03 15:46:24

Java架构师源码

2019-07-23 18:15:26

技术大数据数据库

2021-10-25 09:41:04

架构运维技术

2018-11-28 09:38:34

微服务架构API

2013-04-19 15:12:17

架构师WEB架构师

2020-07-28 08:36:54

数据安全数据泄露数据

2020-05-15 08:38:33

架构师高级开发互联网

2009-02-23 11:18:06

J2EE架构师Java

2018-02-06 09:58:48

架构师MVCiOS

2020-11-25 09:56:48

架构运维技术

2022-06-15 10:04:51

存储选型MySQL

2009-03-10 15:30:51

测试架构师软件测试职场

2021-04-27 09:35:36

业务领域建模

2015-06-10 11:22:41

云计算云架构师

2013-05-27 10:58:28

Tumblr架构设计雅虎收购

2019-07-08 11:09:09

分布式系统Elasticsear

2018-06-13 09:25:27

IT系统架构隐私李聪
点赞
收藏

51CTO技术栈公众号