摘要
本文主要用来描述哪些方面需要选型以及如何选型。
背景
选型的目的
- 降低开发成本
- 提高开发效率
技术架构的分类
单体应用
缺点:
- 各模块之间耦合。任何一个更新可能会造成其它模块的 bug
- 不利于扩展。只能进行单维度扩展;当引入新的框架或语言时,需要重构所有业务模块。
SOA
缺点:
- ESB 成为 bottle neck
- 服务的拆分粒度太大。
微服务
将一个功能变成一个模块;是去中心化的SOA拓展。在设计上更多的是自下而上的。服务间通过轻量化的协议进行通信,并根据服务本身需要独立化部署。
技术选型
数据层选型
所有数据层都是为了解决两个问题:
- 数据库连接如何管理:手动管理会造成代码维护的压力。如果忘了关闭连接,会造成对数据存储层的压力。
- 数据库映射成 JAVA:
这里采用 MyBatis 解决这个问题。同时需要进行数据库连接池的选型。
消息中间件选型
中间件:两个业务模块的中间层。
消息:业务模块之间的传递的信息。
需求:模块之间处理信息的速度产生差异时,需要有一个容器进行暂时的存储。这个容器存储的是消息,并且在两个业务模块中间。所以叫消息中间件。
远程通信框架选型
远程通信框架:将远程调用方法当成是本地调用方法。
远程调用的核心:通过注册中心进行请求。注册中心负责服务的注册和发现。
这里采用的是 Spring Cloud 的 Feign
网关层选型
网关的必要性:
每个服务都需要进行 授权,流量控制,安全管理。这些属于重复代码。需要提取出来做单独管理。所以这里需要使用 网关。
网关分类:
流量网关:
关注稳定安全:进行全局性流控,防止 web 攻击,屏蔽工具扫描,黑白IP名单,证书/加解密操作。
业务网关:
目的在于提供更好的服务:服务级别流控,服务降级与熔断,路由与负载均衡,灰度策略,服务过滤、聚合与实现,多级缓存策略。
这里采用的是 SpirngCloud Gateway.
Spring 对架构的支持
Spring Boot
Spring Boot 用来管理依赖。省去了许多冗余代码。
Spring Cloud
Spring Cloud 中的组件能够为 微服务 提供更好的支持。使用 Eureka 进行服务的注册与发现。使用 Spring Gateway 作为网关。使用 Ribbon 进行负载均衡。以及使用 Feign 进行远程调用。
结论
技术栈选型涉及到多种原因。一部分原因来自于实际业务的需求,一部分原因来自技术本身的特点。如果要做到良好的技术选型,则需要首先对实际业务有较好的理解。并且对这些技术有深刻的认知。