架构学习
文章平均质量分 91
架构那点事
爱琴孩
扫盲+科普+解惑,愿天下程序员每天少掉头发
展开
-
高并发系统的艺术:如何在流量洪峰中游刃有余
既然采用了分布式的微服务架构,那么分布式系统的一些常见痛点也是高并发要考虑的,比如熔断,降级,限流,超时等设计,这些本身是为了增强分布式系统的鲁棒性,从而简介的增强系统的高并发承载能力。随着互联网业务的不断发展,选择在网上购物的人群不断增加,这种情况下,会衍生出一些促销活动,类似抢购场景或者热销热卖场景,在高峰时段的下单数量会非常大,也意味着对数据库中畅销商品的库存操作十分频繁,需要频繁查库存和更新库存。当然那这样不够,因为MySQL数据库的读写的并发上线能力是有限的,我们还是需要再进一步优化我们的方案。转载 2024-08-17 17:48:47 · 35 阅读 · 0 评论 -
代理服务器:代理的工作原理
代理服务器充当客户端请求资源和提供该资源的服务器之间的中介。它可以实现多种目的,如为更快的访问缓存资源、匿名请求、强制安全策略以及在多个服务器之间进行负载平衡。基本上,它接收来自客户端的请求,将其转发到相关的服务器,然后将服务器的响应返回给客户端。转载 2024-02-25 08:48:51 · 112 阅读 · 1 评论 -
五年经验还不懂SaaS?
国内的互联网巨头竭力推荐的 SaaS 应用想必大家已经耳熟能详了,比如阿里的钉钉,腾讯的企业微信,这些软件里面应用平台上的可供使用的各类SaaS小软件数不胜数,从OA,到ERP到CRM等等,涵盖了企业运行所需的几乎所用应用。架构以及商业模式:不同于业务型的SaaS,效率SaaS思考得更多的是企业内存在一个大共性的效率的问题,不同的企业对于CRM销售系统的需求是不一样的,但都需要一个协同办公的产品来提升协作效率。对于效率类SaaS来说,从哪来到哪去是非常清晰的,就是要解决优化或者解决一个流程上的问题。转载 2023-12-17 12:21:50 · 249 阅读 · 0 评论 -
如何画好架构图
先不去管这些图好不好,我们通过对这些图的分类以及作用,思考了一下,总结下来,我们认为,明确这两点之后,从受众角度来说,一个好的架构图是不需要解释的,它应该是自描述的,并且要具备一致性和足够的准确性,能够与代码相呼应。在画出一个好的架构图之前, 首先应该要明确其受众,再想清楚要给他们传递什么信息,所以,不要为了画一个物理视图去画物理视图,为了画一个逻辑视图去画逻辑视图,而应该根据受众的不同,传递的信息的不同,用图准确地表达出来,最后的图可能就是在这样一些分类里。比较流行的是4+1视图和C4视图。转载 2023-08-26 20:50:57 · 60 阅读 · 0 评论 -
详解分布式共识(一致性)算法Raft
所谓分布式共识(consensus),与CAP理论中的一致性(consistency)其实是异曲同工,就是在分布式系统中,所有节点对同一份数据的认知能够达成一致。保证集群共识的算法就叫共识算法,它与一致性协议这个词也经常互相通用。当今最著名的共识算法就是Paxos算法。它由Leslie Lamport在1990年提出,很长时间以来都是一致性的事实标准。但是它有两个不小的缺点:难以理解和证明,难以在实际工程中实现。转载 2023-08-26 13:07:13 · 302 阅读 · 0 评论 -
雪花算法生成id重复问题
我们之前提到,同一机器同一毫秒级,我们能生成4096个不同序列,即不同Id,但是如果我们使用的是微服务架构,那不同机器人是否会可能生成相同Id呢?其实我们之前有提到工作机器Id的作用,就是用于解决分布式Id重复的问题,这个workerId是通过构造方法传入的,如果我们用10位来存储这个值,那就是最多支持1024个节点那么关键问题就回归到如何去把我们的服务器和workerId对应起来?原创 2023-01-31 23:03:08 · 4180 阅读 · 0 评论 -
prometheus和zabbix的对比
综合来看,Zabbix 的成熟度更高,上手更快,但更好的集成导致灵活性较差,问题更大是,监控数据的复杂度增加后,Zabbix 做进一步定制难度很高,即使做好了定制,也没法利用之前收集到的数据了(关系型数据库造成的问题)。Prometheus 基本上是正相反,上手难度大一些,但由于定制灵活度高,数据也有更多的聚合可能,起步后的使用难度远小于 Zabbix。但如果已经对传统监控系统有技术积累的话,还是要谨慎考虑更换监控。转载 2023-01-29 22:36:47 · 1966 阅读 · 0 评论 -
CDN精品好文,值得一读
对于文本类数据我们习惯用mysql做存储,redis做缓存。但属于文件类数据,比如视频图片,则需要使用oss等做对象存储,cdn做缓存。用了CDN如果发生回源,那实际上会比不用的时候更慢一些。CDN最大的优势在于,对于来自世界各地的用户,它可以就近分配CDN节点获取数据,并且多次重复获取同一个文件数据的时候,有缓存加速的作用。如果你的服务和对象存储都在内网,并且文件数据也不太会有重复使用的可能性,那其实没必要接入cdn。转载 2023-01-28 17:50:41 · 179 阅读 · 1 评论 -
架构中的设计模式
这个问题我问过的面试者不下于数十次,回答五花八门,在我看来,模式就是经验,设计模式就是设计经验,有了这些经验,我们就能在特定情况下使用特定的设计、组合设计,这样可以大大节省我们的设计时间,提高工作效率。作为一个工作10年以上的老码农,经历的系统架构设计也算不少,接下来,我会把工作中用到的一些架构方面的设计模式分享给大家,望大家少走弯路。转载 2022-10-07 12:23:35 · 483 阅读 · 0 评论 -
MyCat 启蒙:分布式系统的数据库架构演变
MyCat 是一个数据库分库分表中间件,使用 MyCat 可以非常方便地实现数据库的分库分表查询,并且减少项目中的业务代码。今天我们将通过数据库架构发展的演变来介绍 MyCat 的诞生背景,以及 MyCat 在其中扮演的角色,从而使得大家对 MyCat 的诞生及其作用有深入的理解。1、单数据库架构一个项目在初期的时候,为了尽可能快地验证市场,其对业务系统的最大要求是快速实现。在这个阶段,代码开发人员为了能快速实现业务系统,一般都是将所有层级(MVC)的业务代码都写在同一个项目中,所有的业务数据都存放转载 2022-03-20 20:25:52 · 166 阅读 · 1 评论 -
蓝绿、滚动、灰度发布那点事
蓝绿发布蓝绿部署中,一共有两套系统:一套是正在提供服务系统(也就是上面说的旧版),标记为“绿色”;另一套是准备发布的系统,标记为“蓝色”。两套系统都是功能完善的,并且正在运行的系统,只是系统版本和对外服务情况不同。正在对外提供服务的老系统是绿色系统,新部署的系统是蓝色系统。蓝色系统不对外提供服务,用来做啥?用来做发布前测试,测试过程中发现任何问题,可以直接在蓝色系统上修改,不干扰用户正在使用的系统。蓝色系统经过反复的测试、修改、验证,确定达到上线标准之后,直接将用户切换到蓝色系统, 切换后的转载 2021-12-12 22:40:13 · 179 阅读 · 1 评论 -
高并发和分布式中的幂等处理
幂等的概念幂等是一个数学与计算机学概念,常见于抽象代数中。 在编程中,一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。举几个例子:比如前端对同一表单数据的重复提交,后台应该只会产生一个结果 比如我们发起一笔付款请求,应该只扣用...转载 2019-01-27 17:08:14 · 173 阅读 · 0 评论 -
简述负载均衡&CDN技术
前言一个高性能的web系统需要从无数个角度去考虑他,大到服务器的布局,小到软件中某个文件的实现,甚至于某个循环内的运算如果出现不严谨都可能导致全盘崩溃。我们无法考虑到所有的优化细节,但可以从我们已知的层面去优化,我们就先从网络层面说起。(客户端输入URL定位符)→(DNS服务器寻找映射)→(进入服务器,处理数据)→(返回数据至客户端)在这个用例中我们可以很清晰的看出网络请求到返回的过程...转载 2018-10-10 22:03:51 · 3762 阅读 · 0 评论 -
Node.js 三大特点详解
单线程在Java、PHP或者.net等服务器端语言中,会为每一个客户端连接创建一个新的线程。而每个线程需要耗费大约2MB内存。也就是说,理论上,一个8GB内存的服务器可以同时连接的最大用户数为4000个左右。要让Web应用程序支持更多的用户,就需要增加服务器的数量,而Web应用程序的硬件成本当然就上升了。Node.js不为每个客户连接创建一个新的线程,而仅仅使用一个线程。当有用户连接了,就...转载 2018-09-16 09:01:08 · 420 阅读 · 0 评论 -
大话分布式锁
前言大多数互联网系统都是分布式部署的,分布式部署确实能带来性能和效率上的提升,但为此,我们就需要多解决一个分布式环境下,数据一致性的问题。 当某个资源在多系统之间,具有共享性的时候,为了保证大家访问这个资源数据是一致的,那么就必须要求在同一时刻只能被一个客户端处理,不能并发的执行,否者就会出现同一时刻有人写有人读,大家访问到的数据就不一致了。我们为什么需要分布式锁?在单机时代,虽然不...转载 2018-08-28 23:03:16 · 353 阅读 · 0 评论 -
CAP原理
前言CAP理论:一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。如下图所示 CAP的定义Consistency 一致性 一致性指“all nodes see the same data at the same time”,即更新操作成功并返回客户端完成后,所有节...转载 2018-07-25 22:51:57 · 11155 阅读 · 0 评论 -
扫盲系列之集群分布式简介
前言最近部门做的一个项目,为了满足性能和后期的拓展性,我们将项目进行分布式处理。里面运用dubbo进行服务治理,将项目的中的业务由本来的一个系统拆分成相互关联的分布式多系统,后面再将项目中的一个图片和文件单独分离处理,搞一个专门的文件系统。这样就可以看作是一个简单的分布式系统,当然完成的分布式系统还包含很多其他的组件,像是消息中间件等等,后面随着用户量的增大,项目肯定也是要做集群的。由于以前接触的都原创 2017-09-15 13:16:07 · 411 阅读 · 0 评论 -
扫盲系列之JMS简介
前言今天早上在微信公众号上看到一个推送的消息,说阿里的捐赠给Apache的RocketMQ成为顶级项目,作为一个开源项目,这是阿里人值得庆贺的。对于这个RocketMQ,可能有部分人不太熟悉。在日常开发中用的比较多的可能是ActiveMQ,RabbitMQ,或者是重量级的kafka。但是不管是使用哪一种技术,这是都是JMS规范的一种实现。java 消息服务虽然出来很早,但是在现在的分布式应用依旧火热原创 2017-09-26 11:31:03 · 492 阅读 · 0 评论 -
你应该知道的RPC原理
转载地址 http://www.cnblogs.com/LBSer/p/4853234.html 在学校期间大家都写过不少程序,比如写个hello world服务类,然后本地调用下,如下所示。这些程序的特点是服务消费方和服务提供方是本地调用关系。 而一旦踏入公司尤其是大型互联网公司就会发现,公司的系统都由成千上万大大小小的服务组成,各服务部署在不同的机器上,由不同的团队负责。这时就会遇到两转载 2017-09-18 16:41:58 · 533 阅读 · 0 评论 -
Spring整合JMS(消息中间件)
一、消息异步处理类似于RMI、Hessian、Burlap等远程方法调用,它们都是同步的,所谓同步调用就是客户端必须等待操作完成,如果远程服务没有返回任何响应,客户端会一直等待直到服务完成。 异步调用则不同,客户端发送完消息无需等待服务处理完成便可立即返回,就像发送完消息就立刻被处理成功一样。 1.1 消息的发送在异步处理的世界,我们可以把消息的发送比作一个邮局系统。比如我们要给某个人发送信转载 2017-09-28 14:45:11 · 349 阅读 · 0 评论 -
同步通信和异步通信的爱恨情仇
前言一开始在学习jms的时候,心中一直有一个疑惑,由于那时候对jsm的了解还不够深入,我当时很不理解传统的RPC远程过程调用和java消息服务有什么区别,他们两不都是在两个不同的分布式或者集群系统传递消息吗?其实他们确实不是同一个东西。他们一个是基于RPC的同步通信,其中最近比较流行的阿里的dubbo远程调用框架。而对于JMS,他是基于一种异步通信的服务机制。其中代表的服务实现由ActiceMQ,R原创 2017-10-16 21:54:09 · 3501 阅读 · 0 评论 -
扫盲系列之字符集编码常识
前言对于字符集编码,还有日常中文乱码问题,大家在日常开发中或多或少都遇到过。一般常见的有get请求上的中文乱码,表单提交中文乱码,字符串io传输中文乱码,数据库读写中文乱码等等。。。乱码问题总是困扰着无数程序猿们。而说到乱码问题,以及具体解决乱码问题的前提是,我们要对字符,字符集,字节,编码,解码这些基础概念有清晰的理解。这样在日常开发中遇到的乱码问题也就比较好解决了!看破乱码的表象,去探寻底层的原原创 2017-10-20 15:05:43 · 335 阅读 · 0 评论 -
简析分布式集群中的session一致性
前言随着互联网用户的逐渐增多,系统设计的业务量的几何式扩大,单系统的项目在应对大量的请求时,越来越显得力不从心。于是集群分布式项目别提出来了,这样将单系统的压力分摊到分布式系统的多个子系统中。这样确实很好的提高了效率,但是从单系统想分布式集群系统转换的过程并不是那么顺利。这其中遇到了一系列的问题,分布式集群系统中的session一致性就是一个不可回避的问题。这里和大家一起简单学习一下解决sessio...原创 2017-11-21 23:32:18 · 991 阅读 · 0 评论 -
复制过来即可用的JWT小Demo
前言这里不具体讲解JWT是什么,有什么应用场景,只是一个简单的小Demo,可以直接复制到eclipse上直接运行的,后续文章中再来详细介绍下JWT的优势和应用场景以及在单点登录上的应用。导入jar包<dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>...原创 2018-04-26 15:10:31 · 2863 阅读 · 1 评论 -
与session不同的另一种认证方式--JWT
前言之前被公司的大飞哥狠狠的鄙视了一次,那次向他请教一个shiro中的session问题,大飞哥无意间说:”现在外面有的公司都不用session来保持状态了”;当时我就奇怪了,不用session难道都把用户信息都保存在cookie中。大飞哥没有说话,只给我了一个眼神。确认过眼神,眼神中饱含着你还太年轻的意思!之后碰巧又遇到项目中的一个单点登录功能,这个功能没有使用CAS框架,虽然CAS本身功能...原创 2018-05-05 01:30:02 · 1950 阅读 · 0 评论 -
深入理解JWT的使用场景和优劣
前言前面简单介绍了JWT的基础只是和简单的小Demo,但是对于JWT的应用场景和优缺点掌握的还够,这些东西只有自己实践过才能搞清楚其中的细节。在网上看到一个大佬对这块讲的比较好,就转载过来一起学习下。 原文链接编码,签名,加密这些基础知识简单地介绍下,千万别搞混了三个概念。在 jwt 中恰好同时涉及了这三个概念,笔者用大白话来做下通俗的讲解(非严谨定义,供个人理解)编码(en...转载 2018-05-06 15:55:30 · 33097 阅读 · 11 评论 -
为什么新来的经理强烈推荐前后端分离
前言我在合肥的一家公司上班,公司规模不大不小。不是什么互联网公司,也不像北上广那些大城市的公司,我们的开发技术很保守,运用传统的技术来玩着我们的项目。因为大家都习惯了,也懒得去换什么新潮技术了。前段时间部门招了一位经理。看了我们目前项目的架构,根据项目的实际情况,以及开发情况,就一直推荐使用前后端分离来重构项目。在之前虽然学习了点前后端分离的小知识,但没有深入学习。由于没有切身体会前后端分离的...原创 2018-06-27 22:54:22 · 6686 阅读 · 4 评论 -
扫盲系列之负载均衡算法
前言在现在的大型互联网项目中,集群和分布式是常用的架构方式。在处理大用户量,高并发的情况中,分布式集群确实提供了一个比较可行的方法。在分布式集群中有一个很重要的概念,那就是”负载均衡”。在分布式集群中,一个服务可能要部署在多个不同服务器中,当大量请求到达的时候,请求被转发到集群的服务器中,这样便可以用多个集群服务器来分担单体服务器的压力。但是这里有一个不可忽略的概念,就是所谓的负载均衡,他是如何将大原创 2017-09-23 21:41:07 · 397 阅读 · 0 评论