GoodGuy 个人开源项目部分技术选型的初步思考

系列文章目录

01、GoodGuy 的诞生(一个消息推送平台)
02.、GoodGuy 试图去揣摩一个好产品会如何进行消息推送管理平台的需求设计



前言

大家好,我是处于 Java 行业下水道,励志重见天日的好人。

上一篇我说我要做一个叫做 GoodGuy 的个人开源项目,反响一般,没啥人给点声音,挺郁闷,那我可得干点成绩出来才行。

最近个把星期,有事要忙,耽误了,感觉把博客补上。还有一件事,挺让人激动的,我提离职了,个把星期后正式滚蛋,这段时间要把之前的任务收个尾,并且交接工作。滚蛋后,会回老家办点事,随便放松放松。

这篇博客主要是想和大家探讨一下搭建一个项目,应该如何进行技术选型。


一、开发语言:Java

开发语言当然是 Java,这一点是毋庸置疑的。除了好人就是干 Java 的主要原因之外,Java 编程语言在 web 开发绝对是霸主地位。Java 有非常好的生态,Spring 生态体系几乎提供了所有 Java 技术场景的解决方案。
在这里插入图片描述
JDK 的版本选用的是 JDK 8。我自打开始学习 Java 以来接触的 JDK 版本都是 8。虽然 Java 已经发布到 JDK 17了,但是现在很多公司也都还是在使用 8。后面已经陆续发布了近 10 个新版本,但是 JDK 8 真的非常非常非常够用,免费开源,稳定安全。其实稳定安全应该是最重要的原因,换了 JDK 版本,需要学习和适应新特性,很容易会因为暂时的知识盲区而导致问题。

二、快速开发框架:SpringBoot

在这里插入图片描述
采用现今最流行、最成熟的 springboot 框架,这点应该无可非议吧。springboot 是 spring 的快速开发框架,属于脚手架,能够快速整合众多技术,拥有各种功能场景的最佳解决方案。相信干 Java 这一行的,应该都七七八八的对 springboot 比较熟悉了,无需太多的学习成本,开发效率大大提高。记得之前刚学 spring + springmvc + mybatis 的时候,光这三个框架的整合都是十分累人,自从学了 springboot,项目轻松搭建,舒服得不行。

三、数据库:MySQL

任何一个系统都少不了数据的存储,我们选用 mysql 作为我们项目的关系型数据库。MySQL 是使用最广泛的数据库,简单易学,最重要是免费。
在这里插入图片描述

四、持久化框架:mybatis & mybatis-plus

数据库的持久化操作,在 2016 年之前流行使用 Hibernate,但在 2016 之后,MyBatis 慢慢成为了主流,也就是我们常说的 SSM 中的 M。MyBatis 是一款优秀的持久层框架,一个半 ORM(对象关系映射) 框架,使用起来非常简单,只要会写 sql 就能上手。
在这里插入图片描述
而 Mybatis-Plus,看名字就知道是 MyBatis 的升级版。MyBatis-Plus 是一个 MyBatis 的增强工具,简化开发、提高效率。这是一个国人开发维护的工具,是在 MyBatis 的基础上只做增强不做改变,所以是完全兼容 MyBatis 的。Mybatis-Plus 提供了很多现成的持久化操作 API,我们可以直接调用,如果 API 无法满足我们的需求,我们还可以像使用 MyBatis 那样编写我们自己的 sql。

五、分布式框架:Spring Could / Spring Could Alibaba

现在 Java 后端开发普遍都偏向微服务了,相对于传统的单体应用来说,微服务将一个大的应用拆分成多个小的应用(微服务),每个微服务单独部署,实现服务松耦合,每个微服务的复杂度低,方便局部扩展、团队协助,便于开发和维护,也方便实现技术选型多样性。服务之间通过rpc调用,部署更灵活,对于大规模项目整体性能更好。
在这里插入图片描述
Spring Could 并不是一项技术,而是技术集合。不提倡造轮子,将现有的技术基于 Spring Boot 再封装,为微服务提供了一套完整的解决方案,主要包括服务注册、服务调用、负载均衡、服务网关、服务降级与熔断、分布式配置管理、消息总线等。Spring Could 主要有五大核心组件:Netflix Eureka(服务发现)、Netflix Ribbon(客服端负载均衡)、Netflix Hystrix(断路器)、Netflix Zuul(服务网关)、Spring Cloud Config(分布式配置)等。
在这里插入图片描述
Spring Could 看起来很厉害了,为什么还会有 Spring Could Alibaba 的出现呢?因为 Spring Cloud 进入到了维护阶段,已经不再进行新功能的开发,只是在现有基础上进行缝缝补补。微服务架构越来越火,Spring Could 停滞不前,总得有人去推动微服务的发展。Spring Could 与 阿里巴巴进行合作,各取所需,推出了 Spring Could Alibaba。核心组件有:nacos(动态服务发现、配置管理和服务管理平台)、Sentinel(流量控制)、Seate(分布式事务)等。
在这里插入图片描述
在多年前,Spring Could 取代了 Alibaba 的 Dubbo(高性能 Java RPC 框架),如今 Alibaba 又用 Spring Could Alibaba 坐稳了微服务的天下,可谓是相爱相杀了。
【更多 Spring Could Alibaba 介绍可查阅:https://zhuanlan.zhihu.com/p/98874444

六、项目构建工具:Maven

在我刚学 Java 的时候,还没有学到类似于 Maven 这样的 Java 项目构建工具,那时所有的依赖包都需要自己下载引入到项目中,依赖管理十分麻烦,而且还经常会出现一些版本冲突的问题,有时候还为了一个依赖包翻遍整个互联网。
在这里插入图片描述
后来学习了 Maven,项目的构建变得特别简单,只需要在 XML 配置文件中用特定的语法描述所需要引入的依赖即可。并且还提供了各种插件,项目编译和打包也能轻松搞定。

除了 Maven之外,与之对标的是 Gradle,Gradle 基于编程语言 Groovy 的领域特定语言来构建项目,而 Maven 是基于 XML。相对来说,Gradle 配置更简洁、性能更好、更灵活。
在这里插入图片描述
其实我有没有使用过 Gradle,只是进行了简单了解。我有个朋友干安卓开发的,他们使用的就是 Gradle。其实 Gradle 主要是在安卓开发上特别火,Java 开发还是更倾向于 Maven,可能是因为 Maven 更加标准和规范吧。不过我们还是使用 Maven,毕竟懒,暂时还不想去学 Gradle,而且遇到问题,相关的资料也没那么多,不方便解决问题。

七、前端:Vue + Element UI

前后端分离,没啥意见吧。前端框架我学的不多,HTML、CSS、JS三剑客肯定是学过的。另外还学过 jQuery、LayUi,但我不太喜欢这两个。我当初为了做毕设,学了 Vue 和 Element UI,感觉 Vue 基于 MVVM 模式实现的双向绑定,用起来真的很爽,数据和视图有一者变化时另一者随之变化。不像 jQuery 那样需要我们自己去操作 DOM 元素,很多时候显得逻辑特别乱。

Element UI 是一套基于 vue 实现的前端组件库,提供了很多美观实用的组件,即使是后端程序员也能够快速成型一个后台管理系统。
在这里插入图片描述
前端的东西学得不多,主要是够用就行了。还有一个很火的前端框架是 React,不过我没有学过。在国内 Vue 更火一些,毕竟更简单,有很完善的开发文档。而国外和国内一线大厂可能会更偏向于 React,反正我对比了一下招聘薪资,React 的薪资比 Vue 要高一些。不过咱先不学 React,先用着 Vue 够用就行。

八、阿里云 OSS

阿里云对象存储OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的云存储服务,可提供99.9999999999%(12个9)的数据持久性,99.995%的数据可用性。多种存储类型供选择,全面优化存储成本。

在这里插入图片描述

说白了就是,我们可以将文件存储在 OSS 上,但是要付费。GoodGuy 中,需要运营同学上传消息发送名单的 csv 文件,我们可以将文件存储在本地,或者自己搭建一个文件存储系统,我做毕设的时候,就自己搭建了一个 fastDFS 文件系统,不过相对来说,自己搭建的话,维护成本可能会比较高。为了省事我们直接使用阿里云的 OSS。

九、RabbitMQ

消息队列我考虑是使用 RabbitMQ,因为我暂时只学了 RabbitMQ,会啥用啥,大家应该不会反驳吧。

程序之间的通信我们可以使用 RabbitMQ,程序将数据发送到 RabbitMQ 中,其他程序从 RabbitMQ 中读取数据,便实现了通信。RabbitMQ 是基于 AMQP 协议实现的。

AMQP 的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、 安全。AMQP 协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。

在这里插入图片描述

对标的产品有 Alibaba 的 RocketMQ 和 Apache 的 Kafka。具体的对比暂时先不说了,各有优缺点,相对来说 RabbitMQ 性能更适中,适用的场景也足够丰富。

十、Redis

Redis 相信大家都很熟悉了吧,必会的技术,不多说,用就对了。
在这里插入图片描述

十、未能确定

上面是一些暂时能想到,并且暂时能确定下来的技术选型。

当然也有一些暂时没考虑好的技术选型,如下:

  1. 何进行定时任务?
  2. 如何进行链路追踪?
  3. 如何进行安全监控?
  4. 如何搭建日志系统?
  5. 分布式事务应该会使用 seata。
  6. 如何进行调用链埋点?
  7. 使用什么 api 文档框架?

总结

暂时先这样,之后可能还会进行完善,或者修改。

大家追更吧,看看安妮海瑟薇。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值