微服务和软件交付的4个原则

本文讲的是微服务和软件交付的4个原则【编者的话】本文介绍了使用微服务架构时需要考虑的问题和遵循的四个原则,对于从传统架构向微服务架构转型起到了很好的指导作用。

【上海站|3天烧脑式微服务架构训练营】培训内容包括:DevOps、微服务、Spring Cloud、Eureka、Ribbon、Feign、Hystrix、Zuul、Spring Cloud Config、Spring Cloud Sleuth等。

微服务是一个杰出的架构,因为这种架构便于对软件系统进行管理。但实际情形是,有很多遗留的应用并没有采用微服务架构,也必须纳入统一的管理范畴。任何一个企业组织,尤其是大型组织机构,都不会使用单一的软件架构。

企业拥抱微服务架构的热情正在持续升温,但就像对待任何技术行业的趋势都应该客观冷静一样,对待微服务架构也是如此。虽然目前微服务架构大行其道,但不应该因为这种趋势而盲目地对应用进行优化和改造。除非是一个创业公司,否则很可能在短时间内就要面临混合架构带来的各种问题。

微服务最大的优势在于, 不需要在同一个周期里面对系统的若干部分进行升级改造。整个系统不需要部署在一起,各个服务可以单独进行部署。如果只需要做很小的改动,不必等到下一个发布周期,因为仅仅修改了整个系统中的一个微服务组件,单独部署这个微服务就可以了。

然而,微服务不是应对所有软件开发和交付问题的灵丹妙药。除非对所有细节问题都了如指掌,否则很容易出错。这四个建议能帮助您在使用微服务的时候充分利用其优势,尽量避免相关的问题。

在开发之前对数据进行拆解

照在微服务的角度,可以将整体应用看作是一组服务,每个服务负责解决问题的不同部分。电子商务应用是一个典型的微服务架构案例。用户需要登录,浏览产品目录,根据推荐信息购物,操作购物车和付款操作等独立的功能。

如果计划将现有的应用向微服务架构迁移,那么必须对系统有着非常深入的了解,并且对各个服务之间如何交互有着清晰的认识。盲目地将整体应用拆分成微服务应用是非常不明智的选择。

对数据模型的任何改动都会对最终的工作量和成本造成直接的影响,这些改动可能是为每个微服务配置单独的数据库,或者是每个微服务一张数据表,也可能是对外键的更新。

总之,我的建议就是:在开发之前先将数据进行拆解。

在原型基础上逐渐迭代扩大

如果希望从零开始写一个应用,那么最好从一个最基本的原型开始迭代。首先,梳理清楚业务域是什么,数据关系是怎样的。处理的数据是关系数据还是事务数据。这些问题的答案对于数据结构至关重要。在将应用重构成微服务架构之前,先搞清楚系统中的依赖关系。

采用微服务架构之后,大部分开发者都希望有一个更好的自动化部署流程,这个流程直接覆盖代码签入到生产环境,与此同时也希望更方便地对整个环境进行监控。有可能当我们发现一个微服务有问题时,真正的问题源头在上游的某个服务。在这种情况下,我们就需要自动回滚有问题的服务,或者在蓝绿发布之间切换。

关注内部服务之间通信细节

服务虚拟化和服务内部通信将带来一些严重的问题。采用微服务架构最重要的一个考量就是有良好的API定义,方便服务发现和彼此之间的交互。开发者使用的是REST,http还是JSON已经变得不再重要,重要的是他们如何使用协议来实现健壮的服务间通信。当服务间的通信由于接口设计不当而产生延迟或者中断时,整个系统就会出现问题。

微服务通常倾向于部署在容器中,因为容器提供了很好的隔离机制,而且很容易地创建和删除,并且只是运行一个进程而已。容器相对于虚拟机来说,占用资源更少,因此资源利用率有着显著提升。

但是如果100个服务运行在100个容器中,将面临运维和管理双重困境。部署将变得更复杂,监控、日志和故障恢复也将越来越重要。

确保开发技能满足架构需要

将应用拆分成微服务形式之后,每个服务都可以使用不同的技术来实现。一个服务使用Java来实现,另一个头像服务是通过静态内容呈现的,再或者用Apache实现其他服务。你可以建立起一个个小型的团队,这些团队彼此依赖,他们负责开发各自的服务,从此再也不用为管理大型团队而担忧。每个团队负责管理自己的产品发布周期,不必被整个产品的发布周期所影响。

大规模地运行容器和微服务所需要的技能要求还是比较高的,目前很多组织尚不具备这种能力。但是每一个团队负责一个单一的应用则难度大大降低。无论从技术还是文化角度来说,在微服务的领域里,我们所熟知的DevOps和持续交付变得尤为重要。

微服务虽然是堪称伟大的架构,但即使新开发的应用全部采用微服务架构,也不得不面临如何处理遗留应用的问题。任何一个企业组织,尤其是大型组织机构,都不会使用单一的软件架构。他们可能有成千上万的各种类型应用程序,有的传统老旧,有的部署在大型机上,有的用的是Java语言,而有的使用COBOL。真正的挑战是如何管理所有的产品交付渠道,怎样将代码变成生产环境中可用的产品,以及如何设计产品交付流水线。

原文链接:4 Rules for Microservices and Software Delivery (翻译:付辉)

原文发布时间为:2017-03-14

本文作者:付辉

原文标题:微服务和软件交付的4个原则

时间: 2024-09-28 14:02:20

微服务和软件交付的4个原则的相关文章

云端基于Docker的微服务与持续交付实践

云端基于Docker的微服务与持续交付实践笔记,是基于易立老师在阿里巴巴首届在线技术峰会上<云端基于Docker的微服务与持续交付实践>总结而出的. 本次主要讲了什么? Docker Swarm Docker Swarm mode 微服务支持(Docker集群架构体系) Docker的发展趋势和前沿成果 在Docker技术方面还是很佩服大牛的,所以赶紧写下笔记,追随大神的脚步. 阿里云资深专家易立,技术就不说了,他比其他直播间硬生生多讲了半个多点,于情于理还是万分感谢本次分享的(可惜devOp

[翻译]使用Jenkins和Docker实现微服务的快速交付

/** * 原文出处:https://www.credera.com/blog/technology-insights/open-source-technology-insights/microservice-delivery-using-jenkins-and-docker/ * @author Tonny M<tonnyazusa@gmail.com> 2016-05-02 */ 介绍 你是否对项目日常的功能快速更新或快速修复感到满意? 什么时候才能为你的客户开放新开发的功能? 有多少人没

阿里技术专家:持续交付与微服务背后的实践逻辑

讲师介绍 崔力强 阿里巴巴技术专家   <微服务设计>中文译者之一:曾在ThoughtWorks任职软件交付和敏捷顾问: 对持续集成.自动化测试有丰富经验:目前专注于持续交付SaaS产品的开发,提供精益需求管理.软件设计.敏捷转型相关咨询服务.    前言 大家好,我是崔力强.目前在阿里巴巴任职.负责一款持续交付领域的SaaS产品的开发.非常高兴能够和大家分享持续交付和微服务的话题. 本次分享的重点是持续交付.也会提到一些微服务的概念,以及持续交付和微服务之间的关系.今天会涉及的一些实践可能大

从 Spring Cloud 开始,聊聊微服务架构实践之路

本文讲的是从 Spring Cloud 开始,聊聊微服务架构实践之路[编者的话]随着公司业务量的飞速发展,平台面临的挑战已经远远大于业务,需求量不断增加,技术人员数量增加,面临的复杂度也大大增加.在这个背景下,平台的技术架构也完成了从传统的单体应用到微服务化的演进. 系统架构的演进过程 单一应用架构(第一代架构) 这是平台最开始的情况,当时流量小,为了节约成本,并将所有应用都打包放到一个应用里面,采用的架构为 .NET SQL Server: 表示层:位于最外层(最上层),最接近用户.用于显示数

什么是微服务架构?

什么是微服务? 微服务(Microservices Architecture)是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成.系统中的各个微服务可被独立部署,各个微服务之间是松耦合的.每个微服务仅关注于完成一件任务并很好地完成该任务.在所有情况下,每个任务代表着一个小的业务能力. 单体架构(Monolithic Architecture ) 企业级的应用一般都会面临各种各样的业务需求,而常见的方式是把大量功能堆积到同一个单体架构中去.比如:常见的ERP.CRM等系统都以单体架构的方式

利用微服务构建现代应用(二)

本文讲的是利用微服务构建现代应用(二),[编者的话]本文是如何用微服构建现代应用的第二部分,介绍了如何用MongoDB中实现微服务,在迁移到微服务之前需要考虑的问题以及使用MongoDB构建微服务架构的客户案例. 在上一篇博文中,我介绍了微服务的背景知识及其优势.本文将介绍如何使用MongoDB构建微服务以及在实施微服务的项目中应该要注意的问题. MongoDB如何实现微服务 企业要享受到微服务的好处需要一些基本的技术原则,其中最主要的是灵活的数据模型.冗余.自动化和可扩展性. 灵活的数据模型:

《SpringBoot揭秘:快速构建微服务体系》—第1章1.4节微服务会带来哪些挑战

1.4 微服务会带来哪些挑战微服务给我们带来的并非只有好处,还有相应的一些挑战.服务"微"化之后,一个显著的特点就是服务的数量增多了.如果将软件开发和交付也作为一种生产模式看待,那么数量众多的微服务实际上就类似于传统生产线上的产品,而在传统生产模型下,为了能够高效地生产大量产品,通常采用的就是标准化生产.比如在汽车产业,在福特T型车没有出来之前,大多汽车企业的生产效率都不高,而福特在引入标准化生产线之后,福特T型车得以大量生产并以低成本优势快速普及.在其他行业也是同样的道理,个性化生产

《SpringBoot揭秘:快速构建微服务体系》—第1章1.3节微服务会带来哪些好处

1.3 微服务会带来哪些好处显然,随着系统复杂度的提升,以及对系统扩展性的要求越来越高,微服务化是一个很好的方向,但除此之外,微服务还会给我们带来哪些好处?1.3.1 独立,独立,还是独立我们说微服务打响的是各自的独立战争,所以,每一个微服务都是一个小王国,这些微服务跳出了"大一统"(Monolith)王国的统治,开始从各个层面打造自己的独立能力,从而保障自己的小王国可以持续稳固的运转.首先,在开发层面,每个微服务基本上都是各自独立的项目(project),而对应各自独立项目的研发团队

微服务的框架选择

从微服务说起 微服务架构(MSA)是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦.你可以将其看作是在架构层次而非获取服务的类上应用很多SOLID原则. 用通俗的话来讲,就是为了高度解耦软件之间的依赖性,使每个独立的模块都能够单独测试,单独运维,最大限度的提高软件的开发流程.从下图可以看一下微服务的软件生命周期. 软件从需求分析就可以适配模块,也就是说需求分析的过程就可以加入设计,从新的角度来说就是在哪个模块中进行升级开发,开发人员在开发完成后,通过持续集成,将开发的结