融数数据基于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有什么区别?
融数数据微服务架构
融数微服务架构选型思考的几点原则
构建融数微服务架构,希望得到什么?
因此,我们的选型经历了如下过程:
融数微服务架构总览
融数微服务架构之服务端 – 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监控
微服务架构的未来规划
- Transport多协议接入
- 通过Proxy将gRPC协议转换成Rest服务
- 基于Web的脚手架工具
- 利用Pinpoint替代Zipkin,更加精细化的服务调用链监控
- 多语言支持,计划支持Node.js, Python和Go
我们是如何一步步实施微服务的:
- 从单体应用或者传统分层架构的应用想服务化过渡,通过封装和组合等方式,提供对外发布接口的能力,从而提升应用的可访问性;
- 通过重构将domain-level的功能模块转变为可以独立部署的服务,从而提升整个应用的敏捷性;我们称之为miniservice,其粒度比微服务粗(domain level),因而抽象的难度比较低,但是也能在一定程度上获得微服务所带来的敏捷性提升的好处,但是对DevOps的基础设施等要求也没有微服务高
- 通过Feature-Level的抽象,根据单一职责原则将miniservices差分成微服务,从而获得更高地扩展性和敏捷性
- 独立的数据可以使独立数据源或者独立
拥有了一套服务开发框架,我们就拥有了微服务?
微服务与DevOps
- 微服务为什么需要DevOps?
-
微服务的主要目的是为了敏捷
-
微服务表达了原子核心业务(Feature),但是也带了新的挑战-将单体应用的复杂性从程序内部转移到了服务组件之间
- 因此,根据Martin Fowler提出的观点,微服务需要具备以下三个重要能力:
那么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
- 让开发人员参与架构设计,而不是架构师参与开发
融数如何利用DevOps平台构建微服务
打造融数数据卓越运营平台
建立高效的开发+运维的生产和反馈闭环
围绕智能报障的自改进生态
构建相互支撑的整个系统生态+流程
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。