“微服务架构风格是一种将单个应用程序开发为一组小型服务的方法,每个服务在自己的进程中运行,并与轻量级机制(通常是HTTP资源API)通信。这些服务是围绕业务功能构建的,并且可以通过完全自动化的部署机制独立部署。这些服务可能是用不同的编程语言编写的,使用不同的数据存储技术,对这些服务只有最低限度的集中管理。” James Lewis and Martin Fowler (2014)[6]
预计到2020年,全球云微服务市场将以22.5%的速度增长,其中美国市场[5]预计将保持27.4%的增长速度。目前的趋势是,开发人员将从本地托管的应用程序转向云。因此,这将帮助企业将停机时间最小化,优化资源,并降低基础设施成本。专家还预测,到2022年,90%的应用程序将使用微服务架构[5]开发。本文将帮助您了解什么是微服务,以及公司目前是如何使用它的。
微服务是什么?
微服务在世界范围内得到了广泛的应用。但微服务是什么?微服务是一种架构模式,其中应用程序基于许多小型互连服务。它们基于单一责任原则,根据Robert C. Martin的说法,该原则是“收集因相同原因而变化的事物,并分离因不同原因而变化的事物”[2]。微服务架构也被扩展到松散耦合的服务,这些服务可以被独立地[2]开发、部署和维护。
远离单体架构
微服务常常与传统的单体软件架构相比较。在单体架构中,软件被设计成自包含的,也就是说,程序的组件是相互连接和相互依赖的,而不是松散耦合的。在紧耦合的架构(单体)中,为了执行或编译代码[7],每个组件及其关联的组件必须存在。此外,如果需要更新任何组件,则需要更新整个应用程序。
对于使用微服务架构的应用程序来说,情况并非如此。由于每个模块都是独立的,所以可以在不影响程序的其他部分的情况下对其进行更改。因此,减少了对某个组件所做的更改将在其他组件中创建未预料到的更改的风险。
如果架构难以升级,或者维护过于复杂和昂贵,那么公司可能会陷入困境。将一个复杂的任务分解成一个个独立工作的小组件是解决这个问题的方法。
单体架构vs.微服务架构[3]
世界各地的开发人员如何构建他们的微服务
微服务以改善可伸缩性和性能而闻名。然而,这些是世界各地的开发人员构建他们的微服务的主要原因吗?2020年微服务状态研究项目[1]揭示了世界各地的开发人员是如何构建他们的微服务的,以及他们对此的看法。该报告是在来自欧洲、北美、中南美洲、中东、东南亚、澳大利亚和新西兰的660名微服务专家的帮助下创建的。以下给出了对为服务[1]成熟度相关问题的平均评分。
类别平均评分(满分5分)
建立一个新的项目:3.8
维护调试:3.4
工作效率:3.9
解决可伸缩性问题:4.3
解决性能问题:3.9
团队合作:3.9
如上所示,大多数专家都喜欢使用微服务来解决可伸缩性问题。相反,维护和调试对他们来说似乎是一个挑战。
根据他们的架构的领先技术,大多数专家报告说他们使用Javascript/Typescript(几乎⅔位服务是建立在这些语言)。其次,他们大多使用Java。
尽管部署微服务有很多选择,但大多数专家使用Amazon Web Services(49%),其次是他们自己的服务器。另外,62%的人更喜欢把AWS Lambda作为一个无服务器的解决方案。
专家使用的大多数微服务都使用HTTP进行通信,其次是事件和gRPC。此外,大多数专家使用RabbitMQ作为消息代理,其次是Kafka和Redis。
而且,大多数人使用微服务持续集成(CI)。在报告中,87%的受访者使用CI解决方案,如GitLab CI、Jenkins或GitHub Actions。
86%的受访者中最流行的调试解决方案是日志,其中27%的受访者只使用日志。
最后,大多数人认为微服务架构将成为更复杂系统或后端开发的标准。
许多公司已经从单体架构转变为微服务。
亚马逊
2001年,开发延迟、编码困难和服务相互依赖使得亚马逊无法满足其不断增长的用户群的可伸缩性需求。由于需要从头开始重构其单体架构,亚马逊将其单体应用程序分解为小型的、独立的、特定于服务的应用程序[3][9]。
2001年,亚马逊决定转向“微服务”,这是在“微服务”一词流行之前数年的事情。这一变化导致亚马逊开发了几个支持微服务架构的解决方案,比如亚马逊AWS。随着微服务的快速发展和适应,亚马逊成为全球最有价值的公司,市值在2020年7月1日达到1.433万亿美元。
Netflix
Netflix从2007年开始提供电影流媒体服务,到2008年,它面临着规模上的挑战。他们经历了一次严重的数据库崩溃,整整三天,他们都不能把DVD寄给[10]会员。从这一点开始,他们意识到需要从单点故障(例如关系数据库)转向可伸缩性更强、更可靠的云分布式系统。2009年,Netflix开始将其单体架构重构为微服务。他们首先将其非面向客户的电影编码平台迁移到云上作为独立的微服务[11]运行。转向微服务让Netflix克服了规模挑战和服务中断。尽管如此,通过使用云计算而不是使用数据中心[10],他们可以降低成本。今天,Netflix每天向190个国家的1.39亿用户播放约2.5亿小时的内容。
Uber
Uber推出后,他们努力开发和推出新功能,修复漏洞,并迅速整合新变化。因此,他们决定转向微服务,并将应用程序结构分解为基于云的微服务。换句话说,Uber为每个功能创建了一个微服务,比如乘客管理和行程管理。转向微服务给Uber带来了很多好处,比如对每种服务的所有权有一个清晰的概念。这提高了速度和质量,允许团队只关注需要扩展的服务,更新虚拟服务而不中断其他服务,并实现更可靠的容错[11],从而促进了快速扩展。
如何提供可伸缩性的一个很好的例子是看中国。由于人口众多,中国必须通过创造和试验新的解决方案来大规模地解决新的挑战。统计数据显示,目前中国大约有9亿网民。2019年光棍节期间,阿里巴巴各购物平台的交易峰值为每秒5.44万笔。阿里云处理的数据总量约为970pb[15]。那么,这用户数量在科技领域意味着什么呢?
为了满足可伸缩性的需要,出现了许多技术。例如,Tars于2008年由腾讯创立,并于2018年捐赠给Linux基金会。它在十年间被大规模地使用和增强[12]。Tars是开源的,许多组织都在为扩展框架的特性和价值[12]做出巨大贡献。Tars支持多种编程语言,包括C++、Golang、Java、Node.js、PHP和Python;它可以快速构建系统并自动生成代码,允许开发人员将精力集中在业务逻辑上,从而有效地提高操作效率。Tars已广泛应用于腾讯QQ、微信社交网络、金融服务、边缘计算、汽车、视频、网络游戏、地图、应用市场、安全等众多核心业务。2020年3月,Tars项目转型为TARS基金会,这是一个开源微服务基金会,以支持社区贡献和会员的快速增长,该社区致力于建立一个开放的微服务平台[12]。
如果想要了解TARS微服务框架,一定要看看最新免费培训课程:用TARS构建微服务平台。
Isabella Ferreira是TARS基金会的一名倡导者。TARS基金会是Linux基金会下的一个云原生开源微服务基金会。
Mark Shan是腾讯开源联盟主席,也是TARS基金会董事会主席。
文中引用链接:
https://medium.com/hashmapinc/the-what-why-and-how-of-a-microservices-architecture-4179579423a9
https://www.leanix.net/en/blog/a-brief-history-of-microservices
https://www.charterglobal.com/five-microservices-trends-in-2020/
https://martinfowler.com/articles/microservices.html#footnote-etymology
https://whatis.techtarget.com/definition/monolithic-architecture
https://thenewstack.io/led-amazon-microservices-architecture/
https://media.netflix.com/en/company-blog/completing-the-netflix-cloud-migration
https://medium.com/microservices-architecture/top-10-microservices-framework-for-2020-eefb5e66d1a2
https://www.statista.com/statistics/265140/number-of-internet-users-in-china/
TARS基金会是Linux基金会下的非营利性、微服务基金会,致力于建设一个强大而灵活的微服务生态系统。无论你在哪个行业,无论你使用什么技术栈,这里能助你快速实现你的创意。
点“在看”让TARS小姐姐变好看
本文分享自微信公众号 - TARS星球(TarsCloud)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。