峰哥分享:分布式系统设计6大经验

峰哥结合在近几年来做分布式系统的经验,总结了6大经验,供参考。

一、能不采用分布式的尽量不分布式

    能单体解决的应用千万不要为了分布式而分布式,用最小的代价实现应用价值即可。

    使用了分布式系统随之带来的有分布式事务等一系列问题,其中分布式事务最难解决。(下一篇文章重点讲解分布式事务常用的解决方案)

二、尽量设计成无状态的应用

    无状态的应用可以快速通过增加部署多个应用来提供应用的高可用性可扩展

无状态应用有状态应用
场景每次访问应用的时候,自带识别信息的标识,无需指定特殊的应用。每次访问应用的时候,需要通过指定应用获取到特定信息。
示例

MQ的消费者

典型的优势:

1、当消费存在积压的时候,可以快速通过扩展消费者来提升消费性能

Tomcat的Session管理。

典型的弊端:

1、通过SLB的粘性访问应用,有状态的应用会因为Session不均衡导致应用服务性能不平均,导致部分用户访问较慢;

2、同时因为绑定了应用,导致扩展应用无法快速解决性能瓶颈。

三、分布式一致性尽量用最终一致性

    分布式事务强一致性在实现层面非常的复杂,而且在实际应用场景中很少碰到。个人建议通过MQ、定时任务补偿实现最终一致性,若一致性出现异常,则通过告警机制由技术人员进行人为处理。

四、分布式接口实现幂等性

    考虑到分布式应用之间接口调用过程中有可能出现异常以及重试(HttpConnection在连接超时的情况下会出现调用2次)的情况,接口的调用需要实现幂等性。

五、分布式尽量使用异步处理

      分布式在进行复杂业务逻辑处理的过程中,尽量采用异步处理方式处理,从而达到系统高吞吐量。

    示例:某第三方系统大批量传输商品信息,可以先将信息存储到中间表,然后再通过异步的方式(MQ、定时任务方式)进行商品信息结构处理。

    但此方式会出现异步回传的问题:商品信息不符合业务规范的时候,需要调用第三方系统告知商品信息异常。

六、分布式尽量使用批量处理

    使用批量处理模式,可以减少网络IO的交互、减少线程的上下切换,从而降低CPU使用率。

    需要注意点:若批量处理过程中,业务处理比较占用CPU时,每处理100-1000条数据的时候,需sleep(10)来降低一下CPU的使用率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值