京东技术栈
以下参考《亿级流量网站架构核心技术》这本书,和书的作者的公众号,另外一部分有参考公众号京东大数据、TIGCHAT中的内容。
系统分类
对于一个大型的电商,任何一个看似小的功能,都可以单独拿来做成一个大的系统。无论是从扩展性上、维护性上都是必要的。从自己目前了解的信息,系统业务主要有以下几类:
- 订单系统,核心的核心,特点有双十一时的高并发流量峰值,并且是最高级别的服务
- 支付系统,第二核心,对可靠性有非常高的要求
- 商品系统,商品信息的管理
- 评论系统,大量的文本存储
- 秒杀抢购系统,双11什么的,搞个活动的什么的
- 用户系统
上述是从业务角度进行划分,除了这里业务系统外,还有通用的辅助系统如:
- 日志系统,日志收集,检索,分析
- 监控系统,对系统的监控
系统的基建
基建这自己想的名字,包括但不限于各种中间件,各种类型数据库等,比如存储可以单独拿来做一个系统,消息通信也可以有单独维护的消息队列、RPC调用等,大概的分类如下:
对象存储
一般对于大文件与小文件会有不同的存储系统,京东有使用GlusterFS,SeaWeedFS,而且有京东自研的JFS,支持大文件小文件存储。这个领域开源技术非常多,目前的ceph功能多,性能强,非常火,但是是C++开发,互联网公司的估计不会大感兴趣。
消息队列
京东自研JMQ,其他的消息队列Kafka也有使用。(阿里的RocketMQ很厉害,与kafka比加入很多新特性,已经是apache的顶级项目)
RPC框架
有些业务对响应时间是有很高要求的,比如支付,京东自研JSF。(rpc框架更新的速度比较快有Thrift、rpcx,还有阿里的dubbo和HFS,不知道这RPC框架为啥竞争这么激烈,阿里内部都有两个,可能对于分布式来讲,这是个核心的技术,而且发展相对较晚。)
Nosql数据库
京东有使用Hbase、MongoDB,目前看Hbase与Cassandra领跑在前,相互竞争,有各自优势。
关系数据库
Mysql,没啥说的。
虚拟化
docker+k8s。
负载均衡
ngnix+luna,lvs,HAproxy都有涉及
web容器
tomcat
搜索引擎
ES,ES在这方面目前已经是遥遥领先。
一致性组件
zk,使用非常广泛。
缓存
有京东自研的JIMDB,也有使用Redis。目前Redis在分布式缓存领域,遥遥领先。
计算框架
spark
总结下,消息队列、分布式缓存、对象存储、RPC框架都有自研,JMQ、JimDB(in memory db 自己猜测)、JFS、JSF。而数据库(关系、非关系、搜索引擎)方面,不论是京东还是阿里,貌似都是直接用的开源的,不知是因为太难了还是太简单了,还是因为其他原因。