遥远的相似性:经济学原理如何应用于技术架构

欢迎大家关注公众号「JAVA前线」查看更多精彩分享文章,主要包括源码分析、实际应用、架构思维、职场分享、产品思考等等,同时欢迎大家加我个人微信「java_front」一起交流学习


1 比较优势原理

1.1 基本概念

我们首先介绍一个经济学概念:比较优势原理。假设有A和B两个小镇,两镇居民都以制作足球和篮球为生:

  • 做1个足球:A需要100小时,B需要80小时
  • 做1个篮球:A需要200小时,B需要40小时

我们可以得到如下结论:

  • 做1个足球和1个篮球
    • A需要300小时
    • B需要120小时
  • 全社会420小时拥有2个足球、2个篮球

1.2 成本分析

本章节分析A和B做足球和篮球的成本,注意计算过程不是A和B互相比较,而是自己与自己比较。

  • A成本分析
    • 做1个足球成本:(100/200) = 0.5个篮球
    • 做1个篮球成本:(200/100) = 2个足球
  • B成本分析
    • 做1件足球成本:(80/40) = 2个篮球
    • 做1个篮球成本:(40/80) = 0.5个足球

根据计算结果可以得出结论:

  • 做足球成本:A小于B
  • 做篮球成本:B小于A

1.3 核心内容

根据成本分析可以知道,A擅长做足球,B擅长做篮球。如果A只做足球,B只做篮球会有什么效果?

  • A用300小时只做足球:(300/100) = 3个足球
  • B用120小时只做篮球:(120/40)= 3个篮球
  • 全社会420小时拥有3个足球、3个篮球
  • 分工后整个社会多出1个足球、1个篮球

比较优势原理核心内容是:单个个体将有限资源只用来生产具有比较优势的产品,全社会总产值可以达到最大值。

亚当斯密对分工合作持积极态度,其认为分工合作有以下三个优点:

  • 降低工作切换成本
  • 促进工人熟能生巧
  • 促进机器替代人力

正如《理性乐观派》这本书所表达的核心思想:分工和交易是人类本能,正是这种本能把全人类带到了如今之高度。


2 遥远的相似性

在不同领域经过广泛实践的理论,看似无关但又有相通之处,这就是人类智慧之结晶。我们不难在互联网技术领域找到【分工与交换】思想之应用。


2.1 架构演进

互联网应用由单点架构到SOA、再到微服务架构,这种演进过程就是划分职责(分工)与相互通信(交换)之体现


2.2 领域划分

在架构设计时,领域与领域之间,工程与工程之间边界明确,职责清晰,互不越界,各司其职,领域与领域间通过协议进行通信


2.3 组织划分

技术团队大体可以划分为中间件团队和业务团队。中间件团队又划分为消息中心、缓存中心、配置中心、大数据中心等等。业务团队又划分为订单中心、用户中心、商品中心等等


2.4 拆分任务

2.4.1 任务未拆分

  • 一个机构有2名员工
  • 每个员工全天工作8小时
  • 全流程业务处理需要2小时
  • 全天接待人次 = 2 x 8 x 0.5 = 8

遥远的相似性:经济学原理如何应用于技术架构_第1张图片


2.4.2 任务拆分

  • 总业务拆分为两个子流程
  • 每个子任务需要1小时
  • 员工1仅处理A业务
  • 员工2仅处理B业务
  • 全天接待人次 = 2 x 8 x 1 = 16

遥远的相似性:经济学原理如何应用于技术架构_第2张图片


3 付出的成本

3.1 思维陷阱

如果分工过细一个技术人员很难感受到架构全貌,容易陷入手里有把锤子,看什么都像钉子这个思维陷阱。例如提升系统性能,服务端开发最容易想到加缓存,但这仅仅是从缓存层去思考,作为架构师应该进行更全面的思考。


3.1.1 四个方法

  • 减少请求
  • 空间换时间
  • 任务并行化
  • 任务异步化

3.1.2 五个层面

  • 代理层
  • 前端层
  • 服务层
  • 缓存层
  • 数据层

3.1.3 实际应用

(1) 减少请求 + 前端层

在秒杀场景中设置前置验证码


(2) 减少请求 + 服务层

多次RPC是否可以转换为一次批量RPC


(3) 空间换时间 + 服务层

引入缓存


(4) 空间换时间 + 缓存层

引入多级缓存


(5) 空间换时间 + 数据层

新增索引


(6) 任务并行化 + 服务层

如果多个调用互不依赖,使用Future并行化


(7) 任务异步化 + 服务层

如果无需等待返回结果,可以异步执行


3.2 复杂度上升

《为什么需要生物学思维》这本书中提到复杂系统形成的四个原因:吸积,交互,必须处理的意外情况、普遍的稀有事务,交互是复杂系统四要素之一。

交互带来两种特性:第一是互操作性。在搜索引擎上查询去某地怎么走,搜索引擎会告诉你打车需要多长时间,并提供一个打车按钮。第二是相互依赖性。例如下订单时需要使用优惠券,如果促销系统出现问题时就会影响订单系统。

一个技术系统不仅作用于自身,还会与其它大量系统产生交互。例如下单购买一件商品,订单系统,商品系统,支付系统,物流系统,促销系统多个系统之间会交互协作。由于交互特性的出现,复杂度呈现几何级数上升。


3.3 沟通成本上升

大家应该看过【你比划我猜】这种游戏形式,一个词语从第一个人传到最后一个人,往往根本不是同一回事,这就是交互产生的信息噪音。

分工合作需要成员相互协作,但是如果沟通不畅,信息传递不及时或不准确,可能会导致任务延误或错误。


4 文章总结

第一本文通过实例介绍了经济学中比较优势原理。第二本文不同领域有相通之处,例如技术架构中架构演进、领域划分、组织划分与任务拆分都体现了分工与交互。第三本文介绍了分工合作需要注意的问题,例如思维陷阱、复杂度上升与沟通成本上升,希望本文对大家有所帮助。


欢迎大家关注公众号「JAVA前线」查看更多精彩分享文章,主要包括源码分析、实际应用、架构思维、职场分享、产品思考等等,同时欢迎大家加我个人微信「java_front」一起交流学习

你可能感兴趣的:(架构,java)