前言
最近公司因业务发展需要建设一个新应用,在架构设计时我也有机会能在提供一些建议,这个过程还是比较有趣的,要找到符合业务场景和用户需求的技术,并且要考虑未来的扩展性,相对来说还是比较困难的。
涉及到后端、前端、开发规范、运维等多个方面的大量技术内容,为了以后能在类似的工作中变得更容易,我决定在本期内容中进行整理,列出一些在新项目建设时需要考虑的一些问题。
提前声明一下,本期内容在大多数问题下只提供一些解决该问题的技术,对于实现细节不是这期内容的重点;可能存在不完整的地方,主要的技术栈为Java;希望能对正在建立新系统的你有所帮助。
架构风格
首先需要明确新系统的基本架构风格,是现在比较流行的微服务架构,还是单体架构,SOA架构等。
单体架构
单体架构将所有功能包含在单个部署单元中;
可能不支持灵活的发布周期,但不需要分布式通信。
微服务
多个较小的部署单元,它们利用分布式通信来实现应用程序的功能;
支持更小、更快的版本迭代,多个团队协同开发更加灵活,但代价是分布式通信问题。
后端相关
对于要新建应用的后端,需要考虑一下这些事情。
应用服务
应用服务该如何托管?对于分布式体系结构与Spring Boot配合使用是现在很好的解决方案;
而单体结构可能更适合使用如Wildfly这样的应用服务器;
应用服务的选择通常是为要提前确定的。
系统间通信
在构建分布式系统时,因为涉及到分布式系统间的通信,而通信技术的选择也有多种,例如:通过消息中间件(例如kafka、RocketMQ等)进行异步通信,也可使用Spring MVC和Feign进行Rest通信,或者Dubbo、Spring Cloud等进行RPC通信。