获得徽章 0
日记记录


1、当对不同模块包采用不同配置时,需要注意覆盖问题,避免重复打印日记。

2、异步记录日记时,我们要避免产生内存溢出和日记丢失。所以要注意异步队列是有界还是无界的,假如是前者,队列空间用完后,服务会阻塞等待还是直接抛弃记录。
展开
评论
RPC定时处理

处理请求超时任务、启动超时、心跳探测都可以利用时间轮机制完成。时间轮模拟生活中的时钟,它只会轮循第一层时间槽的任务,当遍历完成后才将更高层的任务重新分布到第一层,然后重新遍历。这样遍历时就不会额外遍历其他暂时不会执行到的槽,避免浪费CPU能力。
评论
RPC定时处理

处理请求超时任务、启动超时、心跳探测都可以利用时间轮机制完成。时间轮模拟生活中的时钟,它只会轮循第一层时间槽的任务,当遍历完成后才将更高层的任务重新分布到第一层,然后重新遍历。这样遍历时就不会额外遍历其他暂时不会执行到的槽,避免浪费CPU能力。
评论
RPC安全体系

RPC通信一般为内网服务间通信,所以它的安全问题可以简化为认证授权问题、伪造注册问题。针对前者,我们可以通过授权平台管理调用方列表,申请调用权限通过后生成与其标识相对应的令牌。调用方每次调用时都需要携带这些认证参数,提供方进行Hash校验,通过才放行。而针对伪造注册隐患的解决方案是不允许多个应用同时注册服务。
展开
评论
集合类操作

1、需要注意构造或者切割时得到的只是原始视图,共享存储了原始对象,而不是新的对象,如果再基于视图进行增删改查很容易出现异常。比如Arrays.asList方法,再比如List的subList方法。

2、根据场景选择合适的数据结构,但是需要注意时间复杂度和空间复杂度。比如能使用HashMap进行搜索就不要使用List进行搜索,再比如LinkedList的插入效率就不如List的。
展开
评论
分库分表的目的是减少单表数据存储量,唯一的做法是使用主键进行分片,从而减少数据倾斜,避免热点问题。其他使用范围或者非主键进行分片都是耍流氓,拿起石头砸自己的脚。
1
RPC异步调用

客户调调用服务端后直接返回的不再是结果,而是CompletableFuture对象。当客户端收到服务端发送过来的响应之后,RPC框架自动地调用先前的CompletableFuture对象的complete方法,也就是将返回值注入到异步模型中,从而完成异步通知。
展开
评论
使用读写分离的架构下,主库更新完立即去从库读取数据,有时候会被同步延迟影响到,正常做法是避免立即去读。比如订单支付后跳到一个轻量级的支付成功页,而不是订单列表页。
评论
欢迎关注我
松华说于2020-03-26 22:30发布的图片
评论
任何一个存储系统,无论存储的是什么数据,用的什么样的数据结构,都可以抽象成一个状态机,因此我们可以基于它的快照进行备份、恢复、复制。
4
路由分组

稳定性保障中很重要的一点就是自适应保护,比如通过隔离失败保证提供给核心服务的接口可用,更具体的落地方案有路由分组,不同级别的系统调用不同的分组,从而达到隔离的目的。不过对于服务使用者来说,可调用的列表减少了,这种情况下RPC框架最好提供主、备分组的逻辑,当主分组全部不可用后,再使用备分组。
展开
评论
策略模式

通过查表法动态获取对应的策略,而不是通过冗长的if-else条件判断。很显然,这种模式解藕了策略的定义、创建、使用,有效控制了代码的复杂度,让每个部分都不至于过于复杂、代码量过多。
评论
CAP三角型理论

在不能容忍分区P异常时,数据强一致性C和服务总是可用A之间只能有一个,也就是要么是CP要么就是AP。比如说读取数据时发生了网络超时或者请求阻塞,无法及时响应,此时要保证服务的可用性,只能返回不是最新的数据。当然CA组合也是有的,比如单机版本的数据库系统。
展开
评论
事务

1、不使用特殊配置或者动态织入时,在私有方法中使用事务注解不会生效,因为JDK动态代理默认通过继承增强,私有方法对其不可见。

2、使用this自调用事务方法是不会生效的。正确做法是注入self,再通过它调用。

3、默认情况下,出现非受检异常或者Error错误时,才会触发Spring事务回滚。

4、我们可以设置事务传播策略,保证子流程出现异常只有它自身回滚,而不会影响主流程。

5、不要在入口处依次调用不同的事务方法。
展开
评论
优雅启动

优雅启动是指不要让应用刚启动成功就接收正常的流量请求,此时应用可能还未完全准备好,容易造成请求超时。常见的做法有启动预热和延迟暴露。启动预热的意思就是让路由策略根据实例注册时间动态调整权重,刚启动的应用缓慢放大流量接收的占比。而延迟暴露则是应用启动完成后通过Hook机制执行预热逻辑后再执行注册上报。
展开
评论
回调方法

回调是指将包含执行方法的类对象传递给另外一个通用类,由它来触发执行方法。这样可以复用通用类的功能,比如创建连接、关闭资源等。可以看出,同步回调类似模板方法,区别是回调是基于组合方式实现的。异步回调则类似于观察者模式。

应用示例:ShutdownHook优雅关闭、JdbcTemplate类。
展开
评论
HTTP请求中的超时、重试

1、连接和读取数据超时时间不宜设置过长,正常1~3秒左右即可。

2、要利用好框架内置的重试逻辑,同时也要注意隐含的重试配置。比如:接口不支持幂等性POST请求,但是Spring Cloud Feign框架在异常时自动地进行了重试。
展开
评论
Java业务开发易错点
松华说于2020-03-14 18:49发布的图片
评论
下一页
个人成就
优秀创作者
文章被点赞 1,169
文章被阅读 240,760
掘力值 7,707
收藏集
0
关注标签
4
加入于