一步步打造微服务架构的云原生应用

基于 Spring & Docker & 蜂巢

黄庆兵

网易云 • 蜂巢

2016.12.30

自我介绍

2

目录

3

微服务(Microservices)

4

从一篇漫画说起

西乔漫画当一个项目里的代码超过一百万行……

5

架构变迁

- 出门左转,我在KS上写的一篇总结文章:《互联网时代,我眼中的架构变迁》
6

应用架构演变 - 抽象描述

7

应用架构演变 - 形象描述

8

应用架构演进

让我们来开发一个应用
9

应用架构演进

刚开始时
10

应用架构演进

随着开发语言的发展
11

应用架构演进

在框架和设计模式的帮助下
12

应用架构演进

单体架构 (Monolith) 成形

常用的语言都支持开发单体架构

- Java: 一个单独的 JAR/WAR 文件
- Rails / Node.JS: 一个单独的目录结构
- Go: 一个可执行二进制文件
13

应用架构演进

单体模式的选择

在项目刚开始的时候,还是一个不错的选择

- 利用已有的工具和环境
- 快速开发一个模型
- 不必担心应用的分布式部署
14

应用架构演进

单体模式的优势

从开发、测试、运维三个角色出发

- 易于开发:开发人员已经熟练使用的IDE或框架
- 易于测试:已有的UI自动化测试工具进行端到端测试
- 易于部署:打包整个应用到生产环境,并利用已有的自动化部署工具
15

应用架构演进

单体模式的不足

- 应用工程变得又大又复杂
- 敏捷开发和快速交付举步维艰
- 难以采用新技术新语言
16

应用架构演进

使用 微服务架构 重新设计我们的应用

17

应用架构演进

应用架构继续变得复杂, 微服务架构 也能应对自如

18

应用架构演进

微服务架构特点

- 由多个独立运行的微小服务构成
- 通过轻量级的机制通信
- 独立构建部署
- 每个服务可以使用不同语言
- 每个服务可以使用不同数据库
19

应用架构演进

微服务架构优缺点

20

微服务架构 VS 微型机器人


21

云原生(Cloud Native)

22

从一本书说起

云计算书籍:《云原生应用架构与实践》

23

从另二本书说起

A cloud-native application is an application that has been designed and implemented to run on a Platform-as-a-Service (PAAS) installation and to embrace horizontal elastic scaling (水平弹性伸缩).

24

从三个方面理解 云原生应用

云原生应用,简单说就是面向云的应用,或者叫云平台应用

25

总结: 微服务 VS 云原生

微服务 != 云原生
26

Spring(Boot & Cloud)

27

Spring 家族:涉及到三个成员

https://spring.io/projects - Spring Framework/Boot/Cloud
28

Spring Framework

A framework core supported for dependency injection, transaction management, web applications, data access, messaging, testing and more.

好比:蛋糕原材料
29

Spring Boot

A JVM micro-framework base on Spring framework for building microservices

好比:蛋糕原型
30

Spring Cloud

A toolset designed for turning Spring Boot microservices into distributed applications

好比:蛋糕店
31

放在一起感受一下

32

Docker(容器 & 编排)

33

容器技术的历史

34

Docker 的诞生

- 2013 年 3 月 15日,在加利福尼亚州圣克拉拉市举办的 Python 开发者大会上
- dotCloud 的创始人兼 CEO Solomon Hykes
- 在一个微型演讲《The future of Linux Containers》(只有5分钟)中向世人宣布了 Docker
- 演讲链接:https://youtu.be/wW9CAH9nSLs
- 源码托管在 GitHub 中:https://github.com/docker/docker 基于Go语言开发
35

Docker VS 集装箱


- 集装箱        =>     容器
- 货物          =>     应用
- 集装箱拖船     =>     云服务器
- 集装箱吊车     =>     容器编排工具
- 集装箱仓库     =>     镜像仓库
- 拖车          =>     镜像发布工具
- 港口          =>     公有云
- 海运公司       =>     云计算厂商
36

Docker VS 虚拟机

好比:公寓套间 VS 一个房间
37

怎么定位Docker?从三个问题入手

- 环境一致性
- 资源隔离
- 快速交付
38

引出 Docker 三个基本特性

1. 不变 :将操作系统、依赖库、应用程序等都打包在 Container 內,确保每次构建的 Container 都拥有同样的行为。

2. 轻量 :Container 不需消耗太多内存,只需使用主程序所需的用量,在多加上数十兆内存就足夠。

3. 快速 :Container 启动就如同平时启动 Linux 程序一样快,仅需耗費几秒钟的时间。

39

最后:说说Docker 的应用场景

- Web应用服务
- 微服务架构使用
- 跑一次性/定时任务
- 科学计算/大数据分析服务

Docker 是一套以容器技术为核心的,用于应用的构建、分发和执行的体系和生态。

40

Demo与实践(网易蜂巢)

41

Demo展示

分三步:

1. 单体架构(应用和数据分离)
2. SOA架构(前后端分离,服务化)
3. 微服务架构(服务注册与发现,分布式配置管理、负载均衡、服务网关、断路器)

所需环境:

1. JDK(8)、Maven(3+杭研仓库)
2. Intellij IDEA CE
2. Spring Boot/Cloud (Java)
3. Docker(Go)+Compose(Python)
4. 网易蜂巢账号

参考链接:

- https://g.hz.netease.com/cloudcomb/cloud-native-app-sample
- http://start.spring.io/
- https://c.163.com/
42

Demo展示-单体架构

43

Demo展示-SOA

44

Demo展示-微服务架构

45

公司产品实践 - 基于网易蜂巢-网易三拾-众筹平台 - zc.163.com

46

公司产品实践 - 基于网易蜂巢-网易三拾-众筹平台 - zc.163.com

- 自10月27上线以来,三拾众筹系统(不包括基础服务)发布版本1710次,其中43次线上版本发布;发布线上配置33次,新系统设计到上线1 ~ 3周
47

Q&A

@github/163yun

48

Thank you

黄庆兵

网易云 • 蜂巢

2016.12.30

Use the left and right arrow keys or click the left and right edges of the page to navigate between slides.
(Press 'H' or navigate to hide this message.)