《京东B2B业务架构演变》阅读笔记
一、京东 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、拆分:
稳定性与非稳定性系统分离,应用和数据的分离。
原文链接:
《京东B2B业务架构演变》阅读笔记的更多相关文章
- 阅读《RobHess的SIFT源码分析:综述》笔记
今天总算是机缘巧合的找到了照样一篇纲要性质的文章. 如是能早一些找到就好了.不过“在你认为为时已晚的时候,其实还为时未晚”倒是也能聊以自慰,不过不能经常这样迷惑自己,毕竟我需要开始跑了! 就照着这个大 ...
- RobHess的SIFT源码分析:imgfeatures.h和imgfeatures.c文件
SIFT源码分析系列文章的索引在这里:RobHess的SIFT源码分析:综述 imgfeatures.h中有SIFT特征点结构struct feature的定义,除此之外还有一些特征点的导入导出以及特 ...
- RobHess的SIFT源码分析:综述
最初的目的是想做全景图像拼接,一开始找了OpenCV中自带的全景拼接的样例,用的是Stitcher类,可以很方便的实现全景拼接,而且效果很好,但是不利于做深入研究. 使用OpenCV中自带的Stitc ...
- 阅读《RobHess的SIFT源码分析:综述》笔记2
今天开始磕代码部分. part1: 1. sift特征提取. img1_Feat = cvCloneImage(img1);//复制图1,深拷贝,用来画特征点 img2_Feat = cvCloneI ...
- element-ui button组件 radio组件源码分析整理笔记(一)
Button组件 button.vue <template> <button class="el-button" @click="handleClick ...
- element-ui 组件源码分析整理笔记目录
element-ui button组件 radio组件源码分析整理笔记(一) element-ui switch组件源码分析整理笔记(二) element-ui inputNumber.Card .B ...
- element-ui Carousel 走马灯源码分析整理笔记(十一)
Carousel 走马灯源码分析整理笔记,这篇写的不详细,后面有空补充 main.vue <template> <!--走马灯的最外层包裹div--> <div clas ...
- STL源码分析读书笔记--第二章--空间配置器(allocator)
声明:侯捷先生的STL源码剖析第二章个人感觉讲得蛮乱的,而且跟第三章有关,建议看完第三章再看第二章,网上有人上传了一篇读书笔记,觉得这个读书笔记的内容和编排还不错,我的这篇总结基本就延续了该读书笔记的 ...
- element-ui MessageBox组件源码分析整理笔记(十二)
MessageBox组件源码,有添加部分注释 main.vue <template> <transition name="msgbox-fade"> < ...
- element-ui switch组件源码分析整理笔记(二)
源码如下: <template> <div class="el-switch" :class="{ 'is-disabled': switchDisab ...
随机推荐
- 2019 边锋游戏java面试笔试题 (含面试题解析)
本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.边锋游戏等公司offer,岗位是Java后端开发,因为发展原因最终选择去了边锋游戏,入职一年时间了,也成为了面 ...
- npm安装时-S -D作用及区别
-S 即--save(保存) 包名会被注册在package.json的dependencies里面,在生产环境下这个包的依赖依然存在 -D 即--dev(生产) 包名会被注册在package.json ...
- js实现数组去重(方式大汇总)
方法一:循环判断当前元素与其后面所有元素对比是否相等,如果相等删除:(执行速度慢) var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5]; function remove ...
- css3中的calc的使用
最近在布局的时候遇到一个问题,在页面中的左侧是侧边栏,右边是内容区域,内容区域中有一个固定定位的标签页,在设置固定定位的标签设置宽度的时候应该是内容区域的宽度,而固定定位的时候相对于是窗口的宽度,所以 ...
- Process.Start可能无法选中指定文件的问题
简单的说是由于给定的文件路径中含有多余的斜杠(\),比如C:\a\b\\c.txt,在.NET类(比如File,FileInfo,Directory)中使用没有问题,但是如果使用Process.Sta ...
- nginx.conf配置项
环境:centos7 nginx1.16.1 以下配置均在配置文件中进行:/etc/nginx/nginx.conf 1.设置工作进程的所有者和所属组 user 所有者 所属组: 设置后要在操作 ...
- MTU是什么?
MTU是Maximum Transmission Unit的缩写. 意思是网络上传送的最大数据包. MTU的单位是字节. 大部分网络设备的MTU都是1500.如果本机的MTU比网关的MTU大,大的数据 ...
- 源码查看Thread.interrupted()和Thread.currentThread().isInterrupted()区别
JAVA线程状态.线程START方法源码.多线程.JAVA线程池.如何停止一个线程等多线程问题 这两个方法有点容易记混,这里就记录一下源码. Thread.interrupted()和Thread.c ...
- Show which git tag you are on?
git查看当前代码是在那个tag? reference: https://stackoverflow.com/questions/3404936/show-which-git-tag-you-are- ...
- python中的特殊注释#todo与#type
0904自我总结 python中的特殊注释 一.#TODO 这个注释用来快熟找到内容 #todo这里的todo不用区分大小写 写法标记的位置,#todo 备注内容 二.#type a = 1 #typ ...