基于Vue+SpringCloud博客的设计与实现---分享本科毕业设计

1.简介

博主本人是一个应届生,考研划水俩月退出来了,梦想是成为一名架构师(虚),在校大二时候看了Java后,从此爱上了Java,Sorry,C++,Java真的比你简单。
我在校买了很多书籍,我想分享自己大学Java四年学习所得,毕业设计包含我对Java的所学所得。虽然我认为我自己也比较菜,但是可以帮助一些想入门但不想自闭的人,哎,突然我好怀念我在图书馆三楼饮水机厕所旁的日子,QAQ。
关于我的毕业设计的前端设计都是模仿某云,某贴吧,CSND,某站,某Q,看两张我的博客发表文章的图片,没错,我整个博客中心所有页面都是按照CSDN的结构写的,不许笑,哈哈。基于Vue+SpringCloud博客的设计与实现---分享本科毕业设计_第1张图片
基于Vue+SpringCloud博客的设计与实现---分享本科毕业设计_第2张图片

2.博客的功能

人穷一个Mysql库,我的论文写了微服务又写分布式,但是一个库就跟单体应用没区别,哈哈,有点扯,但是module可以拆分的,关于博客的功能都有这些:

  • 1.用户的个人中心:用户的登录与注册的Token拦截,前后端都要拦截器拦截Token,当然也可以基于后端路由Zuul拦截Token,不过当初写的急又笨,最后才摸索会的我也懒得改了,免费的拼图,阿里云智能验证(Vue需要动态加载JS),Token在此感谢CSDN一位老哥给了我思路,虽然他的代码已被我改的面目全非,哈哈。
  • 2.用户安全中心:QQ邮箱注册邮箱(穷),阿里云短信API注册手机以及其他个人安全信息和调用安全认证服务的接口,文档就可以上手,我还写了学生9折优惠,哈哈。
  • 3.用户文件头像上传中心:博客所用到的所有的图片(相册空间还没写完)和用户头像的图片均用阿里云OSS文件服务器,当然本地存在本地也可以的,我只是写着玩。
  • 4.用户签到中心:持续签到和累计签到奖励机制,以及会员导致经验值增益不同的机制,我模仿贴吧的经验机制写的,有排名有特权,还有每日博客任务。
  • 5.用户会员中心:SVIP与VIP两种,定时任务/RabbitMQ延迟队列/登录验证三种判定会员截止时间到期用邮箱去提醒用户,RabbitMQ延迟队列永远滴神。
  • 6.用户支付中心:我的钱包和支付宝支付,内网穿透获得异步通知作为结果判定标志,原始支付的普通会员与二维码支付的超级会员,因为论文需要及时上交所以微信支付没写,账单分页,Csv定制,消费图V-charts图表,优惠券(本想把秒杀抢优惠券也写进去,但是论文时间不允许,后续一定补上去),基于RabbitMQ延迟队列实现延迟业务,神又出现了,这个中心的页面与阿里云管理页面相似,就差发票没写了。
  • 7.用户博客中心:发布,更新,删除,评论,点赞,收藏,转发,文章排行榜。博客中心是我的博客的核心,分页和轮滑加载均实现,用Redisson来实现分布式锁控制文章,模仿CSDN,过。
  • 8.搜索引擎中心:文章信息的增删改查,分页,高亮模糊排序查询,我多余引进一个Elasticsearch只是存放一些不重要的文章信息和Zipkin跟踪API运行信息,本想练手,最后还是硬啃,其实有手就会,就是操作几个辅助类,我问下有没有ES分页插件?,我用的原始客户端然后自己写遍历结果集,好累我都有阴影了。
  • 9.用户消息中心:我除了WebSocket我想不到还有啥亮点了,消息页面我是照着B站动态的页面来写的。
  • 10.用户个人空间:博客云其实就是上传文件,加好友可以@,发说说,与它们产生聊天,,时间不够,还在完善中。

由于我还没有毕业,其实工作还没找到QAQ,所以我现在不想放GitHub代码链接。其实YQ期间我去考驾照了,科二还挂了两次,心痛,毕业前不知道能不能拿到驾驶证。

转为正题,我分享一下关于Vue,SpringCloud,微服务,高可用,分布式,分布式锁个人概念与理解,虽然人人都有个人的看法,但我就想说,嘤嘤嘤。

3.Vue(了解一下MVVM设计模式更简单哦)

Vue需要理解DOM布局绘制与Vue生命周期就可以了,当然ES语法要也会一些,Java与JavaScript没关系,但是会Java的话再看JS还是比较容易的,这是我自己画的Vue生命周期的图,看官方文档最好,我不讲具体,我只给新学者提供一个学习路线,index.html,main.js,App.vue三者结合DOM布局再看生命周期图最后可以理解Vue怎么运行。基于Vue+SpringCloud博客的设计与实现---分享本科毕业设计_第3张图片

4.微服务与分布式

微服务是架构设计方式,分布式则涉及到的是机器部署,关于这俩都用共同的缺点:网络,说的有点笼统。
我从我的论文中巴拉出来的改一改,总结微服务的运行机制有以下11条:
1.扩展机制:水平与垂直扩展,氪金或者优化代码呦。
2.隔离机制:避免博客的一个业务占用太多资源导致服务的无法响应,会对其他博客业务造成影响,不要关联性太强,尽可能各干各的,其实微服务代码量也不少。
3.解耦原则:尽可能地使用合成复用原则来代替继承关系,设计模式中看不中用。
4.限流机制(Zuul):限流可以在路由网关上面体现出来,根据不同的算法可以实现不同的负载均衡,这个路由可以做很多文章。
5.降级机制:在核心业务运行时,牺牲一部分非核心的业务保证核心业务功能
稳定运行,当系统不可用时,需要给予用户一些提示。
6.熔断机制(Hystrix):在调用微服务请求时,添加fallback回退防止雪崩即可。
7.跟踪机制(Zipkin):博客API会产生数据指标,产生的数据需要用来观测,然后再做数据分析,对系统做个深度分析以便以后的功能扩充。
8.维护机制:博客的系统维护比较需要方便,压力与微服务的数量成正比,测试运维老惨了。
9.补偿机制:如果发生网络问题导致博客业务数据不一致性的问题,需要补偿机制弥补用户。例如:RabbitMQ异步消息,补偿表和定时任务检测。
10.监控机制(Hystrix+Turbine):更多的是通过Hystrix监控各个微服务的运行指标,通过HTTP转递给开发者观看,也可以跟踪指标监控。
11.钓鱼机制:算是一种未雨绸缪,我在测试博客功能时,会适当关闭个微服务中心,把博客的异常或者补偿都要测试一下,防止在真实情况下出现炸裂情况,尽可能的在某个机器或某个微服务挂掉时,尽量不影响博客系统整体的高可用性,其实我就一个库一个机器,只是模拟了单机节点。

这么说,我设计一个系统,如果我采用了微服务的架构方式,我要怎么划分每一个业务(module),功能划分,控制高并发,扩展以后的功能,尽可能有错立马定位修改,有好的创意立马添加,放上就能用,拿掉尽可能不影响全部,最终这些业务再落到机器的实现上(代码)。
我觉得微服务修改任何东西其实都不费时间,但是加起来的代码也不少,它们之间都是通过HTTP轻量级等通信机制,数据库还可以选择好多种,每一个module都是独立然后一起组成整个系统。

5.高可用

微服务注册组件也涉及到高可用,Eureka不更新了,但是人蠢学习时没发现,听说consul企业版也不能用了,建议后学的还是选择Zookeeper,Java感情配合也好,也能实现分布式锁。
高可用最重要的一点就是自我修复失败的节点,互通数据,防止系统无法响应,其实跟功夫有句名言一样,就算莎了一个我,还有千千万万个我。

6.SpringCloud

SpringCloud呢,就是一个基于SpringBoot快速构建的工具框架集合,SpringBoot挺节省时间的,版本高的Boot有些中间件客户端(ES)都不用直接操作了,别问,问就是好用,但是我个人更喜欢操作客户端,Boot太多了,有些真记不住。
啥也不说了,上图,注意下,SpringCloud1.X中TurbineStream中启动port端口号有BUG,SpringBoot 2.X修复,升级到2.X后,对应的Hystrix也出现问题,需要修改stream路径,除了这些,尽可能用Google,否则你的监控轮盘都看不见,暂时我上去后就发现这些,有补充也可以提出。我的项目的版本号比较老,也没升级上去,所以建议买新书跟着书走。基于Vue+SpringCloud博客的设计与实现---分享本科毕业设计_第4张图片

7.分布式锁

概念来说:对Java分布式锁来说,对于不同的机器产生的不同JVM虚拟机之间需要资源共享,这个时候就需要用到分布式锁来进行控制。
个人理解:如何在许多机器(JVM)中找到我想找到的“共享资源”。锁可以分为好几个层次,当然对于代码层次来说,Synchronized关键字,Lock并发接口(很重要),并发工具类或并发集合控制“共享资源时”,在一个独立JDK与主机Host来进行控制,但是例如:上面是基于代码层次,还可以基于数据库层次,悲观锁与乐观锁,还可以基于缓存层次(当然还Zookeeper也可以实现分布式锁,不只有缓存层次),Redis缓存可以用lua语言脚本实现,我博客中用到的是Redisson实现的分布式锁,青出于蓝而胜于蓝,后学后用。
分布式锁最通俗的理解:某个字段会产生大量的流量,对于基于数据库层次来说,流量直接面对数据库,你死我活。如果流量数据库不承担了,就可以使用数据库的马仔来替数据库“去死”。如果是单体应用,那可以用代码层次了,想办法优化,让流量别冲的太猛。如果是马仔来替数据库冲锋陷阵,这个马仔战个差不多了,最后数据库收尾(写入数据库),其实就是马仔的战斗时间为数据库赢得喘息的机会,这个战斗时间就是多个机器竞争“共享资源”,与并发中的“tryLock”相似,Redisson我也不太熟,只会用几个,但是具体的流程差不多都是基于线程竞争,线程可以从不同JVM获得。

8.总结

项目虽大,但是毫无亮点,就是个开矿练手的,不过我写了快9个月了,中途也休息过,着实自闭,有学习借鉴,但是代码基本都是我自己写的,已经完成25个表,表都是我自己设计的,不过就那样,算是给大学一个完美的谢幕。

9.项目的代码GitHub地址

https://github.com/Study-Up-Up/Vue-SpringCloud-Blog,云服务器就不放了,别别扭扭的UI与繁琐的Docker部署

你可能感兴趣的:(全栈,码农,熬夜,java,spring,boot,vue,分布式,spring)