9 cmlbeliever

尚未进行身份认证

我要认证

改变世界需要你,行动吧!骚年!先改变自己...

等级
TA的排名 8k+

分布式数据一致性思考-B端系统一致性

目录背景什么是一致性?B端业务场景重试幂等并发小结总结背景已经好久没写博客了,看了下最近的一篇已经是去年的了,由于工作一直忙,没有抽时间来写(其实就是懒)。加上也没有觉得非常有收获的事情,所以就干脆没写了。最近在思考分布式一致性的理论与实现时,感觉自己有所收获,这里分享分享一下自己的经验。什么是一致性?至于原理什么的,这里就不赘述了,总的来说目前的分布式系统实现起来基本上都是基于BASE理论的,业务需要保持最终的一致性,说白了了是可以允许 中间过程的短暂不一致,只需要最后一致就好。一说到这个,很

2020-07-18 22:17:06

Emoji表情插入DB问题调查总结

最近项目开发的时候发现插入emoji表情的时,会报如下错误:Caused by; com. ibatis。common. j dbc。except ion .NestedSQLExcept ion:The error occurred while applying a parameter map. Check the MS -RESERVATION RECORD UPDATE- Inline...

2019-11-24 20:56:16

【课程免费分享】6-Spring中Bean扫描实战

6、Spring中Bean扫描实战当需要扫描bean可以使用@ComponentScan(basePackages="")对指定包下添加的Spring支持的注解的类。SpringBoot是默认会扫描@SpringBootApplication注解所在包和所有子包的类。这样使用的话对于单纯的业务逻辑实现是没有问题的,但是如果想要把共通实现抽取出来作为公共项目,或者自定义拓展自己的注解,这时该如何扫...

2019-10-06 16:11:18

【课程免费分享】5-@EnableAutoConfiguration原理实战

5、@EnableAutoConfiguration原理实战在SpringBoot项目中集成其他框架是非常简单的,如果需要添加WebMvc,只需要引入对应的依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-...

2019-10-06 16:10:46

【课程免费分享】4 Spring各种Aware注入的原理与实战

4、Spring各种Aware注入的原理与实战Spring通过接口回调的方式提供了多个非常方便的XXAware接口,方便在开发过程中获取到Spring上下文核心组件,而且这些XXAware都有一个共同的父接口Aware。Aware都是在bean初始化回调前就进行回调的。在官方文档中列出了常用的Aware:举个例子:当我们需要获取Application和BeanFactory时,只需要实现对应...

2019-10-06 16:08:54

【课程免费分享】3-@ConfigurationProperties实现原理与实战

3、@ConfigurationProperties实现原理与实战在SpringBoot中,当需要获取到配置文件数据时,除了可以用Spring自带的@Value注解外,SpringBoot提供了一种更加方便的方式:@ConfigurationProperties。只要在bean上添加上这个注解,指定好配置文件的前缀,那么对应的配置文件数据就会自动填充到bean中。举个栗子,现在有如下配置:my...

2019-10-06 16:08:18

【课程免费分享】2-如何在Bean初始化回调前后进行自定义操作

2、如何在Bean初始化回调前后进行自定义操作在Spring环境中,如果需要在bean自动装配(属性都注入ok)完成后进行自定义操作,通常只需要实现接口InitializingBean,在afterPropertiesSet方法中执行操作即可。在这个接口回调时,bean中所有的属性已经注入完成了。比如在bean初始化完成后添加一段log:@Componentpublic class MyBe...

2019-10-06 16:07:03

【课程免费分享】1-SpringBoot入门导读

SpringBoot入门导读目前Spring与SpringBoot在Java项目中基本是标配了,极大简化了开发的时间和难度。尤其是SpringBoot,各种框架整合SpringBoot都非常方便。在享受完方便的开发后,是时候来学习下背后的机制了。对于框架的学习,学会使用只是入门的第一步,掌握其工作原理这才是需要更加深入学习的,技术类框架都是大同小异的,只要掌握了一种框架,这样即使再多类似的框架...

2019-10-06 16:05:09

系统迁移必知会(多年总结)

非常幸运,这几年系统迁移的事情基本被我赶上了,从外部系统迁移到内部系统迁移,从小项目到大项目都实践过。迁移中踩过的坑和自我的总结,在这里给大家分享分享。随着业务的发展,原有系统支撑当前业务就显得力不从心了,这时就考虑进行系统拆分或者内部升级了,拆分成另外一个微服务或者内部模型升级,这里将拆分的过程或者升级的过程统称为迁移,那么新老系统业务过度期间如何保证系统平稳的对接呢?根据数据特点迁移可分为...

2019-09-22 10:13:56

Mockito单元测试自定义mock返回

在上篇博客https://blog.csdn.net/cml_blog/article/details/82820753介绍了SpringBoot中进行单元测试各种小技巧后,发现还有个遗漏的case,那就是在使用的mock的时候,可能需要根据不同的参数返回不同的数据。比如传入aa返回true,传入bb返回false等情况,这里再补充一篇进行说明。首先还是在AService中新增doSmthing...

2019-04-17 22:39:13

一个好用的分布式锁框架

介绍一个非常好用的分布式锁项目,支持ZK和Redis分布式锁实现,可以使用注解和代码的方式获取分布式锁,保证资源的互斥访问。支持功能:Redis分布式锁实现ZK分布式锁实现自定义实现一键开关分布式锁功能支持Spring支持SpringBoot背景在分布式项目中,有时需要使用分布式锁对资源进行唯一的访问,项目中常用的实现方案如Redis和ZK,如果直接使用,对项目侵入性大,...

2019-03-12 17:12:58

Trojan/Android.GDownload.jw[exp,gen] 病毒报警解决方案

去年12月份开始,我的个人app记忆空间就被华为应用市场报病毒了,而且非常突然,之前都是好好的,突然报毒打得我猝不及防。华为市场提供的信息如下:你好,你的应用审核复测应用经手机管家检测为风险软件,存在中等风险;无法上架;是不是很坑,在使用华为手机进行验证才得知是病毒Trojan/Android.GDownload.jw[exp,gen],看得我一脸懵逼,因为对病毒处理这块没有太多的...

2019-03-05 13:02:05

图解常用的互联网架构体系

如上图,个人整理出的通用架构层次图,每一层次都可以使用集群的形式增加稳定性与可用性。从上到下层次鲜明,通常在高并发场景中,数据库是宝贵的资源,而且单个数据库实例是扛不住的,所以通常是mysql进行分库分表,这样的话问题就来了:问题1:分布式事务如何解决?常见的有XA,TCC,LCN,LTC解决方式,本篇这个不是重点问题2:数据如何查询?分库分表后,面临的一大问题就是如何查询数据,...

2019-02-28 14:16:35

SLB优雅的滚动发布

又是新的一年了,距离上一次写文章已经过了2个多月了,作为新年的第一篇文章,对最近使用SLB的心得进行总结,作为以后备注,也可以让各位读者少走一点坑。SLB使用的是阿里云的服务,服务A有多个实例部署在不同服务器上的docker容器中。对外通过SLB进行负载,调用方只需要通过访问SLB就可以将请求均匀的分布到不同服务器的A服务中。阿里云同时还提供接口的方式操作SLB,可以动态的上下线服务,官方文档...

2019-01-24 21:09:07

Docker 中安装VIM

docker容器中有许多默认是没有安装vim的,如果需要编辑配置文件的话,那么就需要手动安装vim了。如果直接使用:apt-get install vim;则会出现如下错误:Reading package lists... DoneBuilding dependency treeReading state information... DoneSome packages could n...

2018-11-26 21:37:25

Redisson lua脚本执行踩坑之神秘的引号

最近项目需求,在redis中需要执行批量删除指定key,并且要支持原子操作,那么当然只有自己写lua脚本了。项目中使用的是redisson作为redis连接工具,首先先定义好lua脚本: private static final String BATCH_DEL_SCRIPT = "for k,v in pairs(ARGV) do \n " + "redis.c...

2018-11-20 21:15:07

SpringBoot 优雅的进行单元测试

随着项目的功能不断增多启动项目需要的时间就越来越长,如果每个功能都从Controller入口进行测试,不仅费时而且费力。那么这时候单元测试就体现出非常大的优势了,对所有的接口进行测试,可以非常快速的发现问题,而且方便调试。而且通过编写单元测试来发现代码结构的不合理性,通常来说代码结构越合理,单元测试写的越方便。假设有这个场景,我们的项目启动需要30s,共有A、B、C、D这四个service,A...

2018-09-23 11:05:40

SpringCloud2.0.1--Ribbon 重试监听

在SpringCloud中,通常使用的是客服端发现作为负载均衡。SpringCloud全家桶中提供了Ribbon作为客户端负载的优秀框架。 服务器之间的调用直接使用Feign进行调用。Feign默认使用了Ribbon作为负载的实现。 通常来说,进行服务拆分后,每个服务之间都需要支持幂等性,因为可能由于网络的原因,一个接口可能会被重试多次,如果没有做好幂等性控制的话,容易出现数据重复等异常情况。...

2018-08-19 16:06:40

Eureka 优雅下线,上线

项目中使用SpringCloud时,Eureka作为注册中心基本是标配了,作为AP的一个实现策略,基本能够满足项目的需要。在微服务的世界中,每个模块发布是常有的事,那么如何安全地发布呢?直接关闭服务这种方式简单粗暴,直接造成的影响就是部分模块调用时出错,如果有多台服务器的话,一台一台地重启还是可以的,前提是调用端得有自己的重试策略,比如使用Feign作为客户端调用接口的话可以配置rib...

2018-08-04 14:58:17

一次线上JVM调优实践,FullGC40次/天到10天一次的优化过程

对于JVM垃圾回收,之前一直都是处于理论阶段,就知道新生代,老年代的晋升关系,这些知识仅够应付面试使用的。前一段时间,线上服务器的FullGC非常频繁,平均一天40多次,而且隔几天就有服务器自动重启了,这表明的服务器的状态已经非常不正常了,得到这么好的机会,当然要主动请求进行调优了。未调优前的服务器GC数据,FullGC非常频繁。 首先服务器的配置非常一般(2核4G),总共4台服务器集群。每...

2018-07-15 22:28:35

查看更多

勋章 我的勋章
  • 阅读者勋章Lv1
    阅读者勋章Lv1
    授予在CSDN APP累计阅读博文达到3天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。