查看原文
其他

融数数据基于DevOps的微服务架构演进之路

2017-03-25 王东 中生代技术

  中生代技术嘉年华  —

2017.3.18,中生代技术嘉年华在成都盛大召开,6大主题、20话题同时在3个场馆同步进行,相信来了现场的小伙伴们都有过不能同时在3个场馆听现场的纠结,因故没来现场的更想知道现场的盛况和内容,我们将会陆续将各话题整理发布,让大家共享这场技术盛筵。

中生代技术嘉年华成都纪实(一)中生代技术嘉年华成都纪实(二)中可看到更多照片和话题汇总。

主题:互联网架构

 

融数数据基于DevOps的微服务架构演进之路

- 融数数据CTO  王东

讲师介绍

王东:

  • 现任融数数据北京研发中心CTO,负责公司大数据平台、微服务框架以及DevOps平台的研发工作; 

  • 毕业于天津大学,毕业后一直从事软件相关研发和架构设计工作,曾经在普元软件任资深架构师、IBM GBS任咨询经理、亚马逊任架构师等,后加入创业公司,从事研发和管理工作; 

  • 热爱编程,喜欢钻研新技术,对于微服务、企业架构、大数据以及DevOps有浓厚的兴趣。 


谈谈微服务

近年来微服务热度逐渐增加,从Gartner 2016年技术hyper cycle图上可以看出,微服务是目前非常流行的技术,从amazon,google,facebook等大型互联网公司到一些传统企业,都在采用微服务架构。

那么,微服务到底是什么?

“Microservices are loosely coupled service oriented architecture with bounded contexts.” (Adrian Cockcroft, Netflix) 

微服务应该尽量避免对通用组件或者基础构建块的依赖,例如数据库;

Bounded context来源于DDD,其提供了一种将大型架构拆分成具体feature的方法,真正的微服务希望团队无需过多地了解其他微服务团队的业务知识。


微服务与SOA有什么区别?

微服务架构依旧遵循SOA的设计原则

微服务架构强调敏捷、独立开发、独立部署、独立扩展,“小”不是微服务的判断标准: 

  • 一个服务只实现一个独立的Feature 

  • 尽量不要为外部应用发布代码级API,依赖通过服务调用或者事件搞定 

  • 服务之间最好通过异步事件交互 每个服务拥有自己独立的数据

微服务与SOA的对比


融数数据微服务架构

融数微服务架构选型思考的几点原则

选型过程中,我们比较了流行的开源框架

构建融数微服务架构,希望得到什么?

因此,我们的选型经历了如下过程:


融数微服务架构总览


融数微服务架构之服务端 – Graeae Endpoint

  • Graeae是一个协议无关的服务框架 

  • 对GRPC进行了封装,优化了GRPC代码生成的结构,调用方式,并采用同步方式简化GRPC调用和实现的基于Oberserver的异步调用 

  • 增强了GRPC的LifeCycle,添加了服务注册,基于zipkin的调用链等功能 

  • 重构了gRPC框架生成的Stub的结构,解耦和Stub,消除了基类继承 

  • 添加了Graeae框架的Spring Starter,简化了服务启动和客户端调用


融数微服务架构之端点 – Graeae Endpoint

  • 抽象基于生命周期的服务容器概念,将服务运行时划分为生命周期的各个阶段,在生命周期的各个阶段完成对服务上下文的构建与管理 

  • 提供对服务端治理的注册、寻址支持 

  • 提供对部署层的代码、配置分离 

  • 底层基于gRPC,在gRPC基础上对易用性及功能性进行加强: 

  • \基于annotation标注及stub重新构建,打断业务实现与gRPC的紧耦合 

  • 重构stub,简化方法调用,屏蔽gRPC stub易用性间隙 

  • 客户端增加熔断器,增强应用容错 其他部分增强,如支持zipkin


融数微服务架构之服务代理 - Proxy


融数微服务架构之服务治理 – 基于Proxy的服务端治理

  • Proxy是Client访问的端点 

  • Proxy负责服务实例的信息收集和注册 

  • 基于Proxy的路由功能结合语义化版本(X.Y.Z)的概念进行不同服务的版本管理 

  • 利用Docker简化部署 利用Proxy绑定VIP来简化客户端寻址



融数微服务架构之服务调用链

  • 基于开源zipkin构建 

  • 分析服务调用关系,绘制运行时拓扑信息 

  • 衡量成功率/超时信息  

  • 为服务扩容/缩容/降级/流控等提供数据参考 

  • 与运维监控平台结合,发送服务报警信息


微服务架构之基于Pinpoint的APM监控

  • gRPC探针 

  • 服务调用链拓扑 

  • 调用链监控 

  • 与告警平台整合 

  • 利用报障平台跟踪改进



微服务架构的未来规划

  • Transport多协议接入 

  • 通过Proxy将gRPC协议转换成Rest服务 

  • 基于Web的脚手架工具 

  • 利用Pinpoint替代Zipkin,更加精细化的服务调用链监控 

  • 多语言支持,计划支持Node.js, Python和Go


我们是如何一步步实施微服务的:



  1. 从单体应用或者传统分层架构的应用想服务化过渡,通过封装和组合等方式,提供对外发布接口的能力,从而提升应用的可访问性;

  2. 通过重构将domain-level的功能模块转变为可以独立部署的服务,从而提升整个应用的敏捷性;我们称之为miniservice,其粒度比微服务粗(domain level),因而抽象的难度比较低,但是也能在一定程度上获得微服务所带来的敏捷性提升的好处,但是对DevOps的基础设施等要求也没有微服务高

  3. 通过Feature-Level的抽象,根据单一职责原则将miniservices差分成微服务,从而获得更高地扩展性和敏捷性

  4. 独立的数据可以使独立数据源或者独立



拥有了一套服务开发框架,我们就拥有了微服务?


微服务与DevOps

微服务为什么需要DevOps?

微服务的主要目的是为了敏捷 

微服务表达了原子核心业务(Feature),但是也带了新的挑战-将单体应用的复杂性从程序内部转移到了服务组件之间 

因此,根据Martin Fowler提出的观点,微服务需要具备以下三个重要能力: 

  1. 硬件资源是否能够快速到位 – 环境管理的能力 

  2. 是否具备了微服务监控能力 – 分布式监控能力 

  3. 是否具有快速的开发部署流程 – 敏捷成熟度和自动化程度 

服务粒度的细化,导致团队间的合作和沟通变得困难,当发生问题时,我们希望问题快速的暴露并得到迅速的解决,而DevOps是开发和运维团队的粘合剂,能够促进合作,提升解决问题的效率。



那么DevOps是什么?

DevOps works for startups, but enterprises need it more.


对于DevOps文化,从全栈小团队说起

  • 康威定律 

  • Two-Pizza Team 



如何划分小团队,团队间怎样协作?

团队切小后,我们按照业务线对组织进行架构,以便技术团队能够专注的解决对应业务的问题(业务驱动,或者说业务优先)


这时,团队内部的设计决策,将在团队内部消化,因为团队的规模已经是7+/-2人的量级,一般情况下不会有特别负责的工作。


但团队增多后,团队的协调将是一个问题,因此,微服务从技术上帮助团队所负责系统的解耦,而计划流程有帮助团队在工作安排上找到合理的步骤


那么,当一个大的业务被分解到各个小团队时,还是会有跨团队的设计工作,以上两点是要严格执行的。


技术团队和业务团队的合作并非经由上层协调,双方主要的沟通都是团队之间直接的水平沟通,也就是说:


在最底层的团队之间,需求、问题和日常交流都是直接由业务团队反馈给技术团队的经理。


而问题的解决容许业务团队直接接触开发人员


另外,水平的沟通发生在业务和技术团队的各个层面上。


向上的汇报机制用来反馈问题和业务的进展情况。


我们提倡什么样的团队文化

主人翁意识(Ownership) 

行动力(Bias for Action)

吃自己的狗粮(Eat your dog food)

  • 工程师负责从需求调研、设计、开发、测试、部署、维护、监控、功能升级等一系列的工作,也就是说软件工程师负责服务的全生命周期的所有工作 

  • 运维是团队成员的第一要务,在强大的自动化运维工具的支撑下,软件工程师必须负责服务或者应用的 SLA 

让开发人员参与架构设计,而不是架构师参与开发 

  • 研发人员是Owner,对业务和团队负责 

  • 强调抽象和简化,将复杂的问题分解成简单的问题,并有效解决,防止过度设计 

  • 鼓励用新技术解决问题,但强调掌控力


融数如何利用DevOps平台构建微服务



打造融数数据卓越运营平台


建立高效的开发+运维的生产和反馈闭环


围绕智能报障的自改进生态


构建相互支撑的整个系统生态+流程


逐步构建卓越运营体系

遇到问题,迅速跟进、快速解决

  • 定制 SLA 

  • 7X24轮值 

  • 时效监控 

  • 多渠道通知 

  • 上报机制



想观看现场视频,可从下图二维码进入


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存