Appearance
项目介绍
天源云
项目源于一个从2010年开始的现在已经夭折的法律检索项目,是一个从无到有的项目架构,是一个从头开始学习javaEE的尝试。
天源云中后台快速开发系统(简称天源云)原名称AcuityBox微服务快速开发系统(简称AB微服务),AB微服务v1.0版完成于2020年10月,并于2021年3月获得软件著作权,软著登字第7034271号。
什么是单体架构?
通俗地讲,“单体应用(monolith application)”就是将应用程序的所有功能都打包成一个独立的单元,可以是JAR、EXE、BIN或其它归档格式。 Spring Boot 完整的部署了一个项目,项目所有功能都在单个项目中做了实现。
text
便于开发:
只需借助IDE的开发,调试功能即可完成,开发简单直接,集中式管理,基本不会重复开发
易于测试:
只需要通过单元测试或浏览器即可完成测试
易于部署:
打包成单一可执行jar包或者war包,执行包即可完成部署。
功能都在本地,没有分布式的管理开销和调用开销.
便于开发:
只需借助IDE的开发,调试功能即可完成,开发简单直接,集中式管理,基本不会重复开发
易于测试:
只需要通过单元测试或浏览器即可完成测试
易于部署:
打包成单一可执行jar包或者war包,执行包即可完成部署。
功能都在本地,没有分布式的管理开销和调用开销.
text
复杂性高:如果业务很复杂,代码维护难,代码功能耦合在一起,新人不知道何从下手
部署不灵活:构建时间长,任何小修改必须重新构建整个项目。
扩展能力受限,伸缩性差(系统运行在单个服务器上,比较难扩展,无法满足高并发情况下的业务需求)
代码难以被修改和重构,因为单体架构代码耦合度会比较高
不利于多人开发,容易发生冲突
单点故障问题,一旦某个功能挂了,所有功能都无法使用
单体架构的适用场景
单个团队维护的业务功能简单的系统(性能要求不高,单个服务器也能负载)
复杂性高:如果业务很复杂,代码维护难,代码功能耦合在一起,新人不知道何从下手
部署不灵活:构建时间长,任何小修改必须重新构建整个项目。
扩展能力受限,伸缩性差(系统运行在单个服务器上,比较难扩展,无法满足高并发情况下的业务需求)
代码难以被修改和重构,因为单体架构代码耦合度会比较高
不利于多人开发,容易发生冲突
单点故障问题,一旦某个功能挂了,所有功能都无法使用
单体架构的适用场景
单个团队维护的业务功能简单的系统(性能要求不高,单个服务器也能负载)
微服务架构?
Spring Cloud属于分布式微服务架构。微服务架构风格是一种将一个单一应用程序拆分为许多小型服务的方法,这样一来,每个小开发团队单独维护一个小型服务的运行(提升每个团队的专注度,服务间的交互由团队间协商决定),便于团队协作,同时避免了单点故障问题。 每个服务运行在自己的进程中,所有微服务独立运行,共同构建起整个系统,服务间通信采用轻量级通信机制(通常用HTTP传送JSON数据完成进程间的通信,REST API)。 这些服务围绕业务能力构建并且可通过全自动部署机制独立部署。这些服务采用集中式的管理,每个服务可用不同的语言开发,使用不同的数据存储技术,从而达到异构。
text
单个拆分出来的微服务更加容易开发、维护
独立部署:由于微服务具备独立的运行进程,所以每个微服务也可以独立部署,并且单个拆分出来的微服务启动较快
并且修改某个微服务的时候,只用重新部署单个服务,比较容易部署
技术栈不受限,多个服务可以分别使用不同的技术,只需要保证服务交互正常就行
按需伸缩,便于添加服务器提高性能(因为本来就是分布式的)
扩展性高,我们需要什么功能直接增加服务就好了
容错性能好:单个服务出了故障,那么bug也会仅仅停留在某个服务中,不会影响其他服务的正常使用。
单个拆分出来的微服务更加容易开发、维护
独立部署:由于微服务具备独立的运行进程,所以每个微服务也可以独立部署,并且单个拆分出来的微服务启动较快
并且修改某个微服务的时候,只用重新部署单个服务,比较容易部署
技术栈不受限,多个服务可以分别使用不同的技术,只需要保证服务交互正常就行
按需伸缩,便于添加服务器提高性能(因为本来就是分布式的)
扩展性高,我们需要什么功能直接增加服务就好了
容错性能好:单个服务出了故障,那么bug也会仅仅停留在某个服务中,不会影响其他服务的正常使用。
text
微服务架构带来过多的运维操作, 可能需要团队具备一定的 DevOps 技巧.
分布式系统可能复杂难以管理。因为分布部署跟踪问题难。当服务数量增加,管理复杂性增加。
微服务架构带来过多的运维操作, 可能需要团队具备一定的 DevOps 技巧.
分布式系统可能复杂难以管理。因为分布部署跟踪问题难。当服务数量增加,管理复杂性增加。
markdown
- 大型、复杂的项目
- 有快速迭代的需求
- 访问压力大。
- 大型、复杂的项目
- 有快速迭代的需求
- 访问压力大。