一、关于技术选型
目的:降低开发成本、提高研发效率
架构演进:
1)巨石应用
第一代单体应用,所有模块打包到一起部署运行,如打包一个War包放到一个Tomcat下运行
优点:开发小型项目有独特优势,易于调试、部署,运维方便
缺点:不可靠,模块之间没完全解耦,任何模块的一个bug,可能拖垮整个应用;单维扩展;不可持续发展,引入新的框架或语言需要重构所有业务模块
2)SOA
即面向服务架构,设计上通常是自上向下的,服务间松散解耦;ESB集成不同协议的服务,做消息的转化、解释、路由从而联通各个服务,解决企业通信问题
优点:服务松解耦、可扩展
缺点:ESB的存在并没根本解决单体巨石应用的一些问题;SOA更多面向企业服务,服务拆分粒度很大,更多的是为了复用
3)微服务
微服务是去中心化的SOA扩展,强调服务彻底的组件化,一个组件就是一个产品,服务切分力度更小,设计上更多是自下而上的;服务间通过轻量化的协议进行通信,并根据服务本身需要独立化部署
二、数据访问层选型
所有数据访问框架都是在解决如下两个问题:
- 数据库连接如何管理?2、数据库查询数据和Java对象如何高效映射?
数据库连接池选型
定义:JDBC连接池,解决需要自己手动建立连接(TCP连接)、关闭连接、连接复用的问题;JDBC连接池有一个标准的接口javax.sql.DataSource
常用JDBC连接池:Druid HikariCP DBCP Tomcat-jdbc C3P0
三、常用中间件选型
MQ消息队列
消息队列:在消息的传输过程中保存消息的容器,生产者和消费者不直接通讯,依靠队列保证消息的可靠性,避免了系统间的相互影响
消息模式:P2P模式、订阅模式(一对多)
MQ选型
Kafka:日志领域、大数据(尤其是离线大数据)广泛应用,分布式主从结构、性能非常强、支持消息的批量发送
RocketMQ:成熟、分布式主从结构、支持特定Level的延迟消息、支持事务消息
RabbitMQ:成熟、可自动切换主从
栗子:
四、远程通信框架选型
核心技术点:
栗子(Feign框架调用流程分析):
常用开源远程通信框架综合对比:
五、网关层选型
API网关由来:
网关分类:流量网关与业务网关
API网关部署形式:单节点网关与多节点网关
业务网关技术选型: