Cloud Native 架构下的 K8S 和微服务实践 · 2018 Building Microservice NO.1 深圳站:...

28
华为微服务框架 ServiceComb 姜宁 华为公司 技术与家 Building Microservice NO.1 深圳站 Cloud Native 架构下的 K8S 和微服务实践

Transcript of Cloud Native 架构下的 K8S 和微服务实践 · 2018 Building Microservice NO.1 深圳站:...

Page 1: Cloud Native 架构下的 K8S 和微服务实践 · 2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践 ServiceComb 1.0.0-m1新特性 •Java

华为微服务框架 ServiceComb

姜宁 华为公司 技术与家

Building Microservice NO.1 深圳站

Cloud Native 架构下的 K8S 和微服务实践

Page 2: Cloud Native 架构下的 K8S 和微服务实践 · 2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践 ServiceComb 1.0.0-m1新特性 •Java

INTRODUCTION

2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践

SPEAKER

华为公司

ServiceComb项目负责人.

Apache Member

Apache Camel , Apache CXF, Apache ServiceMix PMC member , Committer.

Redhat, IONA, Travelsky

Page 3: Cloud Native 架构下的 K8S 和微服务实践 · 2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践 ServiceComb 1.0.0-m1新特性 •Java

CONTENTS

2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践

TABLE OF

01

03

02

04

ServiceComb项目是什么?

ServiceComb的特点是什么?

ServiceComb的最新进展?

如何加入到ServiceComb社区开发?

Page 4: Cloud Native 架构下的 K8S 和微服务实践 · 2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践 ServiceComb 1.0.0-m1新特性 •Java

2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践

ServiceComb是一个什么样的项目?

开源

微服务

框架

解决方案

侵入式

非侵入式

多语言

Page 5: Cloud Native 架构下的 K8S 和微服务实践 · 2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践 ServiceComb 1.0.0-m1新特性 •Java

2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践

ServiceComb的来源

SPO Cloud 核心网

Cloud ServiceEngine

Page 6: Cloud Native 架构下的 K8S 和微服务实践 · 2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践 ServiceComb 1.0.0-m1新特性 •Java

2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践

ServiceComb项目介绍

• Java/Go Chassis • Java/Go 微服务框架 • 提供微服务注册发现以及限流降级,容错熔断等治理功能

• Service Center • 高性能,高可用服务注册中心

• Saga • 微服务数据一致性问题解决方案 • 提供一个集中式的事务协调器,协调微服务乊间的事务,保证事务最终一致性

Page 7: Cloud Native 架构下的 K8S 和微服务实践 · 2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践 ServiceComb 1.0.0-m1新特性 •Java

2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践

ServiceComb Chassis架构

通信模型

序列化

传输协议

编程模型

Spring MVC

POJO

JAXR

服务契约 OpenAPI

服务发现 熔断 负载均衡 配置 跟踪 …

运行模型

Page 8: Cloud Native 架构下的 K8S 和微服务实践 · 2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践 ServiceComb 1.0.0-m1新特性 •Java

2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践

服务契约

• 作为服务消费者 • 需要明确如何调用服务 • 需要明确服务调用参数有哪些 • 需要知道传输的内容是什么

• 作为服务的提供方 • 提供详细的描述文档很困难 • 提供和维护标准的SDK也很难 • 提供用户支持也丌太方便

Page 9: Cloud Native 架构下的 K8S 和微服务实践 · 2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践 ServiceComb 1.0.0-m1新特性 •Java

2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践

围绕服务契约进行开发

Page 10: Cloud Native 架构下的 K8S 和微服务实践 · 2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践 ServiceComb 1.0.0-m1新特性 •Java

2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践

异步性能支持

• 基于Vertx提供的异步内核

• 保持高性能的同时支持同步调用方式

• 将通信线程不业务处理线程分离

• 操作级别线程池控制,支持隔离仓

• 支持多种异步编程接口 • CompletableFuture • RxJava • Reactive Stream • …….

Process

Event-Loop

Process

R R W W

线程池

Page 11: Cloud Native 架构下的 K8S 和微服务实践 · 2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践 ServiceComb 1.0.0-m1新特性 •Java

2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践

分布式追踪

• 支持标准的分布式调用追踪Zipkin V1,V2

• 支持通过@span扩展自定义追踪

• 通过调用链支持自定义追踪扩展

Page 12: Cloud Native 架构下的 K8S 和微服务实践 · 2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践 ServiceComb 1.0.0-m1新特性 •Java

2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践

Metrics

• 覆盖关键指标

• 支持多时间周期性能指标统计

• 集成Prometheus,OverWatch

• 提供health check 接口检查

Metrics 子项 说明

微服务资源使用 CPU、ThreadCount、Heap、NonHeap 基本的资源使用状态

Consumer端 Latency、CallCount、TPS 包含操作级别和微服务实例级别

Producer端 waitInQueue、lifeTimeInQueue、executionTime、Latency、CallCount、TPS

包含操作级别和微服务实例级别

Page 13: Cloud Native 架构下的 K8S 和微服务实践 · 2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践 ServiceComb 1.0.0-m1新特性 •Java

2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践

Metrics on OverWatch

Page 14: Cloud Native 架构下的 K8S 和微服务实践 · 2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践 ServiceComb 1.0.0-m1新特性 •Java

2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践

支持Spring Boot 不 Spring Cloud

ServiceComb Starter

Spring Boot

ServiceComb Configure Starter

Spring Cloud

ServiceComb Main

ServiceComb Registry Starter

ServiceComb Discovery Starter

Page 15: Cloud Native 架构下的 K8S 和微服务实践 · 2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践 ServiceComb 1.0.0-m1新特性 •Java

2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践

微服务数据一致性问题

A B C

commit rollback

Page 16: Cloud Native 架构下的 K8S 和微服务实践 · 2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践 ServiceComb 1.0.0-m1新特性 •Java

2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践

微服务数据一致性问题

A B C

Page 17: Cloud Native 架构下的 K8S 和微服务实践 · 2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践 ServiceComb 1.0.0-m1新特性 •Java

2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践

Saga介绍

• 1987年Hector & Kenneth 发表论文 Sagas

• Saga = Long Live Transaction (LLT)

• LLT = T1 + T2 + T3 + ... + Tn

• 每个本地事务Tx 有对应的补偿 Cx

T1 T2 T3 C3 C2 C1

https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf

T1 T2 T3 ... Tn C1 C2 C3 ... Cn

T1 T2 T3 ... Tn 正常情况 异常情况

Page 18: Cloud Native 架构下的 K8S 和微服务实践 · 2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践 ServiceComb 1.0.0-m1新特性 •Java

2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践

分布式Saga系统

Saga Coordinator

Saga Saga

Saga ID: x

Saga Log

Saga Started

T1 Started

T1 Ended

T2 Started params { T1:[a,b], C1:[c,d], ... }

config { T1: name, path, C1:name, path, ... }

Transaction Viewer Caller

Aggregator

1 2 3

Service Registry

Dynamic Config

Page 19: Cloud Native 架构下的 K8S 和微服务实践 · 2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践 ServiceComb 1.0.0-m1新特性 •Java

2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践

Saga Pack版本

• Alpha - 族群领袖, Saga 协调器

• Omega – 族群成员, 事务协调代理

Alpha

Service A

Omega

Service B

Omega

Alpha Alpha

Page 20: Cloud Native 架构下的 K8S 和微服务实践 · 2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践 ServiceComb 1.0.0-m1新特性 •Java

2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践

Omega内部实现

Pre Processor

Alpha

Post Processor

Transaction

A started

A ended

B started

B ended

Request (tx id)

Request Interceptor

Saga started

Page 21: Cloud Native 架构下的 K8S 和微服务实践 · 2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践 ServiceComb 1.0.0-m1新特性 •Java

2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践

Omega不Alpha乊间的交互

Omega

Service A User

request intercept

pre-process

post-process

transaction

intercept

Alpha

record event

record event

response

Page 22: Cloud Native 架构下的 K8S 和微服务实践 · 2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践 ServiceComb 1.0.0-m1新特性 •Java

2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践

跨服务事务追踪

• 通过一个全局事务将这些子事务关联在一起

• 服务提供方通过Omega注入全局事务ID

• 服务的消费方通过Omega获取全局事务ID

Request Interceptor Inject tx id

Service Business Logic

Request (tx id)

Request Interceptor Retrieve tx id

Request Interceptor Inject tx id

Service Business Logic

Request Interceptor Retrieve tx id

A B

Page 23: Cloud Native 架构下的 K8S 和微服务实践 · 2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践 ServiceComb 1.0.0-m1新特性 •Java

Alpha

Omega

Service A Service B User

Omega

request intercept

Inject tx id

pre-process

post-process

transaction

intercept retrieve tx id

pre-process

post-process

transaction

record event

record event

record event

record event successful response

intercept Inject tx id

Successful Scenario

Page 24: Cloud Native 架构下的 K8S 和微服务实践 · 2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践 ServiceComb 1.0.0-m1新特性 •Java

Alpha

Omega

Service A Service B User

Omega

request intercept

Inject tx id

pre-process

post-process

transaction

intercept retrieve tx id

pre-process

throw ex

transaction

record event

record event

record event

record event failed response

intercept Inject tx id

compensate

Exception Scenario

Page 25: Cloud Native 架构下的 K8S 和微服务实践 · 2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践 ServiceComb 1.0.0-m1新特性 •Java

Alpha

Omega

Service A Service B User

Omega

request intercept

Inject tx id

pre-process

post-process

transaction

record event

record event

record event failed response

intercept Inject tx id

compensate

timeout

Timeout Scenario

Page 26: Cloud Native 架构下的 K8S 和微服务实践 · 2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践 ServiceComb 1.0.0-m1新特性 •Java

2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践

ServiceComb 1.0.0-m1新特性

• Java Chassis • 异步调用接口支持 • 监控指标模块优化,支持不prometheus, OverWatch • 支持通过携程Apollo劢态配置实例

• Service Center • 优化Service Center性能,修复Bug

• Saga 0.1.0 • 支持通过Annotation在用户代码定义事务 • Pack原型实现,通过切面编程技术获取事务信息,通过集中式的事务管理器协调事务执行情况

Page 27: Cloud Native 架构下的 K8S 和微服务实践 · 2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践 ServiceComb 1.0.0-m1新特性 •Java

2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践

如何参不到ServiceComb社区

• 线上 • 关注ServiceComb微信小劣手 • 在官网获取快速入门以及相关教程 • 加入微信群不开发人员进行交流 • 通过邮件列表讨论 [email protected] • Github发起PR

• 线下 • 月度Meetup • 丌定期的技术沙龙研讨

Page 28: Cloud Native 架构下的 K8S 和微服务实践 · 2018 Building Microservice NO.1 深圳站: Cloud Native 架构下的 K8S 和微服务实践 ServiceComb 1.0.0-m1新特性 •Java

THANKS