MQ框架非常之多,比较流行的有RabbitMq、ActiveMq、ZeroMq、kafka。这几种MQ到底应该选择哪个?要根据自己项目的业务场景和需求。下面我列出这些MQ之间的对比数据和资料。
工欲善其事,必先利其器。对于程序员来说,Eclipse便是其中的一个“器”。本文会从 Eclipse快捷键和实用技巧这两个篇章展开介绍。Eclipse快捷键用熟后,不用鼠标,便可进行编程开发,避免鼠标分了你的神。而掌握了 Eclipse的一些实用技巧,则可以大大提高开发效率。
博文在我的csdn博客中:http://blog.csdn.net/linsongbin1/article/details/51577310
通常一个产品,内部是需要很多子系统一起协助的,像有些电商系统,可能需要几百个系统一起协助。假设下面这样一种场景,假设应用a部署在机房room1, 在room1的其他应用可以调用应用a的接口,然后还有很多的子系统是部署在room2这个机房的,room2中的应用也需要调用到应用a,那么这样 room2中的应用调用room1中的a应用时,就有因为跨机房导致的时延问题。如果系统的qps要求很高,那么应用a最好也部署在room2,实行多机房部署。 具体内容请参看我的csdn博客文章: 应用多机房部署
互联网应用通常都需要应付大并发量,为了提高QPS,通常会使用中央缓存(例如memcache)和本地缓存的方式。请求先经过本地缓存,如果不命中,则 请求穿透到中央缓存,如果还是不命中,则会直接查询数据库,并把查询到的数据刷新到中央缓存中。如果采用这种方式的话,必须要解决一个问题,如何刷新本地 缓存的数据。
为了减轻数据库的压力,一般会使用数据库主从(master/slave)的方式,但是这种方式会给应用程序带来一定的麻烦,比如说,应用程序如何做到把数据写到master库,而读取数据的时候,从slave库读取。如果应用程序判断失误,把数据写入到slave库,会给系统造成致命的打击。 解决读写分离的方案很多,常用的有SQL解析、动态设置数据源。SQL解析主要是通过分析sql语句是insert/select/update /delete中的哪一种,从而对应选择主从。而动态设置数据源,则是通过拦截方法名称的方式来决定主从的,例如:save*(),insert*() 形式的方法使用master库,select()开头的,使用slave库。蛮多公司会使用在方法上标上自定义的@Master、@Slave之类的标签 来选择主从,也有公司直接就调用setxxMaster,setxxSlave之类的代码进行主从选择。
在项目开发当中,经常有这样一种场景,对数据库进行添加、修改、删除操作的应用直接连接master库,只对数据库进行查询的应用,会先建立一个中央缓存,例如redis或者memcache,如果缓存没有命中,那么直接访问slave库。下文会介绍一下在刷新中央缓存时,如果发生主从延迟,应该如何处理。也即是,当应用System-A 把数据库写入master库的时候,System-B应用在读取slave库的时候,master库的数据还没同步到slave库,如果这个时候刷新缓存的话,会直接把旧的数据刷到缓存里的。
在一个大的系统当中,通常会切分成多个子系统,子系统与子系统之间可以通过微服务、http接口或者mq等来相互通讯。假设有这样一种场景,A系统需要调用B系统的f1 接口,获取数据后再向前端系统输出。 前端系统通常所承受的并发量是非常大的,也就是说A系统的接口需要有很高的qps。 这个时候我们需要缓存B系统接口的输出,以便提高A系统接口的响应速度。
概要:最近经常做业务逻辑代码review的工作,发现各种风格的代码,其中有一种是封装和抽象做的非常的多,代码层次非常的深入,表面给人感觉是:牛逼的代码。但是从清晰度和可维护性来说,还是不推荐这么做。。。。。。。。。。。。详细的请参看我的csdn博客编写业务逻辑代码-清晰可维护才是最重要的
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号