一、京东 B2B 业务的定位

  让各类型的企业都可以在京东的 B 平台上进行采购、建立采购关系。

  京东 B2B 的用户群体主要分为 2 类:

  一类是大 B 用户、另一类是小 B 用户。京东 B 平台需要支持各类型的用户群,因此必须要有自己的业务系统做支撑,比如订单、商品、价格、用户、权限、审核等系统。

二、京东B平台的发展氛围:

  1、第一阶段(2014年):

    B2B 浪潮开始兴起,京东在2014年与联通公司达成合作,意味着京东正式迈入B2B时代的大 B 行业。

  2、第二阶段(2015-2016年):

    农村电商开始兴起,线下门店积极顺应互联网的发展趋势,将传统的零售搬到了线上;在这个阶段,京东成立新通路事业部开展此业务,从此京东正式迈入了小 B 行业。

  3、第三阶段(2017至今):

  在之前大、小 B 业务的基础上,京东的 B2B 业务在2017年得到快速发展,完美应对这个阶段产生的种种挑战,并发量、数据量均成几十倍的增长。

三、业务架构:

  1、业务层:

    主要是B平台的所有业务线

  2、服务层:

    包含订单、价格、商品、用户等 SOA 服务系统

  3、存储层:

    使用 mysq l数据库进行存储

  第二阶段开发时,这种架构面临了巨大的挑战,主要表现为:

  1、开发周期长,无法快速满足业务要求

  2、服务之间的相互影响,订单和商品在一个数据库,一个出问题,会影响别的服务

  3、系统之间耦合度大

  上述的表现反应出业务架构存在以下问题:

  1、服务问题:

    服务之间零复用性,各个业务线的服务没有抽取共享的服务,其实有80%都是相同的模式,没有抽象。

  2、系统耦合:

    系统之间的相互调用采用的 jsf 服务,全部是同步调用,调用链路很长,一个环节出问题会导致整个系统都出问题,没有核心服务和非核心服务、没有异步化服务。

  3、公用数据库问题:

    由于前期是按业务线进行划分,在一个业务线上,核心服务的数据都存储在一个数据库上面。

  真武服务问题的改进:可以进行两部拆分:

  1、第一步拆分:

    将各个业务线的服务拆分成小服务。

  2、第二步拆分:

    组合第一步抽取的服务,形成公共服务,以后所有业务线都请求这些公共服务,提高服务的复用性。

  系统耦合的问题:通过引入 jmq 消息中间件进行解决。

  消息无序的问题:采用乐观锁进行解决,主要是依靠数据的版本对比来解决。

  数据库的改进:解决方案还是进行拆分:

  1、第一步:

    将各个业务系统 SOA 服务的数据,单独存储在自己的数据库,订单有订单专门的数据库、商品有商品专门的数据库,服务之间互相不受影响。

  2、第二步:

    在第一个步拆分后,有的业务数据量单表数量还是很大,需要对表进行拆分,我们采用 jproxy(不支持分表)进行分库,按业务的相关主键 id,进行 hash(id)%count(分库数量),支持水平扩展。

四、扩展:

  1、分布算法方式:

    ID 区间算法、时间区间

  2、热点数据:

    二次 hash

  3、事务:

    弱化强一致性,采用消息的机制进行交互,实现最终一致性

  4、垮库查询:

    分布式查询

  分布式查询,采用的是 elasticSearch 搜索进行支持,简称es,消息同步才用 jmq 和 binlog。如果 es 集群有问题,采用的方式是备份集群支持服务。

五、B2B业务架构经过3次变迁与升级,总结到以下经验:

  1、稳定性原则:

    以稳定为中心,架构尽可能简单、清晰,不过度设计。

  2、抽象化:

    应用抽象,数据库抽象,服务抽象。

  3、松耦合:

    跨域调用异步化,超时时间

  4、拆分:

    稳定性与非稳定性系统分离,应用和数据的分离。

  原文链接:

  https://mp.weixin.qq.com/s?__biz=MzU1MzE2NzIzMg==&mid=2247486624&idx=1&sn=1601d21c8a77dca44936f4c7a5be4b32&chksm=fbf7bc4fcc8035591ed2382f0b4ffc3e86e39aa585dcd790baeb16504699e00fb656e4ee0c22&scene=21#wechat_redirect

《京东B2B业务架构演变》阅读笔记的更多相关文章

  1. 阅读《RobHess的SIFT源码分析:综述》笔记

    今天总算是机缘巧合的找到了照样一篇纲要性质的文章. 如是能早一些找到就好了.不过“在你认为为时已晚的时候,其实还为时未晚”倒是也能聊以自慰,不过不能经常这样迷惑自己,毕竟我需要开始跑了! 就照着这个大 ...

  2. RobHess的SIFT源码分析:imgfeatures.h和imgfeatures.c文件

    SIFT源码分析系列文章的索引在这里:RobHess的SIFT源码分析:综述 imgfeatures.h中有SIFT特征点结构struct feature的定义,除此之外还有一些特征点的导入导出以及特 ...

  3. RobHess的SIFT源码分析:综述

    最初的目的是想做全景图像拼接,一开始找了OpenCV中自带的全景拼接的样例,用的是Stitcher类,可以很方便的实现全景拼接,而且效果很好,但是不利于做深入研究. 使用OpenCV中自带的Stitc ...

  4. 阅读《RobHess的SIFT源码分析:综述》笔记2

    今天开始磕代码部分. part1: 1. sift特征提取. img1_Feat = cvCloneImage(img1);//复制图1,深拷贝,用来画特征点 img2_Feat = cvCloneI ...

  5. element-ui button组件 radio组件源码分析整理笔记(一)

    Button组件 button.vue <template> <button class="el-button" @click="handleClick ...

  6. element-ui 组件源码分析整理笔记目录

    element-ui button组件 radio组件源码分析整理笔记(一) element-ui switch组件源码分析整理笔记(二) element-ui inputNumber.Card .B ...

  7. element-ui Carousel 走马灯源码分析整理笔记(十一)

    Carousel 走马灯源码分析整理笔记,这篇写的不详细,后面有空补充 main.vue <template> <!--走马灯的最外层包裹div--> <div clas ...

  8. STL源码分析读书笔记--第二章--空间配置器(allocator)

    声明:侯捷先生的STL源码剖析第二章个人感觉讲得蛮乱的,而且跟第三章有关,建议看完第三章再看第二章,网上有人上传了一篇读书笔记,觉得这个读书笔记的内容和编排还不错,我的这篇总结基本就延续了该读书笔记的 ...

  9. element-ui MessageBox组件源码分析整理笔记(十二)

    MessageBox组件源码,有添加部分注释 main.vue <template> <transition name="msgbox-fade"> < ...

  10. element-ui switch组件源码分析整理笔记(二)

    源码如下: <template> <div class="el-switch" :class="{ 'is-disabled': switchDisab ...

随机推荐

  1. win10环境变量PATH——路径添加

    我的电脑---->属性---->环境变量---->系统变量,选择path,点击“编辑”,“新建”,然后将路径添加上去即可

  2. MySQL基础-2

    目录 配置文件的使用 表的分类--数据库引擎 简单的表的增删改查(CRUD) 创建表的完整写法 Mysql中的数据类型 数字类型 字符串类型 枚举和集合 时间和日期 配置文件的使用 大家发现每次进入m ...

  3. ajax分页和搜索

    //控制器function show(Request $request){ $page=$request->page?$request->page:1; $size=4; $pian=($ ...

  4. QTGraphics-View拖拽以及鼠标指针操作

    因为QGraphicsView继承自QWidget,它也提供了像QWidget那样的拖拽功能. 另外,为了方便,Graphics View框架也为场景以及每个item提供拖拽支持.当视图接收到拖拽事件 ...

  5. Qt Graphics-View的打印功能实现

    本文来研究一下Qt Graphics-View的打印功能实现. 在Qt的官方文档中介绍了Graphics-View的打印相关内容. Qt中对打印的支持是有一个独立的printsupport模块来完成的 ...

  6. Django之mysql数据库配置

    在settings.py中配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 数据库引擎 'NAME': 'my ...

  7. 【Mysql】Mysql root用户误删了或只剩下没有任何操作权限的用户怎么办

     一.操作步骤 1.停止mysql服务:在mysql安装目录下找到mysqld.cnf:在mysqld.cnf中找到以下片段[mysqld]:另起一行加入代码:skip-grant-tables 并保 ...

  8. Linux操作系统内核参数

    Linux操作系统内核参数 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一./proc目录 /proc目录: 内核把自己内部状态信息及统计信息,以及可配置参数通过proc伪文件系 ...

  9. Kali下安装Java环境

    <-----教你在Kali下安装Java环境-----> 1. 下载1.8u121的JAVA JDK 下载地址:http://java.sun.com/javase/downloads/i ...

  10. zabbix--CPU监控并告警

    zabbix监控CPU超值则报警 由于默认没有 cpu 的使用率监控,需要添加一个监控项,通过 system.cpu.util[,,] 来进行配置 添加监控项  添加图形 添加触发器 展示图