![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
架构设计
文章平均质量分 94
小熊学Java
2年互联网金融方面的工作经验,CSDN Java领域优质创作者,阿里云社区博客专家,51CTO博客专家博主,担任过项目技术负责人,目前专攻于Java领域,也是全栈工程师哦!
展开
-
案例分析:多线程锁该如何优化?
Java 中的 synchronized 有偏向锁、轻量级锁、重量级锁三种形式,分别对应了锁只被一个线程持有、不同线程交替持有锁、多线程竞争锁三种情况。描述重量级锁底层使用的 Monitor 实现,里面涉及到了用户态和内核态的切换、进程的上下文切换,成本较高,性能比较低。轻量级锁线程加锁的时间是错开的(也就是没有竞争),可以使用轻量级锁来优化。轻量级修改了对象头的锁标志,相对重量级锁性能提升很多。每次修改都是 CAS 操作,保证原子性偏向锁。原创 2024-08-20 12:50:09 · 844 阅读 · 0 评论 -
案例分析:并行计算让你的代码“飞”起来
现在的电脑,往往都有多颗核,即使是一部手机,也往往配备了并行处理器,通过多进程和多线程的手段,就可以让多个 CPU 核同时工作,加快任务的执行。Java 提供了非常丰富的 API,来支持多线程开发。对我们 Java 程序员来说,。但它如何应用到业务场景中?又有哪些注意事项?今天将从一个并行获取数据的例子开始,逐步讲解这个面试中最频繁的知识点。原创 2024-08-01 20:00:31 · 779 阅读 · 0 评论 -
通过三种不同的系统架构案例加深理解认识
主要是分享了三种不同的系统架构案例。互联网应用系统架构,看一个互联网应用系统的架构是如何设计的,如何利用各种各样的分布式技术,构建一个分布式互联网系统。分布式数据库的架构设计案例,它的架构考量点主要是什么,一个分布式的数据库如何实现高可用、高性能、可伸缩等一系列的分布式特性的。编程框架的架构设计,开发工程师每天在编程的时候都要使用编程框架进行开发。那么架构师除了要做这种整体的架构,还要考虑如何为开发工程师去设计一个易用强大的编程框架。原创 2024-07-30 12:28:42 · 593 阅读 · 1 评论 -
MySQL大表优化方案(应该是最完整最全的了)
水平拆分是通过某种策略将数据分片来存储,分库内分表和分库两部分,每片数据会分散到不同的MySQL表或库,达到分布式的效果,能够支持非常大的数据量。前面的表分区本质上也是一种特殊的库内分表库内分表,仅仅是单纯的解决了单一表数据过大的问题,由于没有把表的数据分布到不同的机器上,因此对于减轻MySQL服务器的压力来说,并没有太大的作用,大家还是竞争同一个物理机上的IO、CPU、网络,这个就要通过分库来解决前面垂直拆分的用户表如果进行水平拆分,结果是:实际情况中往往会是垂直拆分和水平拆分的结合,即将。原创 2024-03-13 23:20:59 · 4546 阅读 · 0 评论 -
【搜索引擎设计:信息搜索怎么避免大海捞针?
PageRank 算法我们现在看起来平平无奇,但是正是这个算法造就了 Google 近 2 万亿美元的商业帝国。在 Google 之前,Yahoo 已经是互联网最大的搜索引擎公司。按照一般的商业规律,如果一个创新公司不能带来十倍的效率或者体验提升,就根本没有机会挑战现有的巨头。而 Google 刚一出现,就给 Yahoo 和旧有的搜索引擎世界带来摧枯拉朽的扫荡,用户体验的提升不止十倍,这其中的秘诀正是 PageRank。原创 2024-01-13 20:52:15 · 1392 阅读 · 0 评论 -
交友系统设计:哪种地理空间邻近算法更快?
算法是软件编程中最有技术挑战性,也最能考验一个人编程能力的领域。所以很多企业面试的时候特别喜欢问算法类的问题,即使这些算法和将来的工作内容关系不大,面试官也可以凭借这些问题对候选人的专业能力和智力水平进行评判,而且越是大厂的面试越是如此。架构和算法通常是一个复杂系统的一体两面,架构是关于整体系统是如何组织起来的,而算法则是关于核心功能如何处理的。我们专栏大多数案例也都体现了这种一体两面,很多案例设计都有一两个核心算法,比如短 URL 生成与预加载算法、缩略图生成与推荐算法、原创 2023-12-24 21:32:48 · 1531 阅读 · 0 评论 -
秒杀系统设计:你的系统可以应对万人抢购盛况吗?
对一个架构师而言,精通技术是重要的,而用技术建立起自己的信心,在关键时刻有勇气面对挑战更重要。人生的道路虽然漫长,但是紧要处可能只有几秒。这几秒是秒杀系统高并发访问高峰的那几秒,也是面对挑战迎难而上站出来的那几秒。原创 2023-12-22 13:44:08 · 932 阅读 · 0 评论 -
海量数据处理技术回顾:为什么分布式会遇到 CAP 难题?
因为数据存储是有状态的,所以海量数据存储的分布式架构要解决的核心问题就是:在一个有很多台服务器的分布式集群中,如何知道数据存储在哪台服务器上?解决方案有两种,一种是有专门的服务器记录数据存储在哪里,即有一个元数据服务器。HDFS 里的 NameNode 和 HBase 里的 HMaster 都是这样的角色。应用程序想访问数据,需要先和元数据服务器通信,获取数据存储的位置,再去具体的数据存储服务器上访问数据。另一种解决方案是通过某种算法计算要访问的数据的位置,这种算法被称作数据路由算法。原创 2023-12-13 15:54:08 · 441 阅读 · 0 评论 -
短视频系统设计:如何支持三千万用户同时在线看视频?
我们在缩略图生成部分,使用了大数据和机器学习的一些技术,如果你不熟悉,可能会觉得有点困难。但是现在人工智能和机器学习几乎是稍具规模的互联网系统的标配,架构师作为整个系统的设计者、技术负责人,可能对算法的细节无法做出具体的优化,但是对于算法在整个架构中的作用、相关数据的处理和流转必须非常熟悉,才能设计出满足业务需要的架构方案。原创 2023-12-06 17:03:42 · 215 阅读 · 0 评论 -
网盘系统设计:万亿 GB 网盘如何实现秒传与限速?
我们在需求分析中讨论过,DBox 需要支持大数据量存储、高并发访问、高可用服务、高可靠存储等非功能需求。事实上,对于网盘应用而言,元数据 API 服务其实和一般的高并发互联网系统网关没有太大差别。真正有挑战的是海量文件的高可用存储,而这一挑战,在 DBox 中,被委托给了分布式对象存储 Ceph 来完成。而 Ceph 本身设计就是支持大数据量存储、高并发访问、高可用服务、高可靠存储的。架构师按照职责,可以分成两种,一种是应用系统架构师,负责设计、开发类似网盘、爬虫这样的应用系统;另一种是基础设施架构师。原创 2023-12-04 19:31:21 · 349 阅读 · 1 评论 -
高并发架构——网页爬虫设计:如何下载千亿级网页?
架构设计是一个权衡的艺术,不存在最好的架构,只存在最合适的架构。架构设计的目的是解决各种业务和技术问题,而解决问题的方法有很多种,每一种方法都需要付出各自的代价,同时又会带来各种新的问题。架构师就需要在这些方法中权衡选择,寻找成本最低的、代价最小的、自己和团队最能驾驭得住的解决方案。但是如果 URL 调度器采用分布式集群架构提高可用性,多服务器共同进行 URL 调度,就需要解决数据一致性和数据同步问题,反而会导致系统整体处理能力下降。原创 2023-11-30 17:13:46 · 748 阅读 · 1 评论 -
短 URL 生成器设计:百亿短 URL 怎样做到无冲突?
Fuxi 允许用户自己定义短 URL,即在生成短 URL 的时候,由用户指定短 URL 的内容。为了避免预生成的短 URL 和用户指定的短 URL 冲突,Fuxi 限制用户自定义短 URL 的字符个数,不允许用户使用 6 个字符的自定义短 URL,且 URL 长度不得超过 20 个字符。但是用户自定义短 URL 依然可能和其他用户自定义短 URL 冲突,所以 Fuxi 生成自定义短URL 的时候需要到数据库中检查冲突,是否指定的 URL 已经被使用,如果发生冲突,要求用户重新指定。原创 2023-11-29 15:49:03 · 305 阅读 · 1 评论 -
高并发架构设计方法:面对高并发,怎么对症下药?
高并发架构的主要挑战就是大量用户请求需要使用大量的计算资源。至于如何增加计算资源,互联网应用走出了一条水平伸缩的发展道路,也就是通过构建分布式集群架构,不断向集群中添加服务器,以此来增加集群的计算资源。那如何增加服务器呢?对此,又诞生了各种各样的分布式技术方案。我们掌握了这些分布式技术,就算是掌握了高并发系统架构设计的核心。具体这些技术如何应用在高并发系统的架构实践中,我们在后面的案例中会不断进行分析体现。原创 2023-11-28 10:22:24 · 139 阅读 · 0 评论 -
今天跟大家聊一聊软件架构(图文并茂)
应用之间的服务存在互相调用的情况,但有些场景下,并不需要同步调用,比如某个业务完成后,需要短信通知对方,而短信接收的时间晚几秒钟都是可以接受的,此时就不需要同步处理了,我们可以使用消息队列,把发送短信的内容扔到消息队列中,达到异步处理的效果,从而增强业务系统的性能,此时对于服务之间也达到了解耦的功能,服务之间的依赖减少了。公司发展的初期,资金少、用户少,需要的软件产品的数据和并发量都比较小,这个时期大多数的软件系统只需要单一服务器就可以满足需求,所有的业务逻辑都在单一应用系统,单应用、单数据库。原创 2022-10-23 14:28:50 · 17886 阅读 · 0 评论 -
软件建模与文档:架构师怎样绘制系统架构蓝图?
软件设计就是在软件开发之前,对要解决的业务问题和对要实现的软件系统进行思考,并将这个思考的结果通过软件模型表达出来的过程。软件系统的开发是一个复杂的智力活动,参与其中的我们更需要拥有构建蓝图并付诸实践的能力。目前有个很火的词叫“元宇宙”,“元”通俗地讲,就是一切开始的地方,是关于如何用自己描述自己,是抽象之上的抽象。这种“元”能力对架构师而言,非常重要。架构师只有掌握各种技术背后的技术,了解各种问题背后的问题,才能超越当下的种种羁绊,设计出面向未来的架构。原创 2023-11-27 15:10:54 · 426 阅读 · 1 评论 -
高并发系统:它的通用设计方法是什么?
以方法调用为例,同步调用代表调用方要阻塞等待被调用方法中的逻辑执行完成。这种方式下,当被调用方法响应时间较长时,会造成调用方长久的阻塞,在高并发下会造成整体系统性能下降甚至发生雪崩。异步调用恰恰相反,调用方不需要等待方法逻辑执行完成就可以返回执行其他的逻辑,在被调用方法执行完毕后再通过回调、事件通知等方式将结果反馈给调用方。异步调用在大规模高并发系统中被大量使用,原创 2023-11-27 00:09:42 · 120 阅读 · 0 评论 -
今天聊一聊高性能系统架构设计是什么样的
性能优化的前提和基础是性能测试,通过性能测试,了解系统的性能特性才能进行优化,而性能测试主要就是要测试出来系统的性能曲线,通过对性能曲线进行分析,了解系统的瓶颈点和系统资源消耗,再进行性能优化。性能优化的时候需要建立一个整体的思维,要从整体系统的层面去思考优化,而不只是仅仅关注自己的代码,或者是自己设计的架构。最上层的优化是硬件优化,包括骨干网络、数据中心服务器硬件这样的优化;然后是基础组件的性能优化,包括操作系统、虚拟机、应用中间件这几个方面;这之后才是架构的优化,包括核心的三板斧,缓存、异步和集群;原创 2023-09-25 10:45:38 · 445 阅读 · 0 评论 -
架构设计技术之分布式数据存储
分布式数据库和分布式存储是分布式系统中难度最大、挑战最大,也是最容易出问题的地方。解决的办法主要是数据库的复制,通过数据库的复制,提升数据库的读性能和系统的可用性。如果对数据存储和数据库的写操作有更高要求的时候,就需要通过数据分片的方式来实现。在具体的部署过程中,可以混合使用数据复制、数据分库和数据分片几种技术方案。原创 2023-09-24 14:39:07 · 261 阅读 · 0 评论 -
大型架构设计的演进之路
首先,大型互联网系统的挑战主要包括:高并发和大流量请求的挑战,高可用的挑战,海量数据的挑战,网络情况复杂、安全性差的挑战,以及需求快速变更、发布频繁的挑战。为了应对这样的挑战,需要提升系统的处理能力。处理能力提升有两种手段,一种是垂直伸缩,一种是水平伸缩。垂直伸缩有自身的局限性,所以在互联网企业中主要使用的手段是水平伸缩。水平伸缩的原理就是不断地增加服务器以提高系统的处理能力。而如何添加新服务器,使新的服务器和原有的服务器构成一个完整的整体对外提供服务,就是互联网架构的主要技术挑战和技术内容。原创 2023-09-22 14:59:21 · 259 阅读 · 0 评论 -
架构核心技术之分布式消息队列
使用异步调用的架构方法,就是使用消息队列,将生产者和消费者进行隔离。主要的架构模型有两种,一种是点对点模型,一种是发布订阅模型。其中点对点模型,一个消息只会被一个消费者消费;而发布订阅模型,一个消息可以被多个消费者订阅。消息队列实现的异步架构可以在架构上带来更多的好处。它可以实现业务逻辑的异步处理,从而获得更好性能特性;可以使系统具有更好的伸缩性;可以平衡用户访问流量,实现削峰填谷;还可以隔离失败,并进行自我修复;以及对生产者和消费者进行解耦,使系统拥有更好的扩展和维护能力。原创 2023-09-20 20:43:45 · 455 阅读 · 0 评论 -
架构核心技术之微服务架构
首先,之所以要使用微服务,是因为传统的单体巨无霸系统带来的挑战和困难,包括编译和部署的困难、连接的困难、打包代码冲突的困难,以及复用的困难、新增业务的困难。而具体的微服务框架基本上都是由三个核心部分组成的:服务的提供者、服务的调用者和服务的注册中心。服务的提供者向注册中心注册自己的服务,而服务的调用者通过注册中心发现服务,并进行远程调用。另外,很多微服务架构中还包括一个监控者的角色,通过监控者进行服务的管理和流量的控制。原创 2023-09-10 23:10:25 · 926 阅读 · 0 评论 -
淘宝数据库,主键如何设计的?(文末福利)
聊一个实际问题:淘宝的数据库,主键是如何设计的?某些错的离谱的答案还在网上年复一年的流传着,甚至还成为了所谓的MySQL军规。其中,一个最明显的错误就是关于MySQL的主键设计。大部分人的回答如此自信:用8字节的 BIGINT 做主键,而不要用INT。错!这样的回答,只站在了数据库这一层,而没有 从业务的角度 思考主键。主键就是一个自增ID吗?站在2022年的新年档口,用自增做主键,架构设计上可能连及格都拿不到。原创 2023-07-06 09:20:40 · 359 阅读 · 0 评论 -
分布式任务调度框架XXL-JOB入门最全教程
XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。官方文档:https://www.xuxueli.com/xxl-job/#%E4%BA%8C%E3%80%81%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8官网地址:https://www.xuxueli.com/xxl-job/GitHub地址:https://github.com/xuxueli/xxl-job/原创 2023-07-05 09:53:41 · 4187 阅读 · 0 评论 -
聊一聊分布式会话的解决方案
1、用户向服务器发送用户名和密码。2、服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色、登录时间等等。3、服务器向用户返回一个 session_id,写入用户的 Cookie。4、用户随后的每一次请求,都会通过 Cookie,将 session_id 传回服务器。5、服务器收到 session_id,找到前期保存的数据,由此得知用户的身份。原创 2023-07-03 10:10:18 · 414 阅读 · 0 评论 -
聊一聊非分布式任务调度@Scheduled
Scheduled注解是Spring Boot提供的用于定时任务控制的注解,主要用于控制任务在某个指定时间执行,或者每隔一段时间执行,默认是在单线程中执行的。原创 2023-06-30 09:40:44 · 192 阅读 · 0 评论 -
分布式理论和一致性算法详解
分布式系统是一个硬件或软件组成分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。原创 2023-06-27 09:40:26 · 331 阅读 · 0 评论 -
经验教训:微服务设计时的五条宝贵经验
针对引入微服务架构后带来的诸多新问题进行了分析,之后给出了多条微服务架构最佳实践,最后总结了微服务架构的使用场景。这里给你留一道思考题:微服务架构作为一种设计风格,必须要依托具体的技术与开发框架才可以实施落地,那你能列举出具体包含哪些技术吗?资料获取👇 最后面就是领取暗号,公众号回复即可!原创 2023-06-09 10:50:45 · 458 阅读 · 0 评论