- 博客(208)
- 收藏
- 关注
原创 为什么该团队A做的事情,却被其它团队做了
第一种原因,原本方案只需要直接改动系统 service1,但由于团队1并没有解决该问题的动力,其他人不得不绕道去修改系统 service2,service3,service4 来解决该问题。在一个大型电商系统中,有四个团队负责不同的服务:商品团队(负责service1,即商品信息服务),订单团队(负责service2,即订单处理服务),支付团队(负责service3,即支付服务)和物流团队(负责s...
2023-12-17 18:50:34 178
原创 分布式系统的状态就两种:有和没有
什么是有状态服务,什么是无状态服务?无状态服务和有状态服务是分布式系统中两种主要的服务类型,它们在处理请求时有着不同的特性和要求。1、无状态服务(Stateless Service):1)无状态服务在处理请求时不依赖其他请求,每个请求都是独立的。2)处理一个请求所需的全部信息要么包含在请求本身中,要么可以从外部资源(如数据库)中获取。3)服务器本身不存储任何与请求相关的状态信息,因此不需要在请求之...
2023-12-09 10:55:14 267
原创 软件只有两种复杂度:本质复杂度&偶然复杂度
图自网络我们知道软件设计的本质是持续对抗软件本身产生的复杂度。题目中的两种复杂度名称,最早来源自哪里呢?在《人月神话》这本书中,作者将软件复杂度分为本质复杂度(Essential Complexity)和偶然复杂度(Accidental Complexity)。这两种复杂度应该怎么理解呢?我们可以结合下面这段描述来理解这两种复杂度的定义。一个电商软件必然会包含交易、商品等业务复杂度,因此我们称它们...
2023-12-06 22:11:23 745
原创 老板:快下班了,这有个小bug修复完再走
图片动画自网络1、这个小动画曾一度在研发圈里热传。它真实的展现了,现实中研发人员“苦逼”的一面。我们无奈地,苦苦地,一笑之后,思考一下这是为什么。2、大多数程序员以战术编程的心态来进行软件开发,他们的主要重点目标是新功能的上线或者错误的修复。咋一看,这似乎是合理的,还有什么比快速编写有效的代码更重要的呢。这样的开发者,着眼于使功能尽快运行,而不是想拥有一个良好的设计。我们称为:战术龙卷风编程者。...
2023-11-26 17:22:03 157
原创 大厂工作的跨域架构师,最好掌握这4个原则
今天学习的主要内容如下:什么是跨域架构师,在职责上跟单域架构师有什么区别?跨域架构师的勇气重要,还是技术重要?如何面对多领域之间的冲突,又如何解决冲突?我是一名跨域架构师,可以告诉我有哪些基本建议和原则?1、什么是跨域架构师。你看这个图,在领域拆分之前,人、系统、机器都在一个团队,只有一个管理者,这个叫单域,团队里面的架构师叫单域架构师。图自https://time.geekbang.org/co...
2023-11-25 15:50:21 106
原创 大家一起判,这个“锅”应该谁来背
在大厂里面,经常出现一个词,“背锅”。我们今天请大家一起来当判官。在郭东白老师的架构课里面,有一个场景,相信这个场景在团队里面,也具有一定的典型代表性。昨天,线上出现了一个事故,造成了资金损失。涉及到的团队有交易团队、支付团队、资金团队。它们分别对应了三个业务领域,交易业务域,支付业务域,资金业务域。起因是交易模式变更了,比如原来只有代收模式(适用于社群电商及微商,满足快捷收款的诉求,需要平台直接...
2023-11-19 12:23:53 61
原创 架构分四层,我的系统为什么越来越乱
上一期我们学习了,一个应用架构的四层及职责。但是,随着业务需求的增多,时间的推移,系统架构慢慢的就变乱了。本文视频语音版本:我们这期来分析是什么原因导致的。你说是因为“熵增”,这是肯定的。但熵增只是描述了一个概念。它的表现是什么,根本原因是什么,我们要具象化的来分析。所以,在这之前呢,先让我们先看看变乱后的现象。出现了两类现象。图自https://mp.weixin.qq.com/s/jJzzJI...
2023-11-18 17:31:23 113
原创 一名程序员能从俄罗斯方块游戏中得到什么
如今,俄罗斯方块游戏已经成为了一种文化现象,不仅是一款游戏,更成为了一种文化符号和代表,影响了全球无数的玩家和游戏开发者。在俄罗斯方块游戏的历史长河中,它不仅仅是一款游戏,更是一种经典、一种传承和一种精神。那么我们作为一名程序员可以从这款游戏中得到哪些启发呢。一、俄罗斯方块游戏的历史俄罗斯方块的原版作者是俄罗斯游戏设计师Alexey Pajitnov(阿列克谢·帕吉特诺夫),他在1984年创造了这...
2023-03-26 10:05:38 562
原创 如何对一个老系统进行梳理分析
我们大部分时候面临的都是老系统改造,在老的系统上进行代码的开发,需求的实现。当我们觉得老系统实在“太老”的时候,就想着应该怎么分析老系统,以便支持我们去重构。本文从老系统分析的方向开始,重点介绍技术架构、代码分析以及业务流程分析的方法。一、如何分析一个老系统对一个老系统进行分析,一般可以从下面几个方向入手。1、系统功能分析:首先要对系统的功能进行全面的梳理,理解系统的各个功能点是如何运作的。这可以...
2023-03-25 10:19:12 2355
原创 从原因到解决方案,深入剖析网络错误问题
当计算机系统中的客户端(例如浏览器、应用程序等)尝试连接到远程服务器时,网络连接错误是一种常见的问题。这种错误可能会对用户造成很大的困扰,因为它可能导致无法访问网站或无法使用某些在线应用程序。而网络错误其实是我们日常开发中很难完全避免掉的一个问题,只能降低,而不能杜绝。一、为什么会有网络错误?图自:https://time.geekbang.org/column/article/78585如果有一...
2023-03-19 19:28:29 7743
原创 一周技术学习笔记(第97期)-掌握DDD不是想象的那么容易吗?
1、(来自朋友圈):掌握DDD不是想象的那么容易吗?现在大部分的MVC代码都是面向过程编程的贫血模式,因为他更符合人的思维惯性。14年我们在通过微服务重构CRM系统时,业务的学院派架构师坚持用DDD和充血模型来解决版本1+N定制问题。架构衍生出了对微服务框架很多变态的需求,例如RPC支持多态、支持泛型参数微服务声明和IDL定义等,业界主流的RPC框架都不支持这些特性…总体而言,这个架构师的想法是好...
2023-01-15 20:18:09 577
原创 一周技术学习笔记(第96期)-如何判断一个核心系统受到伤害的程度
1、太用力的人,一般走不远(朋友圈看到)做任何一件事,已开始就拼劲全力,付出全部时间和精力,久而久之,越来越疲惫,没了冲劲和热情一开始有多用力,后来就有多无力。太用力的人,一旦没有得到想要的结果。心态就更容易崩;而轻装上阵的人,回旋的余地更大。真正坚持的幕后的人靠的不是冲劲,而是恰到好处的投入和喜欢。2、架构师的职责-三个确保确保应用系统能够不断演进,而不是采用了固化的设计方案;确保应用系统的技术...
2023-01-08 22:00:04 260
原创 一周技术学习笔记(第95期)-个人成长路上如何找到自己喜欢的事情?
祝大家新年快乐!1、研发做的纯技术工作或者提效类非业务性需求工作如何让业务方感知到?首先,需要互相建立信任。如果业务方提什么需求你都拒绝,也肯定不行。一方面要去接需求,一方面也要有勇气跟对方说我们的想法:为什么某个需求我们觉得不靠谱,为什么当前腾挪不出来研发资源来做新需求。可以主动把人员投入透明出来,让业务方知晓我们把人员都花在哪了。整个过程中,核心关键点是,如何让业务方相信研发人员的专业度。有时...
2023-01-01 17:19:22 404
原创 一周技术学习笔记(第94期)-为什么很多leader都喜欢做闭环
1、如何来评判一个程序员到底对OOP理解的怎么样呢?面向对象编程OOP,可以说是我们最熟悉的编程范式,结合实际的过程我们一般有如下2点理解:1、面向对象编程注重抽象和分层,这是计算机科学解决复杂问题的方案,甚至是人类解决复杂问题的方案。如 SpringMVC,就是典型的一种分层和抽象策略,它让我们设计大型复杂系统成为了可能,可以逐层击破,并且各自优化。2、面向对象编程还天然地契合现实世界的生活,如...
2022-12-25 19:54:42 653
原创 一周技术学习笔记(第93期)-请用代码的优雅取悦你的领导
1、请用代码的优雅取悦你的领导发现身边有很多人,总是喜欢学习和研究分布式架构相关的知识点,却不喜欢读《重构》、《代码整洁之道》这一类能够提高程序员最本质的写代码手艺的书籍。然而,每次CODE REVIEW,总会有一些让人摸不着头脑要讲半天的代码。或许是人人都是架构师的这个环境,让架构的课程戳手可得,确让人忘了自己应该去追求的整洁代码之美。其实,殊不知,一堆可维护的代码就是取悦同事,取悦领导的最佳方...
2022-12-11 18:45:21 182
原创 一周技术学习笔记(第92期)-为什么喜欢讨论技术而不是业务?
1、我们为什么总喜欢讨论技术,而不是业务?作为开发人员,我们平常讨论比较多的是技术层面的东西,比如 Spring 框架、Redis 缓存、MySQL 数据库等等,我们喜欢讨论这些,是因为纯技术的东西比较通用,和业务相关性不大,沟通起来比较方便。但你要知道,一个项目能否成功落地,首先需要的是把业务分析做到位,至于选用什么技术来实现,这是我们第二位才去考虑的因素。从架构角度看,业务架构是源头,然后才是...
2022-12-04 19:07:14 171
原创 一周技术学习笔记(第91期)-产品经理在做什么
这周跟大家分享3个收获,如下:我们设计一个服务往往有两难。第一难,我们事先对服务的边界没有进行很好的划分,结果在落地的过程中,大家反复争论具体功能的归属。第二难,由于对业务的了解不够深入,我们要么设计不足,导致同一个服务有很多版本;要么服务过度设计,实现了一堆永远用不上的功能。服务边界的划分和功能的抽象设计是核心。服务边界确定了这个服务应该“做什么”,抽象设计确定了这个服务应该“怎么做”。产品经理...
2022-11-27 23:36:33 135
原创 一周技术学习笔记(第90期)-分享两个技术边界的问题
第一个。在订单数据表里面会有个最终优惠后的订单金额,那么这个计算优惠金额是应该订单服务来做吗?商品的原价是多少,满减优惠了多少,特价减免了多少,优惠后的计算结果肯定是订单的一部分,也需要保存在订单服务里面。那计算优惠金额应该是订单服务来做吗。这里,我们不难看出涉及有订单服务和促销服务,两个服务。他们都是基础服务,基础服务是最底层的服务。各自提供了自身业务领域内的业务功能,订单服务提供跟订单数据相关...
2022-11-20 21:14:57 109
原创 一周技术学习笔记(第89期)-共享服务放大就是中台
整个架构结构发展的历程,大概是从单体到分布式,到SOA,到微服务,最后或者说是现在的中台。图自《架构实战案例解析》这个历程,以及最终结果的产生,都是因为系统要不断适应业务复杂化。一个业务流程从开始到结束的长度,我们称之为业务的深度。自然也就有它自身的复杂性。比如查看商品详情,自然要将商品信息从数据库里面读取出来,然后需要组装商品的促销信息和价格,以及有无商品标签,比如7天无理由退货等等,最后将全面...
2022-11-13 21:12:29 113
原创 一周技术学习笔记(第88期)-给你一个”编程拐棍“
1、编程,从本质上是一项无法监督的工作。一切度量都无效(尽管还是有各种各样的度量研发效能的实践方法,那也只是一个牵引作用)。我们都经常有这样的经历,耗费了80%的时间着力于项目的个别地方,而花费20%的时间来完成其余80%的工作。编程过程非常耗用脑力,这种特性使得个人性格显得很重要。人们都知道聚精会神地一天工作八小时有多么困难!也许你有过某天精力过份集中,以至于第二天无精打采的体会,或由于上月过份...
2022-11-06 20:40:44 119
原创 一周技术学习笔记(第87期)-代码上坚持是"坚韧不拔",也可以是"顽固不化"
学习需要定期投入知识投资和金融投资的一个主要区别是:所有知识投资都有些价值。即使你从来不会再工作中使用某项技术,它也会影响你思考和解决问题的方式。知识投资和金融投资的一个主要相同点是:需要定期投资。你需要定期投资最低限度的时间量。养成一种习惯,如果需要的话,躲到你的”家庭办公室“里去或者走进有无线网络的咖啡厅。并非每期学习都同样富有成效,但是只要定期安排学习,长期来看一定会有收获。如果你一直再等待...
2022-10-30 18:53:09 168
原创 一周技术学习笔记(第86期)-大促前系统备战可以看看这6个问题
扩容机器时需要注意什么?数据库连接:某服务集群一共有 10 个容器实例,每个实例会建立约 100 个数据库连接,加起来就是约 1000 个连接,假设数据库总共支持的连接数为 1200 个,这是能够支撑现状的。但如果考虑到近期业务增长较快,会导致服务负载较大,需要扩容 5 个实例,那么总的数据库连接数大约会达到 1500 个,这就肯定支撑不住的,所以对服务进行扩容时,对数据库也需要同步扩容。扩容机...
2022-10-23 22:01:01 447
原创 一周技术学习笔记(第85期)-两篇文章13个问题重入OO设计思想
学习了两篇文章,转换成13个问题,我们来模拟一个问答场景,带你一起走进正交的世界。开场关于面向对象,设计原则,你最想跟大家分享什么?那我想应该是,开闭原则?!就这一条原则,影响了开发30多年。以及围绕着开闭原则的“正交设计”。实际上,我们今天写的开闭原则的代码,就是正交设计的很好实践。开闭原则、正交设计、PaaS化,这些是不是都跟面向对象有关?谈到面向对象,我们就会有OOA、OOD、OOP三个方面...
2022-10-16 22:03:49 248
原创 一周技术学习笔记(第84期)-代码评审的六大方向
代码评审的六大方向1、代码逻辑主要看逻辑是否合理,有无多余的逻辑在代码里面,以防给别人和自己买坑,或者将来出现不定时的线上问题,有没有嵌套的过深的逻辑等等。2、代码调用调用是否恰当,有没有重复的调用等等。3、代码规范这个每个公司都会有,也可以参照行业上的标准规范,我个人认为主要是看代码的可读性是否良好,对在面临需求交付时间压力下能做到良好就很不容易了,另外再看看可维护性是否良好,等等。4、依赖管理...
2022-10-07 21:03:34 249
原创 一周技术学习笔记(第83期)-时间和空间到底哪一个更经济
这篇文字讲述时间和空间,但肯定不是去理解牛顿的绝对时空观,也不会去理解爱因斯坦狭义相对论的理论。我们今天说的是,程序世界的两句话“时间换空间,空间换时间”,这两句词语在我们的工作中经常会被提及。那么这中间的【换】我的理解是“被动的牺牲,然后再去争取”,有点置之死地而后生的气魄。比如牺牲时间,多“浪费”一些时间换取空间的延伸;牺牲空间,多“浪费”一些空间节省时间上的消耗。空间换时间空间换时间,比如...
2022-10-02 21:28:59 403
原创 一周技术学习笔记(第83期)-这一条原则竟然影响了现代编程30多年!
我们一般应该怎么衡量代码的质量?容易被阅读,容易被维护,其中在维护代码的过程中,代码的扩展又是非常重要的衡量标准。另外,在我们所熟悉的23种设计模式中,大部分的设计模式都是为了解决代码的扩展性问题而被总结出来的。而所有这些跟扩展性相关的设计模式又都是以一个很重要的原则作为指导原则的:开闭原则。架构分解中有两大难题:其一,需求的交织。不同需求混杂在一起,也就是存在所谓的全局性功能。其二,需求的易变。...
2022-09-25 20:53:47 161
原创 一周技术学习笔记(第82期)-你要的理论、法则、定律、效应都在这里了
72法则:72小时法则:当你决定做一件事的时候,你必须在72小时内完成它,否则,你很可能就永远不会再做了。金融里面还有个”72法则“,如果你投资收益率在12%,你想知道多少年你的钱翻一番呢,那么 72/12=6年。另外还有个“70法则”,比如 如果通胀率为3.5%,应用“70法则”,货币贬值一般的时间约为70/3.5=20年鳄鱼法则:这是经济学交易技术法则之一,也叫“鳄鱼效应”,它的意思是:假定一...
2022-09-18 21:45:57 363
原创 一周技术学习笔记(第81期)-《愿生命从容》
“享受人生而不沉湎,看透人生而不消极”,这次暂当做活出生命的技术吧。隔离的生活时常是乏味和恐惧的交替,乏味是在只有巴掌大的地方上踱步,恐惧是望着窗外晴朗的天空却只能被困在这里。这两种情绪还彼此渗透,乏味下潜伏者恐惧,恐惧时仍感觉乏味。那天临来的时候,环顾房间,把这本书带来,晚上怎么也睡不着的时候就把灯打开翻一翻,中午吃过饭望望窗外,再翻一翻。感谢这本书陪我度过了乏味恐惧交替的隔离日子。幸福是一种一...
2022-09-11 21:58:46 172
原创 一周技术学习笔记(第80期)-这10段话将帮助你成为更好的程序员
编程是一种技艺,一种需要用心学习的技艺。用最简单的话表述,编程可归结为让计算机做你或你的用户想要它做的事情。作为程序员,你既是倾听者,又是顾问;既是解释者,又是发号施令者。你设法捕捉难以捕捉的需求,并找到表达它们的方式,让一台纯粹的机器能够合理地处理它们。你设法为你的工作建立文档,以使他人能够理解它;你还设法使你的工作工程化,以使他人能够以它为基础进行构建。你不应该局限于任何特定的技术,而是应该拥...
2022-09-04 22:03:26 137
原创 一周技术学习笔记(第79期)-架构师要掌握的6段话
一、依赖倒置原则DIP是过程式编程和OO编程的分水岭:“大多数开发人员对设计正交系统的必要性都很熟悉。只不过他们可能会使用其他一些词来描述这个过程,例如模块化、基于组件和分层,等等。系统应该由一组相互协作的模块构成,每个模块实现的功能应独立于其他模块。有时这些模块组件被组织到不同的层次上,每一层都做了一级抽象。这种分层的实现是设计正交系统的有力途径。因为每一层只使用它下面一层提供的抽象,所以可以在...
2022-08-28 22:02:27 185
原创 一周技术学习笔记(第78期)-顺序结构、循环结构、分支转移几十年未变也不会变...
| 话题11946年阿兰图灵写下第一行代码,到现在各种高级语言层出不穷,期间发生了天翻地覆的变化,工具变了、硬件编了。但又有些东西有没有变,现在我们写程序和几十年前写的程序,无一例外都是顺序结构、循环结构、分支转移这几种组合组成,无可增加,也缺一不可。当然,有的同学也会提到,其实我们还有变化,我们现在有SOLID这样的设计原则,也有23种设计模式来指导我们编程。实际上这些原则和模式正是在指导我们怎...
2022-08-21 21:43:27 90
原创 一周技术学习笔记(第77期)-组织架构活动
本期6个话题。| 话题1:一般认为架构师的主要职责首先是组织架构活动,然后是制定架构方案。制定架构方案我们一般都能很好的理解,那什么是组织架构活动呢。架构活动都有哪些呢?偿还技术债:不论什么样的类型的团队,初创也好,成熟也好,往往我们都一直面临着交付压力。这种情况下我们的程序员写代码有时候比较随意,什么“意大利面条”样式的代码都有。我要交付的快,请允许我有这样的“犯罪”,...
2022-08-14 21:52:55 92
原创 一周技术学习笔记(第75期)-通过代码的认知成本可以衡量复杂度吗
本周有4个话题。话题1:你怎么来评判一段代码,一个功能,一个工程的复杂性?是呀,在生产过程中,我们经常会说,也经常听说,某某工程复杂,某某功能的代码复杂,那么到底是怎么一个复杂呢?能有一个这样的“公式”么,可以告诉我们代码的复杂性。一套软件代码,终归是由模块来构成的,这里我们暂且不论这些模块设计的合理性,因为那是另外一个方向要讨论的事情。模块的粒度可以是一个方法,可以是一...
2022-07-31 22:01:43 134
原创 “穿的越少越好”在夏天说和在冬天说是不一样的
本次我们从4个话题来分享。第1个话题:ER数据建模也是一种建模方法。在这个过程中将事物抽象成【实体】【属性】【关系】,进而来表达现实世界事物的描述。比如一个商品、一个订单、一名老师等等这是实体,然后商品的颜色、重量、大小这是属性,一个订单包含多个商品,或者一名老师购买了多个商品,这些是关系。是的,早先的时候,对于简单的软件产品,软件研发人员直接创建了E-R关系图,我们用工...
2022-07-24 22:02:32 136
原创 一周技术学习笔记(第73期)-技术债可能并不是一件坏事
第一个话题:”天下武功,唯快不破“,这一点被互联网企业应用的炉火纯青,你常常可以听到MVP,小步迭代,快速试错等等。确实有时候快,不顾一切地快,发挥了很大的作用。不快,可能就会被淘汰。互联网的历史上,也发生过很多类似的故事。比如早先MongoDB和RethinkDB在nosql市场上竞争的时候,RethinkDB一直追求更完美的体验,开发人员也比较喜欢。但是MongoDB...
2022-07-17 21:53:54 122
原创 一周技术学习笔记(第72期)-研发效能真的是一笔糊涂账吗
我在互联网从业了好多年,也在企业软件行业待过几年,期间经历了jdk版本的更替,也经历了Struts1到Struts2到webwork,还经历了hibernate到ibatis到mybatis,经历了好多类似这样的技术组件的版本升级。但是这些仅限技术中间件层面的,更让我有感触的是下面这些变迁。从最初的瀑布研发流程、敏捷到精益,从持续集成、持续发布到持续部署,从实体机、虚拟机...
2022-07-10 21:22:59 140
原创 一周技术学习笔记(第71期)-已经有200多个命令为何Redis还要Lua
为什么要在Redis中使用Lua脚本我们都知道Redis是一种高性能的key-value内存数据库,企业环境里面的很多应用场景都使用了它,因为在部分场景下它可以作为关系型数据库的补充,比如分布式缓存等。在使用Redis的过程中我们接触了很多Redis的操作命令,它的官方网站上就提供了200多个命令,可以说”想怎么用就怎么用“,几乎涵盖了所有的kev-value操作。不过,...
2022-07-03 21:30:25 511 2
原创 一周技术学习笔记(第70期)-理解数据库的这两个问题,面试官会对你另眼相看...
为什么会有数据库的事务隔离级别从我们学习关系型数据库的时候就知道了数据库有四种隔离级别。那么为什么要做隔离级别这样的设置呢。TIP:MySQL有四种隔离级别,Oracle有两种隔离级别。任何一种数据库在数据存储的同时都不得不面临性能问题的考虑,另外关系型数据库事务的ACID这四种特性,真的需要同时满足吗。其实,对于大多数应用系统来讲,事务的原子性和持久性肯定是要保证的,不...
2022-06-26 22:03:24 99
原创 一周技术学习笔记(第69期)-为什么研究过框架和中间件源码的面试者更受欢迎...
web分布式程序中常用的“武器”可以按照接入层、逻辑层、缓存层、存储层这样的结构去罗列出来。服务接入层:反向代理 Nginx;业务逻辑层:web容器Tomcat;应用框架spring;orm框架mybatis;数据缓存层:redis;消息中间件kafka;数据存储层:MySQL;文件存储hdfs;搜索存储elasticsearch;可不要轻视了对这些内容的深层次了解,其中...
2022-06-19 22:02:49 99
原创 一周技术学习笔记(第68期)-像练习硬笔书法那样写代码
像练习硬笔书法那样写代码你如果认真练习过硬笔书法,而且小有成就,就会有这样的经历,写字不认真的时候,或者说不按套路来的时候,写出来的字还是挺难看的。但是,当你认真的时候,就能写出很漂亮的字来。这跟学习设计原则有点类似。当需求时间压得紧的时候,你的程序中的代码就乱遭遭,当你想写出好的程序代码的时候,又能够符合比如开闭这样的原则。因为你已经知道了什么是美。如果你的“硬笔书法”...
2022-06-12 22:02:45 208
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人