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