![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
系统架构
文章平均质量分 87
张建飞(Frank)
What doesn't kill you make you stronger!
展开
-
业务中台的困境、及可能的解
有一个事情已经困扰我很久了——大中台、小前台作为战略已经提出很久了,在业界也掀起了不小的波澜,可是反观阿里的业务中台,为什么总觉得旁边有朵小乌云,感觉哪里不对劲。业务中台小乌云建一所房子,你要挖坑打地基,铺钢筋,然后一块砖头一块砖头的往上磊。没办法,原子世界就是这么物质,一块砖头都少不了。软件是比特世界,软件开发很少是从买服务器开始,特别是在这个Cloud Native的时代,很多基建的事情云厂商都已经帮我们做好了。IaaS是对算力、网络、存储、操作系统等基础设施的复用;PaaS是对中间件的复用;基原创 2021-06-29 16:11:26 · 10936 阅读 · 7 评论 -
一文教你认清领域模型和数据模型
依稀记得我第一次设计一个系统的时候,画了一堆UML图,面对Class Diagram(其实就是领域模型),纠结了好久,不知道如何落地。因为,如果按照这个类图去落数据库的话,看起来很奇怪,有点繁琐。可是不按照这个类图落库的话,又不知道这个类图画了有什么用。现在回想起来,我当时的纠结源自于我对领域模型和数据模型这两个重要概念的不清楚。最近,我发现对这两个概念的混淆不是个例,而是非常普遍的现象。其结果就是,小到会影响一些模块设计的不合理性,大到会影响像业务中台这样重大技术决策,因为如果底层的逻辑、概念、理论基础原创 2021-01-13 15:57:30 · 16405 阅读 · 3 评论 -
COLA 4.0:应用架构的最佳实践
前几天和几个饿了么的同学聊天,一听说他们还在使用COLA 1.0,我二话没说,90度鞠躬,赔礼道歉,虚心聆听他们的吐槽。COLA的初衷旨在控制复杂度,救码农于水火,惭愧的是,早期的思想不成熟,设计也多有缺陷,不仅没帮到他们,反而坑了他们,实在抱歉。实际上,我在COLA 3.0迭代的时候,已经举起奥卡姆剃刀,砍掉了很多东西。然而还不够,主要体现在对架构的思考还不够透彻。因此,经过仔细反思,有了这一版最新的COLA 4.0,期望回归初心,让COLA真正成为应用架构的最佳实践,帮助广大的业务技术同学,脱离酱缸原创 2020-12-09 19:27:54 · 221349 阅读 · 231 评论 -
应用架构COLA 3.1:分类思维
模块(Module)、组件(Component)、包(Package),这些概念对于我们技术同学并不陌生,但并不是所有人都能理解其要义。深入理解之后,我才发现,其背后的深意是分类思维。而这种分类也是应用架构的核心所在,通过不同粒度、不同层次的分类,把复杂的软件系统实现控制在可以被理解、被维护的程度。否则,对于动则上100万行代码的软件,人类根本没有办法理解和维护。试想一个极端情况,假如没有这些概念协助我们分类,我们把所有业务逻辑都写在一个类里面,会是什么样的结果呢?我们很多的“非人类”系统,正是因为没有原创 2020-11-10 19:22:10 · 11369 阅读 · 10 评论 -
复杂性应对之道——维度思维
You should not be a if-else coder, should be a complexity conquer. -Frank这篇文章,是对之前我在《一文教会你如何写复杂业务代码》说的“自上而下的结构化分解 + 自下而上的抽象建模”方法论的升级。因为在之前的方法论中,我们缺少一个多维度看问题的视角,这种维度思维的缺失,可能会导致miss掉一些重要的业务信息,从而使我们制定软件设计策略的时候,陷入困难。有了维度思维,我们便可以更加方面的去看清业务的全貌,更加全面的掌握业务信息,从而.原创 2020-09-25 13:36:08 · 4589 阅读 · 3 评论 -
35岁就是技术人的天花板吗?
35岁是技术人天花板了吗? 35岁不是技术人的职业终点 面试造火箭,入职拧螺丝,我该怎么办?[video(video-tlgcBWfX-1600154998139)(type-youku)(url-https://player.youku.com/embed/XNDg1ODQ0NDc2OA==)(image-https://vthumb.ykimg.com/054106015F605E原创 2020-09-15 15:32:49 · 11014 阅读 · 35 评论 -
应用架构COLA3.0:让事情回归简单
最近,阿里云的同学告诉我,COLA作为应用架构,已经被选入阿里云的Java应用初始化的应用架构选项之一。This is really something,于是,在这个里程碑节点上,我开始回过头来,重新审视COLA一路走来的得与失。COLA作为一种架构思想无疑是成功的。但是作为框架,个人感觉有点鸡肋之嫌。 特别是在简洁性上做的不好,感觉做了不少画蛇添足的事情。试想一下,有些功能我作为作者都很少去使用,我实在想不到,它为什么还有存在的理由。基于上面的思考,我做了这一次COLA 2.0 到 COLA 3原创 2020-06-26 23:45:46 · 19826 阅读 · 12 评论 -
实现一个状态机引擎,教你看清DSL的本质
最近在一个项目中,因为涉及很多状态的流转,我们选择使用状态机引擎来表达状态流转。因为状态机DSL(Domain Specific Languages)带来的表达能力,相比较于if-else的代码,要更优雅更容易理解。另一方面,状态机很简单,不像流程引擎那么华而不实。一开始我们选用了一个开源的状态机引擎,但我觉得不好用,就自己写了一个能满足我们要求的简洁版状态机,这样比较KISS(Keep It ...原创 2020-03-20 18:53:54 · 42808 阅读 · 34 评论 -
关于面向接口编程,你真的弄懂了吗?
什么是接口(What)百度说:接口泛指实体把自己提供给外界的一种抽象化物,用以由内部操作分离出外部沟通方法,使其能被内部修改而不影响外界其他实体与其交互的方式。人类与电脑等信息机器或人类与程序之间的接口称为UI(User Interface ,用户界面)。电脑等信息机器硬件组件间的接口叫硬件接口。电脑等信息机器软件组件间的接口叫软件接口。牛津字典说:Interface: A p...原创 2019-11-02 23:23:35 · 10313 阅读 · 7 评论 -
应用架构COLA 2.0
很多同学不止一次和我反馈,我们的系统很混乱,主要表现在:应用的层次结构混乱:不知道应用应该如何分层、应该包含哪些组件、组件之间的关系是什么;缺少规范的指导和约束:新加一段业务逻辑不知道放在什么地方(哪个类,哪个包)、应该起什么名字比较合适?解决这些问题,正是我创建COLA的初心之一——试图探索一套切实可行的应用架构规范,这个规范不是高高在上的纸上谈兵,而是可以复制、可以理解、可以落地、可...原创 2019-08-26 11:58:28 · 80499 阅读 · 25 评论 -
复杂业务代码要怎么写
了解我的人都知道,我一直在致力于应用架构和代码复杂度的治理。这两天在看零售通商品域的代码。面对零售通如此复杂的业务场景,如何在架构和代码层面进行应对,我有了一些新的思考,在此分享给大家。我相信,同样的方法论可以复制到大部分复杂业务场景。一个复杂业务的处理过程业务背景简单的介绍下业务背景,零售通是给线下小店供货的B2B模式,我们希望通过数字化重构传统供应链渠道,提升供应链效率,为新零售助力。...原创 2019-08-01 18:33:14 · 18239 阅读 · 18 评论 -
应用架构之道:分离业务逻辑和技术细节
架构什么是架构?关于架构这个概念很难给出一个明确的定义,也没有一个标准的定义。硬是要给一个概述,我认为架构就是对系统中的实体以及实体之间的关系所进行的抽象描述。架构始于建筑,是因为人类发展(原始人自给自足住在树上,也就不需要架构),分工协作的需要,将目标系统按某个原则进行切分,切分的原则,是要便于不同的角色进行并行工作。为什么需要架构?有系统的地方就需要架构,大到航空飞机,小到一个电商...原创 2019-07-04 07:28:00 · 10556 阅读 · 7 评论 -
《代码精进之路:从码农到工匠》——抽象
写本文的原因是,抽象是软件设计中最重要的概念,但抽象这个概念本身又很抽象,值得我们花时间去好好探究一番。抽象的力量没有抽象思维,就没有人类光辉灿烂的现代文明。原始人看到一片树林,不会给它们一个名字,比如叫“松树”。他们会给每一棵树取一个独特的名字,可能叫“silisiba”。原始人只知道某棵具体的树。随着意识水平的发展,人类开始有意识地将具有相同特征的事物归并到一起,从“silisiba”...原创 2019-06-21 11:08:43 · 4917 阅读 · 2 评论 -
《代码精进之路:从码农到工匠》
我有一个梦想,我写的代码,可以像诗一样优美。我有一个梦想,我做的设计,能恰到好处,既不过度,也无不足。这种带有一点洁癖的完美主义就像一把达摩克利斯之剑,时刻提醒我不能将就、不能妥协。完美主义的代价是在很长时间里持续的迷茫和焦虑。甚至一度,我对软件行业是失望的,怀疑在软件的世界里,到底还有没有优雅的代码和整洁的架构。如果有的话,为什么所有的业务代码都像一座座“屎山”,既不优雅也不整洁,既晦涩又...原创 2019-06-21 10:59:51 · 11451 阅读 · 10 评论 -
万物流变:从辩证法看互联网架构和人生
辩证法这两天在学习辩证法,发现辩证法的思想非常有意思。辩证法简单的说就是事物都是运动、变化和发展的,事物的对立面在某些情况下是可以互相转换的,而且正是这种矛盾推动着事物向前发展。辩证法的思想自古有之,也是系统化思维和思辨思维的重要方法论,我们先简单看下其历史和脉络。中国古代朴素辩证法“祸兮福所倚,福兮祸所伏”“物极必反”, “否极泰来”“天下大势,分久必合,合久必分”。希腊古代辩...原创 2019-06-14 14:49:32 · 930 阅读 · 0 评论 -
复杂度应对之道 - COLA应用架构
前言从业这么多年,接触过银行的应用,Apple的应用,eBay的应用和现在阿里的应用,虽然分属于不同的公司,使用了不同的架构,但有一个共同点就是都很复杂。导致复杂性的原因有很多,如果从架构的层面看,主要有两点,一个是架构设计过于复杂,层次太多能把人绕晕。另一个是根本就没架构,ServiceImpl作为上帝类包揽一切,一杆捅到DAO(就简单场景而言,这种Transaction Script也还凑合...原创 2019-01-04 17:04:44 · 52477 阅读 · 18 评论 -
复杂性应对之道 - 领域建模
为什么要领域建模软件的世界里没有银弹,是用事务脚本还是领域模型没有对错之分,关键看是否合适。就像自营和平台哪个模式更好?答案是都很好,所以亚马逊可以有三方入住,阿里也可以有自建仓嘛。实际上,CQRS就是对事务脚本和领域模型两种模式的综合,因为对于Query和报表的场景,使用领域模型往往会把简单的事情弄复杂,此时完全可以用奥卡姆剃刀把领域层剃掉,直接访问Infrastructure。我个人也是坚...原创 2018-03-19 17:39:07 · 30436 阅读 · 25 评论 -
系统架构评估
软件质量属性1. 性能 (Performance)性能是指系统的响应能力,性能测试经常要使用基准测试(Benchmark Test).基准测试(benchmarking)是一种测量和评估软件性能指标的活动。你可以在某个时候通过基准测试建立一个已知的性能水平(称为基准线),当系统的软硬件环境发生变化之后再进行一次基准测试以确定那些变化对性能的影响。这是基准测试最常见的用途。(Refe原创 2012-09-14 15:13:20 · 2813 阅读 · 0 评论 -
分布式数据库
1. 分布式数据库领域CAP理论Consistency(一致性), 数据一致更新,所有数据变动都是同步的Availability(可用性), 好的响应性能Partition tolerance(分区容错性) 可靠性,A single piece of data is stored in 3 nodes, 1 node failed, the other 2 nodes can原创 2012-09-13 21:40:09 · 1237 阅读 · 0 评论 -
系统的可靠性分析与设计
可靠性分析SFTA(Software Fault Tree Analysis) 软件故障树分析。软件故障树分析(SFTA)是一种自顶向下的软件可靠性分析方法,即从软件系统不希望发生的事件(顶事件),特别是对人员和设备的安全及可靠性产生重大影响的事件开始,向下逐步追查导致顶事件发生的原因,直至基本事件(底事件),从而确定软件故障原因的各种可能组合方式和(或)发生概率。原创 2012-10-14 22:23:08 · 1589 阅读 · 0 评论 -
读Martin Fowler's 《Patterns of Enterprise Application Architecture》有感
作为一本技术指导书,显然这本书有些outdated了,但想想现在的一些框架,架构正是基于这本书的思想构建的,还是不免对作者当时的Vision感到钦佩。出于对这些思想本源的追索,以及对历史的追溯。还是很有必要浏览这本经典著作的,对于这个500页的书,我看的比较快,只是跳一些感兴趣的点着重看下,事实证明还是很有收获的。POJO起源:J2EE才出现时,尽管EJB2.0 特别是它的原创 2012-03-20 15:24:44 · 1542 阅读 · 0 评论 -
系统的安全性和保密性设计
信息安全技术加密和解密技术对电子数据攻击有两种形式:一种为被动攻击,就是非法地从传输信道上截取信息,或从存储载体上窃取,复制信息。另一种为主动进攻,就是对传输或存储的数据进行恶意的删除,篡改等。 实践证明,密码技术是防止数据攻击的一种有效而经济的方法。加密算法对称加密,优点是算法实现的效率高,速度快。 常用算法有DES (Data Encryption Standard原创 2012-10-14 22:26:52 · 2945 阅读 · 0 评论 -
系统建模
结构化系统建模1.数据流图 DFD(Data Flow Diagram)数据流图由数据流(data flow),加工(process),文件(data store),源 / 宿(Source / Sink)四部分组成。数据流是有一组固定成分的数据组成,表示数据的流向,用箭头表示。它可以从源、文件流向加工,也可以从加工流向文件和宿,还可以从一个加工流向另一个加工。加工描述原创 2012-10-14 22:30:51 · 2222 阅读 · 0 评论 -
架构师论文
如何写论文用10分钟在草稿纸上写出思维导图, 例如下面是分布式缓存系统设计的导图。如何提高系统架构师写作水平:http://www.cnblogs.com/muhongxing/archive/2010/10/10/1847476.html论文构思- 使用思维导图- 仔细阅读题目- 头脑风暴,将能想到的素材写作草稿纸的右方(好的关键词,或句子)原创 2012-10-22 11:57:58 · 3606 阅读 · 1 评论 -
架构师在敏捷中是猪还是鸡
刚刚在InfoQ上看到这边文章,还挺有意思http://www.infoq.com/cn/news/2013/08/architecture-scrum猪、鸡是什么意思?http://en.wikipedia.org/wiki/The_Chicken_and_the_PigThe fable of the Chicken and the Pig is used to illustr原创 2013-08-19 12:55:22 · 1355 阅读 · 0 评论 -
网络安全那点事
网络安全水很深,零碎的也看了不少资料,但是总觉得很飘渺,可能是平时主要是做应用开发,而真正实践密码设计(cryptography)和安全设计(security)的机会比较少.刚刚看了几篇文章 listed as following,有一些A-Ha moment,也能把我现有的关于web安全的知识窜起来,故记录在此:http://gdp.globus.org/gt4-tutorial/mul原创 2013-08-14 11:37:07 · 1142 阅读 · 0 评论 -
企业级API设计
最近对service的API设计,在team内有些讨论,主要集中在API是足够抽象、通用好呢, 还是具体、易用好?其实这个是要折衷的,通用的好处是以后更改API的可能性小,但坏处是想要通用,里面的字段就不能定义太死,不定义死,极端的例子是全部用Name/Value Pair,最通用,但client面对这些NV,根本不知道怎么去设值,这样的API很明显是不友好,难用的。 所以需要折衷。当然一原创 2013-09-03 16:44:34 · 1417 阅读 · 0 评论 -
架构风格
管道-过滤器风格:每个构建都有一组输入和输出,数据输入构建,经过内部处理,然后产生数据输出。主程序-子程序:面向过程的架构,所有的计算构件作为子程序协作工作,并由一个主程序顺序的调用这些子程序,构件用共享存储区交换数据。面向对象风格:面向对象架构风格的特征是将数据标识和基本操作封装在对象中。这种模式的构件是对象,对象维护自身表示的完整性,对象之间通过消息机制进行通信,对象交互时需要知道彼此的标识,原创 2012-10-15 21:43:19 · 3681 阅读 · 0 评论 -
如何创建RESTFul Web服务
想写这篇文章很久了,这是个大话题,不是一时半会就能说清楚的。 所以准备花个一星期整理资料,把思路理清楚,然后再在Team里做个sharing:)其实RESTFul是架构风格,并不是实现规范,也不一定非要用HTTP,但鉴于HTTP的ubiquity和SOA的实现基本都基于HTTP实现,可以这样说,HTTP就是Restful的实际实现协议。一、HTTP 协议二、什么是Restful三、原创 2013-09-03 17:04:28 · 1765 阅读 · 0 评论 -
抽象的力量
虚拟化和抽象化无所不在,计算机科学里有一句老话:所有问题都可以通过增加一个间接层来解决。操作系统是对硬件的抽象;许多现代语言所用的虚拟机又是对操作系统的抽象;对象-关系映射层抽象了数据库;负载均衡和虚拟IP抽象了网络终端;云计算(infrastructure as service)抽象了service provider;SOAP(XML)抽象了不同系统之间的通讯协议;虚原创 2011-12-06 15:25:05 · 1148 阅读 · 0 评论 -
基于中间件/构件的开发
定义:中间件(middleware)是基础软件的一大类,属于可复用软件的范畴。顾名思义,中间件处于操作系统和用户的应用软件的中间。中间件在操作系统、网络和数据库之上,应用软件的下层,总的作用是为处于自己上层的应用软件提供运行和开发的环境,帮助用户灵活、高效地开发和集成复杂的应用软件,中间件是一类软件,中间件不仅要实现互联,还要实现应用之间的互操作;中间件是基于分布式处理的软件,最突出的特点原创 2013-10-20 21:29:05 · 1620 阅读 · 0 评论 -
分布式系统设计
分布式通信协议基于TCP/IP的通信基于对象的通信协议(RPC,CORBA, RMI)基于Http+xml的通信协议(WebService)基于Http的通信协议(Restful)基于对象的分布式设计基于Stub/Skeleton的架构分布式对象协议:RPC - Remote Procedure CallCORBA - Common Ob原创 2012-10-12 23:17:26 · 1831 阅读 · 0 评论 -
反向代理及如何获得原始IP
在现代网站架构中,scalability原创 2014-04-11 10:06:25 · 2268 阅读 · 0 评论