设计微服务的最佳实践
你是否曾想过,什么是微服务?以及大规模的互联网行业,例如社交,电商,物流,金融等领域,如何使用微服务构建互联网应用以满足用户需求。
要了解微服务是什么,你必须了解如何将单体应用程序,拆解为独立打包和部署的微型应用程序。本文章将帮助你清晰化的理解,开发者如何根据需求使用微服务来构建他们的应用程序。
下面,从以下几个维度进行阐述
为何选择微服务?
什么是微服务?
微服务架构的功能
微服务架构的优点
设计微服务的最佳实践
1,为何选择微服务?
现在,在我介绍微服务之前,让我们看看在微服务之前流行的架构,即单体架构。
通俗地说,您可以说它类似于一个大容器,在这个容器中,应用程序的所有软件组件被紧密地打包并部署在一起。
罗列一下单片架构的挑战:
不灵活 - 单片应用程序无法使用不同的技术构建
不可靠 - 即使系统的某个功能不起作用,整个系统也不起作用
不可扩展 - 由于每次需要更新应用程序时都无法轻松扩展应用程序,因此必须重建整个系统
妨碍持续开发 - 无法同时构建和部署应用程序的多个功能
缓慢的开发 - 单体应用程序的开发需要花费大量的时间来构建,因为每个功能都必须一个接一个地构建
不适合复杂的应用程序 - 复杂应用程序的功能具有紧密耦合的依赖关系
上述挑战是导致微服务发展的主要原因。
2,什么是微服务?
微服务,又称微服务架构,是一种架构风格,它将应用程序构建为以业务领域为模型的小型自治服务集合。
在微服务架构中,每个服务都是独立的,并实现单一业务功能。
传统架构与微服务架构之间的差异
以电子商务网站为例,了解它们之间的差异。
我们在上图中观察到的主要区别是,所有功能最初都在共享单个数据库的单个实例下。 但是,通过微服务,每个功能都被分配了不同的微服务,处理自己的数据,并执行不同的功能。
现在,让我们通过查看其架构来了解有关微服务的更多信息。请参考下图:
微服务架构
1,来自不同设备的不同客户端尝试使用不同的服务,如搜索,构建,配置和其他管理功能
2,所有服务都根据其域和功能分开,并进一步切分成各个微服务
3,这些微服务有自己的负载均衡器和执行环境来执行它们的功能,同时在自己的数据库中捕获数据
4,所有微服务都通过无状态服务器(REST或消息队列)相互通信
5,微服务在服务发现中心的帮助下获取其通信路径,并执行自动化,监控等操作功能
6,然后,微服务执行的所有功能都通过API网关传达给客户端
7,所有内部点都从API网关连接。因此,任何连接到API网关的人都会自动连接到整个系统
现在,让我们通过查看其功能来了解有关微服务的更多信息。
3,微服务功能
解耦 - 系统内的服务很大程度上是分离的。因此,整个应用程序可以轻松构建,更改和扩展
组件化 - 微服务被视为可以轻松更换和升级的独立组件
业务能力 - 微服务非常简单,专注于单一功能
自治 - 开发人员和团队可以彼此独立工作,从而提高速度
持续交付 - 通过软件创建,测试和审批的系统自动化,允许频繁发布软件
职责 - 微服务不关注作为项目的应用程序。相反,他们将应用程序视为他们负责的产品
分散治理 - 重点是使用正确的工具来做正确的工作。这意味着没有标准化模式或任何技术模式。开发人员可以自由选择最有用的工具来解决他们的问题
敏捷 - 微服务支持敏捷开发。任何新功能都可以快速开发并再次丢弃。
4,微服务的优点
独立开发 - 所有微服务都可以根据各自的功能轻松开发
独立部署 - 基于其服务,可以在任何应用程序中单独部署它们
故障隔离 - 即使应用程序的一项服务不起作用,系统仍可继续运行
混合技术堆栈 - 可以使用不同的语言和技术来构建同一应用程序的不同服务
粒度缩放 - 单个组件可根据需要进行部署节点缩放,无需将所有组件部署缩放在一起
5,设计微服务的最佳实践
在当今世界,复杂性已经蔓延到互联网的每个产品当中。微服务架构有望保持团队规模和功能更好。
现在,让我们看一个案列来更好地理解微服务。
案例:购物网站
当您打开购物网站时,您看到的只是一个购买页面。但是,在幕后,购物网站具有接受付款的服务,用于客户咨询的服务等
假设此网站的开发人员已在单一框架中创建它。请参阅下图:
因此,所有功能都放在一个代码库中,并且位于单个底层数据库下。
现在,让我们假设市场上出现了一个新的品牌,开发商希望将即将到来的品牌所有细节都放在这个网站中,原有的数据库结构和UI展示已经无法满足。
然后,他们不仅需要为新标签重做服务,而且还必须重新构建整个系统并相应地进行部署。
为避免此类挑战,购物网站的开发人员决定将其应用程序从单片架构转移到微服务。请参阅下图了解购物网站的微服务架构。
这意味着开发人员不会创建Web微服务,逻辑微服务或数据库微服务。相反,他们为搜索,推荐,客户服务等创建单独的微服务。
这种类型的应用程序架构不仅可以帮助开发人员克服以前架构所面临的所有挑战,还可以帮助轻松构建,部署和扩展购物车应用程序。
通过上述案列,我们可以总结出来,设计微服务的最佳实践:
1,为每个微服务分别存储数据
2,将代码保持在类似的成熟度级别
3,为每个微服务单独构建
4,部署到容器
5,将服务设计为无状态服务