- 博客(16)
- 资源 (12)
- 收藏
- 关注
原创 交易系统模块划分,模块拆分,设计,重构实战.状态
随着代码越来越多,引发了很多问题.企业架构分为事业部,其中又分为产品,开发,ui 。这是两种划分 垂直切分和水平切分说到我们技术系统,水平切分和垂直切分是什么?最小划分到什么层级?答案: 最小的流程力度.可能会有进一步拆分出底层支持模块.比如帐户,比如券.关于需求评审和设计拆分步骤: 如何识别模块. 生命周期法.......
2016-04-29 00:16:12 12857
原创 codis (分布式 hash 原理)二级分类 二级索引
原来redis分布式的问题是key是业务端决定的,无限大.问题: 做不到动态配置一个 key 对应到redis上.怎么实现呢?答案: 很巧妙的利用了二级分类和二级引用(二级索引) . 将变化的东西转变成不变的.将所有的key 通过hash变成 1024(可配,初始化,不可变)个slot .这样就可以配置某个slot具体对应到redis实例上.有效避免了数据出错之后的问题.
2016-04-27 18:01:42 1608
原创 rocketmq cluster下concurrently重试机制实现
总体来说比较迂回,比较巧妙地利用了原顺序存储机制和delay队列机制.重试消息的存储:1.原topic消费2.消费失败,发回到broker3.broker 替换为retry,4. 进一步改成delay_topic 和对应的queue中 ,放入到commitlog后分发.重试消息的消费:5. 有broker本地delay消息的模拟消费者消费,并将其放入到retryTo
2016-04-27 00:05:16 3302
原创 rocketmq 的cluster模式下确保消息不丢失之消费进度维护
DefaultMQPushConsumerImpl.pullMessage(PullRequest) (com.alibaba.rocketmq.client.impl.consumer){long commitOffsetValue = 0L; if (MessageModel.CLUSTERING == this.defaultMQPushConsumer.getMessa
2016-04-26 23:32:37 10826 1
转载 Java序列化与ProtocalBuffer序列化之深入分析(转)
最近想把java里执行数据和树全部记录下来,进行回放. 需要动态地通过反射将对象序列化和反序列化. 遇到 execute(List params) ;可能就无法通过反射 依赖json反序列化回来,只能将具有自描述的java序列化回来.rcp框架的接口List以前保存过一篇文章.Java序列化与ProtocalBuffer序列化之深入分析(转)(2013-07-31 20
2016-04-22 23:48:07 1582
原创 支付系统各接口总结
分为:接口: 同步调用, 重试调用(框架自动重试),自己定时任务自动重试,主动查询,主动查询后自动重试,异步回调,对账,网关层处理对后续逻辑.定时关闭正常支付: 1. 正常获取支付签名. 2. 重试调用(框架自动重试): 支付宝普通支付不交互,支付宝app支付交互可重试,微信支付交互,可重试,返回新的可用的预支付
2016-04-22 16:51:58 2132
原创 rocketmq的存储数据结构
存储结构: commit log最简单原始的偏移量存储机制,先存存再得到offset(偏移量), index log索引文件使用的是hash存储机制, key通过 (topic+key)%槽位数得到,value为commitlog的物理偏移量phyOffset consumer queue 也是采用最简单的偏移量数组存储机制,并且每个消息大小一致,value
2016-04-21 10:52:56 4450
原创 rocketmq 延迟队列的实现fei
流程描述:1. producer发消息,设置一个延迟level值. 2. broker 保存消息时替换了topic,和queueId(一个level计算得到一个queueId,并将实际的topic和queueId作为properties保存).3. broker有定时任务(其实是个consumer)消费延迟消息,如果到达延迟时间,将消息取出,改回原来的topic和queueId
2016-04-19 13:24:34 14715 2
原创 重构,可扩展设计可操作方案。
思考一个业务系统,物,行为都可以设计 为实体。最重要的是从人角度出发,行为流程角度:1. 流程 2.不同类型同一个流程点实现:不同类型就是不同的策略,可能输入的参数都不同。通过接口来规范。 通过filed来接受属性。避免了context类的出现每次执行时 new 对象,赋值参数,然后 execute。数据库实体关系角度: 1. 要尽量的抽象,不要把上层,
2016-04-16 14:30:44 1232
原创 如何写可维护的代码 - 万物ddd ddd primitive . 封装,对象来实现可维护代码.
1.封装. 就是越上层参数越少2.边界,考虑是否该关心变化. 边界可能需要记录流水. 行为也是实体. kpay和paygateway. 支付渠道的新增不应该改变kuaipay的重启. 对于透传的参数底层提供者要封装自己的if else. 不能拆分开. 现在支付宝h5和支付宝sdk 网关提供不同的接口,导致每次新增kuaipay都要变动.3.实体类型:...
2016-04-16 01:24:48 1109
原创 cap解释
分布式系统的CAP理论:理论首先把分布式系统中的三个特性进行了如下归纳:● 一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)● 可用性(A):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性)● 分区容忍性(P):以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据
2016-04-12 16:42:49 637
原创 定时任务调度--时间轮应用
面对问题: 时时刻刻产生订单。需要定时任务扫描。相对间隔是1 2 4 10 ,一期需求是倍数是30秒,每隔 30秒,1分钟,2分钟,5分钟去执行一次。 方案: 1. 定时任务没隔30秒跑一次,记录每个订单的执行次数。时间间隔相对值 算法简单,缺点。 优点:调度频率通过定时任务频率去控制。 缺点
2016-04-11 19:25:31 1821 2
原创 多模块的覆盖率统计
aggregate>falseaggregate>这个配置指的是报告的聚合。http://blog.the-future-group.com/2014/01/28/maven-aggregate-reports-multi-module-projects/上层模块跑单测 无法对下层模块的单测进行统计. 只统计当前模块 src生成的class的覆盖率。方法:1. 把其他模块
2016-04-08 00:48:40 1886
原创 集成测试和单元测试覆盖率合并
首先要明白一点,maven里单元测试和集成测试的java是混合在一起的,没有默认的目录。需要你自己去配置哪些时单元测试,哪些是集成测试。默认不跑,只有安装了surfire插件才跑单测,只有安装了failureSafe才跑test目录下IT结尾的类。默认能识别junit等.详见maven集成测试 http://blog.csdn.net/fei33423/article/detai......
2016-04-07 23:29:54 5313
原创 zookeeper 问题
1. client 连接 flower 和 连接 leader 时如何返回respone2. commit是同步的么3. leader先commit 还是 follower先commit
2016-04-01 17:08:10 481
基于实例研究混合电动汽车(HEV)能量流程控制策略 效率
2014-01-21
C# sharp 入门经典全英文版第五版 2010 Beginning Visual C#
2013-01-24
算法国家队论文集acm noi
2013-01-23
ahk AutoHotkey官方中文帮pdf 有目录 help 教程 查询手册
2013-01-09
文件编码,了解windows乱码复制粘贴机制meizhitu-clipboardviewer-3766643
2012-10-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人