Google与eBay在微服务生态构建中,有哪些关键教训值得深思?
- 内容介绍
- 文章标签
- 相关推荐
本文共计5029个文字,预计阅读时间需要21分钟。
当您浏览谷歌、Twitter、eBay和亚马逊等大型系统时,它们的架构已演变成为类似的东西:一组多语言微服务。当您处于多语言微服务结束时,它看起来像什么?Randy Shoup曾这样描述谷歌:
当你看到来自谷歌,Twitter,eBay和亚马逊的大规模系统时,他们的架构已演变成类似的东西:一组多语言微服务。
当您处于多语言微服务结束状态时,它看起来像什么?Randy Shoup曾在谷歌和eBay担任过高级职位,他有一个非常有趣的话题就是探索这个想法:规模的服务架构:谷歌和eBay的经验教训。
我真正喜欢Randy的演讲是他如何自觉地试图让你沉浸在你可能没有经验的经历中:创造,使用,延续和保护大规模的架构。
在谈话的服务生态系统部分兰迪问道:拥有大规模多语言微服务生态系统是什么样的?在“规模运营服务”部分,他问:作为服务提供商,运营此类服务的感觉如何?在“建立服务”部分,他问:当您是服务所有者时,它看起来像什么?在服务反模式部分,他问:什么可能出错?
一种非常强大的方法。
对我来说,演讲的亮点是调整激励机制的想法,这是一个贯穿整个努力的一贯主题。虽然从未明确地将其作为一个单独的策略,但这是为什么您希望小团队开发小型清洁服务,为什么内部服务的退款模型如此强大,架构如何在没有架构师的情况下发展,如何清洁设计可以发展的动机自下而上的过程,以及标准如何在没有中央委员会的情况下发展。
我的想法是,有意识地调整激励机制是如何扩展大型动态组织和大型动态代码库。在没有明确控制的情况下,采用正确的激励措施可以促使事情发生,几乎同样的方式是,当您移除锁定,不共享状态,与消息通信以及并行化所有内容时,分布式系统中的更多工作都会完成。
让我们看看现代时代如何建立大规模系统......
多语言微服务是最终的游戏
大规模系统最终演变成看起来非常相似的东西:一组多语言微服务。多语言意味着微服务可以用多种语言编写。
eBay始于1995年。根据您的计算方式,他们是第5代的架构。
Twitter的演变看起来非常相似。根据您的计算方式,他们是第三代架构。
亚马逊遵循类似的道路。
服务生态系统
拥有多语种微服务的大规模生态系统是什么样的?
在eBay和Google上,数百到数千个独立服务都在一起工作。
如何建立服务生态系统?
这些性能最佳的系统更多是进化的产物,而不是智能设计。例如,在Google,从未有过系统的自上而下的设计。它以一种非常有机的方式随着时间的推移而发展和成长。
变化和自然选择。当需要解决问题时,会创建新服务,或者更经常从现有服务或产品中提取新服务。只要服务使用,服务就会存在,只要它们提供价值,否则它们会被弃用。
这些大规模系统自下而上发展。清洁设计(Clean design)可以是一种新兴产品,而不是自顶向下设计的产品。
例如,考虑Google App Engine的一些服务分层。
这是没有架构师的架构。Google没有人拥有建筑师的头衔。技术决策没有中央批准。大多数技术决策都是由各个团队在当地为自己的目的做出的,而不是全球性的。
与2004年的eBay相比。有一个架构审查委员会,必须批准所有大型项目。
eBay处理这种情况的一个更好的方法是在审查委员会中对智能经验丰富的人员的知识进行编码,并将其放入可由各个团队重复使用的内容中。将这种体验编码到库或服务中,甚至是一组人们可以自己使用的指南,而不是在最后一刻进入流程。
标准如何在没有建筑师的情况下发展?
没有中央控制可能最终导致标准化。
- 标准化往往发生在服务和公共基础设施之间的通信中。
- 标准成为标准,因为它们比替代品更健康。
通常标准化的通信部分:
通常标准化的通用基础设施:
在进化环境中,标准通过以下方式实施:代码,鼓励,代码审查和代码搜索。
为了鼓励共同的实践和标准化的惯例,使得做正确的事情变得非常容易,并且做错事情要困难得多。
个人服务彼此独立。
在成熟的服务生态系统中,我们标准化 图的弧,而不是节点本身。定义一个共同的形状,而不是常见的实现。
创建新服务
- 一个团队成立,服务分离到自己的独立单位。
- 只有当功能成功并适合许多不同的用例时才会发生这种情况。
弃用旧服务
如果不再使用某项服务会怎样?
- 可以重新利用的技术可以重复使用。
- 人们可以被解雇或重新部署到其他团队。
- Google Wave并非市场成功,但其中一些技术最终出现在Google Apps中。例如,多人编辑文档的能力来自Wave。
更常见的情况是核心服务经历多代并且旧代被弃用。这种情况在Google发生了很多。通常情况下,谷歌内部的每项服务都被弃用或尚未准备就绪。
建立服务
当您是服务所有者时,在大规模多语言微服务系统中构建服务时,它会是什么样子?
在大型架构中表现良好的服务是:
服务所有者的目标是什么?
服务所有者的责任是什么?
- 你构建它运行它。
- 服务作为有限的边界。
什么是服务之间的关系?
- 考虑服务之间的关系作为供应商 - 客户关系,即使您在同一家公司。
- 非常友好和合作,但在关系中要非常有条理。
- 对所有权非常清楚。
- 要清楚谁应该对什么负责。在很大程度上,这是关于定义一个清晰的界面并维护它。
- 奖励是一致的,因为客户可以选择是否使用服务。这鼓励客户做正确的服务。这是新服务最终建立的方式之一。
- 定义SLA。服务提供商承诺为其客户提供一定程度的服务,以便客户可以依赖该服务。
- 客户团队为服务付费。
- 保持接口的完全向后/向前兼容性。
规模运营服务
作为服务提供商,在大规模多语言微服务系统中运行服务是什么感觉?
可预测的性能是一项要求。
深度弹力。
增量部署。
你可以有太多警报,你永远不会有太多的监控。
服务反模式
大型服务
共享持久性
本文共计5029个文字,预计阅读时间需要21分钟。
当您浏览谷歌、Twitter、eBay和亚马逊等大型系统时,它们的架构已演变成为类似的东西:一组多语言微服务。当您处于多语言微服务结束时,它看起来像什么?Randy Shoup曾这样描述谷歌:
当你看到来自谷歌,Twitter,eBay和亚马逊的大规模系统时,他们的架构已演变成类似的东西:一组多语言微服务。
当您处于多语言微服务结束状态时,它看起来像什么?Randy Shoup曾在谷歌和eBay担任过高级职位,他有一个非常有趣的话题就是探索这个想法:规模的服务架构:谷歌和eBay的经验教训。
我真正喜欢Randy的演讲是他如何自觉地试图让你沉浸在你可能没有经验的经历中:创造,使用,延续和保护大规模的架构。
在谈话的服务生态系统部分兰迪问道:拥有大规模多语言微服务生态系统是什么样的?在“规模运营服务”部分,他问:作为服务提供商,运营此类服务的感觉如何?在“建立服务”部分,他问:当您是服务所有者时,它看起来像什么?在服务反模式部分,他问:什么可能出错?
一种非常强大的方法。
对我来说,演讲的亮点是调整激励机制的想法,这是一个贯穿整个努力的一贯主题。虽然从未明确地将其作为一个单独的策略,但这是为什么您希望小团队开发小型清洁服务,为什么内部服务的退款模型如此强大,架构如何在没有架构师的情况下发展,如何清洁设计可以发展的动机自下而上的过程,以及标准如何在没有中央委员会的情况下发展。
我的想法是,有意识地调整激励机制是如何扩展大型动态组织和大型动态代码库。在没有明确控制的情况下,采用正确的激励措施可以促使事情发生,几乎同样的方式是,当您移除锁定,不共享状态,与消息通信以及并行化所有内容时,分布式系统中的更多工作都会完成。
让我们看看现代时代如何建立大规模系统......
多语言微服务是最终的游戏
大规模系统最终演变成看起来非常相似的东西:一组多语言微服务。多语言意味着微服务可以用多种语言编写。
eBay始于1995年。根据您的计算方式,他们是第5代的架构。
Twitter的演变看起来非常相似。根据您的计算方式,他们是第三代架构。
亚马逊遵循类似的道路。
服务生态系统
拥有多语种微服务的大规模生态系统是什么样的?
在eBay和Google上,数百到数千个独立服务都在一起工作。
如何建立服务生态系统?
这些性能最佳的系统更多是进化的产物,而不是智能设计。例如,在Google,从未有过系统的自上而下的设计。它以一种非常有机的方式随着时间的推移而发展和成长。
变化和自然选择。当需要解决问题时,会创建新服务,或者更经常从现有服务或产品中提取新服务。只要服务使用,服务就会存在,只要它们提供价值,否则它们会被弃用。
这些大规模系统自下而上发展。清洁设计(Clean design)可以是一种新兴产品,而不是自顶向下设计的产品。
例如,考虑Google App Engine的一些服务分层。
这是没有架构师的架构。Google没有人拥有建筑师的头衔。技术决策没有中央批准。大多数技术决策都是由各个团队在当地为自己的目的做出的,而不是全球性的。
与2004年的eBay相比。有一个架构审查委员会,必须批准所有大型项目。
eBay处理这种情况的一个更好的方法是在审查委员会中对智能经验丰富的人员的知识进行编码,并将其放入可由各个团队重复使用的内容中。将这种体验编码到库或服务中,甚至是一组人们可以自己使用的指南,而不是在最后一刻进入流程。
标准如何在没有建筑师的情况下发展?
没有中央控制可能最终导致标准化。
- 标准化往往发生在服务和公共基础设施之间的通信中。
- 标准成为标准,因为它们比替代品更健康。
通常标准化的通信部分:
通常标准化的通用基础设施:
在进化环境中,标准通过以下方式实施:代码,鼓励,代码审查和代码搜索。
为了鼓励共同的实践和标准化的惯例,使得做正确的事情变得非常容易,并且做错事情要困难得多。
个人服务彼此独立。
在成熟的服务生态系统中,我们标准化 图的弧,而不是节点本身。定义一个共同的形状,而不是常见的实现。
创建新服务
- 一个团队成立,服务分离到自己的独立单位。
- 只有当功能成功并适合许多不同的用例时才会发生这种情况。
弃用旧服务
如果不再使用某项服务会怎样?
- 可以重新利用的技术可以重复使用。
- 人们可以被解雇或重新部署到其他团队。
- Google Wave并非市场成功,但其中一些技术最终出现在Google Apps中。例如,多人编辑文档的能力来自Wave。
更常见的情况是核心服务经历多代并且旧代被弃用。这种情况在Google发生了很多。通常情况下,谷歌内部的每项服务都被弃用或尚未准备就绪。
建立服务
当您是服务所有者时,在大规模多语言微服务系统中构建服务时,它会是什么样子?
在大型架构中表现良好的服务是:
服务所有者的目标是什么?
服务所有者的责任是什么?
- 你构建它运行它。
- 服务作为有限的边界。
什么是服务之间的关系?
- 考虑服务之间的关系作为供应商 - 客户关系,即使您在同一家公司。
- 非常友好和合作,但在关系中要非常有条理。
- 对所有权非常清楚。
- 要清楚谁应该对什么负责。在很大程度上,这是关于定义一个清晰的界面并维护它。
- 奖励是一致的,因为客户可以选择是否使用服务。这鼓励客户做正确的服务。这是新服务最终建立的方式之一。
- 定义SLA。服务提供商承诺为其客户提供一定程度的服务,以便客户可以依赖该服务。
- 客户团队为服务付费。
- 保持接口的完全向后/向前兼容性。
规模运营服务
作为服务提供商,在大规模多语言微服务系统中运行服务是什么感觉?
可预测的性能是一项要求。
深度弹力。
增量部署。
你可以有太多警报,你永远不会有太多的监控。
服务反模式
大型服务
共享持久性

