为什么要进行技术选型?
- 降低开发成本
- 提高研发效率
架构演进
巨石应用-单体应用
所有的模块打包到一起部署运行,在开发小项目时相对调试、部署、运维都比较方便。但是缺点也很明显,首先任何一个模块的bug都可能影响整个项目,其次项目扩展只能堆积服务器,因为都部署在一起所以无法区分模块扩展,最后不利于项目后期发展,无法引入新的架构或进行新语言重构。
SOA面向服务架构
SOA(Service Oriented Architecture),面向服务架构,它是 一种设计方法,设计上通常是自上而下,服务间松散耦合。ESB集成不同协议的服务,做消息转化、解释、路由。
缺点:
- ESB的存在并没有根本解决单体应用的一些问题 例如单点故障
- SOA更多的面向企业服务,服务拆分力度大,更多是为了复用
微服务
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mqyrNB1V-1636192569137)(images/0pNQt4_Bm9--VDy61eev__0tM4OiPml2eNEDIraBT9s.png)]](https://i-blog.csdnimg.cn/blog_migrate/da0f95ca1b9dc1cefc555e939e2b7612.png)
去中心化的SOA扩展,彻底将服务组件化,服务拆分力度更小,设计上更多 是自下而上的。服务间通过轻量化的协议进行通讯,并根据服务本身需要独立化部署。
SOA和微服务:SOA是自上而下,从运维侧角度出发,更多聚焦可维护性兼顾可扩展性,从前后端分离切入。微服务是从产品的角度出发,自下而上更多聚焦可扩展性兼顾可维护性。
现代微服务框架
为什么使用Springboot?

- 方便的创建可独立运行的spring应用程序
- 直接内嵌Tomcat Jetty或Undertow
- 简化了项目的构建配置
- 为spring及第三方库提供自动配置
- 提供生产级特性
- 无需生成代码或者进行XML配置
总结:springboot是java spring体系下打包的全家桶
数据库访问层选型
- 数据库连接的管理
- JDBC原始操作:频繁创建并需要手动关闭,性能较差,可维护性低。
- 数据库关系和java对象的映射
- 什么情况用原生jdbc?
- 性能极致要求
数据库连接池选型
定义:JDBC连接池,解决需要自己手动建立连接(TCP连接)、关闭连接、连接复用的问题。
常见连接池及其功能分析
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5wOibu6k-1636192569145)(images/LcMtXUHIdziKQJOfO-PcOZ7tcmoSh3hH8j1HNp3fzyc.png)]](https://i-blog.csdnimg.cn/blog_migrate/79188ef73e4e706dfc3ffaec32c66561.png)
消息中间件选型
MQ选型
消息队列:在消息的传输过程中保存消息的容器,生产者和消费者不直接通讯,依靠队列保证消息的可靠性,避免了系统间的相互影响。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-51nOb4zo-1636192569148)(images/g33ZCQ4r59HN2Zfd9surjSeSIqiB11COplk3ti-LQ_E.png)]](https://i-blog.csdnimg.cn/blog_migrate/295877e09d991e05877c959c82909a70.png)
mq选型
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5d1cgQ5x-1636192569151)(images/ozEYBvhI4ndQTwP-F9XuHZDk2umIbWvmMgMa-qb-EXI.png)]](https://i-blog.csdnimg.cn/blog_migrate/5abc03e82dc421f79b4f4ba2524433c7.png)
远程通信框架(RPC)选型
RPC运行期状态流程
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z2jdiTKK-1636192569153)(images/e2VUaijUR9f7Qh3M1uh_WMtdMbPv6cKEPXz5m0_T8vI.png)]](https://i-blog.csdnimg.cn/blog_migrate/a3b75d86cd5dcfdbd885e4ba7a462924.png)
RPC框架核心关注技术点
| 与注册中心集成 | 与配置中心集成 | 与链路跟踪集成 |
|---|---|---|
| 服务发布和引用 | 通信协议 | 请求监控 |
| 服务调用方式 | IO线程模型 | 容错降级 |
| 路由寻址 | 超时机制 | 租户泳道机制 |
| 序列化/反序列化 | 重试机制 |
常见框架对比
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fLSMRP4o-1636192569155)(images/1sUCt5-96eIYpCypAOqDav0IM4PP_nIubbs6VLSdSjE.png)]](https://i-blog.csdnimg.cn/blog_migrate/b36f4714f52665d02433a55df622e4f4.png)
网关层技术选型
API网关解决的问题
- 在微服务模式下提供的API粒度通常与客户端所需的力度不同
- 不同的客户端需要不同的数据
- 微服务实例数及其位置的变化
- 服务划分会根据时间推移变化
- 服务使用的多协议,有些是非web友好协议(比如物联网协议)
网关的分类:流量网关与业务网关
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5S61imUk-1636192569159)(images/MBUjtIjndFiW6PVprhwAQMwYppSC3G2Xy59rGE5nb3Y.png)]](https://i-blog.csdnimg.cn/blog_migrate/e0669abc0078c216fb3450a4258d35da.png)
目前主流网关产品
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ity4y3Zf-1636192569161)(images/WY98ShjjXBNoK6fql5b-E7qnN9hDA6q9Y5Fn2lq3wbI.png)]](https://i-blog.csdnimg.cn/blog_migrate/a5eb3e8c08a6af9108cef1788dd6f8c2.png)
本文探讨了技术选型的重要性,涵盖了从降低开发成本、提高效率到架构演进的过程。深入比较了单体应用、SOA(如ESB和微服务)的优缺点,特别强调了Spring Boot在简化开发中的角色。还分析了数据库连接管理、JDBC选择、连接池以及消息中间件、RPC框架和API网关的选择策略。

被折叠的 条评论
为什么被折叠?



