首页 文章 精选 留言 我的

精选列表

搜索[文件对比],共10042篇文章
优秀的个人博客,低调大师

Java Bean Copy框架性能对比

一、问题分析 背景 相同server机器上的相同方法在方法调用链任何参数都一致的情况消耗时间差别非常大,举例说明,类A有方法demo(), 通过分析发现同一台机器(也是一个jvm进程)对该方法的两次调用消耗时间竟然有200ms的差距。同时,方法实现上没有使用任何的并发以及缓存,唯一特殊的是方法内使用了Apache BeanUtils.copyProperties,怀疑是这个方法有猫腻,于是开始重点分析该方法实现。 分析过程 现象分析 猜想如果是BeanUtils.copyProperties有问题,那么现象上应该是调用BeanUtils.copyProperties完成bean copy的过程可能会偶然出现性能问题,于是写了一个demo 循环调用BeanUtils.copyProperties完成bean copy,demo可以参考下文 验

优秀的个人博客,低调大师

kafka0.9.0 新特性(对比0.8)

image.png 1、引入新的Consumer API 0.9.0相比0.8.2,引入了一个新的Consumer API,这个API不再使用high level和low level的基于zookeeper的client;不过仍然支持0.8.0的client。 新的API通过如下方式引入依赖: <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>0.9.0.0</version> </dependency> consumer的offset kafka0.8.0 的 consumer客户端需要不断与kafka集群的zookeeper交互,以获取最新的offset。而新的consumer的offset则是交给kafka来管理,kafka通过创建专用的topic进行管理不同partition的offset。kafka自己维护了partition的offset,以供同一个partition的不同consumer使用。(图中last commit offset 就是已经确认消费的offset) image.png 假设现在某一个consumer消费到current position时,未来得及确认已消费就挂掉了,那么下次其他consumer来拉数据时,就从last commit offset开始,重复消费1~6.Consumer的commit。 如果配置了enable.auto.commit为true和auto.commit.interval.ms=xxx,那么就按照这个频率进行commit; 为false时,就需要手动进行commit,可以使用同步方式commitSync,也可以使用 commitAsync 进行异步commit,对于异步确认的话,会返回一个hook,可以利用这个hook进行一定的业务逻辑处理。 consumer通过subscribe方法来订阅它感兴趣的topic,每次订阅之后kafka又有新的consumer加进来的话,那么就要对该topic的position进行重新分配(consumer和partition的比例最好是一个1:1)。 一般而言这个过程是consumer不感兴趣的,因此无需知道;但是如果consumer愿意感知这个事情,那么就可以使用 ConsumerRebalanceListener这个类来进行监听。 另外Consumer可以订阅特殊的partition,实现指定消费partition的功能。适用于一些特殊的场景,比如:消费者所要消费的partition与消费者具有某种联系;或者消费者本身具有高可用性,如果消费者挂掉了,没有必要让kafka来重新分配partition。使用TopicPartition来表示某一个topic的指定partition。 在kafka外部存储offset 允许在kafka外部存储offset,也就是consumer和kafka同时维护一个offset,消费者程序不一定要使用kafka内置的offset存储,而是可以自主选择offset的存储方式。如果能够实现offset和result的原子性保存,将会实现exactly once的事务性保证,要比kafka的offset提交机制所提供的at-least once更加强壮。比如使用外部数据库的事务来保存数据处理结果和offset的一致性,要么共同成功并存储,要么失败回滚。 使用方法:首先将auto.commit提交设置为false,然后使用 ConsumerRecord 来存储offset,需要定位时,使用seek即可。 支持多线程 通过引入wakeupException实现,原理类似于多线程中的InterruptException(通过WakeupException就可以对Consumer进行优雅的控制。而且多个线程公用一个Consumer,Consumer本身非线程安全,因此如果不加外部控制,会导致跑出ConcurrentModificationException。多线程很可能导致非顺序消费数据的问题,但是将消费和业务处理分离,耦合性降低 2、引入了安全管理机制: 客户端(producer和consumer)连接broker时,可以使用SSL或者SASL进行验证。 验证从broker到zookeeper的连接 使用SSL对broker和client之间,broker之间以及使用SSL的工具进行数据编码(这有可能导致性能恶化,取决于CPU和JVM实现) 验证客户端的读写操作 验证是一个可插拔式的服务,并且支持统一整个验证服务。 SSL或者SASL都是可选择项,如果需要使用,那么就需要进行额外的配置。 3、引入了Kafka Connect: kafka connect是一个支持Scala的可靠工具。使用它来定义一个数据导入与导出的connector很容易。具有时延低,API操作简单的特征,支持分布式或单机模式。 个人介绍: 高广超:多年一线互联网研发与架构设计经验,擅长设计与落地高可用、高性能、可扩展的互联网架构。 本文首发在 高广超的简书博客 转载请注明! 简书博客 头条号

优秀的个人博客,低调大师

LVS haproxy nginx 负载均衡软件对比

另一个文章转载地址,写的很详细: http://www.ha97.com/5646.html LVS 特点: 1、抗负载能力强、是工作在网络4层之上仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的; 2、配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西,所以并不需要太多接触,大大减少了人为出错的几率; 3、工作稳定,自身有完整的双机热备方案,如LVS+Keepalived和LVS+Heartbeat,不过我们在项目实施中用得最多的还是LVS/DR+Keepalived; 4、无流量,保证了均衡器IO的性能不会收到大流量的影响; 5、应用范围比较广,可以对所有应用做负载均衡; 6、软件本身不支持正则处理,不能做动静分离,这个就比较遗憾了;其实现在许多网站在这方面都有较强的需求,这个是Nginx/HAProxy+Keepalived的优势所在。 7、如果是网站应用比较庞大的话,实施LVS/DR+Keepalived起来就比较复杂了,特别后面有Windows Server应用的机器的话,如果实施及配置还有维护过程就比较复杂了,相对而言,Nginx/HAProxy+Keepalived就简单多了。 Nginx特点: 1、工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构,它的正则规则比HAProxy更为强大和灵活,这也是许多朋友喜欢它的原因之一; 2、Nginx对网络的依赖非常小,理论上能ping通就就能进行负载功能,这个也是它的优势所在; 3、Nginx安装和配置比较简单,测试起来比较方便; 4、也可以承担高的负载压力且稳定,一般能支撑超过几万次的并发量; 5、Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点,不过其中缺点就是不支持url来检测; 6、Nginx仅能支持http和Email,这样就在适用范围上面小很多,这个它的弱势; 7、Nginx不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器。LNMP现在也是非常流行的web架构,大有和以前最流行的LAMP架构分庭抗争之势,在高流量的环境中也有很好的效果。 8、Nginx现在作为Web反向加速缓存越来越成熟了,很多朋友都已在生产环境下投入生产了,而且反映效果不错,速度比传统的Squid服务器更快,有兴趣的朋友可以考虑用其作为反向代理加速器。 Haproxy特点: 1、HAProxy是支持虚拟主机的,以前有朋友说这个不支持虚拟主机,我这里特此更正一下。 2、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作 3、支持url检测后端的服务器出问题的检测会有很好的帮助。 4、它跟LVS一样,本身仅仅就只是一款负载均衡软件;单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。 5、HAProxy可以对Mysql读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,不过在后端的MySQL slaves数量超过10台时性能不如LVS,所以我向大家推荐LVS+Keepalived。 6、HAProxy的算法现在也越来越多了,具体有如下8种: ①roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的; ②static-rr,表示根据权重,建议关注; ③leastconn,表示最少连接者先处理,建议关注; ④ource,表示根据请求源IP,这个跟Nginx的IP_hash机制类似,我们用其作为解决session问题的一种方法,建议关注; ⑤ri,表示根据请求的URI; ⑥rl_param,表示根据请求的URl参数'balance url_param' requires an URL parameter name; ⑦hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求; ⑧rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。 本文转自wks9751CTO博客,原文链接:http://blog.51cto.com/wks97/1630895 ,如需转载请自行联系原作者

优秀的个人博客,低调大师

ElasticSearch vs Lucene多维度分析对比

ElasticSearchvsLucene的关系,简单一句话就是,成品与半成品的关系。 (1)Lucene专注于搜索底层的建设,而ElasticSearch专注于企业应用。 (2)Luncene是单节点的API,ElasticSearch是分布式的。 (3)Luncene需要二次开发,才能使用。不能像百度或谷歌一样,它只是提供一个接口需要被实现才能使用。 ElasticSearch直接拿来用。 Lucene ElasticSearch 本文转自大数据躺过的坑博客园博客,原文链接:http://www.cnblogs.com/zlslch/p/6612723.html,如需转载请自行联系原作者

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册