微服务架构为何这么流行?
微服务是面向服务架构的延伸。与2000年代相当大的 "服务 "相比,微服务是代表一组小型功能的应用程序。这些应用通过网络托管,并暴露出一个明确定义接口。其他应用程序通过进行远程过程调用(RPC)方式来调用这个接口。 微服务架构的特点是代码的托管、调用和部署方式。比如大型的单体应用,它们通常会被分割成具有明确定义接口的封装组件。然后,这些接口就可以直接在进程中调用,而不是通过网络。通过这种方法,我们将微服务看作一个性能受到影响的库(网络I/O和序列化/反序列化),以便调用它的任何功能。 当我们以这种方式来思考微服务时,可能会质疑为什么我们会采用微服务架构。答案通常是独立部署和扩展。对于一个大型的单体应用程序,应用被迫一次性部署或发布所有的代码。应用程序的每一个新版本都可能涉及许多更改。部署变得风险大、耗时长。任何人都可以使整个系统瘫痪。 换句话说,业务采用微服务是以牺牲性能为代价来获取运营利益。业务还必须承担维护支持微服务所需的基础设施的成本。事实证明,在很多情况下,这种权衡是很有意义的,但这也是反对过早采用微服务架构的有力论据。 在Uber,我们也采用了微服务架构,因为我们(大约在2012-2013年)主要有两个单体服务,遇到了很多通过微服务来解决的运营问题。
随着Uber从10多个工程师发展到100多个工程师,多个团队拥有技术栈的碎片时,这种单一的架构将团队的命运捆绑在一起,使得独立运作变得困难。 因此,我们采用了微服务架构。最终,我们的系统变得更加灵活,这使得团队能够更加自主。
毫不夸张地说,如果没有微服务架构,Uber不可能达到今天所保持的规模和执行质量。 然而,随着公司规模的进一步扩大,从100多名工程师到1000多名工程师,我们开始注意到一系列与系统复杂性大大增加的相关问题。在微服务架构下,人们用单一的整体代码库换取了黑盒,黑盒的功能随时可能发生变化,很容易造成意外情况。 例如,工程师们不得不通过12个不同团队大约50个服务来调查问题的根本原因。 理解服务之间的依赖关系可能会变得相当困难,因为服务之间的调用可能会深入许多层。第n个依赖关系的延迟峰值可能会导致上游的一连串问题。如果没有合适的工具,就不可能看到实际发生的情况,这让调试变得困难。 为了构建一个简单的功能,工程师往往需要跨多个服务工作,所有这些服务都由不同的个人和团队所拥有。这就需要跨部门跨团队的合作,在会议、设计和代码审查上花费时间。由于团队在彼此的服务中构建代码,修改彼此的数据模型,甚至代表服务所有者执行部署,早期对服务所有权的明确界限划分受到了影响。网络化的单体可能会形成,看似独立的服务都必须一起部署才能安全地执行任何变更。 这样所带来的结果就是开发进度变慢、服务所属不稳定、迁移更困难等。对于已经采用微服务架构的企业来说,已经没有回头路了。这就变成了 "有了它们不能活,没有它们不能活"。 (编辑:应用网_丽江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |