孤尽训练营打卡日记day10--技术选型

前言

        在我们开始开发一个系统之前,我们需要先做一件事,就是技术调研,专业的叫法就叫 技术选型。如果技术选型选不好,就容易给自己埋下一大推坑,对系统的后续维护,版本升级都是很不友好的。那我们如何选择呢,成本和效率都是我们需要考虑的问题。

为什么需要技术选型

  • 降低开发成本
  • 提高研发效率
  • 系统可维护性

微服务架构三部曲

巨石应用

        第一代单体应用,将所有模块打包到一起部署运行。

优点:易于部署、调试、运维方便,维护成本低

缺点

  • 不可靠,一个模块的bug就可能导致整个系统崩溃
  • 单维扩展,只能通过增加实例提升系统性能,无法处理热点业务
  • 不可持续发展,引入新的框架或语言需要重构所有代码

SOA

        SOA(Service Oriented Architecture),面向服务架构, 它是 一种设计方法,设计上通常是自上而下的,服务间松散耦合。通过ESB对消息进行转化、解释、路由,联通各个服务

优点:服务松耦合、可扩展。

缺点

扫描二维码关注公众号,回复: 13295236 查看本文章
  • 没有解决单体应用单体故障的问题,也无法进行负载均衡
  • SOA 更多的是为了复用,每个服务之间的拆分很大,这个时候每个服务相当于一个单体应用

微服务

        微服务是去中心化的扩展,将服务组件化,自下而上,切分粒度更小,每个服务独立化部署,根据不同业务自由组合。

优点:业务隔离、并行开发、易于运维、独立部署

 

数据库访问层选型

JDBC   

java database connectivity 是sun公司指定的java数据库连接技术简称

创建数据库jdbc的过程

  • 加载驱动程序类,这里加载MySQL的jdbc驱动

 class.forName("com.mysql.jdbc.Driver").newInstance();

(为什么在加载驱动的时候,要用反射

    反射的作用:通过反射可以使程序代码访问装载到jvm 中类的内部信息

    1)、获取已装载类的属性信息

    2)、获取已装载类的方法

    3)、获取已装载类的构造方法信息

    使用场景:在编译时根本无法知道该对象可能属于哪些类,程序只依靠运行时信息来发现该对象和类的真实信息

    优点:提供java程序的灵活性和扩展性,降低耦合,提供自适应能力

答:JDBC 是sun公司提供了一组api接口,由数据库厂商自己实现驱动程序,不同的厂商驱动不同,使用反射并将 驱动名称写在配置文件中,则可以降低代码的耦合度,这比每次都new 一个新的对象要好的多

  • 建立连接    

 connection conn = DriverManager.getConnection(url,"user","password");

  • 创建sql执行的容器

Statement statement = conn.createStatement();

  • 拼装sql语句    

String sql = "select * from table1";

  • 用容器执行刚建立的sql语句,并返回结果集

ResultSet rs = statement.executeQuery(sql);

  • 处理结果集
  • 关闭连接

缺点:

     1、频繁创建释放数据库连接,浪费资源     

解决:数据库连接池

     2、sql语句写在代码中,不利于维护

    3、入参的映射,出参需要从结果集中遍历

优点:

原生jdbc的执行效率高

JdbcTemplate

是spring 对jdbc的封装 JdbcTemplate处理了资源的建立和释放,比如数据库连接的创建和释放,statement 的建立和执行

使用步骤:

1、创建 JdbcTemplate 对象

JdbcTemplate jdbcTemplate = new JdbcTemplate(DataSourceUtils.getDataSource()); 

2、编写SQL语句

String sql = "INSERT INTO product VALUES (NULL, ?, ?);";

3、使用 Jdbc Template 方法进行增删改

jdbcTemplate.update(sql, "iPhone3GS", 3333); 

Hibernate 

全自动化持久层框架

缺点:

1、hql 需要学习成本

2、高度封装,无法对原生sql进行优化

3、无法编写自定义SQL从而丧失了灵活活及更好的性能

Mybatis

        MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录

  • dao层操作流程
  • 获取连接
  • 声明预处理器
  • 设置参数
  • 拼装SQL
  • 执行获得结果集
  • 封装成java对象

Mybatis Plus

        是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。它封装了一些crud方法,我们不需要再写xml了,直接调用这些方法就行,就类似于JPA。

优点:

  • 一键生成controller/service/mapper/entity/xml
  • 提供通用针对单表的增查删改
  • 提供Wrapper 针对相对复杂及自定义的查询操作
  • 内置多种数据库的分页查询支持
  • ID主键生成器
  • 全局逻辑锁
  • 还有其他缓存/批量处理的能力

缺点:

  • 对开发人员的要求高,需要学习成本
  • 后期升级维护,问题排查,性能提升不方便

数据库连接池选型

 MQ消息中间件选型

MQ消息队列简介

 常见MQ

 选择方法:

  • 功能不具备,直接否决
  • 重性能还是重扩展
  • 技术栈,团队驾驭能力,保证功能的健壮性

远程通信框架选型

RPC(远程过程调用)运行期状态与流程

  1. 调用方发起
  2. 寻址路由
  3. 协议适配/序列化
  4. 网络传输
  5. 反序列化/协议解析
  6. 处理逻辑返回调用方

RPC框架核心技术点

 远程通信框架对比

网关层技术选型 

网关解决的问题:

  • 微服务提供的 API 的粒度通常与客户端所需的粒度不同
  • 不同的客户端需要不同的数据
  • 微服务实例数量及其位置(主机+端口)动态变化
  • 服务划分会随着时间的推移而变化
  • 服务可能会使用多种协议,有些是非 web 友好协议

网关分类:流量网关和业务网关

 业务网关技术选型

路漫漫其修远兮,吾将上下而求索

参考文档:

Joel老师的ppt
mybatis-plus 我不用了_maple_son的专栏-CSDN博客_公司为什么不用mybatisplus

猜你喜欢

转载自blog.csdn.net/qq_35056844/article/details/121153955