自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 收藏
  • 关注

原创 基于Myrocks和spider构建分布式数据库

之前通过TIDB了解到了LSM Tree,优化了数据库的写入的速度,在mariadb下,也有一个基于LSM的存储引擎Myrocks,他也支持事务,目前也是稳定版本,最近有时间学习了下。目前10.7windows版本里面是自带myrocks的,只是默认没有起来,配置my.ini后,show engines就可以看到了。为了测试真实的效果,我建了一个带主键和二级唯一索引的myrocks用户表,主键采用自增,二级索引是字符串类型,写入的字符串是36位uuid。用java程序拼好sql后,直接写入数据库。从写入

2022-02-19 20:41:44 648

原创 加密多个id的一种方式

我们有个应用在分享给用户或者展示二维码的时候,我们希望链接里面既有服务id,也有分享人的用户id,还有分享的时间,即想记录多个数值,除了我们常用的定义多个字段的方式,还有一种方式可以选择,在一个字符串中加密多个数据。我们目前对于数字类型采用的对称加密方式是Hashids,他提供了对一个数组进行加解密的方法,函数定义为public String encode(long... numbers) // 加密public long[] decode(String hash) // 解密这种方式加密的好处是只

2022-02-19 19:46:37 474

原创 im设计分享

为公司开发了即时消息服务,分享一下整个im架构如图im-broker1.负责维护客户端连接2.侦测到设备登录或离线,推送消息到rabbitMQ3.收到客户端消息后上报给rabbitMQ4.接收从im-api传过来的数据,推送给客户端im-api负责维护所有的客户端登录im-broker数据通过接收rabbitMQ消息来接收客户端的请求,处理请求并回复给im-broker扩展性分析im-broker采用目前最流行的nio架构,只处理消息流的上传和下推,不处理具体的业务,单机处理

2022-02-19 19:43:14 1469

原创 基于tidb构建用户行为分析系统

tidb这种行式数据库确实不是存储日志用的,但是对于tidb这种新数据库,我们从引入到部署到核心系统,需要一个熟悉的过程,用户行为数据不是核心数据,就算是数据丢失,也没有什么问题,因此就从这个系统引入了tidb

2019-10-07 17:11:04 685

原创 http线程池的优化

我们原来用的httpClient一直都是com.ning.http.client.AsyncHttpClient(线程池管理类),需要的时候申请,不需要的时候释放。并发比较高的情况下,存在http链接不释放的问题,升级了版本也解决不了,我最近对它进行了一次重构,彻底解决了这个问题替换的思路就是用ThreadLocal来为每一个线程分配一个HttpClient,使用后自己释放链接,这样每个线程就...

2019-02-24 19:36:59 1770

原创 替换后端返回提示功能

产品经理不清楚我们的接口给用户返回的具体的提示信息是什么,有一些可能是程序员能看懂,但是对用户不友好的提示。产品就想看一下,如果需要修改,则修改了,用户看到的是修改后的提示。这个需求如果是对于一个新项目来说,可以将所有返回给用户的提示,单独配置到配置文件中,产品就可以直接看配置文件,修改配置文件了。但是对于一个已经运行的线上系统来说,这样改动的话,范围太大了,再有就是有一些是第三方平台返回给我...

2019-02-17 15:55:02 479

原创 redis缓存使用中遇到的问题及解决方案

我们这版迭代大幅度使用了redis来缓存数据。但是我们业务在不停迭代,这样我们就需要添加进更多需要缓存的东西,但是我们取数据的时候,每次都期望不改代码,直接取到所有需要缓存的数据。一开始我们是每次变更redis数据结构,都要运维手工删除redis里面所有的相关的key,但是这样运维很烦,后来我们想到了用版本来控制redis数据的方式来解决这个问题。具体有两种方式。1.在数据结构中添加版本号,取...

2019-01-01 10:02:13 1816

原创 对于OLTP型数据库梳理

从数据库底层来看,数据库到目前为止,有这几种数据结构1.b树,b+树,(mysql,PostgreSQL)2.lsm树(LevelDB,RocksDB,TIDB,CockroachDB)3.基于B+树和LSM树改良的树,比如Fractal树(TokuDB) 下面一一介绍每种树的典型应用B树,B+树传统的关系型数据将数据以B树的形式存储在磁盘上,它们也会在RAM上使用B树...

2018-09-17 22:01:47 4588

原创 核心业务系统重构

我们最近又对系统进行了一次大的改版,主要的改动为:1.原来的sql都是联表查询,把主要的运算交给了数据库,这版改成了全部单表查询,需要应用程序自己组织返回结果,因此在程序中大量定义vo,从数据库vo到参数vo到返回vo,这样为未来的数据任意扩展提供了可能(可以迁移到其他的nosql数据库上)2.对于redis的运用,原来偏向于把它当成临时缓存,现在偏向于把它当成加速的数据库,用到了redi...

2018-08-19 15:46:59 934

原创 支付中心重构

我们之前版本的支付中心实现了不同支付方式统一的接口,但是后面向第三方请求的时候,只设计了单一配置,即只能以同一个账户和第三方支付公司发生交易,并且支付记录的保存并不完善,不能从支付中心直接查出来支付的总量。随着公司业务的扩大,我们来自不同产品线的支付需求要求支付账号可能是多个,也可能是跨公司主体的。为了更好的服务不同项目,我对原来的支付中心进行了重构。1.支付中心采用一套统一的接口来对外提供服务,...

2018-03-21 22:06:53 519

原创 springboot在运行过程中莫名killed问题的解决

我们之前开发的系统是第一次基于springboot开发的,在测试阶段一直被一个问题困扰,就是程序莫名其妙就killed,没有打印什么堆栈内存不够的信息,用jamp -heap 命令也没有查找到内存有泄漏的问题。怀疑是内存不够,但是free -m看了一下,内存应该是足够的。只好在网上搜索,还真在Stack Overflow上面找到了一点提示,就是和系统的内存分配是有关系的,建一个swap空间就可以解

2018-01-27 15:04:23 8376

原创 规则引擎预研

我们要增加一个检查商户的输入商品介绍有没有不合规的单词的功能,淘宝也有类似的功能。这个规则是需要根据线上的用户输入不断更新的,这个逻辑放到代码里面是不合适的,需要查找一个规则引擎。之前就了解过规则引擎,从网上搜了一下drools,看了它的优缺点,我觉得最主要的缺点是,1.学习成本高,有的人光学习部署他就花了3个月,规则语言学习起来和学习一门新的语言差不多了。2.规则生成的代码没有办法单步调试。

2017-12-15 22:12:51 1333 2

原创 基于Mysql5.7实现查找附近的店铺

我们新开发了一个电商平台,需要实现附近的店铺功能,经过预研,觉得没有必要采用mongodb的地理位置查询功能,因为涉及数据同步,还有联合索引的问题。直接用MySQL5.7内置的距离计算功能就可以满足大规模计算距离的需求。计算附近的店铺时侯,一般的需求是传入用户的坐标,需要计算出附近的店铺,按照用户和店铺的距离排序返回前端。在成千上万家店铺选择附近的店铺就涉及效率的问题了。最好的方式是先找到附近...

2017-12-02 11:36:34 2954

原创 财务软件的优化

最近做了一个新的电商平台,本质上还是一个电商场景下的借条平台,其中的设计有对于之前设计的借条平台的完善,这里整理一下。1.对于原来统计系统的完善,原来的数据都是数据一旦不再更改后,直接导入历史表,这种设计对于业务系统来说,是能保证业务系统的数据最小,但是对于当天的数据统计,则是一个麻烦,需要统计历史表,统计时间比较长,客户体验比较差。这一次改为每天晚上定时任务跑,在统计完当天的数据后,再导入到

2017-11-22 09:25:05 558

原创 基于IP进行短信防护

我们最近开发了一款全新的产品,一开始短信的防护是依靠生成动态gif验证码来实现的,但是最近产品提出这个方案对用户不太友好,要求我们改成基于IP的防护,且不说这种方式对于小区或是学校这种出口只有少数IP的情景不太好限制,且说我们怎么拿到用户的真实IP就是一个问题.我们之前拿到客户的IP的X-Forwarded-For方式用户是可以造假的,具体文章参考http://www.jianshu.com/p/

2017-11-18 19:20:59 421

原创 平台被当成提现工具的处理

我们平台最近被支付公司告知,发生了好多起用户的银行卡被盗刷,需要我们平台赔付的事情。于是我们开始着手调查,一开始以为是我们系统的漏洞,排查了一遍,后来客服经过和受害人联系,发现了规律,这次被盗刷的都是从来没有注册我们平台的用户,黑客帮用户注册绑卡后,直接向借款人出借,借款人收到钱后,因为我们平台提供垫资,因此直接提现了。整个流程里,在银行绑卡这个环节中,用户是怎么能正确输入被盗刷银行的校验码的呢,

2017-11-18 18:00:50 531

原创 前端架构变更记

我一开始来公司的时候,公司只有两个刚毕业的前端,前端也仅仅是基于jquery,那个时候,我还是第一次经历这种前后端分离的组织架构。开发时间也是大大的高于预期,我很快意识到这种组织结构是弊大于利的。随后我做的企业博客项目由于前后端都是我一个人开发,项目时间和进度都和估计的差不多,用时远远低于前后端分开开发的时间。随后我需要对核心业务进行一次彻底重构,这个时候我们前端想要进步,想用先进的技术组...

2017-08-26 09:33:08 520

原创 线上调整数据

我们线上发布的版本有问题的时候,除了紧急补版本外,还需要调整脏数据。一开始的方法是在代码里面增加一套control层,service层,在这里面写要实现的逻辑,一般情况下需要调用其他的逻辑。一开始我们的网络限制没有那么严,本地可以访问线上数据库,这样做没有问题。但是随着我们数据库管理的严格,本地访问不了线上数据库了,然后就只能通过重启线上一台机器的方式来修改线上数据了,这种方式显然不行,然后我们就

2017-08-06 10:40:03 369

原创 mysql单表统计认证时间间隔小于15天的人数和次数

我们产品提出了一个需求,正常用户认证是30天认证一次,但是她想统计一下提前认证的用户数。数据库表就一个,用户认证历史表,记录了所有用户每次认证的情况。我面对这个问题的时候,首先想到的是用sql直接写,但是发现这个问题比想象的要复杂。转而想用存储过程写,但是写了一会,觉得一方面存储过程的调试不是每个工具都支持单步调试,另一方面之前的经验告诉我,没有sql 搞不定的事情。于是想挑战自己,又改为了尝

2017-06-20 11:47:34 1124

原创 支付路由设计

我们支付接了多家通道之后,支付路由就是一个绕不过去的问题了。因为许多通道都有同卡进出的要求,因此不能简单地把所有支付的流程全部抛给支付模块,业务系统只关心支付结果。因此我们的支付路由设计得比较轻。当业务系统发起支付请求的时候,需要先带着支付四要素和支付用途先查询支付模块一次,看走哪个通道比较合适,然后再按照返回的结果来调用支付统一接口来进行支付。这样,当支付必须走某一个通道的时候,可以不用查询支付

2017-05-21 11:44:17 2812

原创 定时任务优化

我们每天凌晨都要跑一个定时任务,插入逾期记录,并且重新计算用户的逾期,待还,待收等各种统计。前两天发现线上的逾期太多了,定时任务都跑到下午了。因此决定对定时任务进行优化,让他在凌晨跑完。定时任务是按照借条分期来处理的,每张借条分期插入逾期记录,更新借条分期信息,更新借条信息,更新相关用户的各种统计信息。最先想到的优化办法是采用多线程,同时跑他50个线程,同时把可能产生互相锁表的用户统计采用sq

2017-05-21 11:40:23 1677

原创 hbase记录用户访问日志

我们目前对每天的用户访问量,用户活跃度的统计仅仅是用growingIO,统计得不是很准确。因此需要自己在后台做用户访问记录,以便分析用户行为,选择hbase数据库做用户行为记录。hbase数据库里面,每个系统每天的访问日志记录在一张表上,由于hbase只能按照rowkey来快速检索数据,并且rowkey是按照字典顺序保存的,是占用内存的。因此日志表的rowkey的设计就是重点了。最终采用的方案

2016-12-30 12:21:49 6372 2

原创 jetty服务器作支付处理的问题

我们最近对账的时候发现,有一些和第三方支付公司的交易,没有被mysql数据库记录下来。查了下日志,只有请求,没有响应。想了想,应该是服务器重启的时候,第三方支付公司的请求还没有返回,原来执行的sql回滚了。原来用的weblogic服务器就没有这样的问题,因为在重启的时候,weblogic服务器会一直等待所有的请求都返回,所有的事务都处理好了,才会真正重启。但是jetty服务器告诉他重启,什么都不等

2016-12-13 16:45:13 372

原创 服务器CDN

最近我们看了一下我们微信应用在不同的地区访问速度,觉得可以提高一下,我们用的就是阿里云,看了一下阿里就支持CDN。因此我们开了阿里的CDN,直接配置用户正常访问的域名为加速后的域名。竟然发现访问的时候更慢了,每次进去我们的微信应用,都需要加载半天,看了一下,每次都需要重新加载,连正常的304(代码没有更新)都不报了。然后试了配置js的缓存,直接配置包头的相关参数,然后看http请求。发现请求的时候

2016-11-06 11:24:49 656

原创 深入理解mongodb和hbase区别

最近公司想要做数据分析,之前我们公司用的是免费的growing IO。他们分析仅限于界面跳转的转化率,不能详细地分析业务数据。我研究了一个需要埋点的产品,搞明白他们是在每个接口的调用埋点,将用户对接口的调用行为记录下来,进行分析。由于接口众多,每个接口的数据都不同。可以充分利用hbase宽表的特性,在一行中定义一个通用的字段来标示当前行的数据类型,操作人,然后定义不同的字段来记录每一种数据。在插入

2016-09-14 16:18:04 28133 2

原创 余额支付对账

我们公司是做借条托管平台的,最近的一次改版,需要支持用户线上出借和还款,并且支持用户用账户的余额出借和还款。但是线上交易存在退票的问题,就是当时明明银行提示交易成功了,但是第二天对账单显示这笔交易失败了,这时候代码就得做回滚处理,将昨天生效的借条和还款作废。用银行卡支付这种方式对账处理起来比较简单,就是直接将相关联的借条或还款作废。但是用余额支付交易后,对账就没有那么简单了。我们系统支持用当天充值

2016-09-13 12:49:15 934

原创 哈希码托管从想法到产品

之前我们公司做放贷产品的时候,都缺少一个合适的协议托管平台,用来证明我们公司对于当时签订的条款和利率,没有修改过。有人提到过比特币用的区块链协议,在网上看了一眼,这种协议貌似比较慢,主要是分布式的,需要修改多个数据库。可是从实用的角度出发,1.公司的数据要保存到多个服务器上,至少要和每一家都要谈妥,2.涉及企业核心数据外泄的风险,3.据说比较慢,4.当然没有怎么研究过这个东西,学习成本也是一个考虑

2016-06-26 14:39:49 385

原创 公司服务器被攻破后的处理

公司的两台服务器被攻击了,不停地向外发送ddos攻击,需要我马上处理。首先ssh登陆服务器,发展它响应特别慢。几乎没有办法通过ssh客户端操作服务器,登陆阿里云网页控制端,终于可以正常执行发送的命令了。首先尝试了将占用cpu比较高的那个进程杀死,但是没有用,过一会就继续会起来一个其他的进程来不停地发包。从网上搜索了一下(http://www.ipastimes.com/post/86.ht

2016-06-26 14:37:12 2476

原创 短信接口被攻击后的处理

我们公司的前端注册的时候需要接收验证码来检验用户身份,因此需要调用第三方公司的短信服务。前一段时间,短信服务商告诉我们,我们的服务被攻击了,疯狂的发送短信。不得已将被攻击的那个应用先停了(反正那个应用访问量也不大,不是我们现阶段重点项目)。这两天有时间后,处理了这个问题。面对这个问题,首先想到的就是对用户的ip进行限制,单一ip每24小时请求短信数量有一个上限,但是上线运行了一下,发现攻击

2016-05-31 13:27:21 2141 1

原创 信用中心数据库选型和实践

我们公司要建立一个个人信用中心,用来记录移动运营商,淘宝,京东,学信,征信,以及我们各个系统的数据,并将以上数据分析得出个人的信用报告。首先选择数据库,考虑到个人征信来源比较多,每个来源的信息格式比较多,如果采用mysql数据库,必然是一个庞大的表结构,因此考虑用mongodb。每个人一条数据,记录一个人的所有信用数据,16M的空间因该是足够了,由于每个人只是建一条数据,操作的时候自然是原

2016-05-26 13:56:24 684

原创 cordova试用

以前自己定制浏览器之前,就知道有cordova这个app可以用,但是访问官网的时候,发现他上面的媒体分享插件都是国外的,但是我们就想用国内的啊,因此放弃了,采用自己定制浏览器。但是前端时间做app消息推送,觉得腾讯的微信装机量比较大,他的信鸽应该不错,因此就想用信鸽来做推送。研究的时候,发现他的前端有支持cordova现成的模块。研究了一下,发现国内的微信微博都是支持的,如果采用这个平台,以后扩展功能就比较简单了。因此花时间研究了一下。

2016-05-26 08:56:58 1670

原创 安卓app单webview改为多webview加载网页

这几天用csdn的手机版,觉得用户体验不错,和我们的产品类似,也是采用webview来加载的页面,区别是它他每加载一个页面,都会启用一个新的webview来加载。        我们安卓平台只有一个webview,进入链接后返回,原来的页面还需要重新加载,因此不能回到原来进入新闻的地方。ios没有这个问题,因为ios的wkwebview自带页面缓存功能,返回刚才访问的页面,不需要重新加载。这个

2016-01-21 21:15:59 7644 1

原创 htmlunit+Jsoup实现网页抓取

公司的产品上线后,需要从工商总局的网页抓取企业的数据放到我们的数据库中。因此研究了一下java抓取网页数据。由于我们公司其他的产品就做过网页抓取,因此直接学习了。htmlunit就是一个java写的浏览器,可以模拟浏览器的各种动作,比较适合做登陆用。jsoup提供了类似jquery接口,用jsoup可以直接访问网页,按照jquery 方式解析。由于原来的产品需要登陆,因此采用的是htm

2016-01-09 19:37:43 1345 1

原创 app流量优化

app上线后,发现应用比较费流量,因此考虑对应用进行优化,减小访问的流量。首先最费流量的部分是新闻列表的获取,由于我们的新闻列表是带各种状态和权限的,如果进入新闻后退出,它的状态和权限可能就变了。因此没有在本地缓存网页数据,每次都是新下的。首先看打印日志,发现返回的数据,大量都是图片的网址,我们用的是七牛的图片服务器,所有的前缀都是一样的,因此首先将数据库保存的图片由网址修改为图片名字,前

2016-01-09 19:07:21 951

原创 webview初始化后首次访问服务器出现空白页

我们的h5+webview封装的app在安卓和ios平台上线了。ios能审核通过挺出乎我意料的,本来已经做好打算,如果第一版审核不通过,将h5打包到本地应用程序中发布。苹果能接受bs型结构大幅降低了这两个平台的开发和维护难度。上线是个好事情,但是我们程序上线后发现,进入app的时候,会偶尔出现空白页面的问题,无论是安卓还是ios平台,都有这个问题。

2016-01-08 10:30:14 1386

原创 web前端直接上传七牛云服务器探索

之前做图片上传的时候,采用的方案是在js前端压缩成一大一小两张base64图片,然后上传到我们的服务器上,转换成为jpeg格式后上传到七牛图片服务器上。之所以一开始没有采用七牛提供的js直接上传到七牛服务器,主要是考虑图片的安全,后来研究了一下,发现七牛是有自己的安全机制的。采用token对每一张图片上传授权。从减小服务器流量的角度考虑,预研了一次七牛js上传七牛服务器。

2016-01-08 10:01:48 3732

原创 IOS前端浏览器定制

公司开发的是一款H5的程序,需要加一个IOS浏览器外壳,我们需要增加的功能就是一个微信分享,其他的都是js实现的。首先,需要定制一个浏览器,看了一下ios的开发,要求浏览器用webkit,这个东西是ios8之后才支持的,ios8之前版本的使用率是8%,问了一下我们的产品经理,ios8没有问题,网上虽然有一些兼容webkit和uiwebview的组件,但是需要测试,时间紧迫,那就用这个了。从

2015-12-06 12:12:30 1076 2

原创 android前端定制浏览器开发(干货)

一开始采用的是系统自带的webview,运行起来好好的,但是在不同机器上测试的时候,发现在不同的系统上的体验不一样。于是考虑程序自己带一个浏览器的方式,这样能保证程序的体验是一致的,从网上搜索了一下,觉得intel的crosswalk评价还可以,于是就采用了这个方案。参考网上的例子,直接在原工程中把webview给替换了,但是运行起来的时候,程序直接退出了,对比了网上的例子,没有发现什么不对的

2015-11-21 10:53:44 1658

原创 mongodb数据库设计实践

我们公司要开发一款企业博客软件,采用mongodb这种存储海量数据的数据库。简单介绍一下软件的需求,方便后面讨论数据库设计,用户登录后,只能浏览别人发送的微博,只有他加入企业后,才可以代表企业发微博,同时被企业认证过的人或是企业员工可以在系统内转发微博。数据库设计的时候,只有三个角色,就是人,公司,新闻,因此一开始设计的时候,就只有user,com,news三个表,加上日志表,新闻举报表等附属

2015-11-15 16:23:50 3457

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除