对高性能、高可用java组件的一点看法

我们平时开发时,都会用到一些java中间件或工具,这些组件都或多或少会包含高可用、高性能等特点。下面以mysql、redis、kafka等组件为例,说明他们是如何实现这些特点的,希望这些特点的实现方式,能为我们开发相关组件提供一些思路。

 

一、高可用

1、mysql:

    1)集群模式:一台机器存在单点问题,那就多个机器组成集群;

    2)日志恢复数据:通过binlog来实现数据的恢复或主从复制。但是生成日志文件需要考虑的点是:日志保存的格式(文本、二进制等;是否压缩);日志保存的时机(先保存到缓存,再从缓存刷到磁盘)——是定时刷盘,还是事务提交后刷盘呢?如果是定时刷盘,那定时执行间隔设为多少合适呢?哪种方式最能保证机器宕机后数据不丢失呢?;日志多久删除呢?(毕竟磁盘也是有限的撒)

 

2、redis:

    1)集群模式

    2)RDB和AOF文件支持数据恢复;

 

3、kafka:

    1)kafka集群:通过zk管理多个broker,组成集群;

    2)数据存在日志中,既提供了持久性,也具备高可用性;

    3)分区副本:通过数据冗余,提供可靠性,当leader副本挂掉,可以从follow副本选举新的leader副本;

 

二、高性能

1、redis:

    1)内存操作;

    2)单线程操作(4.0版本有辅助线程处理非阻塞的删除任务);

 

2、kafka:

    1)多分区,提供横向扩展,一个分区被一个消费者消费,如果需要提供消费速度,可以设置多个分区,让N个消费者去消费(类似于多线程)。

 

三、总结

1、高可用性一般是由集群+数据持久化存储来实现的;

2、高性能需要结合使用场景,合理使用多线程或单线程。

 

我了解的也不是很全面,分析的组件也不够多,希望之后有机会实现一些组件的时候,可以参考这些高可用、高性能的组件的实现方式。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值