微服务

诞生背景

微服务(Microservice)这个概念是2012年出现的,作为加快Web和移动应用程序开发进程的一种方法,2014年开始受到各方的关注,而2015年,可以说是微服务的元年;

越来越多的论坛、社区、blog以及互联网行业巨头开始对微服务进行讨论、实践,可以说这样更近一步推动了微服务的发展和创新。而微服务的流行,Martin Fowler功不可没。

1 互联网的快速发展

2 敏捷开发 精益方法的深入人心

3 容器技术的成熟

传统的项目架构?

优点:

①开发简单,集中式管理

②基本不会重复开发

③功能都在本地,没有分布式的管理和调用消耗

缺点:

1、效率低:开发都在同一个项目改代码,相互等待,冲突不断

2、维护难:代码功功能耦合在一起,新人不知道何从下手

3、不灵活:构建时间长,任何小修改都要重构整个项目,耗时

4、稳定性差:一个微小的问题,都可能导致整个应用挂掉

5、扩展性不够:无法满足高并发下的业务需求

常见的系统架构遵循的三个标准和业务驱动力:

1、提高敏捷性:及时响应业务需求,促进企业发展

2、提升用户体验:提升用户体验,减少用户流失

3、降低成本:降低增加产品、客户或业务方案的成本

 

现在我们来看一下微服务必须需要的原则?

1,单一功能职责

单一功能职责是SOLID设计模式之一,它意味着一个单元,无论是类、函数还是微服务,都应该有且只有一个职责。在任何时候,一个微服务都不应该有一个以上的职责。

todo: 自己查看SOLID

Pass

2,围绕着业务功能设计

微服务应该专注于特定的业务功能,并确保它有助于完成任务。微服务绝不应限制自己采用最适合解决业务目的的适当技术栈或后端数据库存储。当我们设计单个应用程序时,这常常是一个约束,我们试图在某些领域中使用一些折中来解决多个业务解决方案。微服务使您能够选择最适合当前问题的解决方案。(某个微服务不仅仅只为一个微服务来服务,他要为其他的微服务提供支持,也就是全局的架构)

3,你建造它,你拥有它。

这种设计的另一个重要方面与开发前后的职责有关。在大型组织中,通常由一个团队开发app location(应用),经过一些知识转移会议后,将项目移交给维护团队。在微服务中,构建服务的团队拥有它,并负责在将来维护它。这使开发人员能够接触到他们的软件的日常操作,并且他们能够更好地理解他们构建的产品在现实世界中是如何被客户使用的。

4,基础设施自动化

准备和构建微服务的基础设施是另一个非常重要的需求,服务应该是可独立部署的,并且应该捆绑所有依赖项,包括库依赖项,甚至是执行环境,如抽象物理资源(web服务器和容器或虚拟机)。

微服务和SOA之间的一个主要区别在于它们的自治级别。虽然大多数SOA实现提供了服务级抽象,但是微服务更进一步抽象了实现和执行环境。

 

在传统的应用程序开发中,我们构建一个WAR或EAR,然后将其部署到JEE应用程序服务器中,例如使用JBoss、WebLogic、WebSphere等等。我们可以将多个应用程序部署到同一个JEE容器中。在理想的场景中,在微服务方法中,每个微服务将构建为一个胖Jar,嵌入所有依赖项,并作为独立的Java进程运行。

5,容错设计

微服务的设计应考虑到故障情况。如果服务失败,或者宕机一段时间,该怎么办?这些都是非常重要的问题,必须在实际编码开始之前解决——以便清楚地估计服务故障将如何影响用户体验。

快速故障是另一个用于构建容错、弹性系统的概念。这种哲学提倡预期失败的系统,而不是构建永远不会失败的系统。由于服务在任何时候都可能失败,因此能够快速检测故障并在可能的情况下自动恢复服务非常重要。

微服务应用程序非常重视应用程序的实时监控,检查体系结构元素(数据库每秒接收多少请求)和业务相关指标(例如每分钟接收多少订单)。语义监视可以提供出错的早期预警系统,从而触发开发团队进行跟踪和调查。

微服务的目的?

目的:有效的拆分应用,实现敏捷开发和部署

 

微服务的优点 ?

微服务有许多优点相比传统的多层架构(单体庞大应用),微服务的优点如下:

1,使用微服务,架构师和开发人员可以为每个微服务选择适合于特定用途的架构和技术(通晓多种语言对应的熟悉语言的架构)。这为以更经济有效的方式设计更适合的解决方案提供了灵活性。

2,由于服务相当简单,而且规模更小,企业可以试验新的流程、算法、业务逻辑等等。它通过提供快速试验和失败的能力,使企业能够进行颠覆性创新。

3,微服务能够实现选择性的可伸缩性,即每个服务都可以独立地伸缩,而且伸缩的成本相对于单体应用方面要低。

4,微服务是自包含的、独立的部署模块,当第二个微服务没有按照我们的需要执行时,可以使用另一个类似的微服务替换一个微服务。它有助于做出正确的“购买构建”决策,而这通常是许多企业面临的挑战。

5,微服务帮助我们构建本质上是有机的系统(有机的系统是通过添加越来越多的功能在一段时间内横向增长的系统)。因为微服务都是关于独立可管理的服务——它允许在需要时添加越来越多的服务,而对现有服务的影响最小。

6,技术变化是软件开发中的障碍之一。使用微服务,可以单独更改或升级每个服务的技术,而不是升级整个应用程序。

7,由于microservices将服务运行时环境和服务本身打包在一起,因此允许在同一环境中共存多个版本的服务。

8,最后,微服务还支持更小、更专注的敏捷开发团队。团队将根据微服务的边界进行组织。

原文地址:https://www.cnblogs.com/anle123/p/13401199.html