内容简介:如果对本文的内容有疑问,请在文章留言区留言,谢谢。
点击上面 蓝色字体 关注我们
技术 / 架构 / 职场 / 面试 / 内推
非常感谢「搜云库技术分享」小伙伴们的高质量技术交流。 这里,我使用「知识星球」沉淀「2019年的第1周」高质量的答疑内容。本周与你一起精进 7 个问题,请细心阅读。 如果对您有帮助的话,可以帮忙转发与分享。同时,欢迎加入「技术架构分享群」与「 搜云库技术分享,知识星球 」共同探讨,一起进步, 文末扫描关注 ,或公众号回复「 加群 」。
在这里,特别感谢星球合伙人:
@卷小毛,@豆哥,@琳茹,@无悔,@熊姐,@帅超,@Mask,@凡羊羊(排名不分前后)
对磊哥的支持,加入搜云库技术分享的大家庭!
惜小天 提问:
消息中间件如何实现高可用,削峰,异步请求是怎么用中间件处理呢?
星球合伙人:龙的凤影
回答:
消息中间件是如何实现高可用、消峰、异步请求的,我简单说下吧。
1、 实现高可用 :消息中间件,可以部署多个,部署在不同的物理机器上,做集群,当其中某节点宕机了,剩余的节点照样能够正常工作。
2、 削峰 :当流量出现急剧上升,系统的处理能力达到瓶颈的时候,通过消息队列,逐渐放行消息,减缓系统的处理频率,从而不至于将系统的CPU耗尽,从而使请求依次处理,达到削峰效果。
3、 异步 :系统之间的服务,原本是直接的同步调用的,但是现在使用消息中间件后,可以实现异步调用,例如系统A、B、C,系统生产的消息不仅可以提供给B系统,还可以扩展到C系统,我生产者A不需要修改代码逻辑,只负责生产消息,而且生产者不关心你是否有没有消费、啥时候消费;而消费B和C,我们只需要订阅生产的消息,到时候消费消息即可,有消息就消费。
一个经典例子:
当一个用户注册的时候,之前是当用户在页面进行填入信息注册时候,数据写入数据库(100ms),同步调发送邮件注册服务(100ms)和调用发送注册短信(100ms),当一系列操作都成功后,才返回到前台给客户[共花300ms]。 而加入消息中间件之后,用户在页面进行填入信息注册时候,数据写入数据库(100ms),直接返回前端给客户注册成功,在数据写入数据库的同时,可以把调发送邮件注册服务(100ms)和调用发送注册短信(100ms)的消息推送到消息中间件上,由对应的消费服务进行消费那么整个注册过程,则能由[300ms]缩短到[100ms])。
当然,消息中间件存在着许多的缺点:
1、MQ宕机了怎么办? 2、MQ发送消息过程中消息丢失? 3、使用MQ,系统更加复杂性了?
惜小天 提问:
为什么采用G1收集器而不是cms收集器加seial收集器,堆大小如何设计比较合适,老年代和年轻代分配比例,基于什么原理算法给出最优方案?
星球合伙人:豆
回答:
首先声明,以下是个人的理解或者资料中的描述,并没有进行实践验证,可能并不严谨。
关于CMS收集器与G1收集器,我们先来看一下他们的区别。大家都知道CMS因为追求最短回收停顿时间采用的是标记-清除算法,这种算法会产生大量的空间碎片,当大对象进行分配时,往往会出现总体剩余空间很大但是连续的剩余空间不足的情况,从而引发Full GC,虽然CMS提供了一个参数可以控制快满时内存碎片的整理,但是相应的停顿的时间也会变长。
而G1做出的优化是:
1、对分代收集的改进,物理意义上不再隔离young与old,而是分为了Region区,虽然还有young和old的概念,但是他们不需要连续的存储,把内存化整为零并且不需要配合其他收集器就能独立管理整个堆。
2、G1虽然和CMS类似追求短的回收停顿,但是G1更关注于设立一个可预测控制的停顿时间,此时我们就可以控制垃圾回收时间避免应用雪崩现象(因为分为一个个的Region,所以不用在整个堆中进行垃圾收集,而是根据优先级,对优先级大的Region进行回收)。
3、G1整体上采用的是标记-整理算法(虽然两个Region是基于复制法),所以避免了CMS空间碎片的问题。
虽然j9都是默认G1收集器的了,但是并不是说G1就一定优化于CMS,现在市面上使用比较多的应该还是CMS+ParNew这种,G1收集器内部实现逻辑复杂(从提出paper到推出使用用了大约8年时间,现在还在优化,相信会越来越强并逐渐取代CMS的)。根据大佬们的测试,G1在小堆里的表现并没有比CMS好(此处R大推荐的8G),CMS在8G以下的堆中表现的比G1更加的稳健。G1适用于多CPU、大内存、低GC停顿要求、产生大量内存碎片需要整理压缩这几种情况。
关于堆大小的设置,假设你设置了一个2G的堆内存,你还要考虑你的线程占用的内存-线程栈(默认1M * 线程数,考虑永久代大小256M(j8之前),考虑二进制代码占用空间(48到240M不等),如果你使用了netty或者堆外缓存,你还要考虑堆外内存的大小(默认最大值约为堆内存大小)。综合下来,你设置一个2G大小的堆,要预留的内存空间为3.5-5.5G左右(还要预留一些供操作系统使用)。
老年代和年轻代的比例,是SUN官方根据大量研究、实践、调优得出的适合大部分情况的比例,比例的大小可以参看下HotSpot官方的调优白皮书
当然这个情况也不是绝对的,如果你的项目很多对象生命周期都比较短暂,你可以适当调整一下比例让老年代小一些,但是尽量要避免Full GC
蔡 提问:
现在工作3年了,做的项目一般都是单点应用,出去找工作问项目经历,没做过高并发这种项目,怎么做准备呢?
星球合伙人:卷小毛
回答:
你说你工作了三年,一直在做单点应用。其实单点应用也有很好玩的东西,我说的可以使说应用很多东西的了。
一、代码的思想
需求分析》应用设计》代码编写》后期重构
1、需求分析
我们的技术总是围绕着需求去走,但是我们一定要完完全全跟着需求走吗?可能有一些需求多多少少有些瑕疵。我们能不能从中优化需求,解剖需求呢?从而达到,产品想要的效果,也方便我们后期的维护和拓展。需求不只是看在当下!
2、应用设计
一个好的设计,是从需求中解剖出来的。如果我们一开始拿到需求,就在那里忙前忙后的。你会发现后期的维护会给你带来无尽的麻烦。解剖需求我们要从多个角度去分析,去拓展。画图,构思出整个代码功能的架构图。这对你未来的路会有好处。
3、代码编写
我自己的信条是 多重构,多封装,多共用。从而以少量代码快速完成多模块代码设计。这样会给你后期带来很好的体验。别人在优化BUG的时候,你只要找到相关问题,优化完后。有充足的时间去完成自己的事情。 重构,不只是第4步(后期重构)开始做的,在你第2步(应用设计)和第3步(代码编写)中就要带有这个思想了。
4、后期重构
当你接触一些新技术的时候,你就要回顾以前所写的代码,是否能应用!若是能,那就重构优化他,对比原有的代码。能否给你带来较好的效果
二、技术的玩
我所说的玩,不是玩游戏那种。但是你也可以当成玩游戏,过副本 1.业余时间学习后,要实践,把固定死的写法。玩出另一个花样来,或许能给你带来意想不到的效果 2.对新技术的追求,不要觉得他有难度就放弃了。我们工作不就是为了自己技术得以提升。但是工作上得到的并不多。需要自己去开拓边疆,打怪兽。这样我们的装备才会更好。
做到上面两点的话,你会比别人走的更远。代码是死的,技术也是玩出来的。在玩的时候,你自己能否有那种思想很重要。不要固定死自己的思维
更多向磊哥的提问
想看磊哥的回答, 限时免费 , 进知识星球查看回答
惜小天 提问:
磊哥可以提供一些关于mycat面试题和原理资料吗?
不停奔跑提问:
磊哥,最近我一直在为准面试做准备,看了好多资料,现在感觉准备的一点头绪都没有了,因为上家公司是外包公司,用的技术也是很老旧,对于现在面试中问的高并发,分布式等等都没有怎么涉及过,这种情况我应该如何准备面试呢?
:neutral_face: 微笑提问:
磊哥,我是名实习生,我所在的公司用ssh,项目业务逻辑特别简单,每天无所事事,也无法离职,该怎么提升自己,能不能给个方向?
:neutral_face: 微笑提问:
面试的时候该怎么介绍项目经验?
搜云库技术团队,欢迎广大技术人员投稿
投稿邮箱: admin@souyunku.com
如果对本文的内容有疑问,请在文章留言区留言,谢谢。
限时:免费进星球
限时免费加入 ,已经有 1400 + 人了
星球介绍: 技术,资讯,资源,分享,职场,面试,答疑
星球是为了帮助公众号和博客粉丝更好更近的沟通,这里会有最新的技术文章分享,技术答疑,职场面试等相关问题交流沟通。
微信识别二维码, 限时免费加入
公号回复关键字
更多技术干货
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 一套价值 99 元的干货课程,送给知识星球用户!
- V8十年故事:从农场诞生的星球最强JS引擎
- 代码审计知识星球二周年 && Code-Breaking Puzzles
- 【知识星球】千奇百怪的网络结构板块更新到哪里了?
- 【6月月报】新书加印与勘误,七大专栏齐上线,知识星球大改版!
- 自由星球会议,FSF年会 LibrePlanet Conference 2019 敲定举办时间与地点
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Web协议与实践
克里希纳穆尔蒂 (KrishnamurthyBalachander) / 范群波 / 科学出版社 / 2003-7 / 46.0
本书全面论述了传输Web内容的系统和协议,重点讲述了Web中业已成熟和稳定的技术,如TCP/IP协议及DNS技术、HITP/1.0的设计及其与TCP之间的交互;深入阐述了Web高速缓存技术和多媒体流播技术的最新技术动态;分析了Apache Web服务器和Squid代理;还探讨了通信量的分析和测量技术。书中使用了大量示例、技术发展水平报告以及案例分析来阐述Web的工作原理和各个组件之间的交互。本书是......一起来看看 《Web协议与实践》 这本书的介绍吧!