thoughts on ebay arch

From: http://www.manageability.org/blog/stuff/about-ebays-architecture

An accurate way of knowing what really works is looking at what truly works in practice. The software industry is plagued with so many ideas that for all intents and purposes are purely theoretical. Compounding the problem is the fact the software vendors continue to praise and sell these ideas as best practices.

Massively scalable architectures is one area where not many practitioners have truly been a witness of. Fortunately, sometimes information is graciously released for all to see and hear. I gained a lot of wisdom reading about Google's design of its hardware infrastructure or even Yahoo's page rendering patent. Now, another internet behemoth, eBay, has provided us with some insight on its own architecture.

There are many pieces of information in this presentation, however, I'll try to highlight and comment on the ones that are unusual or interesting.

The impressive part is that eBay had 380M page views a day with a site availability of 99.92%. In addition to that, nearly 30K lines of code changes per week. Just plain and simply enviable, not only that, incontrovertible evidence of the scalability of Java.

Now for the details on how it was achieved using J2EE technologies. The highlights to Ebay's scalability is as follows:

  • Judicious use of server-side state
  • No server affinity
  • Functional server pools
  • Horizontal and vertical database partitioning

What's interesting is how eBay enables data access scalability. They mention the use of "custom O-R mapping" with support for features like caching (local and global), lazy loading, fetch sets (deep and shallow) and support for retrieval and submit update subsets. Furthemore, they use bean managed transaction exclusively, autocommited to the database, and use the O-R mapping to route to different data sources.

A couple of things are quite striking. The first is its complete lack of usage of Entity Beans, using its own O-R mapping solution (Hibernate anyone?). The second is the partitioning of application servers based on use-cases. The third, the partitioning also of databases is also based on use-cases. The last is the stateless nature of the system and the conspicuous absence of clustering technologies.

Here's the quote about server state:

This basically means that right now we are not really using server-side state. We may use it; right now we have not found a good reason to use it. [snip] if there is something that needs to be stateful, then we put in the database; we go back and get it, if we need to. We just take the hit. We do not have to do clustering; we do not have to do any of that stuff.

In short, save yourself the trouble of building stateful servers, furthermore forget about clustering, you simply may not need it. Now, read this about functional partitioning:

So we have a pool or a farm of machines that are dedicated to a specific use case; like search will have its own farm of machines, and we can tune those much differently because the footprint and the replay of those are much different than viewing an item, which is essentially a read-only use case, versus selling an item, which is read-mostly type of use case. [snip] Horizontal database partitioning is something that we have adopted in the last probably four or five years to really get the availability, and also scalability, that we need.

In short, forget about placing your application and database on one giant machine, just use pools of servers that are dedicated on a use case basis. Doesn't that sound awfully similar to Google's strategy?

A little bit more about horizontal partitioning:

What enables our horizontal scalability is content based routing. So, if imagine eBay has on any given day 60 million items. We do not want to store that in one behemoth Sun machine. [snip] let us scale it across; may be, many Sun machines, but how you get to the right one? There is the content-based routing idea that comes in play. So, the idea was that given some hint, find out which of my 20 physical database hosts do I need to go to. The other cool thing about this is that failover could be defined.

Finally a word about using a more loosely coupled architecture in the future:

Using messaging to actually decouple disparate use cases is something that we are investigating.

Isn't it strange that the original presentation was about J2EE Design Patterns? The key scalability ideas are only tangentially related to the Patterns. Yes, eBay does use patterns to structure their code, however, focusing on the patterns misses the entire picture. The key nuggets of wisdom are a stateless design, the use of a flexible and highly tuned OR-mapping layer and the partitioning of servers based on use cases. The design patterns are nice, however don't expect blind application of it to lead to scalability.

In general, the approach that eBay is alluding to (and Google has confirmed) is that architectures that consist of pools or farms of machines dedicated on a use-case basis will provide better scalability and availability as compared to a few behemoth machines. The vendors, of course, are gripped in fear about this conclusion for obvious reasons. Nevertheless, the biggest technical hurdle in deploying a large number of servers is, of course, none other than the need for manageability ;-)

内容概要:本文档详细介绍了基于布谷鸟搜索算法(CSO)优化长短期记忆网络(LSTM)进行时间序列预测的项目实例。项目旨在通过CSO自动优化LSTM的超参数,提升预测精度和模型稳定性,降低人工调参成本。文档涵盖了项目背景、目标与意义、挑战及解决方案、模型架构、代码实现、应用领域、注意事项、部署与应用、未来改进方向及总结。特别强调了CSO与LSTM结合的优势,如高效全局搜索、快速收敛、增强泛化能力等,并展示了项目在金融、气象、能源等多个领域的应用潜力。 适合人群:具备一定编程基础,特别是对MATLAB有一定了解的研发人员和技术爱好者。 使用场景及目标:①提高时间序列预测精度,减少误差;②降低人工调参的时间成本;③增强模型泛化能力,确保对未来数据的良好适应性;④拓展时间序列预测的应用范围,如金融市场预测、气象变化监测、工业设备故障预警等;⑤推动群体智能优化算法与深度学习的融合,探索复杂非线性系统的建模路径;⑥提升模型训练效率与稳定性,增强实际应用的可操作性。 阅读建议:此资源不仅包含详细的代码实现,还涉及模型设计、优化策略、结果评估等内容,因此建议读者在学习过程中结合理论知识与实践操作,逐步理解CSO与LSTM的工作原理及其在时间序列预测中的应用。此外,读者还可以通过多次实验验证模型的稳定性和可靠性,探索不同参数组合对预测效果的影响。
内容概要:本文详细介绍了ArkUI框架及其核心组件Button在鸿蒙应用开发中的重要性。ArkUI框架作为鸿蒙系统应用界面的核心开发工具,提供了简洁自然的UI信息语法、多维状态管理和实时界面预览功能,支持多种布局方式和强大的绘制能力,满足了现代应用开发对于简洁性、高效性和灵活性的要求。Button组件作为ArkUI框架的重要组成部分,通过绑定onClick事件,实现了从简单的数据操作到复杂的业务流程处理,从页面间的无缝导航到各类功能的高效触发。此外,文章还探讨了Button组件在未来智能化、交互体验多样化以及跨设备应用中的潜力和发展趋势。 适合人群:具备一定编程基础,尤其是对鸿蒙应用开发感兴趣的开发人员和设计师。 使用场景及目标:①理解ArkUI框架的基本特性和优势;②掌握Button组件的使用方法,包括基本绑定、复杂逻辑处理和事件传参;③熟悉Button组件在表单提交、页面导航和功能触发等场景下的具体应用;④展望Button组件在智能化、虚拟现实、增强现实和物联网等新兴技术中的未来发展。 阅读建议:由于本文内容涵盖了从基础概念到高级应用的广泛主题,建议读者先了解ArkUI框架的基本特性,再逐步深入学习Button组件的具体使用方法。同时,结合实际案例进行实践操作,有助于更好地理解和掌握相关知识。
资源下载链接为: https://pan.quark.cn/s/d3128e15f681 罗技MX Master 2S是一款高端无线鼠标,凭借其卓越的性能和舒适性,深受专业设计师、程序员以及需要长时间使用鼠标的人群的喜爱。它在macOS平台上表现出色,功能丰富。而“LogiMgr Installer 8.20.233.zip”是该鼠标在macOS系统上对应的软件安装程序,版本号为8.20.233,主要功能如下: 驱动安装:该安装包可确保MX Master 2S在macOS系统中被正确识别和配置,发挥出最佳硬件性能,同时保证良好的兼容性。它会安装必要的驱动程序,从而启用鼠标的高级功能。 自定义设置:借助此软件,用户能够根据自己的工作习惯,对MX Master 2S的各个按钮和滚轮功能进行自定义。比如设置特定快捷键、调整滚动速度和方向等,以满足个性化需求。 Flow功能:罗技Flow是一项创新技术,允许用户在多台设备间无缝切换。只需在软件中完成设备配置,鼠标就能在不同电脑之间进行复制、粘贴操作,从而大幅提升工作效率。 电池管理:软件具备电池状态监控功能,可帮助用户实时了解MX Master 2S的电量情况,并及时提醒用户充电,避免因电量不足而影响工作。 手势控制:MX Master 2S配备独特的侧边滚轮和拇指按钮,用户可通过软件定义这些手势,实现诸如浏览页面、切换应用等操作,进一步提升使用便捷性。 兼容性优化:罗技的软件会定期更新,以适应macOS系统的最新变化,确保软件与操作系统始终保持良好的兼容性,保障鼠标在不同系统版本下都能稳定运行。 设备配对:对于拥有多个罗技设备的用户,该软件能够方便地管理和配对这些设备,实现快速切换,满足多设备使用场景下的需求。 在安装“LogiMgr Installer 8.20.233.app”时,用户需确保macOS系统满足软件的最低要求,并
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值