Docker+k8s微服务¶
-
什么是软件架构?
软件架构是在软件内部,经过综合各种因素的考量、权衡,选择特定的技术,将系统划分成不同的部分并使这些部分相互分工,彼此协作,为用户提供需要的价值。
-
什么是微服务?
使用一套小服务来开发单个应用的方式,每个服务运行在独立的进程中,一般采用轻量级的通讯机制互联,并且它们可以通过自动化的方式部署。
特点:单一职责;轻量级通信(语言无关、平台无关);隔离性;有自己的数据;技术多样性。
-
什么是单体架构?
功能、业务集中在一个发布包里,部署运行在同一进程中。
优点:易于开发、易于部署、易于测试、易于水平伸缩。
缺点:代码膨胀,难以维护;创新困难;构建、部署成本大;可扩展性差。
-
微服务之间如何通讯?
从通讯模式角度考虑:
一对一 一对多 同步 请求响应模式,最常见 异步 通知/请求异步响应 发布订阅/发布异步响应 从通讯协议角度考虑:
- REST API
- RPC:Dubbo/Dubbox、Thrift、Motan、Grpc
- MQ
-
RPC框架要向调用方屏蔽各种复杂性,要向服务提供方也屏蔽各类复杂性:
- 调用方感觉就像调用本地函数一样
- 服务提供方感觉就像实现一个本地函数一样来实现服务
-
Dubbo的架构为:
-
Motan
-
Thrift
-
Grpc
RPC对比 Dubbo Motan Thrift Grpc 开发语言 Java Java 跨语言 跨语言 服务治理 √ √ χ χ 多种序列化 √ √ 只支持thrift 只支持protobuf 多种注册中心 √ √ χ χ 管理中心 √ √ χ χ 跨语言通讯 χ χ √ √ 整体性能 3 4 5 3 -
服务发现
-
传统服务
-
微服务的客户端发现
-
微服务的服务端发现
-
-
流行的服务编排工具:Mesos、Docker Swarm、Kubernetes。
-
Spring Cloud vs Spring Boot:
- Spring Boot意在简化,是一种开发、配置风格。
- Spring Cloud意在简化分布式,是功能的集合,风格的统一。
-
Spring Cloud核心组件:
- Netflix Eureka 服务发现组件
- Netflix Ribbon 客户端负载均衡组件
- Netflix Hystrix 容错组件
- Netflix Zuul 服务网关
- Spring Cloud Config 分布式配置