转载:https://mp.weixin.qq.com/s/5xmmuw8O-I_Fi5bzE-_baA?tdsourcetag=s_pcqq_aiomsg

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

京东 B2B 的用户群体主要分为 2 类,一类是大 B 用户、另一类是小 B 用户。比如联通、移动公司跟京东建立的采购关系,就是 B 平台的大 B 用户;如果有一家小超市需要在京东 B 平台上进行采购,那么它就是 B 平台的小 B 用户。

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

京东 B 平台的发展分为3个阶段:

1)第一阶段(2014年)

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

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

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

3)第三阶段(2017年至今)

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

业务架构 1.0 分为 3 层:

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

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

存储层:使用 mysq l数据库进行存储

在2014年初期,为了响应业务的发展,我们需要快速上线业务系统,采取的是纵向按业务线进行划分,每一条业务线都有自己的业务层、服务层、存储层,当有新的业务线接入的时候,还是以同样的模式进行开发。

当来到第二阶段的时候,这种架构面对了极大的挑战,主要有以下几个表现:

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

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

    • 系统之间耦合度大

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

    • 服务问题

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

    • 系统耦合

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

    • 公用数据库问题

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

    3)服务问题改进

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

  • 4)测试方案

    • 配置(人工)

    • 采集数据(自动)

    • 分发请求(自动)

    • 数据对比(自动)

    • 核对(人工)

    条件:新老服务的对外接口参数不变

    5)系统耦合改进

     

    系统耦合的问题,通过引入 jmq 消息中间件进行解决。消息无序的问题,采用乐观锁进行解决,主要是依靠数据的版本对比来解决。

    6)数据库改进

  • 数据公用的问题,解决方案还是进行拆分:

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

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

    扩展:

    • 还有那些分布算法方式:ID 区间算法、时间区间

    • 热点数据:二次 hash

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

    • 垮库查询:分布式查询

     

    7)分布式搜索

  • 分布式查询,采用的是 elasticSearch 搜索进行支持,简称es。

    • 消息同步才用 jmq 和 binlog

    • 如果 es 集群有问题,采用的方式是备份集群支持服务(数据有延迟风险)

    • 业务架构2.0
    • 1)架构

    • 在1.0的基础上,做如下三点调整:

      • 服务层抽取公共服务

      • 引入基础层的工具

      • 存储层分库分表

      • 2)问题

      • 2.0系统在2017年进入第三阶段后,开始面临以下两个问题:

        • 平台化服务业务代码臃肿

        • 个性化需求的重复开发

        • 3)思考

        • 举一个例子,我们现在有「订单」、「价格」、「商品」服务,A 用户需要订单服务,B 用户需要订单、价格服务,C 用户需要订单、价格、商品服务。现在的做法是开发3套业务接口服务,底层的服务是通用的,但是业务层的代码有重复开发、业务代码臃肿的问题。

          我们该怎么做?

        • 引入配置中心

          • 对服务进行配置

          • 对页面进行配置

          • 可以自定义插件服务

          4)组件

          通过以上的思考,我们有了组件的思想,以后对外的服务都是可配置的。就像一个加工厂,对服务加工,就可以对外部业务进行使用。

        • 业务架构3.0
        • 3.0的版本主要是修改,包含服务层的抽取、业务和 SOA 分离,同时引入业务和工具组件。

            总  结  

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

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

  1. 《深入应用C++11:代码优化与工程级应用》勘误表

    <深入应用C++11:代码优化与工程级应用>勘误表,会不断更新,欢迎读者留言或发邮件(cpp11book@163.com)给我提出宝贵意见. 1.第7.3节目录final和override ...

  2. 《深入应用C++11:代码优化与工程级应用》开始发售

    我的新书<深入应用C++11:代码优化与工程级应用>已经开始在华章微店发售了,下面是链接. 京东发售链接 china-pub发售链接 亚马逊发售链接 天猫商城发售链接 适用读者:C++11 ...

  3. 阅读《深入应用C++11:代码优化与工程级应用》

    虽然一直是写C++的,但是却对C++11了解的不是太多,于是从图书馆借了本书来看 这本书分两大部分: 一.C++11的新特性讲解 二.工程级代码中C++11的应用 这样的安排很合理,第一部分把新特性讲 ...

  4. 新书《深入应用C++11:代码优化与工程级应用》出版,感谢支持

    经过一年的编写,这本书终于和大家见面了, 已经由机械工业出版社出版,希望本书能给学习C++尤其是C++11的朋友们更多的帮助. 关于C++11 在StackOverflow的最近一次世界性调查中,C+ ...

  5. 深入应用C++11:代码优化与工程级应用》勘误表

    https://www.cnblogs.com/qicosmos/p/4562174.html

  6. 【读书笔记】深入应用C++11代码优化与工业级应用 读书笔记01

    第一章 使用C++11让程序更简洁.更现代 1.1  类型推导 1.1.1  auto类型推导 1.auto关键字的新意义 不同于python等动态类型语言的运行时进行变量类型的推导,隐式类型定义的类 ...

  7. 双11大考 POLARDB分钟级弹性让企业轻松扩展

    无处不在的脉冲计算 阿里有双11,中国有春运,高考后有分数出来的那天,歌迷心中有周杰伦演唱会门票在线开售之时....有人的地方就有江湖,有人的地方也有脉冲计算,这些热点事件背后都需要大量的计算资源给予 ...

  8. 运行期以索引获取tuple元素-C++11之2

    //运行期以索引获取tuple元素-C++11之2 //需支持C++11及以上标准的编译器,VS2017 15.5.x.CodeBlocks 16.01 gcc 7.2 //参见<深入应用C++ ...

  9. 运行期以索引获取tuple元素-C++11之1

    //运行期以索引获取tuple元素-C++11之1 //需支持C++11及以上标准的编译器,VS2017 15.5.x.CodeBlocks 16.01 gcc 7.2 //参见<深入应用C++ ...

  10. C++11 std::function、std::bind和lambda表达式

    参考博客: C++可调用对象详解-https://www.cnblogs.com/Philip-Tell-Truth/p/5814213.html 一.关于std::function与std::bin ...

随机推荐

  1. Shell:setfacl缩小普通用户的权限

    简介 我们在使用jumpserver的过程中,会向主机推送普通用户,但普通用户有上传下载文件的权限,要想对这些权限进行管控就比较困难,之前考虑通过将$PATH变量下的命令的权限设置为750,设置完发现 ...

  2. 快速应用开发(RAD)平台 - 20 年的演进

    过去几年中,现代软件开发的整体环境发生了巨大的变化.对我个人来说,这种变化与宇宙的加速膨胀差不多.第二个千年刚到来时,产业的发展看起来还不是那么快,只是逐步在前进.现在技术发展的复杂度和多样性已经可以 ...

  3. 大话IDL编程之函数功能调用(envi_doit、ENVIRaster、ENVITask)

    2020年2月1日.好长时间没更新博客,还真有点不习惯.受新型冠性病毒的影响,平时街上熙熙攘攘的人流了无踪影,2020的春节竟然来的如此冷清.为响应“呆在家里就是做贡献的号召”,在家一宅就是十多天.闲 ...

  4. java代码之美(16) ---Java8 Optional

    Java8 Optional 一句话介绍Optional类:使用JDK8的Optional类来防止NullPointerException(空指针异常)问题. 一.前言 在我们开放过程中,碰到的异常中 ...

  5. 渡一教育公开课重点笔记之html

    常用的编码字符集:(charset) 1)gb2312 (国标第2312条)缺点:只能识别简体中文 2)gbk (国标扩展字符集,可识别所有亚裔字符) 3)Unicode (万国码) 4)Utf-8 ...

  6. 集智学院 “Deep X:Deep Learning with Deep Knowledge”的公开讲座---总结

    人工智能旨在了解人类智能的本质,并创造出能模仿人类智能做出反应的智能机器,目前在一些领域已经取得显著的成功,如AI玩游戏.问答系统.自动驾驶.无人机.机器人.翻译.人脸识别.语音识别等领域.深度学习的 ...

  7. ansible hosts配置

    编辑/etc/ansible/hosts 添加本机的public SSH key到目标机器的authorized_keys   #ssh-copy-id 添加本机的私钥到Ansible 运行ansib ...

  8. Android O 8.0 奥利奥

    Android O 8.0 奥利奥 1.画中画, 2.智能文本选择(Smart Text Selection), 3.notification dots, 4.自动填写(Auto-Fill)   4. ...

  9. [Redis-CentOS7]Redis发布订阅操作(七)

    发布订阅 发布:打电话 订阅:接电话 订阅频道 127.0.0.1:6379> SUBSCRIBE msg Reading messages... (press Ctrl-C to quit) ...

  10. ASP.NET Core Razor 视图预编译、动态编译

    0x01 前言 ASP.NET Core在默认发布情况下,会启动预编译将试图编译成xx.Views.dll,也许在视图中打算修改一处很细小的地方我们需要再重新编译视图进行发布.下面我将从 ASP.NE ...