您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

微服务,你下一个软件架构的优选项

时间:2020-10-30 10:05:31  来源:  作者:

编者语:

微服务,就是将单体(monolithic)代码分解为易于维护的块,而这正是运维(devops)哲学的关键。或者说是基于不断扩展的业务而实现针对业务功能域的应用商业价值的快速交付或敏捷响应。

那么如何认识理解微服务,或说微服务到底哪些价值特征点值得作为下一个软件架构的优先选项呢?那本篇文章,就是希望通过简明扼要阐述,促进你把微服务纳入下一个优选架构选项。

本文由牛旦课堂原创,版权归创作者所有,转载请注明来源或私信联系。

1 导语

几乎每个计算机系统都会使用共享资源来执行多个任务,而计算机编程的问题之一,就是执行这些任务的代码位之间应该需要有多紧密才合适?一个越来越流行的答案就是微服务,——一个小而离散的功能块,它通过与其他微服务交互而创建更大的应用系统。

 

尽管拥有这种离散组件的基本思想并不新鲜,但微服务的实现方式,使其成为两个现代基于云的应用程序的天然基础。微服务还与devops哲学相吻合,即后者鼓励快速、持续地推出新功能。

 

2 微服务是个什么鬼?

微服务(microservices)中的微(“micro”)意味着这些都是小型应用程序。有时这是对的,但更好的思考或理解方式是,它们应该只大到能做好一件特定的事情或解决一个特定的问题,这就足够了(或者这可看作为微服务上下文的“边界”)。这个问题应该是概念性的,而不是技术性的。正如微软所说,“微服务应该围绕业务功能而设计,而不是像数据访问或消息传递这样的水平层次。”(Microservices should be designed around business capabilities, not horizontal layers such as data access or messaging.)它们通过相对稳定的api与其他微服务和外部用户通信,从而创建更大的应用程序。

 

微服务,你下一个软件架构的优选项

 

因此,可以在不影响系统其余部分的情况下调整或彻底升级单个微服务的内部功能。这反过来又与devops团队寻求的运营方式有关:如果大型应用程序的特定功能被分割成离散的、独立的操作代码片段,那么就更容易实现devops的CI/CD(continuous integration and continuous delivery,持续集成和持续交付)价值哲学。另外,定义良好的api使微服务易于实现自动化测试。

 

3 微服务架构和单体架构

 

我们经常会听到人们用“微服务体系结构”或微服务架构来谈论微服务。这个短语不仅包括微服务本身,还包括用于管理和服务发现的组件,以及处理微服务与外部世界之间通信的API网关。

 

微服务,你下一个软件架构的优选项

 

单体应用程序是微服务的对立面。对于所有代码都在一个巨大的二进制可执行文件中的应用程序来说,它是一种倒退。正如TechTarget解释的那样,单体应用程序很难扩展,也很难改进。但是因为它是作为单一内聚应用程序构建的,所以它不需要像微服务架构那样有许多的管理事务。从这点讲,确实是有倒退之嫌。

 

4 边界:如何定义微服务?

让我们回顾一下之前的“戒律”,即微服务应该做一件特定的事情。说起来容易,但在实践中,功能常常是相互交织的,绘制出分区比看上去要困难得多。领域分析和领域驱动设计(Domain analysis & domain-driven design)是微服务的指导理论方法,可以帮助我们将总体任务分解成微服务可以解决的单个问题。在这个过程中,需要创建业务领域的抽象模型,并在这个过程中发现边界上下文,它将以特定方式把与相应领域交互的功能组合在一起而形成的微服务。

 

例如,您可能有一个边界上下文用于运输,而另一个用于账目之用。当然,现实中的一个物理对象,既有价格也有需要去的地方,而边界上下文就是代表应用程序要考虑这些对象以及与之交互的特定方式。每个微服务应该完全存在于单个边界上下文中,尽管有些边界上下文可能包含多个微服务——需要明白,微服务有单个核心服务和流程服务构成。

 

5 微服务与SOA架构及Web服务

在这一点上,如果你是一名IT专业人员,并且已经在这个行业工作了一段时间,那么可能会认为这些内容听起来很熟悉。小型的单个程序协同工作的想法可能会让您想起SOA(service-oriented architecture,面向服务的体系结构)和Web服务,这两个流行词来自二十一世纪令人兴奋的Web 2.0时代。虽然从某种意义上说,世界上确实没有什么新东西,但这些概念和微服务之间存在着重要的区别。Datamation网站上有篇何为微服务(https://www.datamation.com/cloud-computing/what-is-microservices.html)对这些差异有一个很好地细分,但这里有一个简短的版本概述如下:

  • Ÿ 在SOA面向服务的体系结构中,各个组件相对紧密耦合,通常共享存储等资产,并且它们通过称为ESB(enterprise storage bus企业存储总线)的专用软件进行通信。微服务更加独立,共享的资源更少,并且通过更轻量的协议进行通信。值得注意的是,微服务产生于SOA环境,有时被认为是SOA的一种,或者是概念的继承者。
  • Ÿ Web服务是一组面向公众的功能,其他应用程序可以通过Web访问它;最流行的例子可能是谷歌地图,餐馆的网站可以嵌入它以为顾客提供方向定位。这种连接比您在microservices体系结构中看到的要松散得多。

 

微服务,你下一个软件架构的优选项

 

6 微服务通讯

 

我们经常听到的关于微服务架构的一个口号是,它们应该具有“智能端点和哑管道”(smart endpoints & dumb pipes.)的特性。换句话说,微服务的目标应该是使用基本的和完善的通讯方法,而不是复杂的和紧密集成方式。如上所述,这是微服务与SOA的另一个区别。

一般来说,微服务之间的通信应该是异步的(asynchronous),因为代码线程不会被阻塞而来等待响应。(尽管AMQP(Advanced Message Queuing Protocol,高级消息队列协议)等异步协议在微服务架构中也很常见,但使用HTTP等同步通信协议仍然很好。)这种松散耦合使得微服务架构在面对网络的单个组件或部分故障时更加灵活,这是一个关键的好处。

微服务,你下一个软件架构的优选项

 

7 Microservices、JAVA、Spring Boot 与 Spring Cloud

微服务的一些最初的工作出现在Java社区,马丁·福勒(Martin Fowler)是早期的支持者。2012年在波兰举行的Java会议上有一个关于这个主题的最重要的早期报告,题目是“微服务—Java, Unix方式”(http://2012.33degree.org/talk/show/67)。它建议以此作为指导20世纪70年代第一批Unix应用程序开发的原则(编写只做一件事的程序并把它做好。编写要一起工作的程序),并也适用Java开发。

 

微服务,你下一个软件架构的优选项

 

这段历史的结果是,有许多Java框架允许您构建微服务。其中最流行的是Spring Boot,它是专门为微服务设计的;Spring Cloud扩展了Spring Boot,顾名思义,它允许你将这些服务部署到云上。Spring的开发人员Pivotal Software提供了一个很好的教程,介绍如何使用这些框架来开始微服务的开发。

 

8 微服务和容器: Docker, Kubernetes及更多

在使微服务成为主流方面走得最远的底层技术是容器。容器类似于VM实例,但它不包括整个自包含的操作系统,容器只是一个独立的用户空间,它利用主机操作系统的内核,且在内核中执行的代码保持自包含。容器比VM实例小得多,而且很容易快速部署(本地或云中),并且可以向上或向下旋转以匹配需求和可用资源。

 

容器对微服务的吸引力是显而易见的:每个单独的微服务可以在自己的容器中运行,这大大减少了管理服务的开销。大多数容器实现都具有互补的编配工具,这些工具可以实现自动部署、管理、扩展、联网和基于容器的应用程序可用性。小型、易于构建的微服务和易于部署的容器的结合使得运维devops哲学成为可能。容器概念有几种实现,但目前最流行的是Docker,它通常与Kubernetes一起作为编排平台。

 

Spring虽然很流行,但它是与Java平台绑定的。另一方面,基于容器的系统是多语言的:OS支持的任何编程语言都可以在容器中运行,这为程序员提供了更大的灵活性。实际上,微服务的一大优势在于,每个服务都可以用最合适的或者开发人员最喜欢的语言来编写。实际上,只要服务的api保持稳定,就可以在不影响整个系统的情况下,用一种新的语言完全重新构建服务。DZone有一篇文章讨论了用于微服务的Spring Cloud与Kubernetes的优缺点。

 

微服务,你下一个软件架构的优选项

 

9 微服务设计模式

 

无论使用哪种语言来开发微服务,都将面临其他开发人员以前遇到过的问题。设计模式是对计算机科学中重复出现的问题的形式化、抽象化的解决方案,其中许多是专门为微服务设计的。Devopedia网站上有一个很棒的列表,包括:

  • Ÿ 服务注册(Service Registry):用于将客户端连接到可用的微服务实例;
  • Ÿ 断路器(Circuit Breaker):防止已失败或出故障的服务被反复调用;
  • Ÿ 回退(Fallback):用于为失败的服务提供替代方案;
  • Ÿ 跟踪服务(Sidecar):为主容器提供辅助服务,例如用于日志记录、同步服务或监视;
  • Ÿ 适配器(Adapter):标准化或规范化主容器和外部世界之间的接口 ;
  • Ÿ 代理大使(Ambassador):将主容器与外部世界连接,例如将本机连接代理到外部连接。

 

微服务,你下一个软件架构的优选项

 

10 微服务和云: 华为、阿里、AWS 和 Azure

如上所述,使用容器的优势之一是可以轻松地将其部署到云中,云中有灵活的计算资源,因此可以最大限度地提高应用程序的效率。可以想象,主要的公共云供应商都希望你使用他们的平台来运行基于微服务的应用程序。有关更多信息,请查看来自阿里云、华为、腾讯以及Amazon、Microsoft和谷歌的相关资源。

微服务,你下一个软件架构的优选项

 


关于选择微服务架构作为优选项相关内容就简要介绍到这里。



Tags:微服务   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
▶ 企业级项目结构封装释义 如果你刚毕业,作为Java新手程序员进入一家企业,拿到代码之后,你有什么感觉呢?如果你没有听过多模块、分布式这类的概念,那么多半会傻眼。为什么一个项...【详细内容】
2021-12-20  Tags: 微服务  点击:(8)  评论:(0)  加入收藏
前面谈过很多关于数字化转型,云原生,微服务方面的文章。虽然自己一直做大集团的SOA集成平台咨询规划和建设项目,但是当前传统企业数字化转型,国产化和自主可控,云原生,微服务是不...【详细内容】
2021-12-06  Tags: 微服务  点击:(23)  评论:(0)  加入收藏
微服务看似是完美的解决方案。从理论上来说,微服务提高了开发速度,而且还可以单独扩展应用的某个部分。但实际上,微服务带有一定的隐形成本。我认为,没有亲自动手构建微服务的经历,就无法真正了解其复杂性。...【详细内容】
2021-11-26  Tags: 微服务  点击:(35)  评论:(0)  加入收藏
实施微服务架构,我们一直在遵循一个实践原则:每个微服务要有自己独立的数据库,避免数据库层面的耦合。这种理所当然感觉好像不需要多加思考,就是应该这样做; 图片来源:James Lewi...【详细内容】
2021-10-11  Tags: 微服务  点击:(42)  评论:(0)  加入收藏
在今年的NGINX Sprint 2.0虚拟大会上,NGINX(来自流行的开源web服务器/负载均衡器和反向代理背后的公司F5),发布了NGINX现代应用参考架构(MARA)。该公司在一篇博客文章中说,这将帮...【详细内容】
2021-09-26  Tags: 微服务  点击:(60)  评论:(0)  加入收藏
今天,字节跳动正式宣布开源 CloudWeGo。这是一套以 Go 语言为核心、专注于微服务通信与治理的中间件集合,具有高性能、可扩展、高可靠的特点。项目地址:https://github.com/clo...【详细内容】
2021-09-08  Tags: 微服务  点击:(93)  评论:(0)  加入收藏
1. Spring Boot 与 Spring Cloud Spring Boot 是用于编写微服务的 Java 基础框架。在Spring Cloud 提供了各种构建全栈微服务的功能。构建小型和大型系统都适合。由于控制反...【详细内容】
2021-08-31  Tags: 微服务  点击:(162)  评论:(0)  加入收藏
现有问题在 EFK 日志收集 篇中,我们讲解了如何利用 EFK 收集 Kubernetes 集群日志。但是,还存在如下问题。 Elasticsearch 以单节点的形式部署,不能满足生产环境的要求 Fluentd...【详细内容】
2021-08-13  Tags: 微服务  点击:(102)  评论:(0)  加入收藏
在 Java 和 Kotlin 中, 除了使用Spring Boot创建微服务外,还有很多其他的替代方案。 名称 版本 发布时间 开发商 GitHub ...【详细内容】
2021-08-06  Tags: 微服务  点击:(173)  评论:(0)  加入收藏
一、微服务的现状及未来1.服务架构的演变1.1 单体架构  单体架构应该是我们最先接触到的架构实现了,在单体架构中使用经典的三层模型,即表现层,业务逻辑层和数据访问...【详细内容】
2021-07-22  Tags: 微服务  点击:(125)  评论:(0)  加入收藏
▌简易百科推荐
为了构建高并发、高可用的系统架构,压测、容量预估必不可少,在发现系统瓶颈后,需要有针对性地扩容、优化。结合楼主的经验和知识,本文做一个简单的总结,欢迎探讨。1、QPS保障目标...【详细内容】
2021-12-27  大数据架构师    Tags:架构   点击:(3)  评论:(0)  加入收藏
前言 单片机开发中,我们往往首先接触裸机系统,然后到RTOS,那么它们的软件架构是什么?这是我们开发人员必须认真考虑的问题。在实际项目中,首先选择软件架构是非常重要的,接下来我...【详细内容】
2021-12-23  正点原子原子哥    Tags:架构   点击:(7)  评论:(0)  加入收藏
现有数据架构难以支撑现代化应用的实现。 随着云计算产业的快速崛起,带动着各行各业开始自己的基于云的业务创新和信息架构现代化,云计算的可靠性、灵活性、按需计费的高性价...【详细内容】
2021-12-22    CSDN  Tags:数据架构   点击:(10)  评论:(0)  加入收藏
▶ 企业级项目结构封装释义 如果你刚毕业,作为Java新手程序员进入一家企业,拿到代码之后,你有什么感觉呢?如果你没有听过多模块、分布式这类的概念,那么多半会傻眼。为什么一个项...【详细内容】
2021-12-20  蜗牛学苑    Tags:微服务   点击:(8)  评论:(0)  加入收藏
我是一名程序员关注我们吧,我们会多多分享技术和资源。进来的朋友,可以多了解下青锋的产品,已开源多个产品的架构版本。Thymeleaf版(开源)1、采用技术: springboot、layui、Thymel...【详细内容】
2021-12-14  青锋爱编程    Tags:后台架构   点击:(20)  评论:(0)  加入收藏
在了解连接池之前,我们需要对长、短链接建立初步认识。我们都知道,网络通信大部分都是基于TCP/IP协议,数据传输之前,双方通过“三次握手”建立连接,当数据传输完成之后,又通过“四次挥手”释放连接,以下是“三次握手”与“四...【详细内容】
2021-12-14  架构即人生    Tags:连接池   点击:(16)  评论:(0)  加入收藏
随着移动互联网技术的快速发展,在新业务、新领域、新场景的驱动下,基于传统大型机的服务部署方式,不仅难以适应快速增长的业务需求,而且持续耗费高昂的成本,从而使得各大生产厂商...【详细内容】
2021-12-08  架构驿站    Tags:分布式系统   点击:(23)  评论:(0)  加入收藏
本系列为 Netty 学习笔记,本篇介绍总结Java NIO 网络编程。Netty 作为一个异步的、事件驱动的网络应用程序框架,也是基于NIO的客户、服务器端的编程框架。其对 Java NIO 底层...【详细内容】
2021-12-07  大数据架构师    Tags:Netty   点击:(16)  评论:(0)  加入收藏
前面谈过很多关于数字化转型,云原生,微服务方面的文章。虽然自己一直做大集团的SOA集成平台咨询规划和建设项目,但是当前传统企业数字化转型,国产化和自主可控,云原生,微服务是不...【详细内容】
2021-12-06  人月聊IT    Tags:架构   点击:(23)  评论:(0)  加入收藏
微服务看似是完美的解决方案。从理论上来说,微服务提高了开发速度,而且还可以单独扩展应用的某个部分。但实际上,微服务带有一定的隐形成本。我认为,没有亲自动手构建微服务的经历,就无法真正了解其复杂性。...【详细内容】
2021-11-26  GreekDataGuy  CSDN  Tags:单体应用   点击:(35)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条