传统架构
传统的架构,也就是为单点应用,也就是大家在早期所学习的JavaEE知识SSH或者SSM架构模式,会采用分层架构模式:数据库访问层、业务逻辑层、控制层,从前端到后台所有的代码都是一个开发者去完成。
该架构模式没有对我们业务逻辑代码实现拆分,所有的代码都写入到同一个工程中里面,适合于小公司开发团队或者个人开发。
这种架构模式最大的缺点,如果该系统一个模块出现不可用、会导致整个系统无法使用。
![单体架构](https://i-blog.csdnimg.cn/blog_migrate/393ff2120e3db8cf99ae700956394060.png)
分布式架构
分布式架构模式是基于传统的架构模式演变过来,将传统的单点项目根据业务模块实现拆分、会拆分为会员系统、订单系统、支付系统、秒杀系统等。 从而降低我们项目的耦合度,这种架构模式开始慢慢的适合于互联网公司开发团队。
SOA面向服务架构
SOA面向服务架构就是基于我们的分布式架构演变过来的,俗称服务化,也就是面向于接口开发(服务开发)。
SOA架构模式也称作为:面向服务架构模式、俗称面向与接口开发,将共同存在的业务逻辑抽取成一个共同的服务,提供给其他的服务接口实现调用、服务与服务之间通讯采用rpc远程调用技术。
SOA架构模式特点:
- SOA架构通讯中,采用XML方式实现通讯、在高并发下通讯过程中协议存在非常大冗余性,所以在最后微服务架构模式中使用JSON格式替代了XML。
- SOA架构模式实现方案为WebService或者是ESB企业服务总线 底层通讯协议SOAP协议(Http+XML)实现传输。
ESB企业服务总线
解决多系统之间跨语言无法实现通讯的问题,数据协议的转换,提供可靠消息传输。
微服务架构
微服务架构产生的原因
微服务架构基于SOA架构演变过来的
在传统的WebService架构中有如下问题:
- 依赖中心化服务发现机制
- 使用Soap通讯协议,通常使用XML格式来序列化通讯数据,xml格式非常喜欢重,比较占宽带传输。
- 服务化管理和治理设施不完善
- 不适合前后端分离架构模式
微服务架构基本概念
微服务架构模式是从SOA架构模式演变过来, 比SOA架构模式粒度更加精细,让专业的人去做专业的事情(专注),目的是提高效率,每个服务与服务之间互不影响,微服务架构中:每个服务必须独立部署、互不影响,微服务架构模式体现轻巧、轻量级、适合于互联网公司开发模式。
微服务架构倡导应用程序设计程多个独立、可配置、可运行和可微服务的子服务。
服务与服务通讯协议采用Http协议,使用restful风格API形式来进行通讯,数据交换格式轻量级json格式通讯,整个传输过程中,采用二进制,所以http协议可以跨语言平台,并且可以和其他不同的语言进行相互的通讯,所以很多开放平台都采用http协议接口。
![SOA架构](https://i-blog.csdnimg.cn/blog_migrate/a73726c9b04e3188cc0dc9c8a33167c4.png)
![SOA架构](https://i-blog.csdnimg.cn/blog_migrate/eddc795855e80e57ba3c577c8dc337c4.png)
微服务架构与SOA架构的不同
1.微服务架构基于 SOA架构 演变过来,继承 SOA架构的优点,在微服务架构中去除 SOA 架构中SOAP协议和 ESB 企业服务总线,采用 http+json(restful)进行传输。
2.微服务架构比 SOA 架构粒度会更加精细,让专业的人去做专业的事情(专注),目的提高效率,每个服务于服务之间互不影响,微服务架构中,每个服务必须独立部署,微服务架构更加轻巧,轻量级。
3.SOA 架构中可能数据库存储会发生共享,微服务强调独每个服务都是单独数据库,保证每个服务于服务之间互不影响。
4.项目体现特征微服务架构比 SOA 架构更加适合与互联网公司敏捷开发、快速迭代版本,因为粒度非常精细。
微服务架构会产生那些问题
分布式事务解决方案(rabbitmq/rocketmq/lcn(已经淘汰)/ Seata)
分布式任务调度平台(XXL-Job、阿里Scheduler)
分布式日志采集系统ELK+Kafka
分布式服务注册中心 eureka、Zookeeper、consule、nacos等。
分布式服务追踪与调用链Zipkin等。
分布式服务配置中心(springcloud config/携程阿波罗/nacos/disconfig)
非常重要的概念:独立部署、可配置、动态化
为什么我们要使用SpringCloud
SpringCloud并不是rpc远程调用框架,而是一套全家桶的微服务解决框架,理念就是解决我们在微服务架构中遇到的任何问题。
SpringCloud第一代与第二代的区别
![SOA架构](https://i-blog.csdnimg.cn/blog_migrate/e8e1ef1b5cb0e83f9ab91f67174d0271.png)
- SpringCloud Config 分布式配置中心
- SpringCloud Netflix 核心组件
- Eureka:服务治理
- Hystrix:服务保护框架
- Ribbon:客户端负载均衡器
- Feign:基于ribbon和hystrix的声明式服务调用组件
- Zuul: 网关组件,提供智能路由、访问过滤等功能。
SpringCloud第二代(自己研发)和优秀的组件组合:
- Spring Cloud Gateway 网关
- Spring Cloud Loadbalancer 客户端负载均衡器
- Spring Cloud r4j(Resilience4J) 服务保护
- Spring Cloud Alibaba Nacos 服务注册
- Spring Cloud Alibaba Nacos 分布式配置中心
- Spring Cloud Alibaba Sentinel服务保护
- SpringCloud Alibaba Seata分布式事务解决框架
- Alibaba Cloud OSS 阿里云存储
- Alibaba Cloud SchedulerX 分布式任务调度平台
- Alibaba Cloud SMS 分布式短信系统
为什么Alibaba要推出SpringCloud组件
目的就是为了对阿里云的产品实现扩展。