随笔分类 - 【架构思考】
摘要:## 定律 马尔文·康威1967年提出:“设计系统的架构受制于产生这些设计的组织的沟通结构。” 换句话说:“如果团队、部门、子部门等的组织结构没有紧密反映产品的必要组成或产品组成的关系,那么项目将会遇到麻烦。因此,应该确保组织结构兼容于产品架构。” 随着业务的发展与架构的演进,我对于康威定律有了更深
阅读全文
摘要:随着时间的推移,项目代码越来越多,文件结构越来越复杂。到了某一个时间点,必须做一些重构,拆分子项目,增加其可读性。 ## 原项目文件结构 简化版的文件结构如下,这里将其做了分类:app_1, app_2, app_3。 实际的名字可能千奇百怪,很难从名字简单地判断其从属,阅读和修改起来非常困难。 ~
阅读全文
摘要:在 Maven Parent POM 的使用过程中,有两个很重要的概念:`Project Inheritance` 和 `Project Aggregation` (见参考一)。这两个技能的灵活使用,可以解决很多实际问题。 - Project Inheritance:可以让子项目继承父项目的配置。
阅读全文
摘要:随着需求不断增加,业务量不断增大,应用/系统/框架也需要不断升级,迭代。 今天就讲一讲我们系统中非常重要的一环,缓存的演进。 ## 原初 整个系统的简化模型如下:源文件`Source`把输入传给应用模块`Module`,进行处理,`Module`会和缓存`Cache`进行一些数据交互,最后输出到`S
阅读全文
摘要:背景 在上一篇我们讲了,如何通过 Bamboo 实现自动化部署,流程如下: 其中,前面几个环节都是成熟的商业产品,最后一环是自己造的轮子(简单的 shell 脚本)。 对于中小型团队,这个方案已经足够适用了。 但是对于大型团队,或者需要更高程度的自动化,还可以进一步加强。 架构 经过考量,我们决定将
阅读全文
摘要:## 问题 工作中遇到一个棘手的 BUG 。为方便理解,首先介绍下,涉及模块的流程简化如下: ~~~ Start -> Node -> Cache/DB -> Query_Engine ~~~ 系统是按批次 Batch 处理数据,开始时,把一个批次的数据都发到某个 Node 上去,进行处理,完了之后
阅读全文
摘要:## 问题 我们的系统A,在运行过程中会查询(调用)一个其它系统B的模块,获取一些股票/债券等的属性。 股票/债券的信息每天更新,但是模块B并不提供历史记录,查询到的总是最新值。 原本每天运行下来也没什么问题,但是,最近业务上有一个新的需求,要求我们能够重跑某一天的数据,且最终结果不变。 问题来了,
阅读全文
摘要:Pass by Reference和Pass by Value是编程中很基础的两个概念,相信很多同学也都并不陌生。但是实际运用起来却很容易混淆,本文从实际应用出发,将这个知识点再梳理一遍。 赋值与传参 赋值与传参是Pass by Reference和Pass by Value的两个常见应用场景,下面
阅读全文
摘要:问题 工作中需要同步一些数据,大概接近百万条的量级,更新时间非常慢,需要7个多小时,更新的频率是每周一次。随着数据量的一步步增加,时间也越来越多,逐渐成为一个风险因子,于是想到要尝试做一些优化,降低同步时间。 分析 经过调查,需要同步的是TABLE_A,同步的过程可以简化表述为两步: Call AP
阅读全文
摘要:今天要讲的是以下概念: - 控制反转 :IoC, Inversion of Control 什么是控制反转 先说正常的控制流程是怎样的: 比如我写了一个方法`process()`,在程序中的某处,我会自己调用这个方法,完成一些操作。如下示例:获取了`input`参数,然后传给`process()`进
阅读全文