什么是 微服务( 三 )


BFF 模式允许开发人员使用该界面的最佳选项为每个用户界面创建和支持一种后端类型,而不是尝试支持适用于任何界面但可能会对前端性能产生负面影响的通用后端 。
例如,在电子商务网站上,产品对象可能通过产品名称、类型和价格来区分 。
聚合是应被视为一个单元的相关实体的集合 。
因此,对于电子商务网站,订单将是买家订购的产品(实体)的集合(集合) 。
这些模式用于以有意义的方式对数据进行分类 。
在微服务架构中,服务实例会因伸缩、升级、服务故障甚至服务终止而动态变化 。
这些模式提供了发现机制来应对这种短暂性 。
负载平衡可以通过使用 健康 检查和服务故障作为重新平衡流量的触发器来使用服务发现模式 。
适配器模式的目的是帮助翻译不兼容的类或对象之间的关系 。
依赖第三方 API 的应用程序可能需要使用适配器模式来确保应用程序和 API 可以通信 。
这个色彩缤纷的名字指的是藤蔓(微服务)如何随着时间的推移慢慢地超越并扼杀一棵树(单体应用程序) 。
虽然有很多模式可以很好地完成微服务,但同样数量的模式可以很快让任何开发团队陷入困境 。
其中一些——改写为微服务“不要”——如下:
一旦应用程序变得太大且难以轻松更新和维护,微服务是一种管理复杂性的方法 。
只有当您感觉到单体架构的痛苦和复杂性开始蔓延时,才值得考虑如何将该应用程序重构为更小的服务 。
在你感受到那种痛苦之前,你甚至没有真正拥有需要重构的单体 。
尝试在没有 a) 适当的部署和监控自动化或 b) 托管云服务来支持您现在庞大的异构基础设施的情况下进行微服务,会带来很多不必要的麻烦 。
省去你自己的麻烦,这样你就可以把时间花在担心状态上 。
最好倾向于更大的服务,然后只在它们开始开发微服务解决的特征时才将它们分开——即部署更改变得困难和缓慢,通用数据模型变得过于复杂,或者不同部分服务有不同的负载/规模要求 。
微服务和 SOA 之间的区别在于,微服务项目通常涉及重构应用程序以便更易于管理,而 SOA 关注的是改变 IT 服务在企业范围内的工作方式 。
一个演变成 SOA 项目的微服务项目可能会因自身的重量而崩溃 。
你最好从一个你可以处理的速度开始,避免复杂性,并尽可能多地使用现成的工具 。
微服务架构是一种软件设计方法,它将应用程序分解为通过定义明确的 API 进行通信的小型独立服务 。由于每个服务都可以由自治团队开发和维护,因此它是最具可扩展性的软件开发方法 。
微服务设计与单体开发截然相反 。单体是一个实现所有功能的大型代码库(“厨房水槽”) 。一切都在一个地方,没有一个组件可以孤立地工作 。这意味着应用程序必须作为一个整体进行测试 。
从好的方面来说,单体应用很容易启动和运行 。由于单体架构不同部分之间的关系是透明的,因此进行广泛的更改很容易 。
然而,随着公司的发展和团队规模的扩大,单体开发变得更加困难 。很快,系统就不能再装在一个头上了——移动部件太多了,所以事情变慢了 。
微服务使公司能够保持团队规模小而敏捷 。这个想法是将应用程序分解为可以由紧密结合的团队自主开发和部署的小型服务 。
公司采用微服务的主要原因是可扩展性。服务可以独立开发和发布,无需在组织内安排大规模的协调工作 。
拥有分布式系统的一个好处是能够避免单个故障点 。您可以使用支持云的技术在不同的可用区部署微服务,确保您的用户永远不会遇到中断 。
使用微服务,开发团队可以保持小而有凝聚力 。小组越小,沟通开销越少,协作越好 。
亚马逊通过他们的两个披萨团队将团队规模发挥到了极致 。这意味着一个团队应该足够小,可以吃两个比萨饼 。
对于单体应用,语言和技术堆栈选项几乎从一开始就设置好了 。新开发人员必须适应过去做出的任何选择 。
相比之下,每个微服务都可以使用最适合解决手头任务的技术堆栈 。因此,团队可以为工作和他们的技能选择最佳工具 。例如,您可以使用 Go 或 C 实现高性能服务,并使用 Erlang 或 Elixir 实现高容错微服务 。
随着小团队迭代速度更快,开发和测试周期更短 。而且,由于他们还可以随时部署更新,微服务的部署频率比单体应用要高得多 。
有这么多好处,似乎为新项目选择微服务是一件轻而易举的事 。但是微服务设计也带来了一些严峻的挑战:

推荐阅读