智能服务契约带来的巨大伸缩性

那是2005年6月的一个晴天,看着为之奋斗两年的新订单系统在生产环境上线,我们精神无比振奋。我们的合作伙伴开始发送订单,监视系统也告诉我们一切工作正常。一个小时之后,我们的COO给战略合作伙伴发了一封邮件,告诉他们可以将订单发送到新系统了。五分钟之后,一台服务器宕掉了,一分钟后,又有两台服务器瘫痪。客户开始打电话过来,那时我们明白,我们将有一段时间见不着太阳了。

原本意在提高战略伙伴订单利润率的系统就这样崩溃了。抓狂的COO不得不再次给战略伙伴发去邮件,不过这次是让他们使用旧系统。奇怪的是,尽管我们有后备服务器,但是来自战略伙伴的少量订单就击垮了一台服务器。能供大量一般合作伙伴使用的系统却偏偏应付不了为数不多的战略合作伙伴。

这是一个关于我们所犯的错,我们如何改正错误,以及最后顺利完成项目的故事。

“最佳实践” 远远不够

尽管我们设计系统时翻阅了众多供应商所提供的最佳实践文档,使用了无状态的请求处理逻辑、分层结构、分层部署、分离OLTP 和OLAP服务器,但是从没有人告诉我们这个系统将要应对不同类型的伸缩性问题。在2003年,我们设计了和系统效率有关的关键部分。在2004年,我们经受住了负载和压力测试的考验。因此,我们都信心满满地以为我们将各方面都覆盖到了。

通过筛选审查服务器日志和监视系统的事件,我们发现来自战略伙伴的订单和一般合作伙伴的订单有着很大的不同。一般合作伙伴一次订购几百件物品,战略伙伴一次发来的订单却有成千上万行。请求的数据量甚至可以达到数百兆字节。我们的消息基础设施和对象/关系映射代码都从未承受过如此负载的测试。服务器核心为了反序列化所有这些XML数据承受了前所未有的考验,处理单个请求就能消耗掉半G内存。数据库锁的占用时间达到了几分钟而不是毫秒级。当线程超时后,垃圾回收机制开始疯狂地回收内存,这更加损害了系统的可用性。

我们做的第一件事就是在性能测试实验室再现现实中的场景。每当我们一遍一遍的测试而系统一次又一次的崩溃时,我们面面相觑,都不敢相信。我不断告诉自己:“我们做了书上说的每一件事,怎么会是这样?”

事实上,这是我工作中遇到的第一家真正给你时间和预算让你一切都照着书本去做的公司。我们没有任何的借口。可当书本远远不够解决问题时,你能做些什么呢?

不同类型的伸缩性

最后发现,每秒的请求数仅仅是可伸缩性的一方面而已。我们经历痛苦找到的其它方面还包括:

消息的大小

每个请求的CPU利用率

每个请求的内存利用率

每个请求的IO(和网络)利用率

每个请求的总处理时间

消息的大小看似对其它的各个方面都有很大的影响。当消息增大时,它会占用更多的CPU时间来反序列化,消耗更多的内存来保存结果数据,更多的网络带宽和IO来进行数据库读写操作,所有这些加起来就会影响总的处理时间。然而,即使是像给一个合作伙伴的所有待处理订单打折这样的小请求,也会因所处理数据量不同而受到影响。

我们检查了所有的东西,没有一个可以把问题解决。除非我们使大消息变小,问题始终会存在。这是我们对话的片断:

Dan: “二进制序列化或许对更少数量的战略伙伴有用。”

Barry: “不好,他们之间总共有五种互不兼容的平台。”

Sasha: “而且那也不会对内存和IO有多大的帮助。”

Me: “试试压缩怎么样?那样会减轻消息底层的负载。”

Dan: “那样会使CPU的负担更重。”

Sasha: “还要我再说一次内存和IO吗?”

Barry: “请求/响应好像在这里并不管用。”

Me: “你知道我多喜欢发布/订阅,但我也看不出来在这里怎么用得上。”

可是当我们深入探究消息模式的核心时,我们偶然发现了解决方案。

真实世界是面向消息的

最让我们惊奇的是解决方案对于一般的合作伙伴和战略合作伙伴都适用,而且都显著提高了两者的性能。不仅如此,它还加快了订单的周转时间从而提升了存货管理的能力。这是连我们自己都没有想到的。

事实上,解决方案相当直接——与之前的一条“创建订单信息”不同,合作伙伴可以随着时间动态地发送给我们多条“订单信息”,关键字是:(合作伙伴id,采购订单编号)。当该采购订单编号的所有条目完成后,他们可以发来一个“完成”标志为真的“订单信息”。这是有状态的交互。

你知道,合作伙伴几乎总有一个采购部门来发出订单。这些订单是随着时间逐步添加,直到最后“完成”并发送给我们。我们的解决方案使合作伙伴的采购系统在生成订单的同时发送给我们那些部分、非完的订单信息。他们可以修改已发出的订单信息或者取消掉订单的某部分,无需了解我们系统中的订单号(它由一个现有的ERP来管理)。事实上,在我们收到表示订单已完成的信息之前,我们根本不会去调用ERP来处理订单。

当我们收到“订单信息”时,我们会返回一个“订单状态已改变”消息。如果他们系统在他们认定的合理时间段内没有收到响应,他们可以再发一次之前的消息。换句话说,我们要保证消息是幂等的。这意味着,如果合作伙伴想对产品SKU(Stock Keeping Unit,库存单元)作任何更改,都必须重新发送该SKU的所有行(包含各种各样的选项和配置)——实际上没有多大的数据。

幂等消息指的是这样一种消息,无论其被系统处理多少次,效果也跟被系统处理一次一样。

这给性能带来了极大的影响——我们不再需要为了使消息不丢失而对其进行持久化。不再总是向磁盘写大量消息,我们的应用协议使合作伙伴的系统为我们管理交互状态——只需在他们的系统中稍稍增加一些复杂性。

时间: 2024-09-10 18:21:49

智能服务契约带来的巨大伸缩性的相关文章

WCF分布式开发步步为赢(5)服务契约与操作重载

继上一节WCF分布式开发步步为赢(4):WCF服务可靠性传输配置与编程开发,本节我们继续学习WCF分布式开发步步为赢的第(5)节:服务契约与操作重载.这里我们首先讲解OOP面向对象的编程中方法重载,重载的意义,WCF服务编程开发如何实现操作重载,随后是代码分析部分,给出了服务端服务契约定义和实现操作重载的注意的问题和实现过程,然后详细介绍了客户端实现操作重载的方式.最后是本文的总结部分.本节的结构是:[1]重载概念[2]操作重载[3]代码实现分析[4]运行结果[5]总结 [1]重载概念: [1.

客服是人工智能落地的黄金场景(智能服务圆桌现场实录)

几乎所有人都看好人工智能的前景,却有很多人看不清人工智能的现在.10月12日,杭州云栖大会上,一场"为客户服务插上AI之翼"智能服务的圆桌吸引了众多参会者的关注和热议. 圆桌嘉宾不仅有来自阿里系的几大人工智能客服产品--阿里云云博士.淘宝淘小蜜.蚂蚁金服小蚂答的核心负责人,还有智能客服领域耕耘多年的创业公司小能客服的CTO.智齿客服的联合创始人. 圆桌探讨了智能客服的技术和商业现状.未来的发展方向和机会点,嘉宾们认为客服领域的场景路径相对明确的特征,决定了可基于全量数据进行高并发需求处

如何构建AI驱动型智能服务?

人工智能(简称AI)驱动型智能服务将把当下各类前沿技术(例如区块链).物联网以及客户体验因素结合起来--而其未来的发展方向则必然以信任协调为基础. 机器学习.深度学习.自然语言处理以及认知计算的结合将彻底改变人类与机器之间的交互方式.AI驱动型智能服务将学会感知人类身处的周遭环境.根据其以往行动推断个人喜好,并巧妙地通过日常生活对人类加以引导.事实上,对于此类目标的追求将成为当下十年乃至未来最为重要的转变,并使得AI驱动型智能服务被引入各个行业以及各类业务流程当中. 对于企业而言,AI驱动型智能

1.2 城市智能服务指标体系构成

1.2.2政务服务指标 政务服务评价旨在电子政务多元发展的背景下,把握政务微博从发布型向服务型转变的趋势,借助数据挖掘分析和科学计算模型对政务微博服务效能现状和发展规律进行评价和预测,在此基础上对政务微博创新服务模式.功能拓展方向.总体服务趋势做综合性分析和前瞻性预测.从理论上,政务服务指标是政务微博传播力.服务力和互动力的综合反映,涵盖了包括发博数.阅读数.转评数和私信数等服务事项.政务微博已从单一的信息发布模式向多元化在线服务功能拓展,在对粉丝服务平台提出优化建议的同时加强政务微博对平台功能

中国DT城市智能服务指数研究报告

报告摘要 l  从IT到DT的城市服务 以控制为出发点的IT时代,正在走向激活生产力为目的DT时代.DT城市,是以"云网端"为城市新型基础设施,以大数据为城市新型生产资料,以数据驱动的人机智能[1]为城市服务中枢大脑和创新经济引擎."智能服务"即通过"DT城市"创新思想,逐步实现城市服务的在线化.平台化.数据化.智能化,是DT时代中国城市群现代化发展的新方向.DT时代的快速到来,在城市经济体转型升级过程中已经初步展示出广阔无边的巨大潜力,以及一

企业需要为云转型提供智能服务的六个原因

企业要想充分利用云计算技术,理解某些选择的含义是很重要的.为此,精明的服务提供商可以避免错误的决策并产生更好的结果. 云计算技术的好处是众所周知的:随时随地访问.按需付费.弹性容量.灾难恢复.自动软件更新.快速部署等等.在决定移动云端时可能很容易,实际执行可能会导致严重的问题,而采用智能服务可以解决这个问题. 在执行云计算转型之前,请考虑以下几点: (1)将所有数据和应用程序传输到公共云,这对于企业似乎是有吸引力的,企业应该首先考虑可能带来的后果.企业使用公共云提供商的服务,为了方便起见,可以转

谈云色变 云服务或带来安全和隐私问题

本文讲的是谈云色变 云服务或带来安全和隐私问题,专家们表示,现在越来越多的服务出现在云环境中,这是不可避免的,但是供应商仍然需要注重安全性,并且政府需要重新制定隐私法律以保护云服务客户. 云计算能够提供很多好处,包括远程访问数据.远程协作和降低IT成本等,民主与技术中心的高级顾问Greg Nojeim表示.但云供应商.客户和政策制定者仍然有很多问题需要解决,Greg在华盛顿布鲁金斯学会的云安全和隐私的论坛上表示. Nojeim呼吁美国国会更新24年历史的ECPA(电子通信隐私法案),相比于存储在

微信连wifi正式全量对外开放申请 升级智能服务

之前我们提到过微信公众平台"微信连Wi-Fi"功能来了,昨日,微信连Wi-Fi自助申请入口正式全量对外开放(独立申请入口https://wifi.weixin.qq.com/),意味着更多商户能够借此为用户提供更加便利的Wi-Fi体验和精准的场景服务.5.18更新[福利]非认证公众帐号也能申请微信连Wi-Fi了 拥有线下经营场所且开通微信认证的公众号简单三步开通微信连Wi-Fi接入 ①商户登录公众号进入公众平台管理界面,点击界面左侧"功能->增加功能插件",在

WCF服务编程设计规范(3):服务契约、数据契约和实例管理设计规范

WCF服务编程设计规范(3):服务契约.数据契约和实例管理设计规范.本节涵盖服务契约和数据契约设计规范,以及服务实例管理内容.中英对照版本,欢迎留言交流. Service Contracts 服务契约 1.Always apply the ServiceContract attribute on an interface, not a class: 把ServiceContract属性标记到契约接口上,而不是服务类上 //Avoid:避免 [ServiceContract] class MySe