TL; DR:构建冗余,模块化;测试可用性;密切监视。
意识到尝试挤压任何解释可能会花费很长时间,因此我将写下所有观察结果。
质疑前提
云系统是灵丹妙药
即使您要与顶级云提供商一起完全在云上运行,您仍然需要彻底设计应用程序的弹性。AWS可能会替换您的VM,但是如果将应用程序放在计算的中间,则它应该能够重新启动。
由于x / y / z,我们不想使用云系统
除非您是一个超大型组织,否则使用云系统会更好。排名前三的云系统(AWS,MSFT,Google)聘请了数千名工程师,为您提供承诺的SLA和易于管理的仪表板。使用它们代替在此内部花费一毛钱实际上是一个很好的交易。
范围设计中的问题
与为可用性问题编写解决方案相比,定义,量化然后连续衡量服务的可用性是一个更大的挑战。
定义和衡量“可用性”比预期的要难
多个利益相关者对可用性的看法不同,可能发生的事情是薪水最高的人所喜欢的定义胜过其他定义。有时这是正确的定义,但生态系统通常不是围绕测量同一事物建立的,因为理想的定义很难衡量,更不用说实时监视了。如果您具有无法实时监控的可用性定义,那么您会一次又一次地发现自己做的类似项目具有令人毛骨悚然的相似性。坚持有意义且易于监控的内容。
人们低估了始终可用的系统的复杂性。
为了解决房间里的大象问题,我要这样说:“没有多计算机系统可以100%可用,将来可能会出现,但当前的技术可能无法使用。” 在这里,以当前的技术,我指的是我们无法发送信号的速度快于光速和类似事物的速度。所有精打细算的comp-sci工程师都知道分布式计算的局限性,他们中的大多数人都不会在会议中提及它,因为他们担心自己看起来像菜鸟。为了弥补那些没有提到分布式计算限制的人,我会说,它很复杂但并不总是信任计算机。
人们高估了他们/他们的工程师的能力
不幸的是,可用性属于类别,您不知道自己想要什么,但知道自己不想要什么。“了解需求”类别(例如UI)有点棘手。它需要一点经验和大量阅读才能从他人的经验中学习以及更多。
从头开始构建可用系统
确保向每个体系结构和设计团队宣传将可用性作为系统需求的正确优先事项。
系统帮助可用性的属性
已显示以下系统特性有助于系统可用性:
冗余
这样的一些示例是,在VIP后面永远不要只有一个VM,也不要只存储一个数据副本。这些是好的IAAS可以使您更容易解决的问题,但是您仍然必须做出这些决定。
模块化
模块化REST比单片SOA更好。实际上,甚至比常规的HATEOS REST还提供模块化的微服务。可以在下一部分的与收益率相关的讨论中找到其理由。如果要进行批处理,那么与处理1,000,000批处理相比,最好在合理的10s批处理中进行批处理。
弹性
"I am always angry"
- Hulk
弹性系统随时可以恢复。这种弹性适用于实例,例如仅在写入RAID磁盘之后(可能至少在两个数据中心上)确认对写入的ACK。另一个最新趋势是使用无冲突的数据结构,其中当出现两种不同版本时,数据结构承担解决冲突的责任。系统不能像事后那样具有弹性,必须对其进行预测和内置。长期保证会发生故障,因此我们应该始终为恢复计划做好准备。
日志记录
从技术上讲,这是弹性的一种子类型,但由于它具有所有功能,因此是一种非常特殊的类型。尽管已尽了最大努力,但我们可能无法预测不可用的模式。如果可能,请保留足够的系统活动日志记录,以便能够回放系统事件。这将花费大量的人工,使您能够从无法预料的情况中恢复。
可用性的属性
“可用性”的非穷尽性的优先考虑属性列表:为了便于讨论,让我们假设用户问的问题是:“我的购物车中有多少个商品?”
正确性
您是否必须提供最准确的答案,还是可以犯错误?仅供参考,当您从ATM取款时,并不能保证它是正确的。如果银行发现做错了,您可能会撤消交易。如果您的系统正在生成质数,那么我想,您可能一直希望得到正确的答案。
产量
如果您对上一个主题的问题回答总是正确,请跳过这一点。有时,对问题的答案不一定是精确的,例如,我现在在Facebook上有几个朋友?但是,答案始终是+/- 1。当您产生预期的结果时,您的收益为100。
一致性
您的答案在某个时间点可能是正确的,但是当光线离开屏幕并进入观察者的视网膜时,情况可能已经改变。它使您的答案错误吗?不,这只会导致不一致。大多数应用程序最终都是一致的,但是诀窍在于定义您的应用程序将要提供什么样的一致性模型。偶然地,您的应用程序可以在单台计算机上运行,您可以跳过CAP定理上的这一可爱的读物。
成本
很大程度上取决于短期影响(收入损失)和长期影响(不良声誉,客户保留)的总影响。根据客户类型(付费/免费,重复/唯一,专属)和资源可用性,应内置不同级别的可用性保证。
致力于提高现有系统的可用性
单个机器和网络的运营管理是如此复杂,以至于我认为您已经将它留给了云提供商,或者您已经足够熟练地知道自己在做什么。我将在可用性下讨论其他主题。对于长期策略,“ 定义-度量-分析-控制”是天上的比赛,这是我自己看到的。
- 定义什么是利益相关者的“可用性”
- 您将如何衡量定义的内容
- 根本原因分析以识别瓶颈
- 改进任务
- 持续监控(控制)系统
无法使用的原因
由于我们同意涵盖所有物理基础设施管理的运营管理应由专业人员进行,因此为了完整性起见,我将探讨其他导致不可用的原因。IMO可用性还应包括缺乏预期的行为,这意味着如果未向用户显示预期的体验,则表示某些内容不可用。考虑到该宽泛的定义,以下内容可能会导致不可用:-代码错误-安全事件-性能问题