- 博客(28)
- 问答 (3)
- 收藏
- 关注
原创 支付系统尚存在的缺陷
1.可靠消息存储方式由mysql改为redis后,存在数据丢失的风险。redis的主从复制为异步复制,若master已经写入了数据,但该数据还未同步到slave上,此时master发生崩溃或断电等情况,可能会丢失部分消息数据,那么若是这些消息正好在消息队列中丢失了,就会存再消息完全丢失的情况。为应对此情况,需要重新设计可靠消息子系统,至少应该为此情况提供一个补偿方案。2.现有的支付请求都是平均...
2018-09-02 23:10:24 508
原创 支付系统-1.3.4版本部署性能测试
1.3.4版本更新1.所有消息都改为异步发送,消息子系统部分方法改为异步调用2.tcc事务开始支持子事务异步调用3.添加web程序中添加了限流器,设置的流量阈值为1500次/s,以保障系统不会被高流量冲垮 1.3.4测试:测试环境介绍:service服务:10.8.59.158(gen8,12cpu),10.8.59.179(gen9,12cpu),10.8.59.17...
2018-09-02 23:10:08 962
原创 支付系统-1.3.3版本部署性能测试
1.3.3版本更新 1。修改消费队列的消费形式,修改前消费者全力消费消息,并堆积在了queue任务中,修改后将根据任务的消费能力消费消 息,来不及消费的消息将堆积在mq中 2。修改消费队列任务线程池满负荷时继续提交任务抛出拒绝任务异常导致任务整体退出的bug,现对线程池抛出拒绝异常做了 处理 3。合入了tcc相关的代码 4。完成了redis由单机到集群的迁移,现有代码...
2018-09-02 23:09:55 452
原创 支付系统项目简介与资源介绍
最近看了到了一个开源的支付系统-龙果支付,恰好公司有很多本人能调用的服务器资源,本人便打算在龙果支付的基础上构建一个能承受更大qps的支付系统。1.龙果支付简介 龙果支付是本人偶然发现的一个开源的支付系统,该支付系统已经集成了支付宝与微信作为支付渠道(但自身并没有做自己的支付产品),虽然自身并未做支付产品,但该系统基本涉及到了支付系统的重点,包括可靠消息服务、tcc事务、最大...
2018-09-02 23:09:37 2047 2
原创 支付系统-1.3.2版本部署性能测试
1.3.2版本的更新与改动:1.重新设计了数据库,将所有的id字段由原来的varchar类型的uuid改为了bigint型的数字,将account_no、point_account_no等也由varchar改为了bigint。java应用端也根据字段的改变做了调整,有redis实现全局id。2.service-user模块中为public RpUserInfo getDataByMerch...
2018-09-02 23:09:21 225
原创 支付系统-1.3.1版本部署性能测试
由于本来未打算写博客记录调试点点滴滴,所有前面的几个版本都没有做数据记录与运行时状态截图,只能大致的说下系统的改进流程。1.2中,我将tcc相关的存储由mysql迁移至redis,同时将可靠消息系统的存储也由mysql迁移至了redis,同时引入了mycat做数据库的集成管理,方便今后的数据库扩容。期间遇到了很多问题,例如随着qps的升高,account表与point表所在的数据库cpu使...
2018-09-02 23:09:04 592 1
原创 原始架构与性能——mypay1.0
可在svn地址中tag目录下寻找1.0版本,并根据接下来的部署方案,运行本系统,对本系统有一个大致的了解初识龙果支付1.0系统的运行只是为了让大家能把项目跑起来,性能不是关注的重点,因此这部分我是在家里完成的。运行的设备为i3(4cpu),8gb笔记本一台,I7(7700K),16gb台式机一台。以下为网络拓扑图:其中台式机创建了4台虚拟机(2cpu,2gb):192.168....
2018-09-02 23:08:21 407
原创 哈希表实现原理
1.hash哈希表作为一种高效的存储结构,可以大大降低查询和存储的时间,其核心理念为空间换时间,消耗一部分多余的内存来换取较高的性能,在当下电脑内存越来越大的趋势下,十分划算。哈希表又称为散列表,可以分为闭散列和开散列两种,这里只研究闭散列。2.实现原理哈希表的底层为一个长度较长的数组,通过将存放的各个元素进行一系列运算而转化为一串hash值,再通过相同的规则与数组的下标进行对应。
2016-07-14 16:22:37 2046
原创 java源码分析(15)-HashMap
public class HashMap extends AbstractMap implements Map, Cloneable, Serializable{ static final int DEFAULT_INITIAL_CAPACITY = 16;//默认容量(桶位)为16 static final int MAXIMUM_CAPACITY = 1 <<
2016-07-14 15:54:34 337
原创 Java源码分析(14)-LinkList
public class LinkedList extends AbstractSequentialList implements List, Deque, Cloneable, java.io.Serializable{ transient int size = 0; transient Node first;//LinkList由双向链表实现,由多个Node节
2016-07-08 11:06:58 325
原创 java源码分析(13)-Arraylist
public class ArrayList extends AbstractList implements List, RandomAccess, Cloneable, java.io.Serializable{ private transient Object[] elementData;//ArrayList的底层实现为数组,故其具有快速查询的特点,但是增删会比较慢
2016-07-07 14:15:32 266
原创 java源码分析(12)-ConcurrentModificationException
ConcurrentModificationException此异常在使用迭代器时经常出现,主要原因为迭代器迭代未完成之前,容器属性被更改。例如下面的一段程序:public static void main(String[] args) { ArrayList list=new ArrayList(); list.add(1); list.add(2); list.ad
2016-07-06 23:01:26 265
原创 java源码分析(11)-Long
public final class Long extends Number implements Comparable { public static final long MIN_VALUE = 0x8000000000000000L;//最大值为-2^63 public static final long MAX_VALUE = 0x7fffffffffffffffL;//最
2016-06-29 14:42:24 462
原创 java源码分析(10)- Double(1)
Double在研究double前,必须先介绍下IEEE 754算数标准,Double和Float都遵循此标准。Double遵循此标准中的64位浮点数表示方式。从左到右具体为:1.第一位为符号部,0表示正,1表示负2.2~12位为指数部,用以存放具体数值的指数3.13~64位为尾数部,其中指数部为11位,可以表示2048个数,为-1023~+1024,因为存在正负号,会导
2016-06-14 17:19:44 2323
原创 java源码分析(9)-Byte
Byte1.ByteByte为final修饰不能继承,实现了comparable接口,可用于比较,同时继承了Number类,需要实现数字类型转换的一系列方法public final class Byte extends Number implements Comparable { public static final byte MIN_VALUE = -128; public
2016-06-12 11:45:11 899
原创 java源码分析(8)-Boolean
Boolean1.Boolean类Boolean为final修饰,不能被继承,实现了java.io.Serializable接口和Comparable接口,可以序列化和进行比较,Boolean没有无参构造器。public final class Boolean implements java.io.Serializable,
2016-06-02 10:24:12 497
原创 java源码分析(7)-Throwable
Throwable1.Throwable类Throwable类实现了Serializable 接口,此类可用于序列化public class Throwable implements Serializable { private transient Object backtrace; private String detailMessage;//用于存放异常
2016-06-01 17:28:57 1445
原创 java源码分析(6)-StringBuffer
StringBuffer1.StringBuffer类StringBuffer类由final修饰,故不能被继承,同时StringBuffer继承了AbstractStringBuilder,大量调用了AbstractStringBuilder中的方法,同时实现了java.io.Serializable接口,自定义了序列化方法,实现了CharSequence接口public fi
2016-06-01 11:21:56 317
原创 java源码分析(5)-StringBuilder
StringBuilder1.StringBuilder类StringBuilder类由final修饰,不能被继承,并且继承了AbstractStringBuilder类,并完成了toString方法,同时使用了AbstractStringBuilder类中大量的方法。public final class StringBuilder extends AbstractSt
2016-06-01 10:07:44 508
原创 java源码分析(4)-AbstractStringBuilder
AbstractStringBuilder1.AbstractStringBuilder为抽象类,主要的属性有两个,一个为value,一个为count,value用于存放值,count用于管理该类的容量char value[];int count;public int length() {//length方法返回的是count的值,而不是value.length retu
2016-05-31 17:13:18 329
原创 java源码分析(3)-String(2)
1.substringsubstring方法用于对字符串的截取,在数据的传递过程中使用的十分普遍,但消耗的性能较大,建议能不用尽量不用。public String substring(int beginIndex) {//String截取方法,传入截取开始的下标 if (beginIndex < 0) { throw new StringIndexOut
2016-05-26 11:48:09 281
原创 java源码分析(2)-String(1)
String源码分析:1.String类不可被继承public final class String implements java.io.Serializable, Comparable, CharSequence{}由String的类源码可知,String由final修饰,故String不能被继承2.String的值不可更改 private final char value[]
2016-04-26 14:00:40 323
原创 java源码分析(1)-Integer
Integer源码分析:1.Integer的取值范围 Integer中定义的范围为 MIN_VALUE = 0x80000000,MAX_VALUE = 0x7fffffff,大约为-21亿~ +21亿。2.toString方法 Integer的toString方法有3个, 1.toString() 该方
2016-04-24 20:39:28 427
原创 spring学习笔记(5)-springmvc
springmvc是spring自带的一个架构,目前的项目中使用的也非常多,本文将介绍其大致分析其架构。springmvc的几个重要组件: 1.DispatcherServlet(前端控制器):整个架构的调配中心,例如,接收和返回前台的请求,调用下面几个组件,并接收其返回的数据。 2.HandlerMapping(处理器映射器):最主要的功能为根据url找寻与之相对应的ha
2016-04-17 21:38:21 288
原创 spring学习笔记(4)-spring事务管理
对事务的理解:事务是指修改数据库数据时,需要满足所有的操作要满足一致性,要么全都操作,要么全都不操作。例如,当我买一个商品时,大致的步骤如下:1.数据库中商品的数量减一2.我的账户余额减去商品的价格当执行到第二步时,若发现我的余额不够支付该商品,本次购买便失败,系统应该恢复原来的商品数量(即需要回滚),这便是一个典型的事务,库存减一和账户消费必须一致,要么一起执行成功,要么都不执行。
2016-04-10 22:02:58 2012
原创 spring学习笔记(3)-aspectj的五种通知方法
aspectj的五种通知方法1.@Before前置通知,在方法执行之前执行2.@After后置通知,在方法执行之后执行3.@AfterReturning返回通知,在方法返回结果之后返回,可以访问方法的返回值,进行操作,例如写日志4.@AfterThrowing异常通知,关联的方法若抛出异常,可以访问该异常,并进行操作5.@Around环绕通知,围绕着方法进行执行,上述四种的功能
2016-04-04 22:50:52 2034 1
原创 Spring学习笔记(2)-Spring中bean的生命周期
Spring中bean的生命周期 本文添加了一个实现org.springframework.beans.factory.config.BeanPostProcessor接口的bean,此bean并非为某个bean而建,它将影响所有bean的创建。本文中的该bean配置如下:public class Part2Test implements BeanPostProcessor{ @Ove
2016-04-01 21:45:16 281
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人