- 博客(378)
- 资源 (4)
- 收藏
- 关注
原创 那些激励你深入研究技术的语录
遇到耗时高的问题,90%能用重启解决,但是不找到原因,问题一定会再次出现。代码里的Bug就像房间里的老鼠,你不找到它,它就会一直捣乱。代码的质量决定了程序的稳定性,而程序的稳定性则决定了业务的成败。不要害怕技术难题,它们就像楼梯,一步步爬上去,你会发现自己站得更高。每一行代码都承载着责任,每一个决策都伴随着后果。不要仅仅满足于代码能运行,更要思考它如何更好地满足需求,避免潜在的隐患。找到问题的根源...
2024-03-29 00:00:16 81
原创 NoSQL爆炸时代,数据库的分类及使用场景怎样总结?
十年前,人家问常见的数据库分类有哪些?问题比较好回答:分为关系型数据库和NoSQL。NoSQL又可以分成键值数据库、列族数据库、文档数据库和图数据库。每种数据库举个例子,回答就很完美:有层次、有结构、有内容。这个时代,NoSQL已经不止这四种,维度在增多:AI大火,对应用的多是向量数据库;可观测大火,对应用的多是时序数据库;还有用于存储和处理地理空间数据的空间数据库;还有一种新型数据库,面向对象...
2024-03-27 00:00:18 629
原创 CodeReview的挑战
保证CodeReview质量的前提条件有良性的社交压力保证CodeReview质量的先决条件在于建立一个良性、有效的社交压力机制。这种机制始于招聘过程,我们需要吸引那些拥有基础专业素养的开发者,其中包括能够承受并积极响应CodeReview中社交压力的能力。设想一下,当你紧张地编写代码,而交付时间又步步逼近时,面对组织对单元测试的严格要求,你可能会考虑降低标准,甚至为了应付工具的覆盖率要求而编写一...
2024-03-25 00:00:08 871
原创 谷歌和百度合并,要合成一个服务,然后把谷歌的人砍半,你是空降过来负责的,你会怎么做?...
问题:谷歌和百度合并,要合成一个服务,然后把谷歌的人砍半,你是空降过来负责的,你会怎么做?回答:首先,我会深入了解两家公司的现状,包括它们各自的技术、市场定位、用户群体、企业文化等。然后,我会与两家公司的高层管理团队以及关键员工进行积极沟通,以确保他们对合并的目标和期望有清晰的认识。接下来,我会明确合并后的目标和指标,包括市场份额、用户满意度、技术创新等。我会制定详细的计划和时间表,确保两家公司的...
2024-03-21 00:01:00 773
原创 打造坚不可摧的防线:容灾策略的实践与探索
在当今这个信息化时代,数据已成为企业最宝贵的财富之一。因此,保护数据免受意外损坏或灾难性事件的影响变得至关重要。这就需要企业建立一个有效的容灾体系,来确保业务连续性和数据安全。容灾,即灾难恢复(Disaster Recovery),是指在灾难发生后,通过事先制定的方案和措施,快速恢复企业的关键业务和数据。一个有效的容灾体系,不仅能够减少灾难对企业造成的损失,而且能够帮助企业在灾难发生后迅速恢复正常...
2024-03-19 00:00:32 702
原创 如何有效把控项目质量:关键策略与实践
架构师在项目质量把控方面扮演着至关重要的角色。以下是一些建议,帮助架构师有效地把握项目质量:制定明确的质量标准和度量体系与项目团队共同制定明确的质量标准,包括代码质量、系统性能、安全性、可维护性、可扩展性等方面的要求。这些标准应该基于项目需求、业务目标和技术能力来制定,要具体、可衡量,以确保项目满足预期的质量水平。可衡量的指标可以包括代码覆盖率、缺陷率、响应时间、系统可用性等。确保指标具有可衡量...
2024-03-18 00:00:41 276
原创 怎样建设高性能、低延迟的系统?
实现高性能和低延迟系统涉及多个方面,包括硬件、软件、系统架构和算法优化等。以下是一些通用的方法:硬件优化CPU:选择具有高主频、多核心和多线程的CPU,以支持高并发的处理需求。内存:使用高速的RAM(如DDR4或更高版本的内存),并确保足够的内存容量以支持系统的运行。存储:使用低延迟的存储设备,如SSD(固态硬盘)替代传统的HDD(机械硬盘)。对于特别需要高性能的场景,可以使用NVMe SSD。网...
2024-03-15 00:39:00 241
原创 深入MySQL优化:提升数据库性能的关键策略
MySQL优化从设计上,可根据需要:分库分表、读写分离、冷热分离、使用缓存、定期进行数据清理。从客户端使用上,使用连接池、避免大事务、返回数据多使用物理分页。从优化MySQL配置文件上,调整MySQL配置文件中的参数,如缓冲区大小、最大连接数等,以适应应用程序的需要。从优化表结构上,使用合适的存储引擎;避免使用大型或不必要的列,并尽可能使用小型数据类型;尽量把字段设置为NOT NULL;对于某些文...
2024-03-14 00:02:42 505
原创 微服务架构中的拆分粒度决策
大家好!今天我来和大家分享一下微服务架构中的拆分粒度决策问题,希望能帮助大家更好地理解和应用微服务架构!问题背景在设计和实施微服务架构时,拆分粒度的决策非常重要。拆分得太细,会增加系统间通信和部署的复杂性;拆分得太大,会失去微服务的灵活性和独立性。所以,我们需要考虑哪些因素来确定拆分粒度呢?通用维度业务边界:将相关的业务功能放在一个微服务中,可以更好地实现独立开发、部署和维护。通过分析业务流程、功...
2024-03-13 00:01:00 315
原创 三分钟入门AGI与ChatGPT:小白也能懂的大语言模型
1. AI、AGI、AIGC是什么?AI:人工智能,让机器模仿人类智能解决问题。AGI:通用人工智能,让机器像人一样思考、学习和处理多种任务。AIGC:生成式人工智能,利用模型生成新内容,如文本、图像等。2. ChatGPT是什么?ChatGPT是OpenAI开发的聊天机器人,能模拟人类对话。可用于撰写论文、创作诗歌、编写代码等。利用自然语言处理技术,与用户进行有意义的互动。3. 如何使用Chat...
2024-03-12 09:25:51 209
原创 深入探索:软件架构模式的精华总结
Mark Richards写了一个50多页的小册子叫《软件架构模式》,里面介绍了五种架构:分层架构、事件驱动架构、微服务架构、微内核架构和基于空间的架构。其他的架构风格,我在之前的文章中都介绍过,简单说一下:基于空间的架构。基于空间的架构模式基于空间的架构模式也叫云架构模式(cloud architecture pattern),是设计用来解决扩展性和并发性问题的。传统架构长成下面这样,拓扑结构仍...
2024-03-11 00:59:19 388
原创 做代码审查CodeReview有哪些关注点?
代码审查(Code Review)是为了保证代码质量,控制代码的错误和提升开发团队的技能而进行的一种活动。功能方面修改范围:我在CR时第一关注点是修改范围与需求是否一致,如果修改范围扩大,会造成变更不可控,是极为危险的。功能实现:代码是否满足功能需求或修复了相应的Bug,代码实现的逻辑是否正确?这个会通过在方案评审时就做好准备。设计方案评审需要3人以上有CR权限同学参加,最后CR人至少是这三人中的...
2024-03-08 09:54:01 291
转载 在跨系统环境中实现数据一致性:关键步骤和策略
总结了五种大分类,供参考。其实个人觉得总结的不是很好,但调研业界的文章,也没有其他结构上、体系化上更有说服力的。先发出来给大家看看,日后改进的基础。事务处理使用事务可以确保一组操作被视为一个单元,同时确保所有操作都成功或全部失败。如果其中一个操作失败,则整个事务将回滚并撤消所有已提交的更改。事务可以分为ACID事务和分布式事务。分布式事务业界有分成两阶段提交2PC、三阶段提交3PC、TCC、可靠消...
2024-03-06 17:19:11 29
原创 红蓝攻防、红蓝对抗
在网络安全领域中,红队和蓝队是两个常用的术语,用来描述攻击者和防御者之间的对抗。红队代表攻击方,通过模拟真实的攻击手法来测试和评估系统的弱点,而蓝队代表防御方,负责检测和阻止潜在的攻击。比如很多大公司每年都要参与护网行动。护网行动是以公安部牵头的,用以评估企事业单位的网络安全的活动。守护好自身的系统和设施,极为重要。以下是红蓝对抗中守方的一些方法总结。针对所有员工定期组织各种活动,加强安全意识,预...
2024-03-05 09:04:14 902
原创 探索全球市场:跨国合规的关键要点
很多国内在某些领域做的比较成功的公司,在发展到一定阶段后,会将眼光放眼到国际市场。往往这些公司的国际化部门会与国内部门完全独立出来。其中很大一部分原因是针对哪些国家的应用要遵循哪些国家的法律法规。一些信息敏感的业务,为了合规,服务器都需要部署到国外。今天咱们就来聊聊跨国合规那些事儿。微信我在美国时用过微信国际版,和国内的数据是可以互通的,和国内和的好友聊天完全不受影响。事实上,微信国际版和国内版,...
2024-03-04 15:30:24 864
原创 如何防御跨站请求伪造(CSRF)攻击?
CSRF 英文全称是 Cross-site request forgery,所以又称为“跨站请求伪造”,是指恶意诱导用户打开被精心构造的网站,在该网站中,利用用户的登录状态发起的跨站请求。简单来讲,CSRF 就是利用了用户的登录状态,并通过被精心构造的网站利用用户正常网站的会话状态来做用户不知情的事情。用GET请求特别典型的目前少见。一个变体我就遇到过:我不小心登录了一个游戏网站,游戏网站不断给我...
2024-03-03 19:57:17 874
原创 k8s如何做容器的高可用?
容器管理Kubernetes Controller Manager 组件会周期性地与每个 Node 上的 kubelet 服务进行通信,确保 Pod 的状态与期望值一致。pod的资源出现故障时,会尝试进行重启,当根据重启策略无效,则会重新新建pod的资源。对于无状态容器来说,主要有两种类型的控制器。ReplicaSet:为用户创建指定数量的pod副本数量,确保pod副本数量符合预期状态,并且支持...
2024-02-29 22:20:50 613
原创 如何设计一个秒杀系统?
秒杀是电商系统中常见的业务,用于吸引用户,刺激留存及消费所做的一种活动。经典的秒杀包含限时秒杀和限量秒杀。很多公司有专门的秒杀系统。哪个业务要做活动,就来对接这个系统。系统特点1、瞬时流量极大,过了秒杀时间点流量结束。2、秒杀商户库存极少,例如百万用户去抢2个iphone。3、秒杀时间点没到的时候,刷新量大,静态资源访问量剧增。一般流程事前:运营侧建活动,并将秒杀数据、库存等信息写入缓存。技术侧预...
2024-02-27 10:37:30 207
原创 谈谈对服务化的理解
首先:服务化是什么,为什么要服务化服务化是一种将业务、功能或流程抽象为服务的设计方法,通过服务之间的协作和调用来实现系统的整合和复用。它可以提高系统的可维护性和扩展性,主要用来构建分布式系统。然后:怎样服务化SOA和微服务都是实现了服务化的、比较典型的架构风格。SOA的出现是为了解决功能复用的问题,将一些通用的模块提取出来做成服务。但是SOA对于通用模块的设计没有设计核心原则,因此在对应需求变化等...
2024-02-26 06:02:33 392
原创 一次完整的浏览器请求过程
这个问题定期思考,感受自己的成长与变化。一个请求过来都经过了什么?(2017年http版)一个请求过来都经过了什么?(Thrift版)一个http请求进来都经过了什么(2021版)网络链路一个请求如果请求了静态资源,会优先查找缓存,包括浏览器缓存、CDN加速缓存。浏览器缓存,是指浏览器本地缓存了已请求成功过的服务器文件,在下次加载文件时,根据缓存策略从浏览器本地缓存中读取或者从服务器读取。浏览器缓...
2024-02-21 18:55:12 850
原创 如何确定系统的最佳线程数?
确定系统的最佳线程数属于衡量容量的范畴,根据上期的知识点。衡量容量就要用到压测和监控。确定系统的最佳线程数大体上分三步:第一步,分析理论值;第二步,用压测进行调整获得实际值;第三步,持续监控,观察是否需要再次调整。理论值,首先分析资源。Linux操作系统有进程允许的最大线程数限制,默认是1024,当然这个是可以改的,还有文件句柄等其他资源,一般都不是瓶颈。每个Java线程都要占用内存空间。栈空间默...
2024-02-17 21:55:42 332
原创 可扩展性、容量和高并发,它们是什么关系?
可扩展性包含功能扩展和容量扩展。功能扩展主要是两点:预测变化、封装变化。封装变化的手段比如运用设计模式。容量扩展先从容量本身说起。因为业务容量包含数据量和并发量两方面。所以本质上高并发问题是容量问题的一个方面。容量要可衡量、可观测、可应对。可衡量是指业务容量水位(业务负载/业务容量)要维持在合理的范围,手段主要是压测和监控。可观测主要靠容量大盘等可视化手段和容量巡检。可应对的手段分为两方面,一方面...
2024-01-30 05:31:18 186
原创 DDD、OOA、OOD、OOP和OOT
DDD、OOA、OOD、OOP和OOT到底有什么区别和联系?其实很简单。带OO的是相对更传统的系统设计方法论,可简称:面向对象设计方法论;DDD是相对来说目前更加流行的方法论,可称为:领域驱动设计方法论。OOOO是面向对象,这个不解释。OOA是面向对象分析,主要指将问题域的现实中对象进行分析建模;OOD是面向对象设计,主要是将OOA的结果做进一步规范和整理、细化,便于OOP接受;OOP是面向对象编...
2024-01-21 17:19:48 463
原创 高并发场景系统设计的时候应该怎么考虑?
主要考虑三个方面,一个是架构,一个是容量,还有一个是调优。架构方面要考虑的主要是架构拆分、加速和增加吞吐量技术。架构拆分的常用技术比如:DDD四层架构、六边形架构、微内核架构,还有像k8s架构那种基于角色的拆分;还有异步化,基于事件驱动来分阶段处理;查询分等级,实时走数据库,列表等大查询走ES等搜索引擎;读写分离。加速和增加吞吐量技术常用的比如:CDN、缓存、负载均衡、合理进行业务编排并行执行,还...
2024-01-13 23:02:51 417
原创 微创新与稳定性的权衡
之前做过一个项目,业务最高峰CPU使用率也才50%,是一个IO密集型的应用。里面涉及一些业务编排,所以为了提高CPU使用率,我有两个方案:一个是简单的梳理将任务可并行的采用并行流、额外线程池等方式做并行;另外一个方案是采用基于DAG有向无环图的任务调度。采用并行的方式,改造代码在几十行;采用DAG方案改造代码在几百行,自己觉得也不复杂,但跟别人讲时,感觉理解成本还是有点高,加上并行方案已经可以将最...
2024-01-07 02:30:57 1151
原创 思维训练-怎样设计一个MQ
架构师需要做各种设计,要不断地提高自己的设计能力。这有没有方法可以训练呢?有的,就是看到什么、想到什么,就假设对面坐着产品经理,一起讨论怎么把它设计出来。比如怎样设计一个MQ我:首先我确认一下需求。从功能性需求和非功能性需求两方面来看。先看功能性需求:要设计MQ,本身来说就要求:发送、接收和存储,存储是先进先出的。那还有其他的需求吗?比如我是只需要在程序逻辑中用JVM内实现,还是需要跨进程、跨平...
2023-12-28 01:22:45 430
原创 架构师如何把握项目质量?
需求分析阶段如果这个需求分析不是自己亲自做的,需要和执行人沟通,通过提出问题,确保当事人正确识别了利益相关者的意图和业务诉求,也便于自己对下面进行阶段的把控。设计阶段设计评审时,设计者需要对相关改动模块做说明,证明其对模块的了解程度。并分析清楚代码改动点和影响。详细设计中需要包含测试用例,后续作为上线的checklist。如果是重要模块,评审人数也有相应的要求,至少保证2个评审人在代码review...
2023-12-24 00:22:55 368
原创 常用的下游容错手段及案例
一个高可用的系统需要做好自身、防御上游、容错下游。防御上游的手段常见的有严格准入和限流。容错下游的常用手段有4个fail和合理设置超时重试。还有一种叫forking的容错手段,是并行的调用下游,一个成功就返回成功。如今都在降本增效,这个高成本方法不太实用,所以这里就不过多介绍了。failover:失效转移失效转移是一种备份操作模式,当主要组件异常时,其功能转移到备份组件。举个例子,一个网关系统,要...
2023-12-11 14:30:15 359
原创 DDD、SOA、微服务和微内核
DDD、SOA、微服务和微内核,看到经常有人把这几个概念拿出来一起讲。事实上,DDD和其他三个不是一个维度的东西。DDD其实特别好理解,DDD就是领域来驱动设计嘛,是一种设计思想。很容易又和OOA、OOD和OOP来比较了。这个回头再说。SOA、微服务和微内核都是架构风格,DDD里能和他们三个放在一起比较的是四层架构和六边形架构。四层架构四层架构长这样:分为用户接口层、应用层、领域层和基础层,四层架...
2023-12-08 08:45:23 585
原创 一个Mysql事务隔离级别和一个MQ异步转同步问题
Mysql事务隔离级别问题和朋友聊天提到一个mysql事务隔离级别相关的问题。朋友说他们现在采用默认的隔离级别可重复读,觉得效率太低了,问怎么改进。我就说了一个线上故障的事例。原因是当时程序代码中在事务中包裹了一个给MQ发消息的步骤。当时用的RabbitMQ,同步写。消息队列积压了,写入没有成功直到超时。事务执行时间过长,导致数据库连接池被打满了,拖垮了整个系统。所以我们以后都要求事务中不能包含外...
2023-12-04 14:30:45 906
原创 由群聊引发的思考
前段时间咱们交流群里有出现言辞激烈,我不得已出来控场的情况。我对群聊内容一般比较宽容,一般除了发无关广告还不给大家发红包,我很少出面。出面也就是把人直接删了也不说什么。因为我认为大多数人都是需要成长的,他需要自己去摸索什么是好的,什么是不好的。他可以是一开始不完美的人。作为工作近20年的老人,我倚老卖老一点,谈谈自己的思考。虽然自己也是在不断学习,也绝没有资格“站在高点”、“好为人师”。总觉得还是...
2023-11-13 14:30:15 238
原创 做好管理者的最佳实践
最近ChatGPT问题频发:奶奶漏洞、遭遇强劲对手、所在公司离职潮……任何一个概念到真正大规模使用都要经历漫长的时期。有多漫长呢,现在科幻电影中常见,生活中还不是那么普遍的全息影像技术,在上世纪70年代就已经实现了,当时引发的轰动和前段时间的元宇宙差不多。所以大可不必为程序员的替代性太过焦虑。还有朋友还在为要学习的技术栈感到迷茫。这里再重申一下我认为正确的学习方法:以提出问题为驱动、以解决问题为...
2023-07-18 16:37:46 1460
原创 程序媛怎样规划自己的人生
上个月我跟一个很优秀的程序媛聊天,她感到职业上有些迷茫,希望向我寻求答案。我让她先自己想一想,说这个月专门写一篇文章来讲一讲。其实我在等一个我自己的答案,但是这个月还是没等到。但是说过的话要算数,我还是写一篇来聊聊这个问题。我不能回答其他任何我没有长期相处过的人对未来的规划问题,因为我不知道你有什么样的选择。事实上很多人自己也不知道自己有什么样的选择。想知道自己有什么样的选择,要搞清楚三个问题:需...
2023-07-14 03:34:37 1498
原创 系列文章分类汇总202307
总结归纳排查线上问题的9种方式系统设计的11个考虑系统架构的11条原则四种常用的微服务架构拆分方式开发者必装的软件工具总结写出结构优雅代码的4个技巧工作中沟通的4点感悟技术境界的二三四工作中常见的五种技术leader管理者的四种不同授权风格代码评审的三怕项目改进的四个抓手程序员工作中的三个锦囊源码元宇宙mybatis的本质和原理手撕spring核心源码,彻底搞懂spring流程手撕Spring源码...
2023-07-02 09:30:26 1658
原创 软件项目成本的计算
在《架构思维的六要素》中,列出的第一个要素就是成本,成本对项目设计和决策起着至关重要的作用。今天咱们就来看看直接成本、间接成本和总成本的关系。直接成本工作于服务的开发者工作于系统测试的测试者设计数据库的DBA设计界面和致力于优化用户体验的前端人员设计整个系统的架构师上面是直接成本与工作时间之间的曲线关系。可以看到压缩时间造成的维护成本会造成比常规方案更大的成本开销。间接成本间接成本包含的一些事件会...
2023-06-30 14:20:37 1760
原创 软件项目需要的五个层级
1943年,马斯洛发表了人类行为的关键性论文,被称作「马斯洛需求层次理论」。马斯洛把人的需要从底向上按重要程度划分,最低下的最要。人只有基本满足低层级的需要,才会对要满足更高的需要感兴趣。软件项目作为另外一种复杂的个体, 也有相应的需要层级。如下图:软件项目需要的五个层级分别是:物理、安全、复用、工程和技术。物理这是最最基本的需要,就像人要喝水和穿衣一样,软件项目需要工作场所、业务模式、电脑、人员...
2023-06-29 13:15:39 1807
原创 开闭架构
在《不过时的经典层架构》里,有朋友留言关于Manager和Engine的概念,虽然朋友留言把概念解释清楚了。为了避免其他人有同样的疑问,这里我还是再解释一下。以上是经典的四层架构,在这个架构中,Manager和Engine(引擎)都是业务逻辑层的概念。Manager中文就是管理者,就是把行为管理起来。Engine是行为本身。咱们超出业务逻辑层,针对这个概念本身来看,什么是引擎行为呢?咱们很多朋友听...
2023-06-28 19:16:39 2150
原创 架构分层方法指导
在《不过时的经典层架构》里讲了经典的四层架构怎样对易变性做封装。咱们实际项目中,如果没有足够的实践和关键性思考,还是很可能使用名义上科学的分类理论,却在按照功能进行架构分层。今天咱们就通过一些简单的指导来尽量减少这种风险。四问在架构分层中,分层设计松散地对应着who、what、where、how这四个问题。who是客户端交互的系统,what是在Manager服务中需要的系统,how是Engine服...
2023-06-27 17:05:12 2235
原创 小鲜肉语录
马上端午放假了,今天不聊技术,聊点轻松的。一、和老公、小鲜肉周末出去玩,路上闲聊。老公提到小鲜肉在他们班成绩大概是第四名。我说:我小学五年级的时候我们我们班60个人我排第四。你们班不到30个人。这么算你成绩不如我小时候。小鲜肉想了想,反驳道:你听过一句话叫‘小时了了,大未必佳’吗?我:听过,但没听过用到自己妈身上的。二、家旁边新开了一家牛肉面馆,赶紧带上老公和小鲜肉一起去尝尝。牛肉面可以免费续面。...
2023-06-21 12:36:03 1741
原创 不过时的经典层架构
在《设计服务要考虑的7个维度》中讲到设计一定要把不稳定的部分做封装。今天咱们就从这个角度重新审视一下经典的四层架构。上面是一个经典层架构的示意图。这个架构大多数的公司和项目都在直接用,或者用其变体。比如,某大厂上层Client客户端可能是电商、团购等,Business Logic业务逻辑层包含金融支付、收单和积分等业务,Resource Access 资源访问层是各种中间件,Resource 是数...
2023-06-20 16:32:12 2364
计算机组成电子教案:清华大学计算机系列教材王爱英主编
2010-08-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人