接下来,我就要用生动形象的语言以及苍白无力的技术给大家描述一下京东官网的 制作。
先来个自我介绍,我是一位在京东工作了3年的java程序员。毕业于麻省理工大学计算机系。不说出来
你可能觉得我不流弊,可能不会看我的博客。接下来给大家讲讲,我是怎么写京东的。
首先要知道,我做的是什么,电商平台,电商平台会遇到的问题,访问量超级大,需要高并发,高可用的特性。
为了解决这个问题,我们采用了分布式集群开发,也就是SOA(面向服务编程)的架构模式。刚好用来解决高并发,高可用的问题。
传统项目是一个服务器多个功能,组成一个系统。分布式项目是,一个功能一个服务器,所以多个服务器,这样就可以降低单一服务器的压力。不用集群的项目是,一个服务器一个系统,这个系统挂了,整个对外提供的服务器就蹦了。而集群开发是,将所有的服务器复制多份,放在不同的地方,当一台挂了,没事呢,咱还有下一台。
那怎么做到分布式集群开发呢,在传统的项目中,多个功能是在一个服务器里,可以直接使用,而在分布式开发中,不同的服务器,就像你登录百度和阿里巴巴一样,2个完全不同的Ip地址才能让你访问到。所以就需要他们的ip地址,那我通过这个服务器跳转到另一个服务器使用它的功能怎么办呢,是不是就得需要他的IP,那当我集群了很多,每个Ip都不一样,那我是不是还得每次增加个功能,增加个服务器就要把它的Ip写到其它项目里呢,这是不是太麻烦了,太喽B了,所以,我们就想有没有一种工具能让它帮忙自动管理Ip呢,没错,肯定是有的,它就是阿里巴巴的开源项目dubbo。dubbo的作用就是管理分布式系统的。它需要一个服务器的提供者,也就是服务提供层,将它的服务提供给其它的控制层,每次当创建它的时候,就会把它的ip存储到一个地方,每次控制层调用的这个功能的时候就会访问dubbo,而dubbo就会把服务层的服务器的ip地址告诉它。这样也有个问题,我们每次都得需要一个东西存储,而且还需要找到对应的服务器的IP,这样也很麻烦,所以官方就推荐了一个中间件,zookeerper,它就会存储提供者的ip并且将它自动发送给控制层。它的配置也很简单,丢到centOS服务器里,解压zookerper在它的bin目录下开启服务即可 如./zk Tab(偷懒自动) start 开启,开启后过一会在输入./zk Tab status 如果提示modelLone就是ok了。如果不确定也可以去在tomcat里添加一个admin-dubbo的web程序,它会监视zookeeper,并且给与你可视化的视图。
分布式已经没有问题了,如果有,具体配置你可以去查,或者也可以去我的网站上下载具体文档操作。http://120.78.65.53/PlayHappy/
我现在还没传,我有空了会传,你们只用搜索关键的就可以了。
那现在解决高可用了,无非就是使用nginx的反向代理,创建一个大的nginx,最好多搞几台,主从复制
主机和备机,主机挂了,通知他们去修,然后将主机的Ip拿过来,备机代替主机工作,当主机修好后,就将接收Ip的权利归还给主机。在用多个子的nginx在去负载均衡多个tomcat服务器就能解决高可用的问题 了。
接下来说功能,京东网站采用的是B2B2C的模式,商家,平台,用户。所以我们要开发3个模块。
我肯定不会写代码,所以我就把这个需求交给我的3个项目组了,大概讲了一下业务逻辑和需求就让他们干活了,刘强东给我5个E,让我把这个写好
接下来就说说我是怎么分组分功能的。
平台项目组: 审核商家,广告管理,品牌管理,模板管理,分类管理,协商管理。
商家项目组:商家入驻,商品管理,订单管理
用户项目组: 用户注册,搜索功能,用户购物车,支付功能,个人中心
作为项目经理兼架构师,我规定了使用如下框架开发
AngularJs,SpringMvc,Spring,SpringBoot,SpringSecutity,Mybatis
而具体流程又分为
html+AngularJs(controller.js,Service.js)+controller.java service.java+Mapper.java +DB(solr,mangoDB,redis,mysql)
发送短信用的是阿里大于
大数据的结果使用的是Echarst
面对登录权限,我让他们使用Cas+springSecurity。
面对海量数据文件,我让他们使用FastDFS