您现在的位置:首页 > 课程体系 > 大数据与人工智能 > 微服务架构
微服务是什么?有什么用?面临哪些挑战?

在本文中,我们将讨论微服务的定义、优势及面临的挑战,带大家初步认识微服务。

 

微服务的定义

微服务是可以协同工作并可以自主/独立部署的小型企业服务。这些服务通过网络进行通信,并通过这种途径带来好处。最大的优点之一是它们可以独立部署。并且微服务提供了使用许多不同技术的机会。

 

微服务架构的风格是一种将单个应用程序开发为一组小服务的方法,每个服务都在自己的进程中运行,并与轻量级机制(通常是HTTPgRPC API)通信。

 

这些服务围绕业务能力构建,并通过完全自动化的部署过程进行独立部署。这些服务的集中管理程度很低,可以用不同的编程语言编写,并可以使用不同的数据存储技术。

 

因此,在某种程度上,微服务架构是一种云原生架构方法,其中应用程序由许多松散耦合且可独立部署的较小组件组成。

 

微服务有自己的技术栈,包括数据库和数据管理模型;通过RESTAPI、事件流和消息代理的组合相互通信;按业务能力组织,其中分隔服务的行通常被称为有界上下文。

 

微服务的特点

1.微服务是小型的、独立的、松散耦合的。一个小小的开发团队就可以编写和维护一个服务。

 

2.每个服务都是一个单独的代码库,可以由一个小型开发团队进行管理。

 

3.服务可以独立部署。团队可以更新现有服务,而无需重建和重新部署整个应用程序。

 

4.服务负责保持自己的数据或外部状态。这与传统模型不同,传统模型中单独的数据层处理数据持久性。

 

5.服务之间通过使用定义良好的API进行通信。每个服务的内部实现细节对其他服务是隐藏的。服务不需要共享相同的技术堆栈、库或框架。

 

微服务应用特性

通过服务实现组件化:组件是一个可独立更换和升级的软件单元。

 

围绕业务能力组织:微服务的划分方法是将业务能力划分为多个服务。

 

产品而非项目:这就是亚马逊的“你构建,你运行”理念,即开发团队对生产中的软件承担全部责任。

 

智能端点和哑管道:微服务的目标是尽可能解耦和内聚,因此它们拥有自己的域逻辑,并使用restful api接收请求、应用逻辑和生成响应。

 

分权治理:Netflix作为一个企业,是遵循这一理念的一个很好的例子。建立库共享有用的和所有经过测试的的代码,可以鼓励其他开发人员以类似的方式解决类似的问题。

 

去中心化数据管理:微服务还分散了数据存储决策。我们可以将这种方法称为Polyglot持久性或Polyglot数据库。这意味着微服务更喜欢让每个服务管理自己的数据库,要么是同一数据库技术的不同实例,要么是完全不同的数据库系统。

 

基础设施自动化:这意味着自动部署到每个新环境和每个微服务,分别使用。

 

故障设计:微服务通过处理故障进行设计,并尝试通过正确的操作管理错误来管理故障。

 

以上这些特性给我们带来了一些关键的便利:

 

1.代码可以更容易地更新-可以在不接触整个应用程序的情况下添加新的功能或特性

 

2.团队可以为不同的组件使用不同的技术堆栈和不同的编程语言;

 

3.服务可以独立扩展,这减少了整个应用程序的浪费和成本相关扩展,因为单个功能可能面临太多负载。

 

 

微服务的优势

接下来将介绍微服务架构的优势:

 

敏捷性

微服务最重要的特征之一是,由于服务规模较小且可独立部署,因此更容易管理错误修复和功能发布。您可以在不重新部署整个应用程序的情况下更新服务,并在出现问题时回滚更新。在单片应用程序中,如果在应用程序的某个部分发现错误,它可能会阻塞整个发布过程。因此,新功能正在等待bug修复程序的集成、测试和发布。

 

小型

微服务应该足够小,单个功能团队可以构建、测试和部署它。微服务模型使组织能够围绕一个服务或一组服务创建小型跨职能团队,并使其以敏捷的方式运行。小规模的团队增加了灵活性。大型团队往往生产力较低,这是因为沟通较慢,管理开销增加。因此,敏捷性降低。

 

代码独立

在一个单一的应用程序中,随着时间的推移,代码库会变得越来越大,代码依赖性会变得混乱。尝试添加新功能需要对现有代码库进行大量重构。由于微服务不与其他服务共享代码或数据存储,因此可以最大限度地减少依赖性,从而更容易添加新功能。

 

可优化性

在传统的分层体系结构中,应用程序通常共享一个公共堆栈,其中一个大型关系数据库支持整个应用程序。这种方法有几个挑战,例如,应用程序的每个组件都必须共享一个公共堆栈、数据模型和数据库,即使对于某些模块有一个清晰、更好的工具来完成任务。对于那些意识到有更好、更高效的方法来构建这些组件的开发人员来说,这真的很令人头痛。此外,当应用程序堆栈落后,无法在项目中应用新的最佳实践时,也会使开发人员的工作难度增大。

 

但在微服务架构中,小型团队可以选择最适合其微服务的技术,并在其服务上使用混合的技术堆栈。因为微服务是独立部署的,并且通过REST、事件流和消息代理的某种组合进行通信。每个单独服务的堆栈都有可能针对该服务进行优化。

 

技术一直在变化,开发库和工具也发展得很快,由于应用程序由多个较小的服务组成,所以使用更理想的微服务技术发展要容易得多,成本也要低得多。

 

故障隔离

微服务松散耦合还构建了故障隔离和更好的应用弹性。如果你的一个微服务不可用,它不会影响整个应用程序。当然,你应该设计你的微服务有容错性,并正确处理故障,例如通过实现重试和断路模式。即使发生了故障,如果你在没有任何业务影响的情况下修复这些故障,保障用户的业务连续性。

 

可扩展性

微服务可以独立扩展,因此您可以扩展需要较少资源的子服务,而无需扩展整个应用程序。微服务比单片应用程序需要更少的基础设施,因为它们能够精确扩展所需的服务,而不是缩放整个应用程序。

 

此外,使用Kubernetes这样的容器编排器工具也很容易进行扩展,您可以将更大数量的服务打包到单个主机上,从而更有效地利用硬件资源。

 

数据隔离

由于微服务遵循基于服务的数据库模式,因此根据微服务的设计,数据库是相互分离的。因此,执行模式更新变得更加容易,因为只有一个数据库受到影响。在单片应用程序中,模式更新可能会变得非常具有挑战性和风险。

 

正如你所看到的,我们已经看到了微服务的许多优势,现在是时候看到微服务架构的挑战了。

 

微服务的挑战

微服务为组织带来好处的同时,也面临着巨大的挑战。从单体服务转向微服务意味着管理更加复杂。以下是我们在应用微服务架构之前需要考虑的一些挑战。

 

复杂性

微服务应用程序有许多服务需要协同工作,并要确保其能够创造价值。由于有很多服务,意味着移动部件比单一应用程序更多。每项服务都更简单,但整个系统更复杂了。即使在部署上就可能面临困难,数百个服务部署的时间不同,可能会难以管理版本。微服务的通信也是一个棘手的话题,需要有一个策略来管理服务器之间甚至不同地理位置之间的服务通信。

 

网络问题和延迟

由于微服务规模较小,并且采用服务间通信模式,所以网络问题是需要关注的。如果我们为特定的请求调用服务链,将会增加延迟,要确保API进行正确的设计以进行正确的通信。为了避免冗长的API调用,开发团队需要考虑考虑异步通信模式,如消息代理系统。

 

开发和测试

E2E流程视为长期业务需求之一。如果需求涉及需要作为1应用程序的几个微服务,那么与单片微服务相比,很难在微服务架构中开发和测试这些E2E过程。现有的工具并不总是设计用于处理服务依赖关系。跨服务边界重构可能很困难。

 

数据完整性

微服务有自己的数据持久性。因此,在进行数据一致性时可能面临挑战。大多数情况下,我们应该尽可能遵循最终的一致性。但事务性操作始终具有挑战性。

 

尽管如此,这些挑战也不能成为微服务应用的阻碍。通过提升技术,适应微服务架构,可以利用微服务为组织带来强大的发展动力。

 

微服务架构的设计具有一定的难度,如果您想进一步学习如何使用设计模式、原则和最佳实践,可以参考中培IT学院的微服务及高并发、高可用架构设计与最佳实践,课程注重实践与理论的结合,详细讲解了微服务的架构设计等相关技术。


 

[1]

 
网络安全热度最高的6本证书...
系统分析师VS系统架构设计...
项目经理考NPDP还是软考高...
盘点五个IT领域下证快的证...
CBA与TOGAF:探寻企业架构...
【收藏】软考电子证书下载...
项目经理任选两本证书,年...
DAMA中国推出“一考两证”...
数据分析具体指的是什么,...
数据分析师需要具备什么数...
CDA认证带你了解数据分析的...
敏捷与DevOps协同工作的注...
DevOps自动化测试的注意事...
DevOps五个好用的工具列表...
IT项目管理实现落地有哪些...
IT项目需求分析重点是建立...


中培IT学院 Copyright@2006-2024  北京中培伟业管理咨询有限公司.ALL Rights Reseved 备案号:京ICP备13024721号-2