小小项目

128 阅读2分钟


平时在学习技术的过程中,发现学的东西缺少实践的机会。所以一个月前,决定做一个真正投入使用的小项目,平时学习的技术应用到项目中去,加深理解。这个项目其实是优惠券项目。


这个项目在 18 年的时候做过一次,但是由于各种原因上线跑了几个月后下线了。当时采用的技术栈是 nodejs,因为后续想往 java 的方向发展,所以这次的第一个版本就是把原来的代码从 nodejs 改写成 java。

最终的成品已经做出了,但是还很磕碜,就暂时不摆出来了。最终实现的成品可以大概参考这个项目:www.soquanya.com/

整体项目的结构大概是这样子的



  • client 表示客户端,如浏览器
  • nginx 做了一层代理(主要是为了配置 https,并且配置一些路由规则),开放接口提供给外部访问
  • mall-web 服务,用于调用下层不同服务的接口,聚合数据,渲染到网页上。这个服务由 nodejs 实现
  • mall-zhetaoke 服务,对接特定的外部数据服务,比如商品查询接口、优惠券查询接口(zhetaoke-server 就表示外部的数据提供方,具体网址是 zhetaoke.com)。使用 spring boot 实现
  • crawler 服务,即爬虫服务,用于从不同的数据来源爬取数据,并入库到本地存储。使用 spring boot 实现
  • mall-product 服务,即商品服务,用于存储商品相关数据,并提供接口,是整个应用的核心。使用 spring boot 实现

整个服务的数据流转是,crawler 通过 mall-zhetaoke 服务,爬取外部数据源的数据,然后调用 mall-product 服务入库到本地存储。mall-web 调用 mall-product 和 mall-zhetaoke,获取商品数据和优惠券数据,提供网页给外部访问。

服务采用 MongoDB 作为存储。因为商品和优惠券的数据非结构化,而且前期对这块的业务不是十分熟悉,为了快速实现,并且考虑到后续大概率会频繁地追加字段,所以选择了文档型的存储。

服务部署在腾讯云(哎呀阿里云太贵了,等明年双 11 再考虑迁移)。开放 433 和 80 端口提供访问。

后续我会围绕这个项目继续开发,同时也分享其中的技术点。

2020 开头这么难,希望会有个 happy ending ♪(・ω・)ノ