为什么要进行技术选型?

  1. 降低开发成本
  2. 提高研发效率

架构演进

巨石应用-单体应用

所有的模块打包到一起部署运行,在开发小项目时相对调试、部署、运维都比较方便。但是缺点也很明显,首先任何一个模块的bug都可能影响整个项目,其次项目扩展只能堆积服务器,因为都部署在一起所以无法区分模块扩展,最后不利于项目后期发展,无法引入新的架构或进行新语言重构。

SOA面向服务架构

SOA(Service Oriented Architecture),面向服务架构,它是 一种设计方法,设计上通常是自上而下,服务间松散耦合。ESB集成不同协议的服务,做消息转化、解释、路由。

缺点:

  1. ESB的存在并没有根本解决单体应用的一些问题 例如单点故障
  2. SOA更多的面向企业服务,服务拆分力度大,更多是为了复用
微服务

各大esb厂商优势对比表_java

去中心化的SOA扩展,彻底将服务组件化,服务拆分力度更小,设计上更多 是自下而上的。服务间通过轻量化的协议进行通讯,并根据服务本身需要独立化部署。

SOA和微服务:SOA是自上而下,从运维侧角度出发,更多聚焦可维护性兼顾可扩展性,从前后端分离切入。微服务是从产品的角度出发,自下而上更多聚焦可扩展性兼顾可维护性。

现代微服务框架
为什么使用Springboot?

各大esb厂商优势对比表_SOA_02

  1. 方便的创建可独立运行的spring应用程序
  2. 直接内嵌Tomcat Jetty或Undertow
  3. 简化了项目的构建配置
  4. 为spring及第三方库提供自动配置
  5. 提供生产级特性
  6. 无需生成代码或者进行XML配置
    总结:springboot是java spring体系下打包的全家桶

数据库访问层选型

  1. 数据库连接的管理
  1. JDBC原始操作:频繁创建并需要手动关闭,性能较差,可维护性低。
  1. 数据库关系和java对象的映射
  2. 什么情况用原生jdbc?
  1. 性能极致要求
数据库连接池选型

定义:JDBC连接池,解决需要自己手动建立连接(TCP连接)、关闭连接、连接复用的问题。

常见连接池及其功能分析

各大esb厂商优势对比表_开发语言_03

消息中间件选型

MQ选型

消息队列:在消息的传输过程中保存消息的容器,生产者和消费者不直接通讯,依靠队列保证消息的可靠性,避免了系统间的相互影响。

各大esb厂商优势对比表_java_04

mq选型

各大esb厂商优势对比表_各大esb厂商优势对比表_05

远程通信框架(RPC)选型

RPC运行期状态流程

各大esb厂商优势对比表_开发语言_06

RPC框架核心关注技术点

与注册中心集成

与配置中心集成

与链路跟踪集成

服务发布和引用

通信协议

请求监控

服务调用方式

IO线程模型

容错降级

路由寻址

超时机制

租户泳道机制

序列化/反序列化

重试机制

常见框架对比

各大esb厂商优势对比表_各大esb厂商优势对比表_07

网关层技术选型

API网关解决的问题

  1. 在微服务模式下提供的API粒度通常与客户端所需的力度不同
  2. 不同的客户端需要不同的数据
  3. 微服务实例数及其位置的变化
  4. 服务划分会根据时间推移变化
  5. 服务使用的多协议,有些是非web友好协议(比如物联网协议)

网关的分类:流量网关与业务网关

各大esb厂商优势对比表_开发语言_08

目前主流网关产品

各大esb厂商优势对比表_开发语言_09