微服务是业界最新的流行语,似乎每个人都在以这样或那样的方式谈论它。让我们理解一下什么是微服务?通过这篇教程我们将理解微服务的定义,概念以及微服务的原理。

微服务的定义

如今,微服务是SOA(面向服务的架构)之后越来越流行的架构模式之一,如果您正在跟踪行业趋势,那么您会发现,现在的企业不再像几年前那样对开发大型应用程序来管理端到端业务功能感兴趣。相反,他们选择快速和敏捷的应用程序,这也使他们花费更少的钱。

微服务有助于打破大型应用程序的边界,并在系统内部构建逻辑上独立的较小系统,例如,使用Amazon AWS,你可以轻松构建云应用程序。这是微服务的一个很好的例子。

如上图所示,每个微服务有它自己的业务层以及数据库,改变其中一个微服务不会对另外的微服务有任何的影响。

总之,微服务之间使用广泛的轻量级协议进行通信,例如 HTTP 和 REST,TCP, 或者 消息协议, 例如 JMS 和 AMQP。在特定的场景,他们也可以选择更专业的协议。

微服务的原理

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

1,单一功能职责

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

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,最后,微服务还支持更小、更专注的敏捷开发团队。团队将根据微服务的边界进行组织。

总结:

在本文中,我仅列出了在我有限的知识范围内在许多组织中看到的微服务的一些优点。由强大的设计和出色的代码支持的单体应用程序也可以证明是一个好的决策,并且产品可以停留足够长的时间来支持决策。

与微服务类似,糟糕的设计决策将被证明代价高昂。它们可能看起来简化了组件,但是它们可能增加了组件之间通信的复杂性,并且更难控制和管理。

最后,好的设计和熟练的团队才能带来胜利。

微服务升级优点_微服务–——定义, 原则 和 优点相关推荐

  1. 微服务可靠性测试_微服务可靠性设计

    1.背景 微服务化之后,系统分布式部署,传统单个流程的本地API调用被拆分成多个微服务之间的跨网络调用,由于引入了网络通信.序列化和反序列化等操作,系统发生故障的概率提高了很多.微服务故障,有些是由于 ...

  2. 微服务认证模式_微服务之“网关模式”

    定义 API网关是一个服务器,它是系统中的单个入口点,用户对API网关进行单一呼叫,然后API网关调用每个相关的微服务器.它类似于面向对象设计的Facade模式.API网关封装内部系统架构,并提供针对 ...

  3. golang微服务框架对比_微服务里程碑,Golang与Spring Cloud Alibaba完美结合

    目前微服务架构仍是软件架构中最新的热门话题,虽然Golang是一门新的语言,但Golang的性能比python和java高出不少.既能承受程序使用运行的服务构建的繁重负载,又容易与GitHub集成,管 ...

  4. java微服务项目简历_微服务框架-SpringCloud简介

    前面一篇文章谈到微服务基础框架,而Netflix的多个开源组件一起正好可以提供完整的分布式微服务基础架构环境,而对于Spring Cloud正是对Netflix的多个开源组件进一步的封装而成,同时又实 ...

  5. 微服务启动顺序_微服务框架Demo.MicroServer运行手册

    一.背景说明: 之前分享过一个微服务开发框架, "享一个集成.NET Core+Swagger+Consul+Polly+Ocelot+IdentityServer4+Exceptionle ...

  6. 合沟微服务怎么添加_微服务架构:动态配置中心搭建

    版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! 在微服务架构中,服务之间有着错综复杂的依赖关系,每个服务都有自己的依赖配置,在运行期间很多配置会根据访问流量等因素进行调整,传统的配置信息 ...

  7. java微服务是什么_微服务架构:什么是微服务

    博主 本文为微服务连载第一篇,如果有幸看到,还请找个时间仔细阅读,欢迎收藏或转载,如有不足之处烦请留言指正,共同进步,希望对你有帮助,谢谢 引言 和朋友聊天,招聘,看个行业要闻都是微服务... 最近几 ...

  8. 微智魔盒骗局_微智魔盒官宣

    原标题:微智魔盒官宣 微智魔盒官方宣传视频 微达国际集团创建于2011年,是一家坚持创新的集科研.产销.服务为一体的智能化产业平台,致力于国际领先的专注人工智能领域的产业投资.项目孵化.教育培训,并提 ...

  9. 什么是云服务举例说明_云服务是什么?

    谢邀,关于云服务和云计算的技术类和定义类文章已经很多了,在这里,我就不做赘述啦.我想从应用的角度来谈一下对云服务和云计算的一些理解,可能对大家这方面的理解有更好的帮助. 应用可以连接你的客户和你的业务 ...

最新文章

  1. Sliverlight好教程
  2. 图解 深入浅出 JavaWeb:Servlet 再说几句
  3. sql azure 语法_将SQL工作负载迁移到Microsoft Azure:规划迁移
  4. Ubuntu20.04之安装搜狗输入法
  5. linker command failed with exit code 1
  6. 【方太】顺利通过CMMI3认证
  7. WPS表格中,找出两张表(格式相同,数据部分不同)不同之处并用红色标记
  8. 使用Fiddler抓取websocket包-Android
  9. (五)具名和匿名挂载
  10. 就是这35个人,率先入选了《共识算法高阶课》第一期!
  11. Kubenetes1.13.1集群部署 --01基于Kubeadm搭建Kubernetes
  12. YOLOv5识别图像内苹果和香蕉
  13. 前端代码规范(个人约束)
  14. Android开发——流量统计
  15. 计算机毕业设计SSM大学生就业分析系统【附源码数据库】
  16. CWPP与EDR的定义与区别
  17. JavaFX实例:简单日历的实现
  18. 数据结构与算法---Manacher算法
  19. 文章内容丢失测试奥术大师多
  20. Docker(四):Docker可视化管理工具

热门文章

  1. 在JDK 8中可通过反射获得构造函数/方法参数元数据
  2. 使用HTML5,画布和开放数据创建全球降水(雨)可视化
  3. 使用Ajax的Spring MVC REST调用
  4. Spring测试支持和上下文缓存
  5. python token post403原因_Django的POST请求时因为开启防止csrf,报403错误,及四种解决方法...
  6. Debian GNU/Linux 的发展简史
  7. Linux 系统服务管理器(初始化系统/init system) -- systemd 及命令 systemctl 的详细介绍
  8. 获取当地天气_Mac 天气预报动态壁纸工具Living Weather HD 4.4.4
  9. dubbo provider异步_Dubbo学习(六) Dubbo面试问题
  10. openlayers地图旋转_地图切换动画#openlayers入门笔记#