10 2017 档案
摘要:在微服务架构流行的今天,一次交易需要跨越多个服务和数据库来实现,而分布式事务是我们必须要面对的难点之一。面试时我也喜欢问候选人对分布式事务的理解及解决方案,有些候选人一上来就大谈特谈MQ,甚至连哪个MQ性能更好都谈到了。我说,除了MQ呢,候选人就回答不上来了。 分布式事务的产生 以下单扣钱扣库存为倒
阅读全文
摘要:高可用是互联网应用一直在追求的指标之一(高性能、易伸缩,易扩展是另外三个),追求100%的高可用是不现实的,通常一个系统能达到99.99%的高可以就可以认为非常不错了。高可用的实现理论基础在于冗余,而对于数据库,Redis这些有状态的中间件,要实现高可用除了冗余外还需要一个核心的功能:复制。下图是一
阅读全文
摘要:背景: 交易系统账户服务,存在着A与B之间互相转账的需求,如一笔转账交易 (A+100元,B 100元),A和B其中一方可以为普通用户,也可以为商户,两种角色都可以加款,可以扣款,余额不允许扣成负数。 方案1: 每次按账户ID更新余额表。 为了防止对某账户余额的并发更新,可以采用悲观锁机制,如: 锁
阅读全文
摘要:多数业务系统都自带用户登陆模块,而其中最常见的登陆方式为用户名+密码,常见的安全性考虑浅析如下 1、当用户输入不存在的用户名时,提示“用户名不存在”更友好? 容易让攻击者尝试出存在的用户名,具有安全隐患。请统一提示:用户名或密码错误 2、当发现某恶意请求后,限IP? 某广告:每日代理IP量可达100
阅读全文
摘要:背景:面试时我喜欢问候选人的一个问题是:是否有性能优化的经历与案例可以分享。大多数候选人一上来就说sql优化,甚至直接谈起如何建索引。诚然多数的性能问题是由于不合适的sql/索引引起,但是代码级别的优化,就真的没有可挖之处了吗? 本文笔者将根据实际项目中碰到的部分案例浅析代码优化那点事 1、Map实
阅读全文
摘要:几乎所有的业务系统,都存在生成惟一ID的需求,例如: 用户ID:user_id 订单ID: order_id 消息ID: msg_id 常见的ID生成有三大类方法: 一、中间件实现 1、利用Mysql的auto_increment,Oracle的Sequence实现 优点:简单,递增 缺点:伸缩性、
阅读全文
摘要:背景:某项目结算程序,业务系统每日生成当天全量交易数据并上传至FTP,该结算程序从FTP中获取文件后解析交易数据,执行余额变更操作及登记资金流水。 第一轮压测结果:TPS=3 分析源码后发现,开发童鞋是串行单笔处理的,简化后的核心代码如下: 第一轮改进方法: 1、改串行单笔处理为串行多笔处理 2、余
阅读全文