微服务的演变过程
//controller 视图交互层 前端数据处理传给service
//1.DAO @RequestBody userDAO
String id;String type;
{"id":"lcs",
"type":"lcs"}
//2.GET请求 findUserById?id=1&type=lcs
@RequestParam String id
@RequestParam String type
//3.POST请求 findUserById/{id}/{type}
@Pathvariable String id
@Pathvariable String type
单体架构
定义:功能、业务集中在一个发布包(war、jar)里,部署运行在同一个容器(tomcat)中。
在单体架构中,系统通常采用分层架构模式,按技术维度对系统进行划分,比如持久化层、业务逻辑层、表示层。
1.单体架构的优点:
2.系统的架构简单。
系统在开发、测试、部署时更方便。
单体架构存在的问题:
1.系统内通常以API的形式互相访问,耦合紧密导致难以维护。
2.各业务领域需要采用相同的技术栈,难以快速应用新技术。
3.对系统的任何修改都导致整个系统必须一起重新部署、升级,运维成本高。
4.在系统负载增加时,难以进行水平扩展。 当系统中一处出现问题,会影响整个系统。
垂直架构
第一个是为了业务之间互不影响
第二个是在研发团队的壮大后为了提高效率,减少组件之间的依赖。
优点:
项目拆分流量做了分流,解决了并发问题,同时可以对模块进行针对性优化
一个子项目出问题不会影响到其他子项目,提高容错率
缺点:
子项目间相互独立, 无法进行相互调用
子项目间相互独立, 存在重复造轮子问题
SOA架构
优点:
使用注册中心解决了服务间调用关系的自动调节
缺点:
服务间会有依赖关系,一旦某个环节出错会影响较大( 服务雪崩 )
服务关系复杂,运维、测试部署困难
微服务架构
微服务,又叫微服务架构。微服务架构是一种架构风格,它将一个复杂的应用拆分成多个独立自治的服务,服务与服务间通过松耦合的形式交互。
微服务特性:
每个微服务可独立运行在自己的容器里。
一系列独立运行的微服务共同构建起整个系统。
每个服务为独立的业务开发,一个微服务只关注某个特定的功能,例如内容管理、用户管理等。
可使用不同的语言与数据存储技术。
微服务之间通过轻量的通信机制进行通信,例如通过REST API进行调用。
全自动的部署机制。
微服务优点:
单个服务更易于开发、维护。
单个微服务启动比较快。
局部修改容易部署。
技术栈不受限。
按需伸缩。
微服务缺点:
复杂度高 微服务间通过REST、RPC等形式交互,需要考虑被调用方故障、过载、消息丢失等各种异常情况,代码逻辑更加复杂。
运维复杂 系统由多个独立运行的微服务构成,运维人员需要对系统有细致的了解才能够更好的运维系统。
影响性能 微服务之间进行交互过程中通信的延时,会对服务间的访问引起较大的影响。