![](https://img-blog.csdnimg.cn/20190918140158853.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
是时候重构
文章平均质量分 65
重构,代表着新的开始。
熊孩子会撒野
披风疾行/仰天欲摘星
心写镜湖/鹿饮处空鸣
展开
-
聊聊一致性哈希算法的实现
以前看过了解过一致性哈希算法的实现原理,现在真正要用代码实现时,还是有好几个细节需要确定的。假设我们的目标是:有N个节点,新建的资源要均匀分配到这些节点上。另外为了在节点少的情况下让分配更均衡,需要加上虚拟节点的概念。那大概的实现思路是:定义一个哈希算法,定义虚拟节点的副本数为K。首先计算好这N个节点的K个虚拟节点的哈希值,这N*K个哈希值从小到大排序,当新建一个资源,就需要使用相同的哈希算法计算出这个资源的哈希值H。然后根据哈希值H找到是在N*K个哈希值中排在哪个虚拟节点所在位置(即从小到大排序后原创 2020-05-13 13:09:35 · 312 阅读 · 0 评论 -
重构 - 观察者模式
在一个实现通知功能的接口中,通常用一个通知类型notifyType来区别不同的业务场景,然后用switch来划分不同的逻辑流向。String notifyType = "";switch (notifyType) { case "类型1": doType1(); // 逻辑1 break; case "类型2": doType2(...原创 2018-06-04 23:25:19 · 209 阅读 · 4 评论 -
重构 - WebSocket Session共享
最近在做消息中心模块,想要实现消息实时推送到前端页面展示,直接摒弃了前端定时轮训调用接口来获取消息数据的方式,采用了WebSocket服务端推送。流程是首先前端跟后端应用新建一个连接,并携带当前登录的用户ID,此时WebSocket会创建一个WebsocketSession来唯一绑定该连接,我们会在后端用Map建立用户ID与Session的映射关系:Map<String userI...原创 2018-07-18 15:16:30 · 6450 阅读 · 6 评论 -
重构 - 分布式ID设计方案
分布式ID的生成方案有很多种,在网上都可以搜到。在这里详细介绍一下我们目前项目所用到的实际方案。 一. ID值获取及表结构设计(1)获取ID值的接口获取唯一ID的接口方法是由我们一个基础功能微服务提供,URL如下:<IP>:<Port>/sequence/getSequence 请求参数为:String prefix(ID值的类型,一种类型对应ID值...原创 2018-08-07 18:30:37 · 479 阅读 · 0 评论 -
如何设计一张事件记录流水表(版本1)
目前新功能在试点范围内上线试用,业务关心新功能的试用情况,需要对生产数据进行统计和汇总,以便跟旧功能在流程上做一些比较分析。我们需要配合的是,跟大数据团队一起,提供几个数据基表,其中要有一张表,能够记录新功能的全生命周期。 统一抽象来说,解决的是: 谁(Who)什么时候(When)以什么身份(Role)在什么地点(Where),对什么东西(What)...原创 2018-09-07 12:05:00 · 7827 阅读 · 0 评论 -
如何设计一张事件记录流水表(版本2)
在设计完 版本1的事件记录表 后,大家就开始马不停蹄写代码去新增事件记录数据。 版本1:事件表 流水ID id 对象ID obj_id 系统编码 sys_code 网点编码 area_code 操作者工号 operator_id 源...原创 2018-09-12 11:55:43 · 3888 阅读 · 0 评论 -
《可伸缩服务架构 框架与中间件》综合(4)
=========================请看上篇================================ 第7章 RPC服务的发展历程和对比分析1. RPC采用客户端/服务端模式,请求程序就是一个客户端,服务提供程序就是一个服务端。RPC是构建在语言级之上的,是跨语言的,它在OSI七层模型中介于会话层和表示层之间。 2. RPC实现透明的远程过程调用的重点...原创 2018-10-18 18:48:08 · 268 阅读 · 0 评论 -
后台重构:基于状态机的事件机制
对于后台业务实现方式的重构,源于目前的业务场景太多太复杂,我们写代码的时候总不免落入“伪面向对象”的方式,以瀑布流的形式一直在原来的业务代码上叠新的代码,创建不同的分支。导致每提一个小需求,就要在各个地方去增加代码,而且还会遗漏,并且代码的质量难以维护。出于这样的困境,我们想将现在实现的业务场景进行高度抽象和归类,很多业务代码,无非是对数据状态的变更。比如一条数据A,在业务场景A下,只是从状态...原创 2019-05-10 11:00:39 · 1171 阅读 · 0 评论