微服务
单体架构
经典的3层模型 mvc
- 表示层:用于和用户交互,通常是网页
- 业务逻辑层:用户输入的信息的处理逻辑
- 数据访问层:用于操作数据库
单体架构不足
- 代码的可读性,可维护性,和可扩展性下降
- 并发能力有限
- 测试难度增加
单体架构集群不足
- 代码的可读性,可维护性,和可扩展性很差
- 数据库瓶颈,需要分库分表
- 接续交付能力差,维护成本高
微服务架构
微服务架构的风格,就是将单一程序开发成一个微服务,每个服务运行在自己进程中,并使用轻量级机制通信,一般是RESTFUL风格
- 服务按业务划分
- 服务之间通过协议通信比如,HTTP协议,json数据格式
- 自动化部署DevOps,Jenkins
- 跨语言
- 不同的存储方案
- 管理集中化,zookeep,Eureka,nacos
- 分布式系统
- 熔断机制
优势
- 复杂业务简单化,拆分优化,服务边界明确
- 解耦合
- 可以根据业务再拆分,扩展性高,集群化部署,负载能力强
- 减少测试和部署的压力,只需测试和部署单个服务
- 采用CAP理论的AP架构,具有高可用和分区容错的特点
缺点
- 复杂度,服务之间相互依赖,负载度增加
- 分布式事务
- 服务的划分
- 服务的部署
- 服务故障的传播性
微服务的功能
- 服务的注册与发现
- 服务的负载均衡
- 服务的容错性,熔断机制,资源隔离,服务降级,自我复原2
- 服务的网关
- 服务配置的统一管理
- 服务的链路追踪
Dubbo简介
dubbo 是一个阿里开源的分布式服务框架,高性能和透明化的RPC远程服务调用解决方案
- rpc远程调用:封装了NIO框架,Netty,采用多线程模式
- 集群容错:提供了基于接口方法的远程调用的功能,并实现了负载均衡,失败容错
- 服务发现:zookeeper
springcloud 与 dubbo 比较
服务关注点 | springcloud | dubbo | kubernetes | SpringCloudAlibaba |
---|---|---|---|---|
配置管理 | Config | - | Kubernetes ConfigMap | nacos |
服务发现 | Eureka,Zookeepr,… | Zookeepr | Kubernetes Services | nacos |
负载均衡 | Ribbon | 自带 | Kubernetes Services | ribbon |
网关 | Zuul,Gateway | - | Kubernetes Services | |
分布式追踪 | SpringCloud Sleuth | - | Open tracing | |
容错 | Hystrix | 不完善 | Kubernetes Health Check | Sentinel |
通信方式 | Http | RPC | - | |
安全 | SpringCloud Security | - | - | |
分布式日志 | ELK | Spring Cloud Security | - | |
任务管理 | Spring Batch | - | Kubernetes Jobs |
Kubernetes k波哒斯
特点:
- Placet Scale(大容量)
- Never Outgrow(永不过时)
- Run Anywhere (随时随地运行)
功能
- Automatic Binpacking(自动包装)
- Self-heaing(自我修复)
- Horizontal Scaling(横向扩展)
- Service Discovery and Load Balancing(服务发现和负载均衡)
- Automated Rollouts and Rollbacks(自动部署或回滚)
- Secret and Configuration Management(配置管理)
- Storage Orchestration (存储编排)
- Batch execution(批量处理)
Docker
简介
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
- DockerClient客户端
- Docker Daemon守护进程
- Docker Image镜像
- DockerContainer容器
springboot
特点
-
三大特点
- 自动配置
- 起步依赖
- 运行状态监控
-
(1)可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs;
-
(2)内嵌Tomcat或Jetty等Servlet容器;
-
(3)提供自动配置的“starter”项目对象模型(POMS)以简化Maven配置;
-
(4)尽可能自动配置Spring容器;
-
(5)提供准备好的特性,如指标、健康检查和外部化配置;
-
(6)绝对没有代码生成,不需要XML配置。
重要策略
SpringBoot框架中还有两个非常重要的策略:开箱即用和约定优于配置。
- 开箱即用,Outofbox,是指在开发过程中,通过在MAVEN项目的pom文件中添加相关依赖包,然后使用对应注解来代替繁琐的XML配置文件以管理对象的生命周期。这个特点使得开发人员摆脱了复杂的配置工作以及依赖的管理工作,更加专注于业务逻辑。
- 约定优于配置,Convention over configuration,是一种由SpringBoot本身来配置目标结构,由开发者在结构中添加信息的软件设计范式。这一特点虽降低了部分灵活性,增加了BUG定位的复杂性,但减少了开发人员需要做出决定的数量,同时减少了大量的XML配置,并且可以将代码编译、测试和打包等工作自动化。
spring cloud
Spring Cloud是一系列框架的有序集合。
它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。