背景

Redis作为一款性能优异的内存数据库,在互联网公司有着多种应用场景,下面介绍下Redis在京东到家的订单列表中的使用场景。主要从以下几个方面来介绍:

  1. 订单列表在Redis中的存储结构
  2. Redis和DB数据一致性保证
  3. Redis中的分布式锁
  4. 缓存防穿透和雪崩
    阅读全文 »

背景

用户:货都到了,购物车里怎么还有刚买的东西,what?
产品:有用户反映,提单完成了,怎么没清购物车,研发赶紧看看是不是有bug啊?
研发:恩,我看看,!@#¥%……&*()一顿狂查,搜嘎,当时在上线,重启应用,异步任务丢了……
产品:能不能行,上线你就丢任务,丢不丢人啊!
研发:…………

上线!重启!你还在为丢失任务而烦恼么?看这里看这里,从此不再丢任务,JVM可以安全退出的

阅读全文 »

围棋因其巨大的计算复杂度一度被认为是极难被人工智能攻克的一个领域,AlphaGo在围棋项目上击败李世乭之后,新兴的人工智能技术又引起了广泛的关注,人工智能在经历数次低估之后,似乎又有了新的曙光,而本系列要讲述的正是AlphaGo成功的关键算法 - 深度增强学习(Deep Reinforcement Learning)

什么是增强学习(Reinforcement Learning)

imgage

在人工智能领域,通常定义一个学习到某些知识并具有了决策能力的个体为Agent,Agent会从环境(Environment)获取一些观察(Observation),从而执行某种动作(Action),最后这个动作会获的某种奖励(Reward)。强化学习就是一类可以训练Agent做出正确决策的机器学习算法。这里以训练一个Agent学习打乒乓球为例,乒乓球从Agent左前方30度位置飞来(观察),Agent做出了决策向左移动15cm挥拍(动作),结果正确击中了乒乓球(奖励),如果经历过N次这个过程,增强学习就会根据每种情形下的动作获取的奖励来进行训练,让Agent学习到如何做出正确的挥拍动作,提高成功率。

让机器学会打乒乓球的一个实例,感兴趣的朋友可以看下:http://karpathy.github.io/2016/05/31/rl/

阅读全文 »

背景

海子在《面朝大海,春暖花开》中写到:“从明天起,做一个幸福的人”,Babel在介绍自己时说到:“从今天起,做一个幸福的人,使用下一代JavaScript”。

JavaScript学名叫ECMAScript,主要版本有2000年发布的ES3,2010年发布的ES5,以及2015年发布的ES2015。其中,ES2015相对于ES5简直是翻天覆地的变化,大量新特性极好的解决了开发人员面临的问题。然而市场份额占比极高的Internet Explorer 9发布于2011年,对ECMAScript的支持只到第5版。难道为了兼容低版本浏览器用户而就此放弃?不!在新达达,我们拥抱社区,跟随潮流,始终走在技术前沿。Babel作为一个广泛使用的转码器,可以将ES2015代码转译成ES5代码,从而在现有环境中执行。有了它,使用下一代JavaScript成为可能。

如今,从手机应用到桌面网站,再到后端服务,Babel的身影无处不在。但通往幸福的路上,我们遇到不少困难。随着项目复杂度增加,文件打包体积变大,程序运行性能变差。

阅读全文 »

背景

交易系统可能不是技术难度最深的,但是业务复杂度最高的,一个订单从提交到最后真正生产成功要经历几十个系统,涉及的接口交互,MQ等可能达上百个。任何一个环节出问题都会导致这一单的异常,而且交易不像单纯的资讯门户可以靠静态化或者缓存抗住大并发,交易系统里面涉及到大量的资源(库存,优惠券,优惠码等)消费,订单生成等需要写入持久化的操作不是单纯的异步或者缓存化可以解决的,而且对库存等敏感信息不能出现并发扣减等。

细节的设计非常多,下面挑出比较典型的一些方面,给大家介绍下京东到家交易系统的架构设计和关键问题的处理方案。

阅读全文 »

写在前面

之前在新达达财务账户系统演变一文里跟大家分享了新达达的财务账户系统的前世今生以及不断往前演变的几个阶段,那段时光很值得留念,现在时间又过去了四个月,这次跟大家分享的是新达达财务账户系统是如何从繁杂的业务中抽离出来,不断内聚,最终向平台化发展。

什么是平台化?

平台化是我们的目标,那什么是平台化?
举个跟我们很近的例子,在达达公司还未成立之前,外卖商户如果中午需要配送,只能自己招几个配送员,需要计算自己配送员的工资,怕他们偷懒,要管理他们的绩效……,结果达达公司出现了,现在的商户只需要付运费,而配送员的管理全部交由达达公司,达达公司提供配送服务本质上就是将运力供给这件事情平台化,这个平台只要商户在app上下单,就可以得到优质的服务 。
总结下来,平台化本质上是将零散的需求抽象化成一个提供标准输入(eg. 下单),得到标准输出(eg. 配送服务)的聚合服务。

阅读全文 »

CMS即为内容管理系统,管理京东到家APP和H5的页面的各个资源位(图片),点击图片后的跳转页面的展示。

本文主要从技术角度来介绍系统的演变。

背景

传统CMS系统配置即所见,后台配置了资源,前端就一定展示,用户在任何地方看到的都一样。

京东到家CMS最大的特色是跟地理位置有关系,简单说就是:用户在不同地点看到的只是最近相关的资源。京东到家是以门店为维度来控制资源的展示与否:一个资源A关联多个门店,每个门店有一定的覆盖范围(可以是圆形也可以是多边形覆盖),用户所在的位置有被资源A关联的门店覆盖到,那么资源A被用户看见。如下:用户被2个门店覆盖,如果资源A有关联这两个门店的任何一个,那么用户将看到资源A。

image

阅读全文 »

最近在TesterHome上看到有人关于测试如何保证项目发布质量的提问,同时新达达北京研发团队最近也有一些关于后端代码上线后质量不可控的小烦恼,于是将我加入达达后对上线流程的优化做了以下总结,供大家参考。

上线流程演进

第一阶段 - 上线流程从无到有

作为达达研发团队的首位测试工程师,在我加入之前研发团队规模比较小(大概4个后端工程师和2个Android工程师)。当时后端代码上线的流程比较简单,从开发工程师Coding到代码最终上线一共会经过3个环境:

  1. 工程师本地开发环境
  2. DEV测试环境
  3. 生产环境

开发工程师完成代码开发,在DEV测试环境自测后会把代码Push到对应仓库的Master分支上,等晚上9点上线。

阅读全文 »

近几年O2O很火,凡是做O2O的,几乎都要面临要不要给账号绑定账户?支持哪些形式的支付?如何去结算?如何让用户提现等问题。今天跟大家聊聊新达达两年多财务账户系统的演变。

黑铁时代 - 时间的成本是最大的成本

大部分公司,在创业初期都会面临着人手不够充裕的境地,但市场的机会稍纵即逝,这就要求团队能够尽快的实现功能,不断试错。

达达第一个版本是几个小伙伴在汉庭酒店花费7天的时间做出来的,当然,达达的账户的“黑铁时代”也非常的简单。跟业务系统完全耦合,内嵌在对应的商户和配送员的账号数据表里。

Alt text

阅读全文 »

背景

2014年6月,达达配送上线,并迅速成长为国内最大的众包配送服务平台,为数十万商家提供低成本、高效率的配送服务。

2015年7月,为了更好地连接消费者和商家,达达推出了自己的外卖信息服务平台-派乐趣,实现了上游信息服务和下游配送服务的完整闭环。消费者可以通过派乐趣平台获取点餐、支付、配送、评价等一系列服务。成立以后,派乐趣经历了高速的增长,并在2015年底突破了一百万的日单量。

随着派乐趣入驻商家的快速增长,如何对附近的候选商户进行有效排序,帮助用户快速找到最适合自己的餐厅,成为派乐趣面临的一个核心问题。

商户排序问题

所有的信息平台在信息的展现过程中都会碰到排序问题。如何通过排序将更高质量的信息展现给用户,提供更好的用户体验,是信息平台必须解决的一个问题。

和传统的搜索排序和电商排序相比,外卖平台的商户排序有着特殊的需求,需要考虑的因素包括:

  • 距离因素:外卖服务和电商、搜索等线上服务的一个主要区别是受地理因素的限制和影响。比如,商家有一定的配送范围,而用户也会倾向于选择附近的商家,以获得更快的配送体验。因此,对商户的检索、筛选和排序都需要考虑距离因素。
  • 时段和品类:不同时间段用户对外卖的需求是不同的。比如中午12点和晚上6点左右用户对于正餐的需求量是最高的,而在下午3点钟左右用户对饮料、甜品类的需求可能更大一些,这就要求排序算法考虑时间和品类等相关因素。
  • 质量和评价:线下服务的一个特殊之处在于服务的很大一部分是不可见的,例如餐品的口味、送达速度、服务态度等, 在排序的时候需要将这些不可见因素量化,并体现在排序中。
阅读全文 »