单一应用架构
一般用于定制系统,需求明确,不会迭代,开发快
优点:项目易于管理,部署简单
缺点:测试成本高、可伸缩性差、可靠性差、迭代困难、跨语言程度差、团队协作难
解释:ABC代表三个模块,A->B->C代表调用关系
-
测试成本高:每个模块都需要测试,所有关联模块有需要测试
我们要测试除了A、B、C三个模块外,还需要测试A->B、B->C、A->B->C
-
可伸缩性差:我们在AB直接插一个D,那么我们需要改动A和B代码,才能变成A->B->C->D
-
可靠性差:如果C的功能出现问题,并不一定是C的代码错误,也有可能是AB引起的
-
迭代困难:改动部分代码,需要重新测试大量功能。
-
跨语言程度差:只用一种语言
-
团队协作难:模块的耦合高,代码整合调试困难
RPC架构
远程调用过程
优点:应用直接调用服务,服务之间是隔离的
缺点:服务过多时,管理成本高昂。服务治理,服务注册、发现,服务容错,服务跟踪,服务网关,IP暴露等
解释:ABC还是代表是哪个模块,有一个远程的服务来调用ABC
-
应用直接调用服务,服务之间是隔离的:ABC没有直接的关系,而是通过远程的服务来调用ABC
-
服务治理,服务注册、发现,服务容错,服务跟踪,服务网关,IP暴露等都是因为服务隔离产生的。
SOA架构面向服务架构
在RPC架构的基础上加了一个ESB,应用去调用ESB,ESB去调用服务
ESB:企业服务总线,服务中介
微服务架构
对比与SOA架构,将ESB换成了注册中心,代表技术:SpringCloud、Dubbo
常见的架构风格:
-
C/S:比如QQ
-
基于组件模型的架构:比如EJB
-
分层架构:典型就是MVC架构
-
面向服务架构:SOA和微服务
优点:与单一应用架构相对比
-
测试容易
-
可伸缩性强
-
可靠性强
-
跨语言程度会更加灵活
-
团队协作容易
-
系统迭代容易
缺点:
-
运维成本过高,部署服务器数量高
-
接口兼容多版本,可能一个系统的不同功能具有不同的版本
-
分布式系统的复杂性,通信成本提升,系统复杂性提升
-
分布式事务,分布式系统会引出分布式事务的出现,现在有很多的分布式事务解决方案,尽量不使用分布式事务去解决,会影响并发量或性能