- 简历中的项目:
项目名称:网上商城
项目简介:在校期间寻找开源项目,个人练习学习,为javaWeb学习道路打下良好的基础。
项目环境:SSM/SSH+dubbo+nginx+servlet+redis+mysql
项目职责:主要研究学习分布式组件的使用,项目的搭建和虚拟机集群的搭建,同时编写后台的业务代码,实现了页面展示,用户系统,管理员系统,订单系统以及购物车等商城基本功能。
-
首先介绍一下项目业务逻辑,除了用户注册登录功能外,主要分两个模块,商品服务,订单服务。
商品服务中实现了商品列表的查询,分页等,商品信息的查询等功能,
而订单服务通过用户信息和商品信息生成订单添加到数据库中。 -
商城系统往往用户访问量比较大,所以为了提高性能,我使用dubbo来搭建我的分布式淘淘商城系统,首先我把用户登录注册,商城首页显示等零碎的功能分为一个服务,另外把商品相关功能当做一个服务,订单系统当做一个服务,三个服务,然后用tomcat占用不同的端口启动,用zookeeper完成服务的注册和发现,服务于服务之间通过RPC服务远程调用。这样单服务来提高性能
-
并且在之后为了实现高可用和高性能,对商品服务做了负载均衡,就是启动了三份相同的商品服务,然后用nginx反向代理,采用轮询模式访问商品服务。这样如果某个商品服务宕机,依然不影响服务正常运行,因为还有2个服务运行着呢,同时提升了一段时间内商品服务的并发量,毕竟有三个服务。
-
对了单点故障,如果zookeeper崩溃了,那服务也就不能使了,所以zookeeper以集群的方式存在,可以提一下CAP原则(C:强一致性。A:可用性。P:分区容错性)。
-
其实在商品首页有一个热门商品的专栏(就是一直访问的商品),在这里使用redis当做缓存,就是当请求到商品数据返回后同时也添加到了redis中,一遍下次直接从缓存中查询商品的信息,毕竟缓存是存在于内存中,直接操作内存不仅快而且承受的请求数量远远大于数据库的请求量。
- 之后的话又学过微服务,就是比较小的服务,项目中的某个功能都可以是一个服务,可以单独部署运行。
其实感觉就是为了简单实现分布式做到的把一个服务分成多个服务然后可以依赖dubbo,zookeeper等组件,完成分布式功能。
之后通过学习springcloud的组件像eureka可以实现服务注册和发现,hstrix实现服务熔断和服务降级,限流,等