文章目录
“京东可以高速发展到今天的规模的原因,其中最核心的是坚持“倒三角”战略:建立出色的团队;打造财务、物流和技术三大核心系统;降低成本、提升效率;为用户带来最佳体验。在《京东技术解密》一书中,大家会看到技术驱动的力量,这也是京东第一次全面展示自己的技术体系。” –刘强东
京东将整个倒三角形分为四个横向,最底层是“团队”,倒数第二层是“物流系统、IT系统及财务系统”,倒数第三层是“成本和效率”,最上面一层是“产品、价格和服务”。这四部分对京东的意义分别是基础、供应链、关键KPI以及用户体验。
前言
京东的崛起,就是一部草根长成大树的历史,是中国电子商务从零摸索出一条自己道路的历史。京东的每一步,都走得很实在,用户需要什么,就去解决什么。
刘强东,江苏宿迁人,1974年出生。1992年携500块钱和76个鸡蛋考入人大社会科学系,1993年开始自学计算机,便开始在中关村给人装电脑,大学毕业时,已有二十几万积蓄,在校门口花24万左右买下一个餐厅,但几个月后亏光。然后在一家日本企业待了近两年,1998年在中关村租下一个柜台卖光盘。明码标价、正品行货、售后培训,凭着这几招赢得了很多顾客青睐,于是生意不断扩张。2003年转入线上销售,从此走上开挂之路。
京东发展历程
- 1998年----京东成立
- 2001年----成为光磁产品首屈一指的代理商
- 2004年----多媒体网正式开通
- 2007年----正式更名为京东商城
- 2010年----京东商城团购频道正式上线
- 2012年----京东商城的火车票预订频道上线
- 2012年2月,京东商城酒店预订业务上线
- 2013年2月,京东完成新一轮7亿美元融资,投资方包括加拿大安大略教师退休基金和沙特亿万富翁阿尔瓦利德王子控股的王国控股集团以及公司- -些主要股东跟投
- 2013年3月30日,京东,去商城化,全面改名为京东,随后更换LOGO。2013年3月30日,启用http://JD.COM域名,并将360buy的域名切换至JD.此外,“京东商城”这一官方名称将被缩减为“京东"。
- 2013年4月23日,京东宣布注册用户正式突破1亿。
- 2013年7月30日,京东CEO刘强东表示,京东已经成立了金融集团。
- 2014年4月2日,京东集团正式进行分拆,其中包括两个子集团、- 一个子公司和一个事业部,涉及金融、拍拍及海外业务。具体的分拆方式是:京东集团下设京东商城集团、金融集团、子公司拍拍网和海外事业部,京东创始人刘强东会担任京东集团CEO。
- 2014年5月22日上午9点,京东集团在美国纳斯达克挂牌上市(股票代码: JD)。美国也迎来了中国最大的赴美IPO。
- 2014年11月,京东集团宣布大家电“京东帮服务店"在河北省赵县正式开业。
- 2015年1月9日晚间,京东(Nasdaq:JD)、 易车网(NYSE:BITA) 和腾讯(SEHK: 00700)联合宣布,三方已达成最终协议,京东和腾讯以现金和独家资源的形式对易车网投资约13亿美元。
- 2015年10月17日,腾讯集团与京东集团在京联合宜布推出全新战略合作项目-京腾计划。
- 2015年10月10日,京东集团发布公告称,因C2C (个人对消费者)模式当前监管难度较大,无法杜绝假冒伪劣商品,决定到12月31日时停止提供其C2C模式(拍拍网)的电子商务平台服务,并在三个月的过渡期后将其彻底关闭。
京东商城技术的演进
京东商城网站经历了ASP、.NET、Java三个阶段。
- 2003年,刘强东着手建设自己的网站,开发人员为曹鹏和另一个程序员,技术为ASP。因为ASP简单,上手快。把网站建起来,把商品摆起来,把订单下下来,这就是当时网站要解决的问题,至于用什么技术去实现,那是其次的。2003年,从外部购买了一套ASP在线商城软件,并在此基础上逐步开发维护,形成了第一代网站“京东多媒体网”。
- 2004~2006年,技术人员一共5人左右。2005年,刘强东力排众议,关闭了所有线下12家门店,专攻电子商务。到2007年6月,日订单量已突破3000单,从那时起,我就知道有个网站叫京东,也开始在上面买些简单的数码产品。
- 2007年8月,第一笔风投到位,刘强东可以大展拳脚了。
- 2008年,开始从ASP转向.Net。2008年夏天,Donny带着一帮人,在通州一个高档小区的一座三层别墅里,十来个人,进行了三个多月的封闭开发,完成了向.Net的升级改造。日子虽苦,但一日三餐有专门做饭的阿姨好饭好菜伺候,倒也安逸自在。唯独晚上蚊虫袭来,搅得一帘幽梦。
- 新版网站一直运行到2010年,订单量从日均几千单增长到十几万单,实现了飞跃式的发展。
- 2010年,POP平台上线
- 2012年5月,Java版交易系统上线,标志着.NET向Java架构的转移;主要原因是服务端程序已经朝Linux平台迁移的大势所趋,加上Windows和及开发工具Visual Studio的成本过高。同时,所有系统按SOA架构设计,对外提供服务,禁止系统直接读取数据库;数据库也从SQL Server换成了MySQL,缓存上由主要使用Memcached转为结合Redis共同使用。
2010年,开始搭建POP(Platform Open Plan)平台,转型Java。
京东自研技术
京东前端框架Nerv
Nerv 是一款由京东凹凸实验室打造的类 React 前端框架。目前已广泛运用在京东商城(JD.COM)核心业务及TOPLIFE全站。Nerv 基于React标准,使用 Virtual Dom 技术,拥有和 React 一致的 API 与生命周期,如果你已经对 React 使用非常熟悉,那么使用 Nerv 开发对你来说绝对是零学习成本。
与此同时,相比于 React 以及市面其他同类型框架,Nerv 更具体积轻量,性能高效的特点。并且,它符合当下国情,可以完美兼容 IE8 及以上浏览器。
官网:https://nerv.aotu.io/
文档:https://nervjs.github.io/docs/
GitHub:https://github.com/NervJS/nerv
京东后端架构
京东无线服务端架构:
京东的服务框架
售后系统使用的就是基础的三层架构。应用层有不同身份的三个端入口,服务层提供了一些业务支持和数据支持,数据层目前使用到了MySQL和Redis以及ElasticSearch。当然还有一些中间件使用,比如rpc框架,zk配置中心,worker分布式定时任务,jmq消息。还有完善的基础设施,统一监控和日志采集。
JSF雏形——ASF
JSF早期叫做ASF,当时的选择如下:
RPC框架:基于dubbo2.3.2做配置扩展,以及功能扩展包括:rest(resteasy)、webservice(cxf)、kryo/thrift序列化、调用压缩等;
注册中心:Zookeeper,RPC框架直接接入数据源;
监控中心:监控服务+HBase;
管理平台:读取Zookeeper做管理平台,提供基本的上下线、黑白名单等功能。
现在的JSF构成,目前的JSF几乎是全部自研
- RPC框架:轻量级,更佳的性能,兼容旧版本协议;
- 注册中心:基于DB作为数据源,前置Index服务;支持十倍接入量;部分逻辑放在注册中心减少客户端负担;
- 监控中心:监控Proxy服务+InfluxDB(2015后改为ElasticSearch);
- 管理端:基于DB,功能更强大,提供完善的服务治理管理功能;打通京东应用管理平台,提供应用依赖关系梳理;
- HTTP网关:基于Netty,支持跨语言调用。
目前的JSF是基于DB做的数据最终一致,也就是AP系统。注册中心主要实现的就是服务列表的注册订阅推送,服务配置的获取下发,服务状态的实时查看等功能。注册中心节点是无状态的,可水平扩展的。整个注册中心集群下的所有注册中心几点都是等价的。
JSF优化与特点:
引入Index服务概念:该服务就是一个最简单HTTP的服务,用于找注册中心节点(同机房或者压力最小或者其它特定场景),可以认为是不会挂的服务,RPC框架会优先连该服务拿注册中心地址,这样子的好处是注册中心地址变化后,RPC框架不用修改任何设置;
注册中心内存有服务列表全量缓存,连不上数据库也保证可读;
数据库的数据结构更适合各种维度展示、过滤、分析等,例如根据分组/IP/应用/机房等不同维度;
注册中心就是个JSF服务,监控到压力大即可进行动态水平扩展,不会出现2015年双十一那样的事故了;
服务列表推送逻辑改进:例如原来100个Provider,现在加1个节点,之前的SAF是需要下发101个节点,自己判断加了哪个节点,进行长链接建立;现在的改进是:修改为下发一个add事件,告知RPC框架加了1个节点,RPC框架进行长链接建立;这样做大大减少了推送的数据量;
注册中心与RPC框架可各种交互:注册中心和RPC框架是长链接,而且JSF是支持Callback的,注册中心可以调用RPC框架进行服务列表变化之外的操作;例如查看状态,查看配置,配置下发等。
分布式数据库StarDB
2021京东云峰会上,京东云正式对外发布自主设计研发的金融级国产分布式数据库 StarDB,支持海量数据高并发在线事务处理,具备无感分布式、金融级高可用、高度兼容MySQL、弹性伸缩、安全合规、智能运维管控等重要特性。
京东云
① 京东宙斯:开放接口与合作伙伴进行系统与业务对接。
② 京东云鼎:电商应用云托管平台。
③ 京东云擎:为应用开发者提供便捷的应用开发、部署和托管服务。
④ 京东云峰:为应用开发者提供便捷的移动应用客户端的开发服务。
⑤ 京东云汇:为所有参与者提供的社区互动平台。
移动端
① 虚拟试镜:与清华大学合作,结合增强现实技术和试戴活动运营。
② 虚拟试衣间:Z3D虚拟试衣系统,带你玩转京东试衣间。
Flutter在京东的实践
随着2018年底Google正式发布了Flutter预览版本,京东内部也越来越多的研发团队有用Flutter进行开发业务的诉求。京东正式启动研发并内部发布了JDFlutter引擎。在官方Flutter引擎之上,做了额外的优化和功能扩展:
- Flutter工程改造: 对Flutter开发环境和dart代码管理进行优化,可以无缝集成到现有APP中并支持自动化dart编译打包,便于开发和调试。
路由及多页面管理: 对原生页面和flutter页面实现了集中路由管理,可以双向传参、跳转并且进行了共享内存优化。 - 扩展UI组件库: 官方支持的Material和Cupertino样式不能满足需求,京东在内部实现了自定义样式的组件库。
- 原生能力扩展: 对官方原生能力进行了扩展,封装了包括网络、登陆、埋点等等基础能力的打通并提供了50+原生扩展API。
- Android端动态化支持: 在Android端实现了动态化支持,可以线上热更新业务。iOS端暂不支持动态化。
目前京东商城、京东视频、京东到家、京东物流、7Fresh等APP都有业务采用JDFlutter进行开发。
大数据
① 实时数据采集
"长江"项目:将异构数据源实时同步到实时数据仓库;
"南水北调"项目:将数据同步到离线数据仓库;
② 流式数据采集
"汉江"项目:基于Storm提供实时计算API;
③ 实时查询服务
"三峡"项目:基于Spark和PrestoDB解决海量数据下的即时查询;
④ 实时数据挖掘
"东海"项目:将数据挖掘实时化服务线上的推荐和搜索;
咚咚架构
咚咚之于京东相当于旺旺之于淘宝,它们都是服务于买家和卖家的沟通。1.0 版本的技术架构实现是非常直接且简单粗暴的:
2012开始升级:
2013:
更细化的应用服务和架构分层方式:
ShardingSphere
Sharding-JDBC 的 ShardingSphere 主要由张亮个人主导,是一款基于 Java JDBC 接口实现的数据库分库分表管理框架。
2018 年 11 月,伴随着 ShardingSphere 正式进入 Apache 孵化,随后又于 17 个月之后正式毕业成为 Apache 顶级项目,在先后完成了社区组建,同时遵循 Apache 的规则将 ShardingSphere 所有权从公司与个人转向社区所有之后,ShardingSphere 基本完成了第二阶段的转变。
京东人物谱
京东技术牛人众多,以下只列举几个代表性的:
(1)邓正平
组建了京东移动团队、主导了京东智能化业务技术研发、现在为京东智能化物联网业务开疆拓土。既有一线的软件开发和系统架构设计经验,又有多年的团队管理以及业务成功开拓经验,让他有常人所不能及的战略眼光和高度,更有敢为人先、不断创新的开拓精神。
(2)杨思勇
首先带领团队向Java方向转移、奠定了京东的Java平台基础、编码规划、MVC框架,积极适应环境,拥抱变化,不断学习,保持乐观的精神去战斗。而且,重点是:研发的MM们都很喜欢这个怪蜀黍。
(3)赵刚
长期研究图形图像与智能技术,拥有多项技术专利与软件著作权,在京东期间开发了世界先进的Z3D虚拟试衣技术,较好地解决了长期困扰服装电商界的用户个性化试衣、低成本仿真、多层次服装搭配等难题。它特别喜欢钻研技术,16年来一直坚持在一线开发,典型的技术男。
(4)李东
主导开发京东物流核心系统-青龙系统,生活中爱家、爱NBA、爱写代码的好男人。他坚信:架构工作是一个不断重构自己思想和追求用户极致体验的过程。
(5)刘海锋
带领团队自主研发了分布式文件系统JFS(Jingdong FileSystem)与分布式缓存与高速键值存储服务JimDB,使得京东云技术产生了质的飞跃。他坚信拥抱变化,迎接挑战,相信技术的力量,是京东云搭建骨头的人。