php网站开发个人职责中国能建旗下公司排名

web/2025/9/26 17:31:33/文章来源:
php网站开发个人职责,中国能建旗下公司排名,仁怀哪儿做网站,今天西安最新通知继之前的mysql夺命连环之后#xff0c;我发现我这个标题被好多套用的#xff0c;什么夺命zookeeper#xff0c;夺命多线程一大堆#xff0c;这一次#xff0c;开始面试题系列MQ专题#xff0c;消息队列作为日常常见的使用中间件#xff0c;面试也是必问的点之一#xf…继之前的mysql夺命连环之后我发现我这个标题被好多套用的什么夺命zookeeper夺命多线程一大堆这一次开始面试题系列MQ专题消息队列作为日常常见的使用中间件面试也是必问的点之一一起来看看MQ的面试题。你们为什么使用mq具体的使用场景是什么mq的作用很简单削峰填谷。以电商交易下单的场景来说正向交易的过程可能涉及到创建订单、扣减库存、扣减活动预算、扣减积分等等。每个接口的耗时如果是100ms那么理论上整个下单的链路就需要耗费400ms这个时间显然是太长了。如果这些操作全部同步处理的话首先调用链路太长影响接口性能其次分布式事务的问题很难处理这时候像扣减预算和积分这种对实时一致性要求没有那么高的请求完全就可以通过mq异步的方式去处理了。同时考虑到异步带来的不一致的问题我们可以通过job去重试保证接口调用成功而且一般公司都会有核对的平台比如下单成功但是未扣减积分的这种问题可以通过核对作为兜底的处理方案。使用mq之后我们的链路变简单了同时异步发送消息我们的整个系统的抗压能力也上升了。那你们使用什么mq基于什么做的选型我们主要调研了几个主流的mqkafka、rabbitmq、rocketmq、activemq选型我们主要基于以下几个点去考虑由于我们系统的qps压力比较大所以性能是首要考虑的要素。开发语言由于我们的开发语言是java主要是为了方便二次开发。对于高并发的业务场景是必须的所以需要支持分布式架构的设计。功能全面由于不同的业务场景可能会用到顺序消息、事务消息等。基于以上几个考虑我们最终选择了RocketMQ。你上面提到异步发送那消息可靠性怎么保证消息丢失可能发生在生产者发送消息、MQ本身丢失消息、消费者丢失消息3个方面。生产者丢失 生产者丢失消息的可能点在于程序发送失败抛异常了没有重试处理或者发送的过程成功但是过程中网络闪断MQ没收到消息就丢失了。由于同步发送的一般不会出现这样使用方式所以我们就不考虑同步发送的问题我们基于异步发送的场景来说。异步发送分为两个方式异步有回调和异步无回调无回调的方式生产者发送完后不管结果可能就会造成消息丢失而通过异步发送回调通知本地消息表的形式我们就可以做出一个解决方案。以下单的场景举例。下单后先保存本地数据和MQ消息表这时候消息的状态是发送中如果本地事务失败那么下单失败事务回滚。下单成功直接返回客户端成功异步发送MQ消息MQ回调通知消息发送结果对应更新数据库MQ发送状态JOB轮询超过一定时间时间根据业务配置还未发送成功的消息去重试在监控平台配置或者JOB程序处理超过一定次数一直发送不成功的消息告警人工介入。一般而言对于大部分场景来说异步回调的形式就可以了只有那种需要完全保证不能丢失消息的场景我们做一套完整的解决方案。MQ丢失 如果生产者保证消息发送到MQ而MQ收到消息后还在内存中这时候宕机了又没来得及同步给从节点就有可能导致消息丢失。比如RocketMQRocketMQ分为同步刷盘和异步刷盘两种方式默认的是异步刷盘就有可能导致消息还未刷到硬盘上就丢失了可以通过设置为同步刷盘的方式来保证消息可靠性这样即使MQ挂了恢复的时候也可以从磁盘中去恢复消息。比如Kafka也可以通过配置做到acksall 只有参与复制的所有节点全部收到消息才返回生产者成功。这样的话除非所有的节点都挂了消息才会丢失。 replication.factorN,设置大于1的数这会要求每个partion至少有2个副本 min.insync.replicasN设置大于1的数这会要求leader至少感知到一个follower还保持着连接 retriesN设置一个非常大的值让生产者发送失败一直重试 虽然我们可以通过配置的方式来达到MQ本身高可用的目的但是都对性能有损耗怎样配置需要根据业务做出权衡。消费者丢失 消费者丢失消息的场景消费者刚收到消息此时服务器宕机MQ认为消费者已经消费不会重复发送消息消息丢失。RocketMQ默认是需要消费者回复ack确认而kafka需要手动开启配置关闭自动offset。消费方不返回ack确认重发的机制根据MQ类型的不同发送时间间隔、次数都不尽相同如果重试超过次数之后会进入死信队列需要手工来处理了。Kafka没有这些你说到消费者消费失败的问题那么如果一直消费失败导致消息积压怎么处理因为考虑到时消费者消费一直出错的问题那么我们可以从以下几个角度来考虑消费者出错肯定是程序或者其他问题导致的如果容易修复先把问题修复让consumer恢复正常消费如果时间来不及处理很麻烦做转发处理写一个临时的consumer消费方案先把消息消费然后再转发到一个新的topic和MQ资源这个新的topic的机器资源单独申请要能承载住当前积压的消息处理完积压数据后修复consumer去消费新的MQ和现有的MQ数据新MQ消费完成后恢复原状那如果消息积压达到磁盘上限消息被删除了怎么办这。。。他妈都删除了我有啥办法啊。。。冷静再想想。。有了。最初我们发送的消息记录是落库保存了的而转发发送的数据也保存了那么我们就可以通过这部分数据来找到丢失的那部分数据再单独跑个脚本重发就可以了。如果转发的程序没有落库那就和消费方的记录去做对比只是过程会更艰难一点。说了这么多那你说说RocketMQ实现原理吧RocketMQ由NameServer注册中心集群、Producer生产者集群、Consumer消费者集群和若干BrokerRocketMQ进程组成它的架构原理是这样的Broker在启动的时候去向所有的NameServer注册并保持长连接每30s发送一次心跳Producer在发送消息的时候从NameServer获取Broker服务器地址根据负载均衡算法选择一台服务器来发送消息Conusmer消费消息的时候同样从NameServer获取Broker地址然后主动拉取消息来消费为什么RocketMQ不使用Zookeeper作为注册中心呢我认为有以下几个点是不使用zookeeper的原因根据CAP理论同时最多只能满足两个点而zookeeper满足的是CP也就是说zookeeper并不能保证服务的可用性zookeeper在进行选举的时候整个选举的时间太长期间整个集群都处于不可用的状态而这对于一个注册中心来说肯定是不能接受的作为服务发现来说就应该是为可用性而设计。基于性能的考虑NameServer本身的实现非常轻量而且可以通过增加机器的方式水平扩展增加集群的抗压能力而zookeeper的写是不可扩展的而zookeeper要解决这个问题只能通过划分领域划分多个zookeeper集群来解决首先操作起来太复杂其次这样还是又违反了CAP中的A的设计导致服务之间是不连通的。持久化的机制来带的问题ZooKeeper 的 ZAB 协议对每一个写请求会在每个 ZooKeeper 节点上保持写一个事务日志同时再加上定期的将内存数据镜像Snapshot到磁盘来保证数据的一致性和持久性而对于一个简单的服务发现的场景来说这其实没有太大的必要这个实现方案太重了。而且本身存储的数据应该是高度定制化的。消息发送应该弱依赖注册中心而RocketMQ的设计理念也正是基于此生产者在第一次发送消息的时候从NameServer获取到Broker地址后缓存到本地如果NameServer整个集群不可用短时间内对于生产者和消费者并不会产生太大影响。那Broker是怎么保存数据的呢RocketMQ主要的存储文件包括commitlog文件、consumequeue文件、indexfile文件。Broker在收到消息之后会把消息保存到commitlog的文件当中而同时在分布式的存储当中每个broker都会保存一部分topic的数据同时每个topic对应的messagequeue下都会生成consumequeue文件用于保存commitlog的物理位置偏移量offsetindexfile中会保存key和offset的对应关系。CommitLog文件保存于${Rocket_Home}/store/commitlog目录中从图中我们可以明显看出来文件名的偏移量每个文件默认1G写满后自动生成一个新的文件。由于同一个topic的消息并不是连续的存储在commitlog中消费者如果直接从commitlog获取消息效率非常低所以通过consumequeue保存commitlog中消息的偏移量的物理地址这样消费者在消费的时候先从consumequeue中根据偏移量定位到具体的commitlog物理文件然后根据一定的规则offset和文件大小取模在commitlog中快速定位。Master和Slave之间是怎么同步数据的呢而消息在master和slave之间的同步是根据raft协议来进行的在broker收到消息后会被标记为uncommitted状态然后会把消息发送给所有的slaveslave在收到消息之后返回ack响应给mastermaster在收到超过半数的ack之后把消息标记为committed发送committed消息给所有slaveslave也修改状态为committed你知道RocketMQ为什么速度快吗是因为使用了顺序存储、Page Cache和异步刷盘。我们在写入commitlog的时候是顺序写入的这样比随机写入的性能就会提高很多写入commitlog的时候并不是直接写入磁盘而是先写入操作系统的PageCache最后由操作系统异步将缓存中的数据刷到磁盘什么是事务、半事务消息怎么实现的事务消息就是MQ提供的类似XA的分布式事务能力通过事务消息可以达到分布式事务的最终一致性。半事务消息就是MQ收到了生产者的消息但是没有收到二次确认不能投递的消息。实现原理如下生产者先发送一条半事务消息到MQMQ收到消息后返回ack确认生产者开始执行本地事务如果事务执行成功发送commit到MQ失败发送rollback如果MQ长时间未收到生产者的二次确认commit或者rollbackMQ对生产者发起消息回查生产者查询事务执行最终状态根据查询事务状态再次提交二次确认最终如果MQ收到二次确认commit就可以把消息投递给消费者反之如果是rollback消息会保存下来并且在3天后被删除。关注公众号科技缪缪获取更多精彩技术文章和电子书- END -

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/81464.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

显示网站翻页代码什么网站做一手房比较好

join命令用于将两个文件中,指定栏位内容相同的行连接起来。 找出两个文件中,指定栏位内容相同的行,并加以合并,再输出到标准输出设备。 命令的参数如下: -a1或者-a2表示先输出合并后相同部分内容,然后再输…

安卓开发网站开发国外购物网站赏析

WPS的办公软件个人感觉是挺好的,可惜有一次我在使用WPS表格(相当于Office excel)时,发现居然无法使用宏,怎么办?不用担心接下来学习啦小编举例简单的例子告诉大家WPS表格解除宏禁用的方法。WPS表格解除宏禁用的方法上面我已经给出了插件的下…

网站建设的主要内容微网站开发策划

Linux中很多经常使用命令是必须掌握的,这里将我学linux入门时学的一些经常使用的基本命令分享给大家一下,希望能够帮助你们。这个是我将鸟哥书上的进行了一下整理的,希望不要涉及到版权问题。1、显示日期的指令: date2、显示日历的…

长春网站建设兼职zhihu网站建设

随着人工智能技术不断深入实际应用场景,加速各行各业场景应用落地,边缘计算的重要性越发凸显。相较于传统的集中式云计算,边缘计算在距离数据源或用户更近的地方提供计算能力,不仅满足了对实时性要求较高的场景应用需求&#xff0…

公司网站首页怎么制作wordpress全站广告位

说起这个softirq ,很多人还是一头雾水,觉得这个是什么东西,跟tasklets 和 workqueue有什么不同。每次谈到这个,很多人,包括我,都是有点紧张,特别是面试的时候,因为你一旦说错了什么&…

1688网站特色免费推广网站

0 复习上一关我们学习了selenium,它有可视模式与静默模式这两种浏览器的设置方法,二者各有优势。然后学习了使用.get(URL)获取数据,以及解析与提取数据的方法。在这个过程中,我们操作对象的转换过程:除了上面的方法&am…

网站app开发计划书廊坊网站关键词排名

Viggle AI 是一款基于骨骼动画的 AI 工具,可以将图片转换为流畅且一致的角色动画。 这意味着您可以上传一张模特全身照,然后指定该模特要执行的动作,Viggle AI 会自动生成一段由该模特执行该动作的视频。 步骤 1:准备工作 首先&…

网店代运营托管南宁求介绍seo软件

“电脑不时的突然出现蓝屏”,“开机之后毫无规律的死机”,“开不了机,一开机就出现嘶鸣声”,如果你的电脑出现了以上情况,就是你的内存兼容性出了问题,那么这种故障该如何解决呢?下面&#xff0…

中国铁道工程建设协会查证网站临海企业网站建设公司

zookeeper 集群 1、zookeeper 集群说明 initLimit 是Zookeeper用它来限定集群中的Zookeeper服务器连接到Leader的时限 syncLimit 限制了follower服务器与leader服务器之间请求和应答之间的时限 服务器名称与地址:集群信息(服务器编号,服务器…

wordpress声明插件深圳营销型网站seo

前言: 准备笔试题中,这几天复习排序算法,尽量一天学一两个,并且以能手写代码的理解方式写出来。 冒泡排序: 思路: 首先,一定要先有一个场景,比如 1 3 9 5 4 现在想象它&#xff…

佛山禅城网站建设企业vi包含哪些内容

网页基础知识网页的构成网页由html、css和Javascript构成,html是框架,CSS是样式和装饰,JS则是各项功能实现。我们把网页的组成类比成一栋房子,Html相当于房子的结构,CSS相当于房子的装修装饰,JavaScript相当…

flash 开发的网站网页设计过程报告

Oracle 19cADG集群补丁升级 文章目录 Oracle 19cADG集群补丁升级1.备库备份2.备库升级Opatch3.备库应用补丁4.主库备份 oracle_home目录5.主库升级Opatch6.注册补丁7.编译无效对象8.检查主库的补丁注册情况9.备库切换主库完成补丁注册 1.备库备份 su - oracle cd $ORACLE_HOME…

广州网站推广工具开发一个软件需要什么过程

点击上方蓝色关注我们!今天批改的作业不仅仅是卡个印有“优”字样式的章,当然也不仅仅是用红笔写个“SSSS9.28”字样的批语了。除了给每个学生的作业本上都卡了“优”的章之外,还送给每位同学一句或长或短的话,有表扬有批评&#…

jsp做网站 案例中山网站建设外包

一、如何从任意一页开始编码无论是做标书,还是写论文,都有一个给word文档编页码的问题。一般封面、目录、内容提要等前几页不要页码,页码从正文开始编起;或者前面内容编不同于正文的页码,或其中的某一页用罗马数字的页…

做外国购物网站需要交税吗wordpress 4.7.2下载

java itext5 生成PDF并填充数据导出 依赖**文本勾选框****页眉**&#xff0c;**页脚****图片**实际图 主要功能有文本勾选框&#xff0c;页眉&#xff0c;页脚&#xff0c;图片等功能。肯定没有专业软件画的好看&#xff0c;只是一点儿方法。仅供参考。 依赖 <!--pdf-->&…

网站开发周期不需要iis的网站开发

近年来&#xff0c;智慧城市建设出现新的动向&#xff0c;包括城市大脑、城市云脑、城市超级大脑、城市超脑、城市神经网络等“泛城市大脑”概念也大量涌现。杭州、上海、北京、广州等城市各自提出和开展了不同城市大脑建设方案&#xff0c;其中上海市开展了以建设城市神经元系…

工程项目建设自学网站举报网站制度建设方面

一、overview 基于pytorch的深度学习的四个步骤基本如下&#xff1a; 二、线性模型 - Linear Model 基本概念 数据集分为测试集和训练集&#xff08;训练集、开发集&#xff09;训练集&#xff08;x&#xff0c;y&#xff09;测试集只给&#xff08;x&#xff09;过拟合&#…

创造力网站设计wordpress汉字后缀图片不显示

前言 最近在使用Flask框架&#xff0c;写一个小项目&#xff0c;在项目部署启动后&#xff0c;出现了以下这段提示&#xff0c;这段提示的意思是&#xff0c;该启动方式适用于开发环境中&#xff0c;生产环境要使用WSGI服务器。 WARNING: This is a development server. Do no…

哪个网站seo做的最好深圳做网站专业

在平时个人开发的过程中是不是有这样的烦恼&#xff1a; 项目开发完成&#xff0c;Push之后 登录服务器&#xff0c;手动git pull&#xff0c;然后运行部署命令 这真的很烦诶&#xff01; 那么能不能Git push之后&#xff0c;远端服务器自动 Git pull 然后运行部署命令呢&a…

免费的行情网站可以先做网站再开公司吗

Linux系统中经常会使用软连接指向其他目录或文件以快速方便的访问,那么如何读取软连接指向的位置呢,可以通过readlink函数: #include <unistd.h> ssize_t readlink(const char *pathname, char *buf, size_t bufsiz); 参数说明: pathname:软连接的路径 buf:…