model1模式: jsp + java
model2模式: MVC 模式
资源调度、负载均衡、动态服务创建…服务治理
微小、单一职责
微服务就是将一个单体架构的应用按业务划分为一个个独立运行的程序即服务,他们之间通过HTTP协议进行通信(也可通过消息队列,如kafaka、RabbitMq等),可以采用不同的编程语言,使用不同的存储技术,自动化部署,减少人为控制,降低出错概率。服务数量较多,管理越来越复杂,因此采用集中化管理,如Eureka、Zookeeper 等比较常见的服务集中管理框架。
微服务是一种架构风格,一种大型的复杂软件应用,由一个或多个微服务组成,系统的各种微服务可被单独部署,各个微服务之间松耦合,每个微服务仅关注于完成一件任务并很好的完成该任务。
微服务是 SOA 发展出来的产物,是一种比较现代化的细粒度的 SOA 实现方式
SOA(面向服务) | 微服务 |
---|---|
应用程序服务的可重用性最大化 | 专注于解耦 |
系统性的改变需要整体修改 | 系统性的改变是创建新服务 |
DevOps和持续交付正在变得流行,不是主流 | 强烈官族DevOps和持续交付 |
专注一业务功能重用 | 更重视 上下文 边界 的概念 |
通信使用企业服务总线 ESB | 对于通信,使用较少和简单的消息系统 |
支持多种消息协议 | 使用轻量级协议,如HTTP、REST等 |
对部署到它的所有服务使用通用平台 | 应用程序服务器不是真的被使用,通常使用云平台 |
容器(docker)的使用不太受欢迎 | 容器在微服务方面效果很好 |
SOA 服务共享数据存储 | 每个微服务可以拥有单独的数据存储 |
共同的治理和标准 | 轻松的治理,更注重团队协作和选择自由 |
Spring 全家桶
用起来很舒服,无所不能
Dubbo
很多国内企业还在用,支持RESTful 风格的 API,调用 API 像调用本地 API 一样,同时其基于接口的方式增加了服务间的耦合
对比项 | Spring Cloud | Dubbo |
---|---|---|
服务注册中心 | Spring Cloud Netflix Eureka | ZooKeeper,Nacos |
服务调用方式 | REST API | RPC |
服务网关 | Sping Cloud Netflix Zuul | Dubbo Proxy |
断路由 | Sping Cloud Netflix Hystrix | Sentinet |
分布式配置 | Sping Cloud Netflix Config | Nacos |
服务跟踪 | Sping Cloud Netflix Sleuth | 无 |
消息总线 | Sping Cloud Netflix Bus | 无 |
数据流 | Sping Cloud Netflix Stream | 无 |
批量任务 | Sping Cloud Netflix Task | 无 |
Dubbo由于是二进制传输,占用带宽更少
Spring Cloud 是http 协议传输,带宽比较多,同时使用 http,一般会使用Json报文,消耗会更大
Dubbo 开发难度打,Dubbo 的 jar 包依赖问题很多大型工程无法解决
Spring Cloud 的接口协议比较自由且松散,需要更强有力的行政做事来限制接口无序升级
Dubbo 的注册中心可以选择ZooKeeper Redis 等多种,Spring Cloud 只能用 eureka 或者自研
系统结构简易程序:
Spring Cloud 系统结构更简单:注册 + Spring MVC = Spring Cloud
Dubbo: 各种复杂Url、protocol、register 等
性能:Dubbo 网络消耗小于 Spring Cloud ,但是国内大多数公司,网络消耗不是太大问题,如果成了问题,可以通过压缩、二进制、高速缓存、分段降级等方法,很容易解决