》微服务架构风格是一种将单个应用程序开发为一组小服务的方法,每个服务运行在自己的进程中,并使用轻量级通信机制(通常是HTTP类型的API)沟通。这些服务围绕业务能力构建,可以通过完全自动化的部署机制独立部署。这些服务目前很少集中管理,可以用不同的编程,也可以用不同的语言编写,也可以使用不同的数据存储技术。”——JamesLewisandMartinFowler(2014)引言预计2020年全球云微服务市场将以22.5%的速度增长,其中美国市场有望保持27.4%的增速。当前的趋势是开发人员将从本地托管的应用程序转移到云端。这将帮助企业最大限度地减少停机时间、优化资源并降低基础设施成本。同时,专家还预测,到2022年,90%的应用将采用微服务架构开发。本文将帮助您了解什么是微服务以及当今公司如何使用它们。什么是微服务?微服务已经在世界范围内广泛使用。但微服务到底是什么?微服务是一种基于许多相互关联的小型服务的架构模式。它们基于单一职责原则。根据RobertC.Martin的说法,“收集因相同原因而变化的事物,并分离因不同原因而变化的事物”。[3]微服务架构也被扩展为可以独立开发、部署和维护的松耦合服务。远离单体微服务通常与传统的单体软件架构形成对比。在单体架构中,软件被设计为自包含的,即程序的各个组件是相互关联和相互依赖的,而不是松散耦合的。在紧耦合架构(单体)中,每个组件及其关联组件必须按指定顺序组合,然后才能执行或编译。当其中一个组件需要更新时,就必须重写整个应用程序。而这种现象不会出现在使用微服务架构的应用中。因为每个模块都是独立的,所以每个模块都可以更新而不影响程序的其他部分。因此,更改一个组件将对其他组件产生影响的风险降低了。如果一家公司的架构难以升级,或者维护起来过于复杂和昂贵,那么他们可能无法扩展单体应用程序。将复杂的任务分解成小的组件,彼此独立工作,是实现这一目标的方法。单体架构与微服务架构(图片来自)开发人员如何构建自己的微服务微服务以提高可扩展性和性能而闻名。然而,这些是世界各地的开发者开发自己的微服务的主要原因吗?《微服务 2020 研究现状》[7]揭示了世界各地的开发者如何构建他们的微服务,以及他们对微服务的看法。这份报告是在来自欧洲、北美、中南美、中东、东南亚、澳大利亚和新西兰的660位微服务专家的帮助下编写的。下表列出了与微服务成熟度相关的问题的平均分数:类别平均分数(满分5)创建新项目3.8维护和调试3.4生产力3.9解决可扩展性问题4.3解决性能问题3.9团队合作3.9从上面可以看出表中,大多数专家对使用微服务解决可扩展性问题感到满意。相反,维护和调试对他们来说似乎是一种挑战。就他们使用的架构技术而言,大多数专家使用Javascript/Typescript(大约?的微服务是使用这些语言构建的),其次是Java。尽管部署微服务有很多选择,但大多数专家使用AWS(49%),其次是他们自己的服务器。此外,62%的人更喜欢将AWSLambda作为无服务器解决方案。这些人使用的微服务大多使用HTTP进行通信,其次是事件和gRPC。此外,大多数专家使用RabbitMQ作为消息代理,其次是Kafka和Redis。此外,大多数人将持续集成(CI)用于微服务。在报告中,87%的受访者使用CI解决方案,例如GitLabCI、Jenkins或GitHubActions。最流行的调试解决方案是日志记录,86%的受访者,27%的受访者只使用日志记录。最后,大多数人同意微服务架构将成为更复杂系统或后端开发的标准。微服务的成功案例许多公司已经从单体架构转向微服务架构。Amazon2001年,开发延迟、编码挑战和服务相互依赖性使Amazon无法满足其不断增长的用户群的可扩展性需求。由于需要从头开始重构其单体架构,亚马逊将其单体应用程序拆分为小型、独立、面向服务的应用程序。2001年,也就是微服务一词流行起来的前几年,亚马逊决定转向微服务。这种变化促使亚马逊开发了多个支持微服务架构的解决方案,例如亚马逊AWS。凭借其快速增长和对微服务的适应,亚马逊已成为全球最有价值的公司,截至2020年7月1日市值达1.433万亿美元。NetflixNetflix于2007年开始提供电影流媒体服务,到2008年,它也面临规模化的挑战。在此期间,他们经历了严重的数据库损坏,三天之内他们无法将DVD发送给他们的会员。这次事故使他们意识到需要从单点故障(例如关系数据库)转移到云中更具可扩展性和可靠性的分布式系统。于是在2009年,Netflix开始将其单体应用重构为微服务。他们首先将非面向客户的电影编码平台迁移到云端,以作为独立的微服务运行。转向微服务使Netflix能够应对可扩展性挑战和服务中断。它还允许他们在每个流的基础上而不是在数据中心的基础上降低成本。如今,Netflix每天向190个国家/地区的1.39亿用户提供约2.5亿小时的内容。Uber推出Uber服务后,他们在开发和发布新功能、修复错误以及快速集成新变化方面遇到了困难。所以他们决定转向微服务,将应用结构拆分为基于云的微服务。换句话说,优步为每个功能创建了一个微服务,例如乘客管理和行程管理。转向微服务给优步带来了很多好处,比如对每项服务的所有权有一个清晰的认识。这提高了服务访问的速度和质量,并通过允许团队仅关注他们需要扩展的服务、更新虚拟服务而不中断其他服务、实现更可靠的容错来促进快速扩展。这就是可扩展性!如何提供可扩展性的一个很好的例子是看中国。由于人口众多,中国必须通过创造和试验新的解决方案来适应扩大规模的新挑战。据统计,中国目前服务于约9亿网民。2019年“双十一”期间(相当于国外的黑色星期五),阿里巴巴购物平台的交易高峰为每秒54.4万笔。阿里云处理的数据总量约为970PB。那么这些用户数量在技术上意味着什么?为了解决可扩展性问题,出现了很多技术。比如Tars,2008年由腾讯创建,2018年贡献给Linux基金会,也正在大规模使用,10年时间有了很大的提升。TARS是开源的,许多组织都在积极贡献和扩展框架的功能和价值。TARS支持多种编程语言,包括C++、Golang、java、node.js、PHP、Python;可以快速构建系统并自动生成代码,让开发者专注于业务逻辑,从而有效提升运营效率。TARS已广泛应用于腾讯QQ、微信社交、金融服务、边缘计算、汽车、视频、网络游戏、地图、应用市场、安全等诸多核心业务。2020年3月,TARS项目转型为开源微服务基金会TARS基金会,致力于推动社区贡献和社区成员的快速成长,构建开放的微服务平台。
