微服务云应用开发技术前瞻
微服务体系结构简介
-
API Gateway(Api 网关)
-
为体系(或子系统)提供统一的访问入口
-
在统一访问的基础上,能够实现
-
访问的认证与授权(策略控制)
-
动态路由
-
服务迁移
-
负载均衡
-
限流、降级等反向代理
-
测试规划
-
压力测试
-
金丝雀测试(灰度测试)
-
-
-
服务注册中心(Service Register Server)
-
所有微服务都会注册在中心
-
注册中心提供功能(服务器端)
-
服务注册
-
服务下线
-
服务续约
-
剔除失效服务
-
-
客户端
-
服务获取
-
服务调用
-
容错
-
大致可归为三类:
- 应用内:直接集成到应用中,依赖于应用自身完成服务的注册与发现,最典型的是Netflix提供的Eureka
- 应用外:把应用当成黑盒,通过应用外的某种机制将服务注册到注册中心,最小化对应用的侵入性,比如Airbnb的SmartStack,HashiCorp的Consul
- DNS:将服务注册为DNS的SRV记录,严格来说,是一种特殊的应用外注册方式,SkyDNS是其中的代表
配置管理中心(Configuration Server)
-
分布式配置管理中心
-
每个服务都有可能包含不同类型的配置
- 开发环境、测试环境和生产环境
-
-
提供的常用功能
-
提供统一、集中配置管理
- 配置一致性
-
不同环境提供不同配置
- 开发、测试和生产
-
运行期间的动态配置更新
-
配置版本管理(回滚)
-
授权与认证服务(策略控制)
-
通常是身份认证与安全控制
-
服务提供的功能
-
安全、简单和开放
-
服务无状态
-
能跨语言、跨服务(甚至跨域)调用传递
-
具有足够性能
-
OAuth2/JWT
- JWT: JSON Web Token
-
-
断路器与容错机制
-
分布式系统中不可避免失败,所以需要建立一种有效的防御机制来避免和隔离失败
-
断路器或容错机制需要面对:
-
隔离:线程隔离,信号量隔离。避免个别服务故障扩大。
-
熔断:当失败率达某阈值时,触发快速失败
-
降级:超时降级、熔断降级,可以使用回调返回保底数据
-
缓存:请求缓存、请求合并
-
实时监控与报警
-
-
-
分布式服务追踪与日志整合
-
根据服务的划分,带来就是一个业务会由多个服务协作完成,形成调用链。
-
我们需要追踪和监控这些链路,最终掌握服务的工作质量
-
每个调用的实时数据收集
-
数据存储
-
数据分析与展示
-
-
消息总线与消息驱动
-
EDA:事件驱动架构,本身就是一个应用广泛的设计与开发思想。消息发布者只关注消息的发布,而消费者只关注自己感兴趣的消息。
-
EDA 带来的好处:
-
低耦合
-
持久性
-
高可扩展性
-
高灵活性
-
运行环境平台管理
-
使用 Docker 作为每个微服务的运行容器
-
引入 Docker 管理平台
-
OpenShift Origin (RadHat)
- 基于 Docker + Kubernetes
-
Kubernetes(CNCF)
-
其他内容
-
数据存储
-
MySQL
-
Splunk
-
ELK
-
Redis
-
-
消息忠线
- RabbitMQ/Kafka
-
DevOps
-
Jenkins --- 持续集成
-
Git --- 源代码管理
-
Ansible --- 运维
-
云应用开发框架
-
Spring Cloud 全家桶
- 基础:Spring Framework + Spring Boot
-
Dubbo (阿里巴巴)
- Spring Framework + zk
-
Vert.X (Eclipse 基金会)
- 异步消息总线(自成系统)
Spring Cloud 全家桶
-
Spring 家族
-
Spring Framework -- 基础
-
Spring Boot -- 应用整合
-
简化配置
-
大量应用整合
-
-
Spring Data 数据存取
-
Spring Cloud 云应用整合
-
Spring Security -- 安全
-
Spring Cloud 全家桶
-
提供完整微服务开发框架
-
API 网关
-
Spring Cloud Netflix Zuul
-
Spring Cloud Gateway
-
-
服务注册中心
-
Spring Cloud Netflix Eureka
-
Spring Cloud Consul
-
Spring Cloud ZooKeeper
-
-
配置管理中心
- Spring Cloud Config
-
授权与认证服务
- Spring Cloud Security
-
断路器与容错处理
- Spring Cloud Netflix Hystrix
-
分布式服务追踪与日志整合
-
Spring Cloud Sleuth
-
Spring Cloud Zipkin
-
-
消息总线与消息驱动
-
Spring Cloud Stream
-
Spring Cloud Bus
-
-
其他
-
客户端负载均衡:Spring Cloud Ribbon
-
REST 声明式编程:Spring Cloud Feign
-