SpringCloud初探

大四了,即将面临毕业了,毕设也就如期而至,本科论文当然是比较水的啦~选择了一个自己比较喜欢的微服务化项目开始着手了。下面就大体说一下我是如何对一个单体服务进行拆分的

首先放上原项目的地址
https://github.com/stalary/personfilter

单体架构介绍

可以看出当时做的时候用了不少中间件,LightMQ呢是为了替代kafka自己写了一套较为简单的消息队列(弱鸡学生机根本带不动zk+kafka啊),MapDB则是一款嵌入式数据库,而WebSocket则是为了做服务端推送(推送消息),大体就是提供了一个招聘系统的基本功能,下面我就介绍一下我是如何拆分的吧。

首先,要对各种中间件进行选型。

  • 注册中心:注册中心并没有选择常用的Eureka或者Consul,而是选择了阿里开源不久的Nacos,总体来说,Nacos还是不错的,将注册中心和配置中心集成,这样我也就不用再去使用SpringCloud-Config(需要依赖于git修改配置)

  • 流量监控:因为Hystrix已经停止开发了,所以选择了阿里开源的Sentinel,由于开源已经许久,所以没有碰上什么坑,体验还是不错的。

  • 链路追踪:选择了业界比较常规的Zipkin+Sleuth,其中遇到了一点小问题,就是和Nacos兼容不太好,Nacos地址强制不能输入http前缀,但是Sleuth又需要,引起了一些小问题,所以需要单独向Nacos注册一个当前服务器地址的服务。。。不然会一直报错哦,这里跟Nacos提了Issue,但是好像对方并没有懂我的意思。

  • 网关:网关没有使用Zuul,因为听说性能不太好(我这种小流量其实也感觉不出来),选择了SpringCloud-Gateway,用起来还是比较舒服的,把登陆校验的工作全部放在了网关中。这样就不用在每一个服务中写重复的拦截器了。

  • 服务调用:既然使用了SpringCloud那就少不了Http调用了,我选择了Feign,不得不说,封装的真的很棒,用起来很爽~

  • 部署:前一阵子刚学习了一波k8s,当然要趁热打铁,所以服务全部Docker化,部署在了k8s上。

选型完成以后呢,就要对服务进行拆分了,我是拆分成了如下几个子服务,真正使用起来后发现其实拆的还是过于散了。。互相调用过多。


项目结构

我将整个项目拆分为了以上几个部分

  • 消费者服务,基于LightMQ,用于消费简历投递,简历处理,简历接收几个消息。

  • 网关服务,这个就是SpringCloud-Gateway,做了一些登陆校验的工作。

  • 站内信服务,用于消息中心的消息发送,读取等,未来考虑加入实时会话的功能。

  • 外部服务,将短信验证码,邮件服务,上传头像的服务进行抽离。

  • push服务,用来向前端推送消息中心消息数量。

  • 招聘服务,包括公司信息和岗位信息,提供一些增删改查的操作。

  • 简历服务,用于对用户简历的增删查改,由于使用MongoDB,所以单独抽离出来进行处理。

  • 用户服务,用于用户的登陆注册等一些基础服务(直接调用之前写的UserCenter)。

项目结构图

一个单体架构的微服务化就介绍到这里啦~感兴趣的可以去github看一下源码,满意的话麻烦赏颗🌟🌟
https://github.com/stalary/microservice-recruit

推荐阅读更多精彩内容